單片機(jī)原理及應(yīng)用課程設(shè)計(jì)_第1頁(yè)
單片機(jī)原理及應(yīng)用課程設(shè)計(jì)_第2頁(yè)
單片機(jī)原理及應(yīng)用課程設(shè)計(jì)_第3頁(yè)
單片機(jī)原理及應(yīng)用課程設(shè)計(jì)_第4頁(yè)
單片機(jī)原理及應(yīng)用課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)原理及應(yīng)用課程設(shè)計(jì)任務(wù)書(shū)課題名稱數(shù)字式溫度計(jì)的設(shè)計(jì)設(shè)計(jì)內(nèi)容及要求(1)課題內(nèi)容:以單片機(jī)為核心,使用DS18B20溫度傳感器(DP-51PROC單片機(jī)實(shí)驗(yàn)儀上B4區(qū)數(shù)字溫度采集實(shí)驗(yàn)區(qū))設(shè)計(jì)一個(gè)數(shù)字式溫度計(jì)。測(cè)量一路溫度信號(hào)并用B3區(qū)的12864液晶屏顯示;測(cè)溫范圍55-125攝氏度,精度0.1攝氏度。液晶屏的第一行顯示本人的姓名和學(xué)號(hào),第二行顯示測(cè)量溫度、當(dāng)前時(shí)間及設(shè)定的上、下限溫度報(bào)警值。當(dāng)溫度高于設(shè)定上限值或低于下限值時(shí)驅(qū)動(dòng)B5區(qū)的峰鳴器發(fā)出5聲報(bào)警聲。 (2)要求:完成該系統(tǒng)的硬件和軟件的設(shè)計(jì),在Proteus軟件上仿真通過(guò)后,下載到DP-51PROC單片機(jī)實(shí)驗(yàn)箱驗(yàn)證。最后就課程設(shè)

2、計(jì)本身提交一篇課程設(shè)計(jì)說(shuō)明書(shū)。設(shè)計(jì)工作量1、匯編或C51語(yǔ)言程序設(shè)計(jì);2、程序調(diào)試;3、在Proteus上進(jìn)行仿真后,進(jìn)行下載;4、提交一份完整的課程設(shè)計(jì)說(shuō)明書(shū),包括設(shè)計(jì)原理、程序設(shè)計(jì)、程序分析、仿真分析、調(diào)試過(guò)程,參考文獻(xiàn)、設(shè)計(jì)總結(jié)等。進(jìn)度安排起止日期(或時(shí)間量)設(shè)計(jì)內(nèi)容(或預(yù)期目標(biāo))備注第一天課題介紹,答疑,收集材料,C51介紹第二天設(shè)計(jì)方案論證,練習(xí)編寫(xiě)C51程序第三天第六天程序設(shè)計(jì)第六天第八天 程序調(diào)試、仿真第九天第十天系統(tǒng)測(cè)試并編寫(xiě)設(shè)計(jì)說(shuō)明書(shū)教研室意見(jiàn)年 月 日系(部)主管領(lǐng)導(dǎo)意見(jiàn)年 月 日 目錄1.硬件電路及原理52.軟件設(shè)計(jì)83.調(diào)試結(jié)果204.操作說(shuō)明215心得體會(huì)21參考文獻(xiàn)

3、22 1.硬件電路及原理1.1方案的總體設(shè)計(jì)框圖溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì)方框圖如圖1所示,控制器采用單片機(jī)AT89c51,溫度傳感器采用DS18B20,用12864以串口傳送數(shù)據(jù)實(shí)現(xiàn)溫度顯示。主 控 制 器LED顯 示溫 度 傳 感 器單片機(jī)復(fù)位時(shí)鐘振蕩報(bào)警點(diǎn)按鍵調(diào)整 圖1總體設(shè)計(jì)方框圖1.1.1 主控制器單片機(jī)AT89c51具有低電壓供電和體積小等特點(diǎn),四個(gè)端口只需要兩個(gè)口就能滿足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(tǒng)可用二節(jié)電池供電。1.1.2 顯示電路顯示電路采用12864液晶顯示,從P0口輸出段碼。1.1.3溫度傳感器DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最

