2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  嵌入式技術(shù)應(yīng)用項(xiàng)目說明書</p><p>  溫控系統(tǒng) </p><p>  院(系) 機(jī)械工程學(xué)院 </p><p>  專 業(yè) 機(jī)械電子工程 </p><p>  班 級(jí) 機(jī)械電子工1班 </p><p> 

2、 學(xué)生姓名 </p><p>  指導(dǎo)老師 </p><p>  成 績(jī) </p><p>  2015年 月 日</p><p>  課 程 設(shè) 計(jì) 任 務(wù) 書</p&g

3、t;<p>  茲發(fā)給 機(jī)械電子1班 班學(xué)生 課程設(shè)計(jì)任務(wù)書,內(nèi)容如下:</p><p>  設(shè)計(jì)題目: 溫控系統(tǒng) </p><p><b>  應(yīng)完成的項(xiàng)目:</b></p><p

4、> ?。?) 設(shè)計(jì)說明書計(jì)算準(zhǔn)確、書寫工整,字?jǐn)?shù)不少于3000字;圖紙正確清晰,符合制圖標(biāo)準(zhǔn)及有關(guān)規(guī)定。 </p><p>  (2) </p><p&

5、gt;  (3)基于相關(guān)電路完成電路設(shè)計(jì)、程序設(shè)計(jì)與實(shí)物。 </p><p>  (4)完成總體內(nèi)容,實(shí)現(xiàn)具體功能。 </p><p><b>  參考資料以及說明:</b></p><p> ?。?) 《微機(jī)原理與接口技術(shù)》

6、 </p><p>  (2) 《電子線路CAD與實(shí)訓(xùn)》 </p><p> ?。?) 《DS18B20技術(shù)手冊(cè)》

7、 </p><p> ?。?) 《LCD1602液晶技術(shù)手冊(cè)》 </p><p>  本設(shè)計(jì)任務(wù)書于2015年 11月16日發(fā)出,應(yīng)于2015年11月27日前完成,然后進(jìn)行答辯

8、。</p><p>  指導(dǎo)教師 簽發(fā) 2015 年 月 日</p><p><b>  目 錄</b></p><p><b>  摘 要4</b></p><p><b>  第一章 緒論5</b></p><

9、p>  第二章 總體內(nèi)容及設(shè)計(jì)6</p><p>  2.1 總體內(nèi)容設(shè)計(jì)及目標(biāo)6</p><p>  第三章 電路設(shè)計(jì)及元器件選型7</p><p>  3.1單片機(jī)基本電路設(shè)計(jì)7</p><p>  3.2傳感器功能及電路9</p><p>  第四章 程序設(shè)計(jì)12</p><

10、p>  第五章 電路設(shè)計(jì)及結(jié)果13</p><p>  5.1電路仿真設(shè)計(jì)13</p><p>  5.2 當(dāng)溫度小于25度時(shí)的仿真現(xiàn)象:14</p><p>  5.3 電腦接收串口數(shù)據(jù):15</p><p><b>  第六章 總結(jié)16</b></p><p><b>

11、;  參考文獻(xiàn)17</b></p><p><b>  摘 要</b></p><p>  本次課程設(shè)計(jì)使用DS18B20溫度傳感器設(shè)計(jì)溫度報(bào)警系統(tǒng),完成如下功能:</p><p>  在LCD液晶屏上顯示當(dāng)前采集到的環(huán)境溫度</p><p>  在環(huán)境溫度低于27度時(shí),蜂鳴器開始以慢“滴”聲報(bào)警,并且伴

