DS18B20溫度傳感器使用方法以及代碼_第1頁
DS18B20溫度傳感器使用方法以及代碼_第2頁
DS18B20溫度傳感器使用方法以及代碼_第3頁
DS18B20溫度傳感器使用方法以及代碼_第4頁
DS18B20溫度傳感器使用方法以及代碼_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第7章 DS18B20溫度傳感器7.1 溫度傳感器概述溫度傳感器是各種傳感器中最常用的一種,早起使用的是模擬溫度傳感器,如熱敏電阻,隨著環(huán)境溫度的變化,它的阻值也發(fā)生線性變化,用處理器采集電阻兩端的電壓,然后根據(jù)某個(gè)公式就可以計(jì)算出當(dāng)前環(huán)境溫度。隨著科技的進(jìn)步,現(xiàn)代的溫度傳感器已經(jīng)走向數(shù)字化,外形小,接口簡(jiǎn)單,廣泛應(yīng)用在生產(chǎn)實(shí)踐的各個(gè)領(lǐng)域,為我們的生活提供便利。隨著現(xiàn)代儀器的發(fā)展,微型化、集成化、數(shù)字化、正成為傳感器發(fā)展的一個(gè)重要方向。美國(guó)DALLS半導(dǎo)體公司推出的數(shù)字化溫度傳感器DS18B20采用單總線協(xié)議,即單片機(jī)接口僅需占用一個(gè)I/O端口,無需任何外部元件,直接將環(huán)境溫度轉(zhuǎn)化為數(shù)字信號(hào),

2、以數(shù)碼方式串行輸出,從而大大簡(jiǎn)化了傳感器與微處理器的接口。7.2 DS18B20溫度傳感器介紹DS18B20是美國(guó)DALLAS半導(dǎo)體公司繼DS1820之后最新推出的一種改進(jìn)型智能溫度傳感器。與傳統(tǒng)的熱敏電阻相比,他能夠直接讀出被測(cè)溫度并且可根據(jù)實(shí)際要求通過簡(jiǎn)單的編程實(shí)現(xiàn)912位的數(shù)字值讀數(shù)方式??梢苑謩e在93.75 ms和750 ms內(nèi)完成9位和12位的數(shù)字量,并且從DS18B20讀出的信息或?qū)懭隓S18B20的信息僅需要一根口線(單線接口)讀寫,溫度變換功率來源于數(shù)據(jù)總線,總線本身也可以向所掛接的DS18B20供電,而無需額外電源。因而使用DS18B20可使系統(tǒng)結(jié)構(gòu)更趨簡(jiǎn)

3、單,可靠性更高。他在測(cè)溫精度、轉(zhuǎn)換時(shí)間、傳輸距離、分辨率等方面較DS1820有了很大的改進(jìn),給用戶帶來了更方便的使用和更令人滿意的效果。1. DS18B20溫度傳感器的特性 獨(dú)特的單線接口方式:DS18B20與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。 在使用中不需要任何外圍元件。 可用數(shù)據(jù)線供電,電壓范圍:+3.0 +5.5 V。 測(cè)溫范圍:-55 +125 。固有測(cè)溫分辨率為0.5 。 通過編程可實(shí)現(xiàn)912位的數(shù)字讀數(shù)方式。 用戶可自設(shè)定非易失性的報(bào)警上下限值。 支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)測(cè)溫。 負(fù)壓特性,電源極性接反

4、時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作。2. 引腳介紹DS18B20有兩種封裝:三腳TO-92直插式(用的最多、最普遍的封裝)和八腳SOIC貼片式。下圖為實(shí)驗(yàn)板上直插式DS18B20的原理圖。單片機(jī)需要怎樣工作才能將DS18B20中的溫度數(shù)據(jù)獨(dú)取出來呢?下面將給出詳細(xì)分析。首先我們來看看控制DS18B20的指令:(1)讀命令(33H) 通過該命令主機(jī)可以讀出ROM中8位系列產(chǎn)品代碼、48位產(chǎn)品序列號(hào)和8位CRC碼。讀命令僅用在單個(gè)DS18B20在線情況,當(dāng)多于一個(gè)時(shí)由于DS18B20為開漏輸出將產(chǎn)生線與,從而引起數(shù)據(jù)沖突。 (2)選擇定位命令(55H) 多片DS18B20在線時(shí),主機(jī)發(fā)出該