4、新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)位的數(shù)字值讀數(shù)方式。DS18B20的性能特點(diǎn)如下:獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信;多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;無(wú)須外部器件;可通過(guò)數(shù)據(jù)線供電,電壓范圍為3.05.5;零待機(jī)功耗;溫度以或位數(shù)字;用戶可定義報(bào)警設(shè)置;報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件;負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作; DS18B20采用腳PR35封裝或腳SOIC封裝,其內(nèi)部結(jié)構(gòu)框圖如圖2所示。C64 位R

5、OM和單線接口高速緩存存儲(chǔ)器與控制邏輯溫度傳感器高溫觸發(fā)器TH低溫觸發(fā)器TL配置寄存器8位CRC發(fā)生器Vdd I/O圖2 DS18B20內(nèi)部結(jié)構(gòu)64位ROM的結(jié)構(gòu)開(kāi)始位是產(chǎn)品類型的編號(hào),接著是每個(gè)器件的惟一的序號(hào),共有48位,最后位是前面56位的CRC檢驗(yàn)碼,這也是多個(gè)DS18B20可以采用一線進(jìn)行通信的原因。溫度報(bào)警觸發(fā)器和,可通過(guò)軟件寫(xiě)入戶報(bào)警上下限。DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存和一個(gè)非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如圖3所示。頭個(gè)字節(jié)包含測(cè)得的溫度信息,第和第字節(jié)和的拷貝,是易失的,每次上電復(fù)位時(shí)被刷新。第個(gè)字節(jié),為配置寄

6、存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。該字節(jié)各位的定義如圖3所示。低位一直為,是工作模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式,DS18B20出廠時(shí)該位被設(shè)置為,用戶要去改動(dòng),R1和0決定溫度轉(zhuǎn)換的精度位數(shù),來(lái)設(shè)置分辨率。溫度 LSB溫度 MSBTH用戶字節(jié)1TL用戶字節(jié)2配置寄存器保留保留保留CRC圖3 DS18B20字節(jié)定義由表1可見(jiàn),DS18B20溫度轉(zhuǎn)換的時(shí)間比較長(zhǎng),而且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間越長(zhǎng)。因此,在實(shí)際應(yīng)用中要將分辨率和轉(zhuǎn)換時(shí)間權(quán)衡考慮。高速暫存的第、字節(jié)保留未用,表現(xiàn)為全邏輯。第字

7、節(jié)讀出前面所有字節(jié)的CRC碼,可用來(lái)檢驗(yàn)數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開(kāi)始啟動(dòng)轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲(chǔ)在高速暫存存儲(chǔ)器的第、字節(jié)。單片機(jī)可以通過(guò)單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時(shí)低位在先,高位在后,數(shù)據(jù)格式以0.0625LSB形式表示。當(dāng)符號(hào)位時(shí),表示測(cè)得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)符號(hào)位時(shí),表示測(cè)得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計(jì)算十進(jìn)制數(shù)值。表2是一部分溫度值對(duì)應(yīng)的二進(jìn)制溫度數(shù)據(jù)。表1 DS18B20溫度轉(zhuǎn)換時(shí)間表 DS18B20完成溫度轉(zhuǎn)換后,就把測(cè)得的溫度值與RAM中的TH、T字節(jié)內(nèi)

8、容作比較。若TH或TTL,則將該器件內(nèi)的報(bào)警標(biāo)志位置位,并對(duì)主機(jī)發(fā)出的報(bào)警搜索命令作出響應(yīng)。因此,可用多只DS18B20同時(shí)測(cè)量溫度并進(jìn)行報(bào)警搜索。在64位ROM的最高有效字節(jié)中存儲(chǔ)有循環(huán)冗余檢驗(yàn)碼(CRC)。主機(jī)ROM的前56位來(lái)計(jì)算CRC值,并和存入DS18B20的CRC值作比較,以判斷主機(jī)收到的ROM數(shù)據(jù)是否正確。表2一部分溫度對(duì)應(yīng)值表溫度/二進(jìn)制表示十六進(jìn)制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 00010

9、0A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H另外,由于DS18B20單線通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫(xiě)時(shí)序很重要。系統(tǒng)對(duì)DS18B20的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初使化DS18B20(發(fā)復(fù)位脈沖)發(fā)ROM功能命令發(fā)存儲(chǔ)器操作命令處理數(shù)據(jù)。1.2 DS18B20溫度傳感

