![DS18B20與LCD1602結(jié)合顯示溫度_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/16/b91a694d-7011-4f30-a814-baf446fe4eb1/b91a694d-7011-4f30-a814-baf446fe4eb11.gif)
![DS18B20與LCD1602結(jié)合顯示溫度_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/16/b91a694d-7011-4f30-a814-baf446fe4eb1/b91a694d-7011-4f30-a814-baf446fe4eb12.gif)
![DS18B20與LCD1602結(jié)合顯示溫度_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/16/b91a694d-7011-4f30-a814-baf446fe4eb1/b91a694d-7011-4f30-a814-baf446fe4eb13.gif)
![DS18B20與LCD1602結(jié)合顯示溫度_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/16/b91a694d-7011-4f30-a814-baf446fe4eb1/b91a694d-7011-4f30-a814-baf446fe4eb14.gif)
![DS18B20與LCD1602結(jié)合顯示溫度_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/16/b91a694d-7011-4f30-a814-baf446fe4eb1/b91a694d-7011-4f30-a814-baf446fe4eb15.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、DS18B20一、DS18B20的外形及其與單片機(jī)的連接圖 (a) (b) 圖1DS18B20是Dallas公司生產(chǎn)的1-Wire接口數(shù)字溫度傳感器,其外形如圖1(a)所示,有三個引腳,分別為:電源地1(GND);數(shù)字信號輸入/輸出端2(DQ);外接供電電源輸入端3(VDD,在寄生電源接線方式時接地)。它是一種單總線數(shù)字溫度傳感器,所有的數(shù)據(jù)交換和控制都通過這根數(shù)據(jù)線來完成。測試溫度范圍-55-125,溫度數(shù)據(jù)位可配置為9、10、11、12位,對應(yīng)的刻度值分別為0.5、0.25、0.125、0.0625,對應(yīng)的最長轉(zhuǎn)換時間分別為93.75ms、187.5ms、375ms、750ms。出廠默認(rèn)配
2、置為12位數(shù)據(jù),刻度值為0.0625,最長轉(zhuǎn)換時間為750ms。從以上數(shù)據(jù)可以看出,DS18B20數(shù)據(jù)位越低、轉(zhuǎn)換時間越短、反應(yīng)越快、精度越低。單總線沒有時鐘線,只有一根通信線,其讀寫數(shù)據(jù)是靠控制起始時間和采樣時間來完成,所以時序要求很嚴(yán)格。圖1(a)為DS18B20與單片機(jī)的連接電路圖,它的數(shù)據(jù)線通常要求外接一個4.7K-10K的上拉電阻(該電阻畫原理圖時靠近單片機(jī)畫故沒有顯示出來),故其閑置時狀態(tài)位高電平。提示:DS18B20外形酷似三極管,分辨引腳時,面對著扁平的那一面,左負(fù)右正,一旦接反就會立刻發(fā)熱,甚至有可能燒毀。二、DS18B20存儲器結(jié)構(gòu)DS18B20的內(nèi)部有64位的ROM單元,
3、和9字節(jié)的暫存器單元。1、64位(激)光刻只讀存儲器每只DS18B20都有一個唯一存儲在ROM中的64位編碼(跟人的身份證號類似,一人一個身份證號),這是出廠時被光刻好的。最前面8位是單線系列編碼:28h。接著的48位是一個唯一的序列號。最后8位是以上56位的CRC編碼。64-位的光刻ROM又包括5個ROM的功能命令:讀ROM,匹配ROM,跳躍ROM,查找ROM和報警查找。ROM的作用是使每個DS18B20各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個DS18B20以實(shí)現(xiàn)多點(diǎn)監(jiān)測。2、9字節(jié)的暫存器單元表1DS18B20的暫存器單元如表1所示,各部分介紹如下。1)、溫度傳感器圖2暫存器的第0(LS
4、B)字節(jié),第1(MSB)字節(jié)為DS18B20的溫度傳感器,它們負(fù)責(zé)保存對溫度的測量結(jié)果,用16位二進(jìn)制提供,格式如圖2所示。DS18B20讀取溫度時共讀取16位,前5個位(MSB的高5位)為符號位,當(dāng)前5位為1時,讀取的溫度為負(fù)數(shù);當(dāng)前5位為0時,讀取的溫度為正。溫度為正時讀取方法為:將16進(jìn)制數(shù)轉(zhuǎn)換成10進(jìn)制即可。溫度為負(fù)時讀取方法為(實(shí)際就是取補(bǔ)碼):將16進(jìn)制取反后加1,再轉(zhuǎn)換成10進(jìn)制。例:0550H = +85 度,F(xiàn)C90H = -55 度,0191H為25.0625度。LSB的低四位用于表示測量值中小數(shù)點(diǎn)后的數(shù)值。2)、非揮發(fā)的溫度報警觸發(fā)器TH和TL位于第2和第3字節(jié),用于寫入
5、溫度報警值,實(shí)際上就是設(shè)定溫度的最高和最低界限。3)、配置寄存器 配置寄存器位于存儲器的第4字節(jié),其組織如圖3所示。配置寄存器的04位和7位被器件保留,禁止寫入;在讀回數(shù)據(jù)時全部為邏輯1。R1和R0用于設(shè)置DS18B20的精度,具體如表2所示。圖3表24)、CRC發(fā)生器CRC字節(jié)作為DS18B2064位ROM的一部分存儲在存儲器中。CRC碼由ROM的前56位計算得到,被包含在ROM的重要字節(jié)當(dāng)中。CRC由存儲在存儲器中的數(shù)據(jù)計算得到,因此當(dāng)存儲器中的數(shù)據(jù)發(fā)生改變時,CRC的值也隨之改變。CRC能夠在總線控制器讀取DS18B20時進(jìn)行數(shù)據(jù)校驗(yàn)。為校驗(yàn)數(shù)據(jù)是否被正確讀取,總線控制器必須用接受到的數(shù)
6、據(jù)計算出一個CRC值,和存儲在DS18B20的64位ROM中的值(讀ROM時)或DS18B20內(nèi)部計算出的8位CRC值(讀存儲器時)進(jìn)行比較。如果計算得到的CRC值和讀取出來的CRC值相吻合,數(shù)據(jù)被無錯傳輸。CRC值的比較以及是否進(jìn)行下一步操作完全由總線控制器決定。當(dāng)在DS18B20中存儲的或由其計算到CRC值和總線控制器計算的值不相符時,DS18B20內(nèi)部并沒有一個能阻止命令序列進(jìn)行的電路。CRC的計算等式如下:CRC=X8+X5+X4+1單總線CRC可以由一個由移位寄存器和XOR門構(gòu)成的多項式發(fā)生器來產(chǎn)生。這個回路包括一個移位寄存器和幾個XOR門,移位寄存器的各位都被初始化為0。從ROM中
7、的最低有效位或暫存器中的位0開始,一次一位移入寄存器。在傳輸了56位ROM中的數(shù)據(jù)或移入了暫存器的位7后,移位寄存器中就存儲了CRC值。下一步,CRC的值必須被循環(huán)移入。此時,如果計算得到的CRC是正確的,移位寄存器將復(fù)0。其他字節(jié)保留用,不需要看。三、關(guān)于單總線系統(tǒng)單總線系統(tǒng)包括一個總線控制器和一個或多個從機(jī)。DS18B20總是充當(dāng)從機(jī)。當(dāng)只有一只從機(jī)掛在總線上時,系統(tǒng)被稱為“單點(diǎn)”系統(tǒng);如果由多只從機(jī)掛在總線上,系統(tǒng)被稱為“多點(diǎn)”。所有的數(shù)據(jù)和指令的傳遞都是從最低有效位開始通過單總線。單總線需要一個約5K的外部上拉電阻;單總線的空閑狀態(tài)是高電平。無論任何理由需要暫停某一執(zhí)行過程時,如果還想
8、恢復(fù)執(zhí)行的話,總線必須停留在空閑狀態(tài)。在恢復(fù)期間,如果單總線處于非活動(高電平)狀態(tài),位與位間的恢復(fù)時間可以無限長。如果總線停留在低電平超過480us,總線上的所有器件都將被復(fù)位。四、操作流程1.DS18B20復(fù)位。2.執(zhí)行ROM指令。就是訪問,搜索,匹配每個DS18B20獨(dú)有的64位序列號。實(shí)驗(yàn)板上只連有一個DS18B20,故不需識別,也就是不需讀出此序列號,寫代碼時直接寫命令0xcc跳過。3.執(zhí)行DS18B20功能指令(RAM指令,就是讀寫暫存器指令)。DS18B20的功能指令很多,比較常用的有兩個:0x44:開始轉(zhuǎn)換溫度。轉(zhuǎn)換好的溫度會儲存到暫存器字節(jié)0和1。0xBE:讀暫存指令。讀暫存
9、指令,會從暫存器0到9,一個一個字節(jié)讀取,如果要停止的話,必須寫下DS18B20復(fù)位。ROM指令和RAM指令的具體情況見表3。表3五、讀寫DS18B20的時序1、DS18B20的復(fù)位時序:1).單片機(jī)拉低總線480us960us,然后釋放總線(拉高電平)。2).這時DS18B20會拉低信號,大約60240us表示應(yīng)答。3).DS18B20拉低電平的60240us之間,單片機(jī)讀取總線的電平,如果是低電平,那么表示復(fù)位成功。4).DS18B20拉低電平60240us之后,會釋放總線。/*復(fù)位:主機(jī)t0時刻發(fā)送一復(fù)位脈沖(最短為480us的低電平信號),接著在t1時刻釋放總線(拉高總線電平)進(jìn)入接收
10、狀態(tài)。DS18B20在檢測到總線的上升沿之后等待1560us。接著DS18B20在t2時刻發(fā)出存在脈沖(持續(xù)60240us的低電平)*/void DS18B20_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).在讀取的時候單片機(jī)拉低電平大約1us;2).單片機(jī)釋放總線,然后讀取總線電平。3).這時候DS18B20會拉低電平(0)或拉高電平(1)。4).讀取電平過后,延遲
11、大約4045us。 /*讀字節(jié):主機(jī)總線t0時刻從高拉至低電平時,總線只須保持低電平l .7us。之后在t1時刻將總線拉高產(chǎn)生讀時間隙,讀時間隙在t1時刻后t2時刻前有效。t2距t0為15us,也就是說t2時刻前主機(jī)必須完成讀位,并在t0后的60us-120us內(nèi)釋放總線.注意讀的時候從最低位向最高位讀。*/uchar DS18B20_Read_Byte()uchar i,temp=0;for(i=0;i1;DQ=0; /主機(jī)將總線拉至低電平,只需保持1.7us_nop_(); /保持一個時鐘周期,也即1usDQ=1;delay2us(1);/延時7us,一般讀數(shù)在后半段讀if(DQ)temp
12、=temp|0x80; delay2us(2); /這里延時45us+前面7us+1us=53us,接近60usreturn temp;3、寫時序:1).單片機(jī)拉低電平大約1015us;2).單片機(jī)持續(xù)拉低電平(0)或拉高電平(1)大約2045us的時間;3).釋放總線。/*寫字節(jié):當(dāng)主機(jī)總線t0時刻從高拉至低電平時就產(chǎn)生寫時間隙。從to時刻開始15us之內(nèi)應(yīng)將所需寫的位送到總線上,在隨后15-60us間DS18B20對總線采樣若低電平寫入的位是0;若高電平寫入的位是1,連續(xù)寫2位間的間隙應(yīng)大于1us。注意:無論讀寫都是從最低位開始。*/void DS18B20_Write_Byte(ucha
13、r dat)uchar i;for(i=0;i1;4、讀取溫度流程/*讀溫度:流程:復(fù)位-寫命令(跳過讀序列號,單個DS18B20時用)-啟動溫度轉(zhuǎn)換-等待轉(zhuǎn)換完成(完成總線會跳回高電平)-復(fù)位-寫命令(跳過ROM編碼命令)-讀取暫存寄存器字節(jié)命令-讀低字節(jié)-讀高字節(jié)-復(fù)位-合并高低字節(jié)-判斷正負(fù)*/DS18B20_Read_Temperature()uchar temp_low,temp_high;DS18B20_Reset();DS18B20_Write_Byte(0xcc);DS18B20_Write_Byte(0x44);while(!DQ); /等待轉(zhuǎn)換完成DS18B20_Reset
14、();DS18B20_Write_Byte(0xcc);DS18B20_Write_Byte(0xbe);temp_low=DS18B20_Read_Byte();temp_high=DS18B20_Read_Byte();DS18B20_Reset();tvalue=temp_high;tvalue=(tvalue8)|temp_low; if(tvalue0x0fff) tflag=0; else tvalue=tvalue+1;/因?yàn)樽罡呶坏那拔逦皇?,所以寄存器存的是溫度的補(bǔ)碼(補(bǔ)碼要取反加一得到二進(jìn)制數(shù))tflag=1; tvalue=tvalue*(0.625);/溫度值擴(kuò)大10倍
15、,精確到1位小數(shù)return(tvalue);例子:DS18B20+1602#include#include #include #define uchar unsigned char#define uint unsigned intsbit DQ=P23;/ds18b20與單片機(jī)連接口sbit RS=P26;sbit RW=P27;sbit E=P25;unsigned char code str1=temperature: ;unsigned char code str2= ;uchar data disdata5;uint tvalue;/溫度值uchar tflag;/溫度正負(fù)標(biāo)志/*l
16、cd1602程序*/聲明調(diào)用函數(shù)void Lcd_W_Cmd(uchar com);void Lcd_W_Dat(uchar dat);uchar Lcd_R_Busy();void Lcd_Init();void delay(uchar t);void delay_4_nop();/*延時*/#define delay_4_nop() _nop_();_nop_();_nop_();_nop_();void delay(uchar t)uchar i, j;for(i=0; it; i+)for(j=0; j50; j+);void Lcd_Init()uchar i;Lcd_W_Cmd(0
17、x3c);Lcd_W_Cmd(0x0e);Lcd_W_Cmd(0x01);Lcd_W_Cmd(0x06);Lcd_W_Cmd(0x80);for(i=0;istrlen(str1);i+)Lcd_W_Dat(str1i);Lcd_W_Cmd(0xC0);for(i=0;istrlen(str2);i+)Lcd_W_Dat(str2i);uchar Lcd_R_Busy()uchar s;RW=1;delay_4_nop();RS=0;delay_4_nop();E=1;delay_4_nop();s=P0;delay_4_nop();E=0;return(s);void Lcd_W_Cmd(u
18、char com)uchar i;doi=Lcd_R_Busy();i=i&0x80;delay(2);while(i!=0);RW=0;delay_4_nop();RS=0;delay_4_nop();E=1;delay_4_nop();P0=com;delay_4_nop();E=0;void Lcd_W_Dat(uchar dat)uchar i;doi=Lcd_R_Busy();i=i&0x80;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(
19、);E=0;/*ds1820程序*/void delay2us(unsigned int i)/延時1微秒while(-i);/*牛人實(shí)測,本人沒有做過試驗(yàn)。針對的是12Mhz的晶振delay(0):延時518us 誤差:518-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*/*復(fù)位:主機(jī)t0時刻發(fā)送一復(fù)位脈沖(最短為480us的低電平信號),
20、接著在t1時刻釋放總線(拉高總線電平)進(jìn)入接收狀態(tài)。DS18B20在檢測到總線的上升沿之后等待1560us。接著DS18B20在t2時刻發(fā)出存在脈沖(持續(xù)60240us的低電平)*/void DS18B20_Reset()DQ=1;_nop_();DQ=0; /拉低總線delay2us(280); /持續(xù)280*2+5=565sDQ=1; /釋放總線while(DQ); /等待應(yīng)答(電平拉低)while(!DQ); /應(yīng)答電平大約持續(xù)60240us后重新拉高總線/*讀字節(jié):主機(jī)總線t0時刻從高拉至低電平時,總線只須保持低電平l .7us。之后在t1時刻將總線拉高產(chǎn)生讀時間隙,讀時間隙在t1時刻
21、后t2時刻前有效。t2距t0為15us,也就是說t2時刻前主機(jī)必須完成讀位,并在t0后的60us-120us內(nèi)釋放總線.注意讀的時候從最低位向最高位讀。*/uchar DS18B20_Read_Byte()uchar i,temp=0;for(i=0;i1;DQ=0; /主機(jī)將總線拉至低電平,只需保持1.7us_nop_(); /保持一個時鐘周期,也即1usDQ=1;delay2us(1);/延時7us,一般讀數(shù)在后半段讀if(DQ)temp=temp|0x80; delay2us(2); /這里延時45us+前面7us+1us=53us,接近60usreturn temp;/*寫字節(jié):當(dāng)主機(jī)
22、總線t0時刻從高拉至低電平時就產(chǎn)生寫時間隙。從to時刻開始15us之內(nèi)應(yīng)將所需寫的位送到總線上,在隨后15-60us間DS18B20對總線采樣若低電平寫入的位是0;若高電平寫入的位是1,連續(xù)寫2位間的間隙應(yīng)大于1us。注意:無論讀寫都是從最低位開始。*/void DS18B20_Write_Byte(uchar dat)uchar i;for(i=0;i1;/*讀溫度:流程:復(fù)位-寫命令(跳過讀序列號,單個DS18B20時用)-啟動溫度轉(zhuǎn)換-等待轉(zhuǎn)換完成(完成總線會跳回高電平)-復(fù)位-寫命令(跳過ROM編碼命令)-讀取暫存寄存器字節(jié)命令-讀低字節(jié)-讀高字節(jié)-復(fù)位-合并高低字節(jié)-判斷正負(fù)*/DS
23、18B20_Read_Temperature()uchar temp_low,temp_high;DS18B20_Reset();DS18B20_Write_Byte(0xcc);DS18B20_Write_Byte(0x44);while(!DQ); /等待轉(zhuǎn)換完成DS18B20_Reset();DS18B20_Write_Byte(0xcc);DS18B20_Write_Byte(0xbe);temp_low=DS18B20_Read_Byte();temp_high=DS18B20_Read_Byte();DS18B20_Reset();tvalue=temp_high;tvalue=(tvalue8)|temp_low; if(tvalue0x0fff) tflag=0; el
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年河北省唐山市高一上學(xué)期期中考試歷史試卷
- 2025年債務(wù)糾紛導(dǎo)致離婚協(xié)議書策劃模板
- 2025年企業(yè)暫時性停止勞動合同樣本
- 2025年策劃復(fù)婚關(guān)系解除協(xié)議書樣本
- 2025年滌綸短纖項目申請報告模稿
- 2025年農(nóng)產(chǎn)品加工與合作協(xié)議書
- 2025年水蘇糖項目立項申請報告模板
- 建筑工地外部協(xié)作單位安全合作協(xié)議書
- 2025年信息技術(shù)服務(wù)合同續(xù)簽
- 2025年住宅區(qū)物品存放室租賃合同范文
- 睡眠障礙護(hù)理查房課件
- 應(yīng)急物資的采購、存儲與調(diào)配
- 超融合架構(gòu)與傳統(tǒng)架構(gòu)對比解析方案
- 少兒美術(shù)課件- 9-12歲 素描班《場景素描》
- 剪映:手機(jī)短視頻制作-配套課件
- 金融工程.鄭振龍(全套課件560P)
- 血液透析的醫(yī)療質(zhì)量管理與持續(xù)改進(jìn)
- 橋式起重機(jī)日常檢查保養(yǎng)記錄表
- 五年級小數(shù)乘法豎式計算300道(可直接打印)
- 英語演講技巧和欣賞課件
- 物流托運(yùn)單模板
評論
0/150
提交評論