5、命令和一個(gè)64位數(shù)列,DS18B20內(nèi)部ROM與主機(jī)數(shù)列一致者,才響應(yīng)主機(jī)發(fā)送的寄存器操作命令,其他DS18B20等待復(fù)位。該命令也可以用在單片DS18B20情況。 (3)跳過ROM序列號(hào)檢測(cè)命令(CCH) 對(duì)于單片DS18B20在線系統(tǒng),該命令允許主機(jī)跳過ROM序列號(hào)檢測(cè)而直接對(duì)寄存器操作,從而節(jié)省時(shí)間。對(duì)于多片DS18B20在線系統(tǒng),該命令將引起數(shù)據(jù)沖突。 (4)查詢命令(F0H) 當(dāng)系統(tǒng)初建時(shí),主機(jī)可能不知道總線上有多少設(shè)備,以及他們各自的64位序列號(hào),用該命令可以做到這點(diǎn)。 (5)報(bào)警查詢命令(ECH) 該命令操作過程同ROM查詢命令,但是,僅當(dāng)上次溫度測(cè)量值已置位報(bào)警標(biāo)志(由于高于T

6、H或低于TL時(shí)),DS18B20才響應(yīng)該命令,如果DS18B20處于上電狀態(tài),該標(biāo)志將保持有效,直到遇到下列兩種情況:(1)本次測(cè)量溫度發(fā)生變化,測(cè)量值處于TH、TL之間;(2)TH、TL改變,溫度值處于新的范圍之間。設(shè)置報(bào)警時(shí)要考慮到EEROM中的值。如果主機(jī)只是對(duì)一個(gè)DS18B20進(jìn)行操作,進(jìn)不需要讀取ROM編碼一級(jí)匹配ROM編碼了,只要跳過ROM(CCH)命令 ,就可以進(jìn)行如下溫度轉(zhuǎn)換和讀取操作。(1)寫入(4EH) 用此命令把數(shù)據(jù)寫入寄存第24字節(jié),從第2字節(jié)(TH)開始。復(fù)位信號(hào)發(fā)出之前必須把這三個(gè)字節(jié)寫完。 (2)讀出 (BEH) 用此命令讀出寄存器中的內(nèi)容,從第1字節(jié)開始,直到讀

7、完第9字節(jié),如果僅需要寄存器中部分內(nèi)容,主機(jī)可以在合適時(shí)刻發(fā)送復(fù)位命令結(jié)束該過程。 (3)復(fù)制(48H) 用該命令把暫存器第24字節(jié)轉(zhuǎn)存到DS18B20的EEROM中,如果DS18B20是由信號(hào)線供電,主機(jī)發(fā)出此命令后,總線必須保證至少10ms的上拉,當(dāng)發(fā)出命令后,主機(jī)發(fā)出讀時(shí)隙來讀總線,如果轉(zhuǎn)存正在進(jìn)行,讀結(jié)果為0,轉(zhuǎn)存結(jié)束為1。 (4)開始轉(zhuǎn)換(44H) DS18B20收到該命令后立刻開始溫度轉(zhuǎn)換,不需要其他數(shù)據(jù)。此時(shí)DS18B20處于空閑狀態(tài),當(dāng)溫度轉(zhuǎn)換正在進(jìn)行時(shí),主機(jī)讀總線將收到0,轉(zhuǎn)換結(jié)束為1。如果DS18B20是由信號(hào)線供電,主機(jī)發(fā)出此命令后主機(jī)必須立即提供至少相應(yīng)于分辨率的溫度轉(zhuǎn)