10、器與單片機(jī)的接口電路DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時(shí)DS18B20的1腳接地,2腳作為信號(hào)線,3腳接電源。另一種是寄生電源供電方式,如圖4 所示單片機(jī)端口接單線總線,為保證在有效的DS18B20時(shí)鐘周期內(nèi)提供足夠的電流,可用一個(gè)MOSFET管來(lái)完成對(duì)總線的上拉。當(dāng)DS18B20處于寫(xiě)存儲(chǔ)器操作和溫度A/D轉(zhuǎn)換操作時(shí),總線上必須有強(qiáng)的上拉,上拉開(kāi)啟時(shí)間最大為10us。采用寄生電源供電方式時(shí)VDD端接地。由于單線制只有一根線,因此發(fā)送接口必須是三態(tài)的。2.軟件設(shè)計(jì)#include<reg51.h>#include<intrins.h>#inc

11、lude<math.h>#define uchar unsigned char#define uint unsigned int#define port P0 /DB0DB7數(shù)據(jù)口#define beep P26sbit e=P20;/使能sbit rw=P21;/讀寫(xiě)sbit rs=P22;/數(shù)據(jù)/命令sbit cs2=P23;/片選sbit cs1=P24;sbit busy=P07;/檢測(cè)忙sbit DQ=P30; /定義DS18B20數(shù)據(jù)端口uchar fuhao;/負(fù)號(hào)寄存器sbit P2_6=P26;/蜂鳴器數(shù)據(jù)口sbit P1_0=P10;/下限加鍵sbit P1_1

12、=P11;/下限減鍵sbit P1_2=P12;/上限加鍵sbit P1_3=P13;/上限減鍵uint j=0;int th=10;/上限默認(rèn)值int tl=-12;/下限默認(rèn)值uint s=0,m=0,h=0;/時(shí)分秒初始值uchar code hz32=0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,/"電&q

13、uot;,20x40,0x20,0x58,0x47,0x54,0x54,0x54,0x54,0x54,0x54,0xD4,0x14,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x40,0x80,0x70,0x00,/"氣",30x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0C,0x08,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1

14、0,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,/"二",40x84,0x84,0xFC,0x84,0x06,0xF4,0x00,0xFF,0x00,0x84,0x84,0xFC,0x84,0x86,0x04,0x00,0x20,0x60,0x3F,0x10,0x92,0x41,0x38,0x07,0x40,0x40,0x40,0x7F,0x40,0x60,0x40,0x00,/"班",50x00,0xFE,0x22,0x5A,0x86,0x08,0x88,0x48,0x38,0x0F,0xE8,0x08,0x88,0

15、x0C,0x08,0x00,0x00,0xFF,0x04,0x08,0x07,0x20,0x11,0x0D,0x41,0x81,0x7F,0x01,0x05,0x19,0x30,0x00,/*"陳",4*/0x50,0x4C,0x44,0x44,0x44,0x44,0x45,0xC6,0x44,0x44,0x44,0x44,0x44,0x54,0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"寧",5*/;uchar c

16、ode time32=0x00,0xFC,0x84,0x84,0x84,0xFE,0x14,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x23,0x40,0x80,0x7F,0x00,0x00,0x00,/"時(shí)",00x00,0x80,0x40,0x20,0x98,0x86,0x80,0x80,0x83,0x8C,0x90,0x20,0xC0,0x80,0x80,0x00,0x01,0x00,0x80,0x40,0x20,0x1F,0x0

17、0,0x40,0x80,0x40,0x3F,0x00,0x00,0x01,0x00,0x00,/"分",10x20,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x80,0x70,0x00,0xFF,0x00,0x10,0x20,0x60,0x00,0x10,0x08,0x06,0x01,0xFF,0x00,0x81,0x80,0x40,0x20,0x17,0x08,0x04,0x03,0x00,0x00/"秒",2;uchar code num16=0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00

18、,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/"0",00x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/"1",10x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/"2",20x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0

19、x20,0x20,0x11,0x0E,0x00,/"3",30x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/"4",40x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/"5",50x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x1

20、1,0x0E,0x00,/"6",60x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/"7",70x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/"8",80x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00/

