DS18B20與LCD1602結(jié)合顯示溫度_第1頁
DS18B20與LCD1602結(jié)合顯示溫度_第2頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、頁腳DS18B20、DS18B20的外形及其與單片機的連接圖18B200GND圖1DS18B20是Dallas公司生產(chǎn)的1-Wire接口數(shù)字溫度傳感器, 其外形如圖1(a)所示, 有三個引腳,分別為:電源地1(GND);數(shù)字信號輸入/輸出端2(DQ);外接供電電源輸入端3(VDD,在寄生電源接線方式時接地)。它是一種單總線數(shù)字溫度傳感器,所有的數(shù)據(jù)交換和控制都通過這根數(shù)據(jù)線來完成。測試溫度圍-551-1251,溫度數(shù)據(jù)位可配置為9、10、11、12位,對應(yīng)的刻度值分別為0.51、0.251、0.1251、0.06251,對應(yīng)的最長轉(zhuǎn)換時間分別為93.75ms、187.5ms、375ms、750

2、ms。出廠默認(rèn)配置為12位數(shù)據(jù),刻度值為0.0625C,最長轉(zhuǎn)換時間為750ms。從以上數(shù)據(jù)可以看出,DS18B20數(shù)據(jù)位越低、轉(zhuǎn)換時間越短、反應(yīng)越快、精度越低。單總線沒有時鐘線,只有一根通信線,其讀寫數(shù)據(jù)是靠控制起始時間和采樣時間來完成,所以時序要求很嚴(yán)格。圖1(a)為DS18B20與單片機的連接電路圖,它的數(shù)據(jù)線通常要求外接一個4.7K-10K的上拉電阻(該電阻畫原理圖時靠近單片機畫故沒有顯示出來),故其閑置時狀態(tài)位高電平。提示:DS18B20外形酷似三極管,分辨引腳時,面對著扁平的那一面,左負(fù)右正,一旦接反就會立刻發(fā)熱,甚至有可能燒毀。二、DS18B20存儲器結(jié)構(gòu)DS18B20的部有64

3、位的ROM單元,和9字節(jié)的暫存器單元。1、64位(激)光刻只讀存儲器每只DS18B20都有一個唯一存儲在ROM中的64位編碼(跟人的號類似,一人一個號),這是出廠時被光刻好的。最前面8位是單線系列編碼:28h。接著的48位是一個唯一的序列號。最后8位是以上56位的CRC編碼。64-位的光刻ROM又包括5個ROM的功能命令:讀ROM,匹配ROM,跳躍ROM,查找ROM和報警查找。ROM的作用是使每個DS18B20各不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20以實現(xiàn)多點監(jiān)測。2、9字節(jié)的暫存器單元表1(b)頁腳DS18B20的暫存器單元如表1所示,各部分介紹如下。1)、溫度傳感器暫存器的

4、第0(LSB)字節(jié),第1(MSB)字節(jié)為DS18B20的溫度傳感器,它們負(fù)責(zé)保存對溫度的測量結(jié)果,用16位二進制提供,格式如圖2所示。DS18B20讀取溫度時共讀取16位,前5個位(MSB的髙5位)為符號位,當(dāng)前5位為1時,讀取的溫度為負(fù)數(shù);當(dāng)前5位為0時,讀取的溫度為正。溫度為正時讀取方法為:將16進制數(shù)轉(zhuǎn)換成10進制即可。溫度為負(fù)時讀取方法為(實際就是取補碼):將16進制取反后加1,再轉(zhuǎn)換成10進制。例:0550H=+85度,F(xiàn)C90H=-55度,0191H為25.0625度。LSB的低四位用于表示測量值中小數(shù)點后的數(shù)值。2)、非揮發(fā)的溫度報警觸發(fā)器TH和TL位于第2和第3字節(jié),用于寫入溫

5、度報警值,實際上就是設(shè)定溫度的最髙和最低界限3)、配置寄存器配置寄存器位于存儲器的第4字節(jié),其組織如圖3所示。配置寄存器的04位和7位被器件保留,禁止寫入;在讀回數(shù)據(jù)時全部為邏輯1。R1和R0用于設(shè)置DS18B20的精度,具體如表2所示。bit7bit6bic5bit4bit3bit2bit1bit00R1RO11111圖3表2R1RO精度最大轉(zhuǎn)換時間0093.75ins(SONVE)0110七it187.5ms(TOONV101l-bit375ms(t%1%xjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjz%xjzxjzxjzxjzxjzx

6、jzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxl%xjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjz%1%*/voidDS18B20_Reset()DQ=1;_nop_();/頁腳DQ=0;/拉低總線delay2us(280);/持續(xù)280*2+5=565sDQ=1;/釋放總線while(DQ);/等待應(yīng)答(電平拉低)while(!DQ);/應(yīng)答電平大約持續(xù)60240us后重新拉髙總線2、讀時序:1).在讀取的時候單片機拉低電平大約lus;2).單片機釋放總線,然后讀取總線電平。3).這