8、換時(shí)間的上拉電平。 (5)回調(diào)(B8H) 執(zhí)行該命令把EEROM中的內(nèi)容回調(diào)到寄存器TH、TL和設(shè)置寄存器單元中,DS18B20上電時(shí)能自動(dòng)回調(diào),因此設(shè)備上電后TH、TL就存在有效數(shù)據(jù)。該命令發(fā)出后,如果主機(jī)跟著讀總線,讀到0意味著忙,1為回調(diào)結(jié)束。 (6)讀電源標(biāo)志(B4H) 主機(jī)發(fā)出命令后讀總線,DS18B20將發(fā)送電源標(biāo)志,0為信號(hào)線供電,1為外接電源。表16.2.4列出了溫度數(shù)據(jù)在高速暫存器RAM和第0和第1個(gè)字節(jié)中的存儲(chǔ)格式。DS18B20在出廠時(shí)默認(rèn)配置為12位,其中最高位為符號(hào)位,即溫度值共11位,單片機(jī)在讀取數(shù)據(jù)時(shí),一次會(huì)讀兩字節(jié)共16位,讀完后將低11位的二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制

9、數(shù)后再乘以0.0625變?yōu)樗鶞y(cè)的實(shí)際溫度值。另外,還需要判斷溫度的正負(fù)。前5個(gè)數(shù)字為符號(hào)位,這5位同時(shí)變化,我們只需要判斷其中1位就可以了。前5位為1時(shí),讀取的溫度為負(fù)值,且測(cè)到的數(shù)值需要取反加1再乘以0.0625才可得到實(shí)際溫度值。前五位為0時(shí);讀取的溫度為正值,只要將測(cè)得的數(shù)值乘以0.0625即可得到實(shí)際溫度值。圖16.26為時(shí)序圖中各總線狀態(tài)。(1)初始化(時(shí)序圖見圖16.2.7)1) 先將數(shù)據(jù)線置高電平1。2) 延時(shí)(該時(shí)間要求不是很嚴(yán)格,但是要盡可能短一點(diǎn))。3) 數(shù)據(jù)線拉到低電平0。4) 延時(shí)750s(該時(shí)間范圍可以在480-960s)。5) 數(shù)據(jù)線拉到高電平1。6) 延時(shí)等待,如

10、果初始化成功則在15-60ms內(nèi)產(chǎn)生一個(gè)由DS18B20返回的低電平0,據(jù)該狀態(tài)可以確定它的存在。但是應(yīng)注意,不能無限地等待,不然會(huì)使程序進(jìn)入死循環(huán),所以要進(jìn)行超時(shí)判斷。7) 若CPU讀到數(shù)據(jù)線上的低電平0后,還要進(jìn)行延時(shí),其延時(shí)時(shí)間從發(fā)出高電平算起(第5步的時(shí)間算起)最少要480s。8) 將數(shù)據(jù)線再次拉到高電平1后結(jié)束。(2)DS18B20寫數(shù)據(jù) (時(shí)序圖見圖16.2.8)1) 數(shù)據(jù)線線置低電平0。2) 延時(shí)確定的時(shí)間為15s、3) 按從地位到高位的順序發(fā)送數(shù)據(jù)(一次只發(fā)送一位)。4) 延時(shí)時(shí)間45s。5) 將數(shù)據(jù)線拉到高電平1.6) 重復(fù)1-5步驟,直到發(fā)送完整個(gè)字節(jié)。7) 最后將數(shù)據(jù)線拉

11、高到1。(3)DS18B20讀數(shù)據(jù) (時(shí)序圖見圖16.2.9)1) 將數(shù)據(jù)線拉高到12) 延時(shí)2s。3) 將數(shù)據(jù)線拉到04) 延時(shí)6s。5) 將數(shù)據(jù)線拉高到1.6) 延時(shí)4s。7) 讀數(shù)據(jù)線的狀態(tài)得到一個(gè)狀態(tài)位,并進(jìn)行數(shù)據(jù)處理。8) 延時(shí)30s。9) 重復(fù)1-7步驟,直到讀取完一個(gè)字節(jié)。7.3 綜合實(shí)驗(yàn)四:讀取18B20的信息并顯示在1602上/*程序功能:在1602液晶顯示從DS18B20溫度傳感器中讀出的溫度*/#include typedef unsigned char uchar; typedef unsigned int uint;sbit ds = P16; / 溫度傳感器信號(hào)線s