21、"9",9;uchar code sign16=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,/"-",00x00,0xC0,0xE0,0x30,0x10,0x10,0x10,0x20,0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x08,/"C",10x00,0x00,0x30,0x48,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

22、,0x00,/"°",20x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x00,0x00,/".",30x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/" ",40x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x31,0x00,0x00,0x00,0x00,/

23、":",50x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,/"|",60x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01,/"+",7;/延時(shí)void delay(uint n) uint i; for(;n>0;n-) for(i=200;i>0;i-);/判斷是否忙void check() rs=0;

24、rw=1; /讀 e=1;port=0x00;e=1; while(busy);e=0;/寫(xiě)指令void sendcommand(uchar command) check();rs=0; /指令rw=0; /寫(xiě) e=0;port=command;e=1;e=0;/寫(xiě)入指令/寫(xiě)數(shù)據(jù)void writedata(uchar dat) check();rs=1; /數(shù)據(jù)rw=0;port=dat;e=1;e=0;/選屏幕 0-全屏,1-左屏,2-右屏;void select(uint n) switch(n) case 0:cs1=0;cs2=0;break; /低電平選中 case 1:cs1=0

25、;cs2=1;break; /cs1左屏 case 2:cs1=1;cs2=0;break; /cs2右屏 /頁(yè)void setpage(uchar page) page=page&0x07; page=page|0xb8; sendcommand(page);/列void setcolumn(uchar column) column=column&0x3f; column=column|0x40; sendcommand(column);/起始行void setline(uchar line) line=line&0x3f;line=line|0xc0;sendcom

26、mand(line);/屏幕開(kāi)關(guān)顯示 0-關(guān),1-開(kāi);void seton(uint n) n=n|0x3e; sendcommand(n);/清屏 0-全屏,1-左屏,2-右屏;void clear(uint n) uchar i,j; select(n); for(i=0;i<8;i+) setpage(i); setcolumn(0); for(j=0;j<64;j+) writedata(0); /置0清空 /初始化void init() check(); seton(1); clear(0); setline(0);/顯示漢字 16*16顯示void show16(uch

27、ar page,uchar column,uchar screen,uchar method,uchar *str) uchar i,j; select(screen); j=0; setpage(page); setcolumn(column); for(i=0;i<16;i+) if(method=1) writedata(strj+);/method為顯示方式。當(dāng)?shù)扔?時(shí),反白。 else writedata(strj+); setpage(page+1); setcolumn(column); for(i=0;i<16;i+) if(method=1) writedata(

28、strj+); else writedata(strj+); /顯示數(shù)字 8*8顯示void show8(uchar page,uchar column,uchar screen,uchar method,uchar *str) uchar i,j; select(screen);j=0; setpage(page); setcolumn(column); for(i=0;i<8;i+) if(method=1) writedata(strj+); else writedata(strj+); setpage(page+1);setcolumn(column); for(i=0;i<

29、;8;i+) if(method=1) writedata(strj+); else writedata(strj+); /顯示時(shí)間void showtime()show16(2,24,2,0,time0);show16(4,24,2,0,time1);show16(6,24,2,0,time2);show8(2,40,2,0,sign5);show8(4,40,2,0,sign5);show8(6,40,2,0,sign5);show8(2,48,2,0,numh/10);show8(4,48,2,0,numm/10);show8(6,48,2,0,nums/10);show8(2,56,2

30、,0,numh%10);show8(4,56,2,0,numm%10);show8(6,56,2,0,nums%10);/中斷服務(wù)程序timer0() interrupt 1 using 1j+;TH0=15536/256;TL0=15536%256;if(j=20)j=0;if(+s=60)s=0;if(+m=60)m=0;if(+h=24)h=0;/顯示個(gè)人信息void welcome() show16(0,0,1,0,hz0); show16(0,16,1,0,hz1); show16(0,32,1,0,hz2); show16(0,48,1,0,hz3); show16(0,8,2,0

31、,hz4);show16(0,40,2,0,hz5); show8(2,0,1,0,num2); show8(2,8,1,0,num0); show8(2,16,1,0,num0); show8(2,24,1,0,num8); show8(2,32,1,0,num0); show8(2,40,1,0,num4); show8(2,48,1,0,num2); show8(2,56,1,0,num2); show8(2,0,2,0,num3); show8(2,8,2,0,num3); /蜂鳴器void Beep()uchar y;for(y=0;y<200;y+)delay(1);P2_6