7、時候DS18B20會拉低電平(0)或拉髙電平(1)。4).讀取電平過后,延遲大約4045us。讀字節(jié):主機總線to時刻從髙拉至低電平時,總線只須保持低電平l.7us。之后在tl時刻將總線拉髙產(chǎn)生讀時間隙,讀時間隙在tl時刻后t2時刻前有效。t2距t0為15us,也就是說t2時刻前主機必須完成讀位,并在t0后的60us-120us釋放總線.注意讀的時候從最低位向最髙位讀。xl%1%xjzxjzxjzxjzxjzxjzxjzxjz%xjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxl%xjzxjzxjzxjzxjzxjzxjzxjzxjzxjz

8、xjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjzxjz%1%/ucharDS18B20_Read_Byte()uchari,temp=0;for(i=0;i1;DQ=0;/主機將總線拉至低電平,只需保持1.7us_nop_();/保持一個時鐘周期,也即1usDQ=1;delay2us(1);/延時7us,一般讀數(shù)在后半段讀if(DQ)temp=temp|0 x80;delay2us(2);/這里延時45us+前面7us+1us=53us,接近60usreturntemp;/頁腳3、寫時序:1).單片機拉低電平大約1015us;2).單片機持續(xù)拉低電平(0)或拉髙電平(1)大約