12、bit beep = P15; / 定義蜂鳴器端口 sbit LCD_RS = P26; / 數(shù)據(jù)/命令選擇端(H/L) sbit LCD_RW = P25; / 讀寫選擇端(1/0)sbit LCD_EP = P27; / 使能信號(hào)uint temp;float f_temp;uchar code table1 = "DATA:2014-7-10"uchar code table2 = "Temperature:xx c"uchar code table3 = "0123456789"void delay(uint xms / 延時(shí)

13、函數(shù)uint i,j;for(i = xms;i > 0;i-for(j = 110;j > 0;j-;/*/ /* /* DS18B20溫度傳感器模塊 /* /*/void dsreset(void /18B20復(fù)位,初始化函數(shù)uint i;ds=0;i=103;while(i>0i-;ds=1;i=4;while(i>0i-;bit tempreadbit( /讀1位數(shù)據(jù)函數(shù)uint i;bit dat;ds=0;i+; /i+ 起延時(shí)作用ds=1;i+;i+;dat=ds;i=8;while(i>0i-;return dat;uchar tempread(

14、/讀1個(gè)字節(jié)uchar i,j,dat;dat=0;for(i=1;i<=8;i+j=tempreadbit(;dat=(j<<7|(dat>>1; /讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個(gè)字節(jié)在DAT里return dat;void tempwritebyte(uchar dat /向DS18B20寫一個(gè)字節(jié)數(shù)據(jù)函數(shù)uint i;uchar j;bit testb;for(j=1;j<=8;j+testb=dat&0x01;dat=dat>>1;if(testb /寫 1ds=0;i+;i+;ds=1;i=8;while(i>0i

15、-;elseds=0; /寫 0i=8;while(i>0i-;ds=1;i+;i+;void tempchange(void /DS18B20 開始獲取溫度并轉(zhuǎn)換dsreset(;delay(1;tempwritebyte(0xcc; / 寫跳過讀ROM指令tempwritebyte(0x44; / 寫溫度轉(zhuǎn)換指令uint get_temp( /讀取寄存器中存儲(chǔ)的溫度數(shù)據(jù)函數(shù)uchar a,b;dsreset(;delay(1;tempwritebyte(0xcc;tempwritebyte(0xbe;a=tempread(; /讀低8位b=tempread(; /讀高8位temp=b

16、;temp<<=8; /兩個(gè)字節(jié)組合為1個(gè)字temp=temp|a;f_temp=temp*0.0625; /溫度在寄存器中為12位 分辨率位0.0625°f_temp=f_temp+0.05; return temp; /temp是整型 /*/ /* /* 1602液晶模塊 /* /*/ void lcd_wcmd(uchar cmd / 寫入指令數(shù)據(jù)到LCD /RS=L,RW=L,E=高脈沖,D0-D7=指令碼。LCD_RS = 0;LCD_RW = 0;LCD_EP = 0; P0 = cmd;delay(1;LCD_EP = 1;delay(1;LCD_EP =

17、0; void lcd_wdata(uchar dat /寫入字符顯示數(shù)據(jù)到LCD /RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P0 = dat;delay(1;LCD_EP = 1;delay(1;LCD_EP = 0; void lcd_init( /LCD初始化設(shè)定初始化函數(shù) lcd_wcmd(0x38; /16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)delay(1; lcd_wcmd(0x0c; /設(shè)置開顯示,不顯示光標(biāo)delay(1;lcd_wcmd(0x06; /寫一個(gè)字符后地址指針加1delay(1;lcd_wcmd(0x01; /顯示清0,數(shù)據(jù)指針清0delay(1;/*/ /* /* 主函數(shù) /* /*/ void main(uchar i;beep = 0; /蜂鳴器默認(rèn)處于開啟狀態(tài),所以關(guān)閉它lcd_init(; /LCD初始化delay(10;i = 0;lcd_wcmd(0x80; /第1行第1列while(table1i != '0' /按鍵1對(duì)應(yīng)的字樣 lcd_wdata(table1i;i+;

溫馨提示

  • 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. 人人文庫網(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)論