32、=!P2_6;/ *延時(shí)函數(shù)*void delay1(unsigned int i)while(i-);/*顯示溫度并判斷是否調(diào)用蜂鳴器函數(shù)*void display(int k)uchar i=0;if(fuhao!=0) /判斷負(fù)號(hào)是否有效show8(6,0,1,0,sign0);if(tl<0&&k>=abs(tl)*100)Beep();elseif(tl>=0)Beep();if(th<0&&k<=abs(th)*100)Beep();elseshow8(6,0,1,0,sign4);if(k>=th*100|k&l

33、t;tl*100)Beep();if(k/10000=0)show8(6,8,1,0,sign4);elseshow8(6,8,1,0,numk/10000);if(k/1000=0)show8(6,16,1,0,sign4);elseshow8(6,16,1,0,numk/1000%10);show8(6,24,1,0,numk/100%10);show8(6,32,1,0,sign3);show8(6,40,1,0,numk/10%10);show8(6,48,1,0,numk%10);show8(6,56,1,0,sign2);show8(6,0,2,0,sign1);/*初始化函數(shù)*I

34、nit_DS18B20(void)uchar x=0;DQ=1;/DQ復(fù)位delay1(8); /稍作延時(shí)DQ=0; /單片機(jī)將DQ拉低delay1(80); /精確延時(shí)大于480usDQ=1; /拉高總線delay1(14); x=DQ;/稍做延時(shí)后,如果x=0則初始化成功;x=1則初始化失敗delay1(20);/*讀一個(gè)字節(jié)*ReadOneChar(void)uchar i=0;uint dat=0;for(i=8;i>0;i-)DQ=0; /給脈沖信號(hào)dat>>=1;DQ=1; /給脈沖信號(hào)if(DQ)dat|=0x80;delay1(4);return(dat);/

35、*寫(xiě)一個(gè)字節(jié)*WriteOneChar(unsigned char dat)uchar i=0;for(i=8;i>0;i-)DQ=0;DQ=dat&0x01;delay1(5);DQ=1;dat>>=1;/*讀取溫度*ReadTemperature(void)uchar a=0;uchar b=0;uint t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC);/跳過(guò)讀序號(hào)列號(hào)的操作WriteOneChar(0x44);/啟動(dòng)溫度轉(zhuǎn)換Init_DS18B20();WriteOneChar(0xCC);/跳過(guò)讀序號(hào)列號(hào)的操作

36、WriteOneChar(0xBE);/讀取溫度寄存器等(共可讀9個(gè)寄存器)前兩個(gè)就是溫度a=ReadOneChar(); /低位b=ReadOneChar(); /高位fuhao=b&0x80;if(fuhao!=0) /判斷溫度是否為負(fù) /負(fù)溫度的計(jì)算方法b=b;a=a;tt=(b*256)+a+1)*0.0625;tt=tt*100;t=(int)tt;else /正溫度的計(jì)算方法tt=(b*256)+a)*0.0625;tt=tt*100;t=(int)tt;return (t);/顯示溫度上下限值void showT() if(tl<0)show8(4,0,1,0,si

37、gn0); elseshow8(4,0,1,0,sign4); if(abs(tl)/100=0)show8(4,8,1,0,sign4); elseshow8(4,8,1,0,numabs(tl)/100); if(abs(tl)/10=0)show8(4,16,1,0,sign4); elseshow8(4,16,1,0,numabs(tl)/10%10); show8(4,24,1,0,numabs(tl)%100%10); show8(4,32,1,0,sign6); if(th<0)show8(4,40,1,0,sign0); elseshow8(4,40,1,0,sign4); if(abs(th)/100=0)show8(4,48,1,0,sign4); elseshow8(4,48,1,0,numabs(th)/100); if(abs(th)/10=0)show8(4,56,1,0,sign4); elseshow8(4,56,1,0,numabs(th)/10%10); show8(4,0,2,0,numabs(th)%100%10);/按鍵調(diào)節(jié)溫度上下限值

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論