9、2045us的時間;3).釋放總線。nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn寫字節(jié):當(dāng)主機總線to時刻從髙拉至低電平時就產(chǎn)生寫時間隙。從to時刻開始15us之應(yīng)將所需寫的位送到總線上,在隨后15-60us間DS18B20對總線采樣若低電平寫入的位是0;若髙電平寫入的位是1,連續(xù)寫2位間的間隙應(yīng)大于lus。注意:無論讀寫都是從最低位開始。/voidDS18B20_Write_Byte(uchardat)uchari;for(i=0;i1;4、讀取溫度流程讀溫度:流程:復(fù)位一寫命令(跳過讀序列號,單個DS18B20時用)一啟動溫度轉(zhuǎn)換-

10、等待轉(zhuǎn)換完成(完成總線會跳回髙電平)-復(fù)位-寫命令(跳過ROM編碼命令)-讀取暫存寄存器字節(jié)命令-讀低字節(jié)-讀髙字節(jié)-復(fù)位-合并髙低字節(jié)-判斷正負(fù)/DS18B20_Read_Temperature()uchartemp_low,temp_high;DS18B20_Reset();DS18B20_Write_Byte(0 xcc);/頁腳DS18B20_Write_Byte(0 x44);while(!DQ);/等待轉(zhuǎn)換完成DS18B20_Reset();DS18B20_Write_Byte(0 xcc);DS18B20_Write_Byte(0 xbe);temp_low=DS18B20_Re

11、ad_Byte();temp_high=DS18B20_Read_Byte();DS18B20_Reset();tvalue=temp_high;tvalue=(tvalue8)|temp_low;if(tvalue0 x0fff)tflag=0;elsetvalue=tvalue+1;/因為最高位的前五位是1,所以寄存器存的是溫度的補碼(補碼要取反加一得到二進制數(shù))tflag=1;tvalue二tvalue*(0.625);/溫度值擴大10倍,精確到1位小數(shù)return(tvalue);例子:DS18B20+1602#include#include#include#defineucharun

12、signedchar#defineuintunsignedintsbitDQ=P23;/ds18b20與單片機連接口sbitRS=P26;sbitRW=P27;sbitE=P25;unsignedcharcodestr1=temperature:;unsignedcharcodestr2=;uchardatadisdata5;頁腳uinttvalue;/溫度值uchartflag;/溫度正負(fù)標(biāo)志/*lcd1602程序*/聲明調(diào)用函數(shù)voidLcd_W_Cmd(uchar);voidLcd_W_Dat(uchardat);ucharLcd_R_Busy();voidLcd_Init();void

13、delay(uchart);voiddelay_4_nop();/*f|H口 p-/stl-L口/#definedelay_4_nop()_nop_();_nop_();_nop_();_nop_();voiddelay(uchart)uchari,j;for(i=0;it;i+)for(j=0;j50;j+);voidLcd_Init()uchari;Lcd_W_Cmd(0 x3c);Lcd_W_Cmd(0 x0e);Lcd_W_Cmd(0 x01);Lcd_W_Cmd(0 x06);Lcd_W_Cmd(0 x80);for(i=0;istrlen(str1);i+)Lcd_W_Dat(st

14、r1i);Lcd_W_Cmd(0 xC0);for(i=0;istrlen(str2);i+)Lcd_W_Dat(str2i);頁腳ucharLcd_R_Busy()uchars;RW=1;delay_4_nop();RS=0;delay_4_nop();E=1;delay_4_nop();s=P0;delay_4_nop();E=0;return(s);voidLcd_W_Cmd(uchar)uchari;doi=Lcd_R_Busy();i=i&0 x80;delay(2);while(i!=0);RW=0;delay_4_nop();頁腳RS=0;delay_4_nop();E=1;de

15、lay_4_nop();P0=;delay_4_nop();E=0;voidLcd_W_Dat(uchardat)uchari;doi=Lcd_R_Busy();i=i&0 x80;delay(2);while(i!=0);RW=0;delay_4_nop();RS=1;delay_4_nop();E=1;delay_4_nop();P0=dat;delay_4_nop();E=0;/*ds1820/nnnnnn/voiddelay2us(unsignedinti)/延時1微秒while(-i);*牛人實測,本人沒有做過試驗。針對的是12Mhz的晶振delay(O):延時518us誤差:518

16、-2*256=6delay(1):延時7us(原帖寫5us是錯的)delay(10):延時25us誤差:25-20=5delay(20):延時45us誤差:45-40=5delay(100):延時205us誤差:205-200=5delay(200):延時405us誤差:405-400=5*/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn*/程序頁腳復(fù)位:主機to時刻發(fā)送一復(fù)位脈沖(最短為480us的低電平信號),接著在tl時刻釋放總線(拉髙總線電平)進入接收狀態(tài)。DS18B20在檢測到總線的上升沿之后等待1560u

17、s。接著DSl8B2o在t2時刻發(fā)出存在脈沖(持續(xù)60240us的低電平)*/voidDSl8B2o_Reset()DQ=l;_nop_();DQ=o;/拉低總線delay2us(280);/持續(xù)280*2+5=565sDQ=l;/釋放總線while(DQ);/等待應(yīng)答(電平拉低)while(!DQ);/應(yīng)答電平大約持續(xù)60240us后重新拉髙總線讀字節(jié):主機總線to時刻從髙拉至低電平時,總線只須保持低電平l.7us。之后在tl時刻將總線拉髙產(chǎn)生讀時間隙,讀時間隙在tl時刻后t2時刻前有效。t2距t0為15us,也就是說t2時刻前主機必須完成讀位,并在t0后的60us-120us釋放總線.注意

18、讀的時候從最低位向最髙位讀。/ucharDSl8B2o_Read_Byte()uchari,temp=o;for(i=o;il;DQ=0;/主機將總線拉至低電平,只需保持1.7us_nop_();/保持一個時鐘周期,也即lusDQ=l;delay2us(1);/延時7us,一般讀數(shù)在后半段讀if(DQ)temp=temp|ox8o;delay2us(2);/這里延時45us+前面7us+1us=53us,接近60usreturntemp;/頁腳寫字節(jié):當(dāng)主機總線to時刻從髙拉至低電平時就產(chǎn)生寫時間隙。從to時刻開始15us之應(yīng)將所需寫的位送到總線上,在隨后15-60us間DS18B20對總線采

19、樣若低電平寫入的位是0;若髙電平寫入的位是1,連續(xù)寫2位間的間隙應(yīng)大于lus。注意:無論讀寫都是從最低位開始。/voidDS18B20_Write_Byte(uchardat)uchari;for(i=0;i1;讀溫度:流程:復(fù)位一寫命令(跳過讀序列號,單個DS18B20時用)一啟動溫度轉(zhuǎn)換-等待轉(zhuǎn)換完成(完成總線會跳回髙電平)-復(fù)位-寫命令(跳過ROM編碼命令)-讀取暫存寄存器字節(jié)命令-讀低字節(jié)-讀髙字節(jié)-復(fù)位-合并髙低字節(jié)-判斷正負(fù)/DS18B20_Read_Temperature()uchartemp_low,temp_high;DS18B20_Reset();DS18B20_Write_Byte(0 xcc);DS18B20_Write_Byte(0 x44);while(!DQ);/等待轉(zhuǎn)換完成DS18B20_Reset();DS18B20_Write_Byte(0 xcc);DS18B20_Write_Byte(0 xbe);temp_low=DS18B20_Read_Byte();temp_high=DS18B20_Read_Byte();DS18B20_Reset();/頁腳tvalue=temp_high;tvalue=(tvalue8)|

溫馨提示

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

最新文檔

評論

0/150

提交評論