12、隨LCD液晶屏上顯示三個(gè)感嘆號(hào)(!?。。划?dāng)環(huán)境溫度低于25度時(shí),蜂鳴器以快“滴”聲報(bào)警。并且伴隨LCD液晶屏上顯示六個(gè)感嘆號(hào)(?。。。。。。?。</p><p>  在環(huán)境溫度高于30度時(shí),蜂鳴器開始以慢“滴”聲報(bào)警,并且伴隨LCD液晶屏上顯示三個(gè)感嘆號(hào)(?。。。?;當(dāng)環(huán)境溫度高于32度時(shí),蜂鳴器以快“滴”聲報(bào)警。并且伴隨LCD液晶屏上顯示六個(gè)感嘆號(hào)(?。。。。。。?lt;/p><p>  關(guān)

13、鍵詞: DS18B20溫度傳感器 LCD液晶顯示屏 蜂鳴器 報(bào)警 </p><p><b>  第一章 緒論</b></p><p>  溫度傳感器是各種傳感器中最常用的一種,早期使用的是模擬溫度傳感器,如熱敏電阻,隨著環(huán)境溫度的變化,它的阻值也發(fā)生線性變化,用處理器采集電阻兩端的電壓,然后根據(jù)某個(gè)公式就能計(jì)算出當(dāng)前環(huán)境溫度。隨著科技的進(jìn)步,現(xiàn)代的溫度傳感器已

14、經(jīng)走向數(shù)字化,外形小,接口簡(jiǎn)單,廣泛應(yīng)用在生產(chǎn)實(shí)踐的各個(gè)領(lǐng)域,為我們的生活提供便利。隨著現(xiàn)代儀器的發(fā)展,微型化、集成化、數(shù)字化、正成為傳感器發(fā)展的一個(gè)重要方向。美國(guó)DALLAS半導(dǎo)體公司推出的數(shù)字化溫度傳感器DS18B20采用單總線協(xié)議,即與單片機(jī)接口僅需占一個(gè)I/O端口,無須任何外部元件,直接將環(huán)境溫度轉(zhuǎn)化為數(shù)字信號(hào),以數(shù)字碼方式串行輸出,從而大大簡(jiǎn)化了傳感器與微處理器的接口。</p><p>  第二章 總體

15、內(nèi)容及設(shè)計(jì)</p><p>  2.1 總體內(nèi)容設(shè)計(jì)及目標(biāo)</p><p><b>  2.2 組員及任務(wù)</b></p><p>  溫偉杰查詢技術(shù)手冊(cè),編寫程序,調(diào)試單片機(jī),編寫說明書</p><p>  朱永豪繪制電路層次原理圖,元器件圖,編寫說明書</p><p>  鄧耀斌繪

16、制仿真電路圖,編寫說明書</p><p>  李智杰調(diào)試仿真,編寫說明書</p><p>  第三章 電路設(shè)計(jì)及元器件選型</p><p>  3.1單片機(jī)基本電路設(shè)計(jì)</p><p><b>  電源模塊</b></p><p>  通過三端穩(wěn)壓芯片7805將輸入的直流轉(zhuǎn)化為穩(wěn)壓直流5V電源

17、。</p><p>  圖3-1-1電源模塊</p><p><b>  CPU模塊</b></p><p>  AT89C51單片機(jī)作為CPU處理程序,實(shí)現(xiàn)程序中所編寫的功能。</p><p>  圖3-1-2 CPU模塊</p><p><b>  蜂鳴器模塊</b>&l

18、t;/p><p>  當(dāng)環(huán)境溫度不在適宜范圍,蜂鳴器將跟隨燈的閃爍開始以“滴”聲報(bào)警。</p><p>  圖3-1-3 蜂鳴器模塊</p><p>  DS18B20溫度傳感器模塊</p><p>  溫度傳感器DS18B20采用單總線協(xié)議,下圖中16號(hào)引腳與單片機(jī)的P3.7相連接,并外接一個(gè)約為4.7K歐姆的上拉電阻。</p>

19、<p>  圖3-1-4 DS18B20模塊</p><p>  LCD1602液晶屏模塊</p><p>  1,2引腳分別為接地和電源。3為對(duì)比調(diào)整電壓引腳,4為指令/數(shù)據(jù)引腳,5為讀取/寫入引腳,6為使能引腳,7~14引腳為數(shù)據(jù)總線,15,16為背光電源正負(fù)極引腳。</p><p>  圖3-1-5 CPU模塊</p><p>

20、;  3.2傳感器功能及電路</p><p>  DS18B20測(cè)溫原理如圖3-2-1所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,計(jì)數(shù)

21、器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測(cè)溫度。斜率累加器用于補(bǔ)償和修正測(cè)溫過程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。 </p><p>  圖3-2-1 DS18B20測(cè)溫原理</p><p>  在外部電源供電方式下,DS18B20工作電源由VCC引腳接入,

22、I/O引腳與單片機(jī)的P3.7相連接,并外接一個(gè)約為4.7K歐姆的上拉電阻。</p><p>  圖3-2-2 DS18B20電路圖</p><p>  初始化DS18B20溫度傳感器,初始化時(shí)序如圖3-2-3所示。</p><p>  圖3-2-3 初始化時(shí)序圖</p><p>  按初始化時(shí)序圖寫入相應(yīng)的代碼即可完成DS18B20溫度傳感器

23、的初始化。由于只有一個(gè)溫度傳感器所以向溫度傳感器寫入0XCC跳過ROM操作指令(溫度傳感器的數(shù)據(jù)引腳與單片機(jī)的P3.7引腳相連)。詳細(xì)解釋如圖3-2-4所示。</p><p>  圖3-2-4 ROM操作命令</p><p>  接著向溫度傳感器寫入0X44執(zhí)行溫度轉(zhuǎn)換命令,是模擬信號(hào)變?yōu)閿?shù)字信號(hào),命令如圖3-2-5所示。</p><p>  圖3-2-5 溫度變換

24、命令</p><p>  DS18B20溫度傳感器的寫數(shù)據(jù)時(shí)序如圖3-2-6所示</p><p>  圖3-2-6 寫數(shù)據(jù)時(shí)序圖</p><p>  接著向溫度傳感器讀出溫度值,讀取數(shù)據(jù)的時(shí)序如圖.3-2-7所示。</p><p>  圖3-2-7 讀數(shù)據(jù)時(shí)序圖</p><p><b>  第四章 程序設(shè)計(jì)&

25、lt;/b></p><p>  第五章 電路設(shè)計(jì)及結(jié)果</p><p><b>  5.1電路仿真設(shè)計(jì)</b></p><p>  圖5-1 仿真結(jié)果圖</p><p>  在LCD液晶屏上顯示當(dāng)前采集到的環(huán)境溫度</p><p>  在環(huán)境溫度低于27度時(shí),蜂鳴器開始以慢“滴”聲報(bào)警,并

26、且伴隨LCD液晶屏上顯示三個(gè)感嘆號(hào)(!?。。?;當(dāng)環(huán)境溫度低于25度時(shí),蜂鳴器以快“滴”聲報(bào)警。并且伴隨LCD液晶屏上顯示六個(gè)感嘆號(hào)(?。。。。。。?lt;/p><p>  在環(huán)境溫度高于30度時(shí),蜂鳴器開始以慢“滴”聲報(bào)警,并且伴隨LCD液晶屏上顯示三個(gè)感嘆號(hào)(?。。。?;當(dāng)環(huán)境溫度高于32度時(shí),蜂鳴器以快“滴”聲報(bào)警。并且伴隨LCD液晶屏上顯示六個(gè)感嘆號(hào)(?。。。。。。?lt;/p><p> 

27、 5.2 當(dāng)溫度小于25度時(shí)的仿真現(xiàn)象:</p><p>  圖5-2溫度小于25度時(shí)的仿真結(jié)果</p><p>  LCD液晶屏上顯示當(dāng)前采集到的環(huán)境溫度,當(dāng)環(huán)境溫度低于25度時(shí),蜂鳴器以快“滴”聲報(bào)警。并且伴隨LCD液晶屏上顯示六個(gè)感嘆號(hào)(?。。。。。。?。</p><p>  5.3 電腦接收串口數(shù)據(jù):</p><p><b>

28、  第六章 總結(jié)</b></p><p>  做為一名機(jī)電專業(yè)的學(xué)生,我覺得能做這樣的課程設(shè)計(jì)是十分有意義。在已度過的兩年大學(xué)生活里我們大何去面對(duì)現(xiàn)實(shí)中的各種電子設(shè)計(jì)?如何把我們所學(xué)到的專業(yè)基礎(chǔ)理論知識(shí)用到實(shí)踐中去呢?我想做類似的大多數(shù)接觸的是專業(yè)基礎(chǔ)課。我們?cè)谡n堂上掌握的僅僅是專業(yè)基礎(chǔ)課的理論面,如作業(yè)就為我們提供了良好的實(shí)踐平臺(tái)。在做本次課程設(shè)計(jì)的過程中,我感觸最深的當(dāng)屬查閱了很多次設(shè)計(jì)書和指導(dǎo)書

29、,以及大量的網(wǎng)絡(luò)資料。為了讓自己的設(shè)計(jì)更加完善,更加符合設(shè)計(jì)標(biāo)準(zhǔn),一次次翻閱指導(dǎo)書是十分必要的,同時(shí)也是必不可少的。本次課程設(shè)計(jì)為我們搭建了一個(gè)很好的平臺(tái)在理論和實(shí)際之間。 </p><p>  另外,課堂上也有部分知識(shí)不太清楚,于是我又不得不邊學(xué)邊用,時(shí)刻鞏固所學(xué)知識(shí),這也是我作本次課程設(shè)計(jì)的第二大收獲。整個(gè)設(shè)計(jì)我基本上還滿意,由于水平有限,難免會(huì)有錯(cuò)誤,還望老師批評(píng)指正。由此我可用更好地了解到自己的

30、不足,以便課后加以彌補(bǔ)。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]王國(guó)玉,電子線路CAD與實(shí)訓(xùn),北京,電子工業(yè)出版社,2011年。</p><p>  [2]李全利,單片機(jī)原理及應(yīng)用,北京,清華大學(xué)出版社,2006年。</p><p>  [3]郭天祥,51單片機(jī)C語言教程,北京,電子工業(yè)

31、出版社,2012年。</p><p><b>  附 件</b></p><p>  #include<reg51.h></p><p>  #include<intrins.h></p><p>  #define uchar unsigned char</p><p&g

32、t;  #define uint unsigned int</p><p>  #define LCD1602_DATAPINS P0</p><p>  sbit BEEP=P2^2;</p><p>  sbit LCD1602_E=P2^7;</p><p>  sbit LCD1602_RW=P2^5;</p><

33、p>  sbit LCD1602_RS=P2^6;</p><p>  sbit DSPORT=P3^7;</p><p>  uint warn_l1=2700;</p><p>  uint warn_l2=2500;</p><p>  uint warn_h1=3000;</p><p>  uint w

34、arn_h2=3200; //定義溫度限值是溫度值乘以100后的結(jié)果</p><p>  int alarm=0; //定義警報(bào)等級(jí)</p><p>  uchar CNCHAR[6] = "攝氏度";</p><p>  /*LCD寫入8位命令函數(shù)*/</p><p>  void LcdWriteCom(u

35、char com);</p><p>  /*LCD寫入8位數(shù)據(jù)函數(shù)*/</p><p>  void LcdWriteData(uchar dat);</p><p>  /*LCD初始化函數(shù)*/</p><p>  void LcdInit();</p><p>  /*LCD顯示函數(shù)*/</p>

36、;<p>  void LcdDisplay(int ,int);</p><p>  /*毫秒延時(shí)函數(shù)*/</p><p>  void Delay1ms(uint );</p><p><b>  /*延時(shí)函數(shù)*/</b></p><p>  void delay(uint );</p>

37、<p>  /*溫度傳感器初始化函數(shù)*/</p><p>  void Ds18b20Init();</p><p>  /*溫度傳感器寫字節(jié)函數(shù)*/</p><p>  void Ds18b20WriteByte(uchar com);</p><p>  /*溫度傳感器讀字節(jié)函數(shù)*/</p><p>  

38、uchar Ds18b20ReadByte();</p><p>  /*溫度傳感器溫度轉(zhuǎn)換函數(shù)*/</p><p>  void Ds18b20ChangTemp();</p><p>  /*溫度傳感器溫度讀取函數(shù)*/</p><p>  int Ds18b20ReadTemp();</p><p>  /*溫度

39、處理函數(shù)*/</p><p>  void deal(int );</p><p>  /*蜂鳴器報(bào)警函數(shù)*/</p><p>  void warn(int );</p><p>  /*串口設(shè)置函數(shù)*/</p><p>  void UsartConfiguration();</p><p>

40、;  /*****************主函數(shù)***********************/</p><p>  void main()</p><p><b>  {</b></p><p>  UsartConfiguration();</p><p>  LcdInit(); //初始化LCD1602&l

41、t;/p><p>  LcdWriteCom(0x88);//寫地址 80表示初始地址</p><p>  LcdWriteData('C'); </p><p><b>  while(1)</b></p><p><b>  {</b></p><p> 

42、 deal(Ds18b20ReadTemp());</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*****************LCD寫入8位命令函數(shù)***********************/</p><p>  void LcdWr

43、iteCom(uchar com) //寫入命令</p><p><b>  {</b></p><p>  LCD1602_RS = 0; //選擇發(fā)送命令</p><p>  LCD1602_RW = 0; //選擇寫入</p><p>  LCD1602_DATAPINS = com; /

44、/放入命令</p><p>  LCD1602_E = 1; //寫入時(shí)序</p><p>  LCD1602_E = 0; //下降沿寫入</p><p>  Delay1ms(5); //保持時(shí)間</p><p><b>  }</b></p><p>  /********

45、*********LCD寫入8位數(shù)據(jù)函數(shù)***********************/</p><p>  void LcdWriteData(uchar dat)//寫入數(shù)據(jù)</p><p><b>  {</b></p><p>  LCD1602_RS = 1; //選擇輸入數(shù)據(jù)</p><p>  

46、LCD1602_RW = 0; //選擇寫入</p><p>  LCD1602_DATAPINS = dat; //寫入數(shù)據(jù)</p><p>  LCD1602_E = 1; //寫入時(shí)序</p><p>  LCD1602_E = 0; //下降沿寫入</p><p>  Delay1ms(5); /

47、/保持時(shí)間</p><p><b>  }</b></p><p>  /*****************LCD初始化函數(shù)***********************/</p><p>  void LcdInit() //LCD初始化子程序</p><p><b>  {</b>

48、</p><p>  LcdWriteCom(0x38); //開顯示</p><p>  LcdWriteCom(0x0c); //開顯示不顯示光標(biāo)</p><p>  LcdWriteCom(0x06); //寫一個(gè)指針加1</p><p>  LcdWriteCom(0x01); //清屏</p><p>

49、;  Delay1ms(5);</p><p><b>  }</b></p><p>  /*****************LCD顯示函數(shù)***********************/</p><p>  void LcdDisplay(int temp,int alarm) //lcd顯示</p><p>&

50、lt;b>  { </b></p><p>  unsigned char i, datas[] = {0, 0, 0, 0, 0}; //定義數(shù)組</p><p>  datas[0] = temp / 10000;</p><p>  datas[1] = temp % 10000 / 1000;</p><p> 

51、 datas[2] = temp % 1000 / 100;</p><p>  datas[3] = temp % 100 / 10;</p><p>  datas[4] = temp % 10;</p><p>  LcdWriteCom(0x82); //寫地址 80表示初始地址</p><p>  LcdWriteData(&

52、#39;0'+datas[0]); //百位 </p><p>  SBUF = '0'+datas[0]; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器</p><p>  while (!TI); //等待發(fā)送數(shù)據(jù)完成</p><p><b>  TI = 0;</b></p><

53、p>  LcdWriteCom(0x83); //寫地址 80表示初始地址</p><p>  LcdWriteData('0'+datas[1]); //十位</p><p>  SBUF = '0'+datas[1]; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器</p><p>  while (!TI);

54、 //等待發(fā)送數(shù)據(jù)完成</p><p><b>  TI = 0;</b></p><p>  LcdWriteCom(0x84);//寫地址 80表示初始地址</p><p>  LcdWriteData('0'+datas[2]); //個(gè)位</p><p>  SBUF = '0&#

55、39;+datas[2]; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器</p><p>  while (!TI); //等待發(fā)送數(shù)據(jù)完成</p><p><b>  TI = 0; </b></p><p>  LcdWriteCom(0x85);//寫地址 80表示初始地址</p><p>  

56、LcdWriteData('.'); //顯示 ‘.’</p><p>  SBUF = '.'; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器</p><p>  while (!TI);//等待發(fā)送數(shù)據(jù)完成</p><p><b>  TI = 0;</b></p>&l

57、t;p>  LcdWriteCom(0x86); //寫地址 80表示初始地址</p><p>  LcdWriteData('0'+datas[3]); //顯示十分位</p><p>  SBUF = '0'+datas[3]; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器</p><p>  while (!TI)

58、; //等待發(fā)送數(shù)據(jù)完成</p><p><b>  TI = 0; </b></p><p>  LcdWriteCom(0x87); //寫地址 80表示初始地址</p><p>  LcdWriteData('0'+datas[4]); //顯示百分位</p><p>  SBUF

59、 = '0'+datas[4]; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器</p><p>  while (!TI); //等待發(fā)送數(shù)據(jù)完成</p><p><b>  TI = 0;</b></p><p>  for(i=0; i<6; i++)</p><p><b

60、>  {</b></p><p>  SBUF = CNCHAR[i]; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器</p><p>  while (!TI); //等待發(fā)送數(shù)據(jù)完成</p><p><b>  TI = 0;</b></p><p><b>  }<

61、;/b></p><p>  if(alarm==0)</p><p><b>  {</b></p><p>  int n,address=0x8A;</p><p>  LcdWriteCom(address);</p><p>  for(n=6; n>0; n--)</

62、p><p><b>  {</b></p><p>  LcdWriteData(0x20);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(alarm==1)</p><p&g

63、t;<b>  {</b></p><p>  int n,address=0x8A;</p><p>  LcdWriteCom(address);</p><p>  for(n=3; n>0; n--)</p><p><b>  {</b></p><p>  

64、LcdWriteData('!');</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(alarm==2)</p><p><b>  {</b></p><p>  int n,

65、address=0x8A;</p><p>  LcdWriteCom(address);</p><p>  for(n=6; n>0; n--)</p><p><b>  {</b></p><p>  LcdWriteData('!');</p><p><b&

66、gt;  }</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  /*****************毫秒延時(shí)函數(shù)***********************/</p><p>  void Delay1ms(uint y

67、)</p><p><b>  {</b></p><p><b>  uint x;</b></p><p>  for( ; y>0; y--)</p><p><b>  {</b></p><p>  for(x=110; x>0;

68、x--);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*****************延時(shí)函數(shù)***********************/</p><p>  void delay(uint x)</p><p&g

69、t;<b>  {</b></p><p>  while(x--);</p><p><b>  }</b></p><p>  /*****************溫度傳感器初始化函數(shù)***********************/</p><p>  void Ds18b20Init()<

70、;/p><p><b>  {</b></p><p>  DSPORT = 1; </p><p><b>  delay(8);</b></p><p>  DSPORT = 0;</p><p>  delay(90);</p><p>  D

71、SPORT = 1; </p><p><b>  }</b></p><p>  /*****************溫度傳感器寫字節(jié)函數(shù)***********************/</p><p>  void Ds18b20WriteByte(uchar dat)</p><p><b>  {

72、</b></p><p>  uint i, j;</p><p>  for(j=0; j<8; j++)</p><p><b>  {</b></p><p>  DSPORT = 0; //每寫入一位數(shù)據(jù)之前先把總線拉低1us</p><p><b&

73、gt;  i++;</b></p><p>  DSPORT = dat & 0x01; //然后寫入一個(gè)數(shù)據(jù),從最低位開始</p><p><b>  i=6;</b></p><p>  while(i--); //延時(shí)68us,持續(xù)時(shí)間最少60us</p><p>  DSPORT = 1;

74、//然后釋放總線,至少1us給總線恢復(fù)時(shí)間才能接著寫入第二個(gè)數(shù)值</p><p>  dat >>= 1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*****************溫度傳感器讀字節(jié)函數(shù)************

75、***********/</p><p>  uchar Ds18b20ReadByte()</p><p><b>  {</b></p><p>  uchar byte,j;</p><p>  DSPORT=1;//拉高總線</p><p><b>  _nop_();&l

76、t;/b></p><p>  for(j=8; j>0; j--)</p><p><b>  {</b></p><p>  DSPORT=0; //拉低總線</p><p>  byte>>=1; //數(shù)據(jù)字節(jié)向右移1位</p><p>  DSPORT =

77、1; //拉高總線</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  if(DSPORT) //總線在兩個(gè)空步延時(shí)后仍為高電平</p><p>  byte|=0x80; //數(shù)據(jù)字節(jié)最高位置1</p&g

78、t;<p>  delay(30); //延時(shí)</p><p>  DSPORT = 1; //總線拉高</p><p><b>  }</b></p><p>  return byte;</p><p><b>  }</b></p><p>

79、;  /*****************溫度傳感器溫度轉(zhuǎn)換函數(shù)***********************/</p><p>  void Ds18b20ChangTemp()</p><p><b>  {</b></p><p>  Ds18b20Init();</p><p>  Delay1ms(1);&l

80、t;/p><p>  Ds18b20WriteByte(0xcc);//跳過ROM操作命令 </p><p>  Ds18b20WriteByte(0x44); //溫度轉(zhuǎn)換命令 </p><p><b>  }</b></p><p>  /*****************溫度傳感器溫度讀取函數(shù)****

81、*******************/</p><p>  int Ds18b20ReadTemp()</p><p><b>  {</b></p><p>  int temp = 0;</p><p><b>  float tp;</b></p><p>  uch

82、ar tmh, tml;</p><p>  Ds18b20ChangTemp(); //先寫入轉(zhuǎn)換命令</p><p>  Ds18b20Init();</p><p>  Delay1ms(1);</p><p>  Ds18b20WriteByte(0xcc); //跳過ROM操作命令</p><p>

83、  Ds18b20WriteByte(0xbe); //發(fā)送讀取溫度命令</p><p>  tml = Ds18b20ReadByte();//讀取溫度值共16位,先讀低字節(jié)</p><p>  tmh = Ds18b20ReadByte();//再讀高字節(jié)</p><p>  temp = tmh;</p><p>  temp

84、 <<= 8;</p><p>  temp |= tml; </p><p>  if(temp< 0)//當(dāng)溫度值為負(fù)數(shù)</p><p><b>  {</b></p><p>  LcdWriteCom(0x80);//寫地址 80表示初始地址</p><p>

85、;  LcdWriteData('-'); //顯示負(fù)</p><p>  //因?yàn)樽x取的溫度是實(shí)際溫度的補(bǔ)碼,所以減1,再取反求出原碼</p><p>  temp=temp-1;</p><p>  temp=~temp;</p><p><b>  tp=temp;</b></p>

86、<p>  temp=tp*0.0625*100+0.5;</p><p>  //留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)</p><p>  //后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了。</p><p><b>  }</b></p>

87、<p><b>  else</b></p><p><b>  {</b></p><p>  LcdWriteCom(0x80);//寫地址 80表示初始地址</p><p>  LcdWriteData('+'); //顯示正</p><p>  t

88、p=temp;//因?yàn)閿?shù)據(jù)處理有小數(shù)點(diǎn)所以將溫度賦給一個(gè)浮點(diǎn)型變量</p><p>  //如果溫度是正的那么,那么正數(shù)的原碼就是補(bǔ)碼它本身</p><p>  temp=tp*0.0625*100+0.5;</p><p>  //留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)</p><p>  /

89、/后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了。</p><p><b>  }</b></p><p>  return temp;</p><p><b>  }</b></p><p>  /*****************溫度處理函數(shù)*************

90、**********/</p><p>  void deal(int temp)//溫度處理函數(shù)</p><p><b>  {</b></p><p>  if((temp>warn_l2)&&(temp<=warn_l1))</p><p><b>  {</b

91、></p><p>  LcdDisplay(temp,0);</p><p><b>  alarm=1;</b></p><p>  LcdDisplay(temp,alarm);</p><p>  warn(500);</p><p><b>  }</b>&l

92、t;/p><p>  else if(temp<=warn_l2)</p><p><b>  {</b></p><p><b>  alarm=2;</b></p><p>  LcdDisplay(temp,alarm);</p><p>  warn(100);&l

93、t;/p><p><b>  }</b></p><p>  else if((temp<warn_h2)&&(temp>=warn_h1))</p><p><b>  {</b></p><p>  LcdDisplay(temp,0);</p><p

94、><b>  alarm=1;</b></p><p>  LcdDisplay(temp,alarm);</p><p>  warn(500);</p><p><b>  }</b></p><p>  else if(temp>=warn_h2)</p><p

95、><b>  {</b></p><p><b>  alarm=2;</b></p><p>  LcdDisplay(temp,alarm);</p><p>  warn(100);</p><p><b>  }</b></p><p>&

96、lt;b>  else</b></p><p><b>  alarm=0;</b></p><p>  LcdDisplay(temp,alarm);</p><p><b>  }</b></p><p>  /*****************蜂鳴器報(bào)警函數(shù)*********

97、**************/</p><p>  void warn(int s)</p><p>  {</p><p><b>  int n,m;</b></p><p>  for(n=5; n>0; n--)</p><p><b>  { &l

98、t;/b></p><p>  for(m=150; m>0; m--) </p><p><b>  { </b></p><p><b>  BEEP= 1;</b></p><p><b>  delay(5);</b></p><p

99、><b>  BEEP= 0;</b></p><p><b>  delay(5);</b></p><p><b>  }</b></p><p>  Delay1ms(s);</p><p><b>  }</b></p><

100、;p><b>  }</b></p><p>  /*****************串口設(shè)置函數(shù)***********************/</p><p>  void UsartConfiguration()</p><p><b>  {</b></p><p>  SCON=0X

101、50;//設(shè)置為工作方式1</p><p>  TMOD=0X20;//設(shè)置計(jì)數(shù)器工作方式2</p><p>  PCON=0X80;//波特率加倍</p><p>  TH1=0XF3;//計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的</p><p><b>  TL1=0XF3;</b><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論