版權(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> ?。?)完成總體內(nèi)容,實(shí)現(xiàn)具體功能。 </p><p><b> 參考資料以及說明:</b></p><p> ?。?) 《微機(jī)原理與接口技術(shù)》
6、 </p><p> ?。?) 《電子線路CAD與實(shí)訓(xùn)》 </p><p> ?。?) 《DS18B20技術(shù)手冊(cè)》
7、 </p><p> (4) 《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)(?。。。。。。?。</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)(?。。。。。。?。</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ǔ)言教程,北京,電子工業(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)镃語(yǔ)言浮點(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)镃語(yǔ)言浮點(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)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 溫控系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)----水溫控制系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)-- 恒溫控制系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)--爐溫控制系統(tǒng)的設(shè)計(jì)
- 溫控課程設(shè)計(jì)--電子電路cad課程設(shè)計(jì)報(bào)告
- 過熱汽溫控制課程設(shè)計(jì)
- 模電課程設(shè)計(jì)---溫控裝置設(shè)計(jì)
- 爐溫控制課程設(shè)計(jì)報(bào)告
- 《智能溫控儀表設(shè)計(jì)》課程設(shè)計(jì)
- 模電課程設(shè)計(jì)---溫控裝置設(shè)計(jì)
- 課程設(shè)計(jì)--電加熱水溫控制系統(tǒng)
- 基于單片機(jī)的智能溫控系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)—電阻爐爐溫控制系統(tǒng)
- 單片機(jī)水溫控制系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)--電加熱水溫控制系統(tǒng)
- 恒溫控制課程設(shè)計(jì)---恒溫控制電路的設(shè)計(jì)
- 課程設(shè)計(jì)—電阻爐爐溫控制系統(tǒng)
- 水溫控制系統(tǒng)設(shè)計(jì)電子技術(shù)課程設(shè)計(jì)
- dcs課程設(shè)計(jì)報(bào)告--過熱汽溫控制系統(tǒng)組態(tài)
- 分散控制系統(tǒng)課程設(shè)計(jì)--串級(jí)汽溫控制系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論