版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 課題名稱:基于DS18B20的溫度測量</p><p><b> 摘要</b></p><p> 目前,單片機(jī)已經(jīng)在測控領(lǐng)域中獲得了廣泛的應(yīng)用,它除了可以測量電信號以外,還可以用于溫度、濕度等非電信號的測量,能獨(dú)立工作的單片機(jī)溫度檢測、溫度控制系統(tǒng)已經(jīng)廣泛應(yīng)用很多領(lǐng)域。單片機(jī)是一種特殊的計(jì)算機(jī),它是在一塊半導(dǎo)體的芯片上集成了CPU、存儲器、R
2、AM、ROM、及輸入與輸出接口電路。由于單片機(jī)的集成度高,功能強(qiáng),通用性好,特別是它具有體積小,重量輕,能耗低,價(jià)格便宜,可靠性高,抗干擾能力強(qiáng)和使用方便的優(yōu)點(diǎn),使它迅速的得到了推廣應(yīng)用,目前已成為測量控制系統(tǒng)中的優(yōu)選機(jī)種和新電子產(chǎn)品中的關(guān)鍵部件。單片機(jī)已不僅僅局限于小系統(tǒng)的概念,現(xiàn)已廣泛應(yīng)用于家用電器,機(jī)電產(chǎn)品,辦公自動化用品,機(jī)器人,兒童玩具,航天器等領(lǐng)域。 </p><p> 本次課程設(shè)計(jì),就是
3、用單片機(jī)實(shí)現(xiàn)溫度控制,傳統(tǒng)的溫度檢測大多以熱敏電阻為溫度傳感器,但熱敏電阻的可靠性差,測量溫度準(zhǔn)確率低,而且必須經(jīng)過專門的接口電路轉(zhuǎn)換成數(shù)字信號才能由單片機(jī)進(jìn)行處理。下面利用數(shù)字溫度傳感器DS18B20設(shè)計(jì)并制作了一款基于STC89C52的3位數(shù)碼管顯示的數(shù)字溫度計(jì),其電路簡單,軟硬件結(jié)構(gòu)模塊化,易于實(shí)現(xiàn)。 </p><p> 現(xiàn)代社會生活中,多功能的數(shù)字溫度計(jì)可以給我們的生活帶來很大的方
4、便。支持“單總線”接口的溫度傳感器簡化了數(shù)字溫度計(jì)的設(shè)計(jì),降低了成本,以美國MAXIM/DALLAS半導(dǎo)體公司的單總線溫度傳感器DS18B20為核心,以STC89C52為控制器設(shè)計(jì)的DS18B20溫度控制器結(jié)構(gòu)簡單、測溫準(zhǔn)確、具有一定控制功能的智能溫度控制器。該數(shù)字溫度計(jì)利用DS18B20數(shù)字溫度傳感器獲得的溫度直接送入單片機(jī),然后單片機(jī)STC89C52對其進(jìn)行溫度處理變換,最后將溫度值顯示在D1、D2、D3共3位七段碼LED數(shù)碼管上。
5、</p><p> 關(guān)鍵詞:STC89C52單片機(jī),DS18B20數(shù)字溫度傳感器</p><p><b> 一、設(shè)計(jì)原理</b></p><p> 在單片機(jī)技術(shù)的基礎(chǔ)上根據(jù)數(shù)字溫度傳感器DS18B20的結(jié)構(gòu)特點(diǎn)、工作原理和通信協(xié)議設(shè)計(jì)數(shù)字溫度計(jì),同時(shí)結(jié)合軟件編程實(shí)現(xiàn)溫度采集并顯示的功能。</p><p> 該系統(tǒng)
6、由三個(gè)模塊組成:主控制器、測溫電路及顯示電路。其系統(tǒng)結(jié)構(gòu)如圖所示:</p><p> 設(shè)計(jì)的數(shù)字溫度計(jì)控制器采用單片機(jī)STC89C52,溫度傳感器為DS18B20,三位共陽極LED數(shù)碼管以動態(tài)掃描法實(shí)現(xiàn)溫度顯示,STC89C52的P2口接8個(gè)470歐姆的電阻作為三位數(shù)碼管的段選,P3.4-P3.6接三極管驅(qū)動數(shù)碼管工作,P0.0接溫度傳感器的DQ端實(shí)現(xiàn)通信。</p><p><b&
7、gt; 二、硬件設(shè)計(jì)</b></p><p><b> 2.1、元器件介紹</b></p><p> 1.DS18B20溫度傳感器</p><p> DS18B20是美國DALLAS半導(dǎo)體公司繼DS1820之后最新推出的一種改進(jìn)型智能溫度傳感器。與傳統(tǒng)的熱敏電阻相比,它能夠直接讀出被測溫度并且可根據(jù)實(shí)際要求通過簡單的編程實(shí)現(xiàn)
8、9~12位的數(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)更趨簡單,可靠性更高。他在測溫精度、轉(zhuǎn)換時(shí)間、傳輸距離、分辨率等方面較DS1820有了很大的改進(jìn),給用戶帶來了更方便的使用和更令人滿意
9、的效果。</p><p><b> DS18B20</b></p><p> DS18B20詳細(xì)引腳功能描述</p><p> DS18B20的內(nèi)部結(jié)構(gòu)如下圖:</p><p> 圖 DS18B20內(nèi)部結(jié)構(gòu)</p><p> 64位ROM的結(jié)構(gòu)開始8位是產(chǎn)品類型的編號,接著是每個(gè)器件的
10、惟一的序號,共有48位,最后8位是前面56位的CRC檢驗(yàn)碼,這也是多個(gè)DS18B20可以采用一線進(jìn)行通信的原因。溫度報(bào)警觸發(fā)器TH和TL,可通過軟件寫入戶報(bào)警上下限。</p><p> DS18B20溫度傳感器的內(nèi)部存儲器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的EERAM。如下圖,頭2個(gè)字節(jié)包含測得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié),為配置寄存器,它的
11、內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測試模式,DS18B20出廠時(shí)該位被設(shè)置為0,用戶要去改動,R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率。</p><p> 高速暫存RAM的第6、7、8字節(jié)保留未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出前面所有8字節(jié)的CRC碼,可用來檢驗(yàn)數(shù)據(jù),從而
12、保證通信數(shù)據(jù)的正確性。</p><p> 圖 DS18B20字節(jié)定義</p><p> 當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲在高速暫存存儲器的第1、2字節(jié)。單片機(jī)可以通過單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時(shí)低位在先,高位在后,數(shù)據(jù)格式以0.0625℃/LSB形式表示。當(dāng)符號位S=0時(shí),表示測得的溫度值為正值,可以直接將二
13、進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)符號位S=1時(shí),表示測得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計(jì)算十進(jìn)制數(shù)值。表1列出了數(shù)據(jù)輸出與溫度的對應(yīng)關(guān)系</p><p> 表1 數(shù)據(jù)輸出與溫度對應(yīng)值表</p><p> 由表2可見,DS18B20溫度轉(zhuǎn)換的時(shí)間比較長,而且分辨率越高,所需要的溫度數(shù)</p><p> 據(jù)轉(zhuǎn)換時(shí)間越長。因此,在實(shí)際應(yīng)用中要將分辨率和轉(zhuǎn)換時(shí)間權(quán)衡考慮
14、。</p><p> 表2 DS18B20溫度轉(zhuǎn)換時(shí)間表</p><p> DS18B20完成溫度轉(zhuǎn)換后,就把測得的溫度值與RAM中的TH、TL字節(jié)內(nèi)容作比較。若T>TH或T<TL,則將該器件內(nèi)的報(bào)警標(biāo)志位置位,并對主機(jī)發(fā)出的報(bào)警搜索命令作出響應(yīng)。因此,可用多只DS18B20同時(shí)測量溫度并進(jìn)行報(bào)警搜索。</p><p> 另外,由于DS18B20單線通信功能是
15、分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)序很重要。系統(tǒng)對DS18B20的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初使化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)。 DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時(shí)DS18B20的1腳接地,2腳作為信號線,3腳接電源。另一種是寄生電源供電方式,單片機(jī)端口接單線總線,為保證在有效的DS18B20時(shí)鐘周期內(nèi)提供足夠的電流,可用一個(gè)MOSFET管
16、來完成對總線的上拉。</p><p> 當(dāng)DS18B20處于寫存儲器操作和溫度A/D轉(zhuǎn)換操作時(shí),總線上必須有強(qiáng)的上拉,上拉開啟時(shí)間最大為10us。采用寄生電源供電方式時(shí)VDD端接地。由于單線制只有一根線,因此發(fā)送接口必須是三態(tài)的。由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴(yán)格的時(shí)序要求。DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號的時(shí)序:初始
17、化時(shí)序、讀時(shí)序、寫時(shí)序。所有時(shí)序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動啟動寫時(shí)序開始,如果要求單總線器件回送數(shù)據(jù),在進(jìn)行寫命令后,主機(jī)需啟動讀時(shí)序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。</p><p> DS18B20的復(fù)位時(shí)序 </p><p> DS18B20的讀時(shí)序:對于DS18B20的讀時(shí)隙是從主機(jī)把單總線拉低之后,在15秒之內(nèi)
18、就得釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在完成一個(gè)讀時(shí)序過程,至少需要60us才能完成。</p><p> DS18B20的寫時(shí)序:對于DS18B20寫0時(shí)序和寫1時(shí)序的要求不同,當(dāng)要寫0時(shí)序時(shí),單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的“0”電平,當(dāng)要寫1時(shí)序時(shí),單總線被拉低之后,在15us之內(nèi)就得釋放單總線。</p
19、><p> 2. STC89C52控制芯片</p><p> STC89C52是一種帶8K字節(jié)閃爍可編程可檫除只讀存儲器(FPEROM-Flash Programable and Erasable Read Only Memory )的低電壓,高性能COMOS8的微處理器,俗稱單片機(jī)。該器件采用ATMEL搞密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。<
20、;/p><p> STC89C52具體介紹如下:</p><p> ① 主電源引腳(2根)</p><p> VCC(Pin40):電源輸入,接+5V電源</p><p> GND(Pin20):接地線</p><p> ② 外接晶振引腳(2根)</p><p> XTAL1(Pin19
21、):片內(nèi)振蕩電路的輸入端</p><p> XTAL2(Pin20):片內(nèi)振蕩電路的輸出端</p><p> ?、?控制引腳(4根)</p><p> RST/VPP(Pin9):復(fù)位引腳,引腳上出現(xiàn)2個(gè)機(jī)器周期的高電平將使單片機(jī)復(fù)位。</p><p> ALE/PROG(Pin30):地址鎖存允許信號</p><p
22、> PSEN(Pin29):外部存儲器讀選通信號</p><p> EA/VPP(Pin31):程序存儲器的內(nèi)外部選通,接低電平從外部程序存儲器讀指令, 如果接高電平則從內(nèi)部程序存儲器讀指令。</p><p> ?、?可編程輸入/輸出引腳(32根)</p><p> STC89C52單片機(jī)有4組8位的可編程I/O口,
23、分別位P0、P1、P2、P3口,每個(gè)口有8位(8根引腳),共32根。</p><p> PO口(Pin39~Pin32):8位雙向I/O口線,名稱為P0.0~P0.7</p><p> P1口(Pin1~Pin8):8位準(zhǔn)雙向I/O口線,名稱為P1.0~P1.7 </p><p> P2口(Pin21~Pin28):8位準(zhǔn)雙向I/O口線,名稱為P2.0~P2.
24、7 </p><p> P3口(Pin10~Pin17):8位準(zhǔn)雙向I/O口線,名稱為P3.0~P3.7</p><p><b> 2.2 電路原理圖</b></p><p><b> a.電源電路</b></p><p> 利用7805三端穩(wěn)壓IC來組成穩(wěn)壓電源所需的外圍器件極少,電路內(nèi)部
25、還有過流、過熱及調(diào)整管的保護(hù),使用起來可靠方便,而且價(jià)格便宜。7805穩(wěn)定輸出+5V電壓,最大輸出電流1.5A,提供電源電路。</p><p><b> b.時(shí)鐘電路</b></p><p> STC89C52內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,時(shí)鐘電路如圖4—2(a) 所示。定時(shí)元件通常采用石英晶體和電容組成的并聯(lián)諧振回路。晶體振蕩頻率可以在1.2~12
26、MHz之間選擇,電容值在5~30pF之間選擇,電容值的大小可對頻率起微調(diào)的作用。電路如下圖:</p><p><b> c.復(fù)位電路</b></p><p><b> (1)復(fù)位操作</b></p><p> 復(fù)位是單片機(jī)的初始化操作。其主要功能是把PC初始化為0000H,使單片機(jī)從 0000H單元開始執(zhí)行程序。除
27、了進(jìn)入系統(tǒng)的正常初始化之外,當(dāng)由于程序運(yùn)行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時(shí),為擺脫困境,也需按復(fù)位鍵重新啟動。</p><p> ?。?)復(fù)位信號及其產(chǎn)生</p><p> RST引腳是復(fù)位信號的輸入端。復(fù)位信號是高電平有效,其有效時(shí)間應(yīng)持續(xù)24個(gè)振蕩周期(即二個(gè)機(jī)器周期)以上。若使用頻率為12MHz的晶振,則復(fù)位信號持續(xù)時(shí)間應(yīng)超過2us</p><p> 才
28、能成復(fù)位操作。采用按鍵手動電平復(fù)位,它是通過使復(fù)位端經(jīng)電阻與Vcc電源接通而實(shí)現(xiàn)的,其電路如圖所示:</p><p> d.LED和按鍵電路</p><p> P1.0和P1.2口分別作為LED和按鍵的接口,LED的陽極接5V,按鍵另一端接地,用于測試P1口的通信是否正常,當(dāng)按鍵按下去時(shí),LED燈被點(diǎn)亮,說明P1口通信正常。電路如圖4:</p><p> e.
29、排阻電路引腳圖和串口下載電路</p><p><b> f.數(shù)碼管電路</b></p><p> P3.4-P3.6分別接三極管S8550的基極b用于片選,P2口分別接數(shù)碼管對應(yīng)引腳用于段選顯示相應(yīng)的數(shù)字,當(dāng)基極輸入低電平時(shí),表示該數(shù)碼管被選通。射極作為公共端統(tǒng)一接高電平。</p><p><b> 三、軟件設(shè)計(jì)</b&g
30、t;</p><p> 3.1、主程序流程圖:主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示,讀出并處理DS18B20測量的當(dāng)前值。</p><p> 3.2主要功能模塊介紹</p><p> 1.讀溫度流程圖:主要功能是讀出RAM中的9字節(jié)中存放溫度數(shù)據(jù)的0和1字節(jié)。</p><p><b> 2.溫度轉(zhuǎn)換流程</b></
31、p><p> 主要功能:發(fā)溫度轉(zhuǎn)換命令,當(dāng)采用12位分辨率是轉(zhuǎn)換轉(zhuǎn)換時(shí)間約為750ms。</p><p><b> 3.計(jì)算溫度流程</b></p><p> 主要功能:將RAM中的數(shù)據(jù)進(jìn)行BCD碼的轉(zhuǎn)換,并對溫度的正負(fù)進(jìn)行處理。</p><p><b> 四、綜合調(diào)試</b></p>
32、;<p> 通電測試,調(diào)試程序。將程序通過串口下載到單片機(jī)中進(jìn)行調(diào)試和修改,改變傳感器周圍環(huán)境的溫度,觀察數(shù)碼管示數(shù)是否變化。注意:請勿全部焊接完成之后再去調(diào)試。最好焊接一部分,調(diào)試成功后再去焊接接下一部分。比如:先焊接電源部分,焊完之后去測量有沒有+5V輸出。然后再去焊接單片機(jī)最小系統(tǒng),測試最小系統(tǒng)能夠下載程序并能夠運(yùn)行之后,再去焊接剩余。</p><p><b> 五、總結(jié)<
33、/b></p><p> 經(jīng)過幾天的努力,終于完成了數(shù)字溫度計(jì)的設(shè)計(jì),雖然沒有完全達(dá)到設(shè)計(jì)要求,但從心底里說,還是比較高興的。從這次的課程設(shè)計(jì)中,我了解了如何去實(shí)現(xiàn)一個(gè)小的系統(tǒng),從底層的硬件設(shè)計(jì)到高層的應(yīng)用來實(shí)現(xiàn)所需要的功能。硬件設(shè)計(jì)關(guān)鍵是器件的布局一定要合理,這樣既方便走線也方便檢查錯誤,軟件的編程如何去實(shí)現(xiàn)局部電路的測試。在讀懂原理圖的基礎(chǔ)上進(jìn)行電路的連接,這樣更有利于去布局。通過本次試驗(yàn),我真真正正
34、的意識到,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,C51程序設(shè)計(jì)是關(guān)鍵,良好的編程習(xí)慣有利于程序的修改,只有在不斷的思考和編寫的過程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲,為以后的學(xué)習(xí)奠定了基礎(chǔ),增添了信心。</p><p><b> 附錄</b></p><p> 一、按鍵和LED測試程序:</p><
35、p> #include<reg52.h> // 包含單片機(jī)寄存器定義的頭文件</p><p> sbit S1=P1^2; //將S1位定義為P1.2引腳</p><p> sbit LED0=P1^0; //將LED0位定義為P1.0引腳</p><p> void main(void) //主函數(shù)
36、</p><p><b> {</b></p><p> LED0=0; //P1.0引腳輸出低電平</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(S1==0
37、) //P1.2引腳輸出低電平,按鍵S1被按下</p><p> LED0=~LED0; //P1.0引腳取反</p><p><b> }</b></p><p><b> }</b></p><p> 二、實(shí)時(shí)溫度顯示主程序:</p><p> #incl
38、ude "reg52.h"</p><p> #include "intrins.h" //_nop_();延時(shí)函數(shù)用</p><p> #define Disdata P2 //段碼輸出口</p><p>
39、#define discan P3 //掃描口</p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit DQ=P0^0;
40、 //溫度輸入口</p><p> sbit DIN=P2^0; //LED小數(shù)點(diǎn)控制</p><p> uint h; </p><p> //**************溫度小數(shù)部分用查表法***********//</p><p> uchar c
41、ode ditab[16]=</p><p> {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};</p><p> ucharcodedis_7[12]=</p><p> {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,
42、0x1f,0x01,0x09,0xff,0xfd}</p><p> //共陽LED段碼表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "
43、;不亮" "-" </p><p> uchar code scan_con[3]={0xbf,0xdf,0xef}; </p><p> uchar data temp_data[2]={0x00,0x00}; </p><p> uchar data display[4]
44、={0x00,0x00,0x00,0x00};</p><p> /***********11微秒延時(shí)函數(shù)**********/</p><p> void delay(uint t)</p><p> {for(;t>0;t--);}</p><p> /***********顯示掃描函數(shù)**********/</p&g
45、t;<p><b> scan()</b></p><p><b> {</b></p><p><b> char k;</b></p><p> for(k=0;k<3;k++) //三位LED掃描控制</p><p><b
46、> {</b></p><p> Disdata=0xff; //段碼口不輸出</p><p> Disdata=dis_7[display[k]];</p><p> if(k==1){DIN=0;}</p><p> discan=scan_con[k];delay(90);</p>
47、;<p> discan=0xff;</p><p><b> }</b></p><p><b> }</b></p><p> /***********18B20復(fù)位函數(shù)**********/</p><p> ow_reset(void)</p><
48、p><b> {</b></p><p> char presence=1;</p><p> while(presence)</p><p><b> {</b></p><p> DQ=1;_nop_();_nop_();</p><p><b>
49、; DQ=0; </b></p><p> delay(50); // 550us</p><p> DQ=1; </p><p> delay(6); // 66us</p><p> presence=DQ; // presence=0繼續(xù)下一步</p><p><b>
50、 }</b></p><p> delay(45); //延時(shí)500us</p><p> presence = ~DQ;</p><p><b> DQ=1;</b></p><p><b> }</b></p><p> /*********
51、*18B20寫命令函數(shù)*********/</p><p> void write_byte(uchar val)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for (i=8; i>0; i--)</p>
52、<p><b> {</b></p><p> DQ=1;_nop_();_nop_(); </p><p> DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us</p><p> DQ = val&0x01; //最低位移出</p><
53、;p> delay(6); //66us</p><p> val=val/2; //右移一位</p><p><b> }</b></p><p><b> DQ = 1;</b></p><p> delay(1); </p>
54、<p><b> }</b></p><p> /*********18B20讀1個(gè)字節(jié)函數(shù)********/</p><p> uchar read_byte(void)</p><p><b> {</b></p><p><b> uchar i;</b&g
55、t;</p><p> uchar value = 0;</p><p> for (i=8;i>0;i--)</p><p><b> {</b></p><p> DQ=1;_nop_();_nop_();</p><p> value>>=1; //右移一位
56、賦給value</p><p> DQ = 0; </p><p> _nop_();_nop_();_nop_();_nop_(); //4us</p><p> DQ = 1;_nop_();_nop_();_nop_();_nop_(); //4us </p><p> if(DQ)value|=0
57、x80;</p><p> delay(6); //66us</p><p><b> }</b></p><p><b> DQ=1;</b></p><p> return(value);</p><p><b> }</b&
58、gt;</p><p> /***********讀出溫度函數(shù)**********/</p><p> read_temp()</p><p> {ow_reset(); //總線復(fù)位</p><p> write_byte(0xCC); // 發(fā)Skip ROM命令</p><p> write
59、_byte(0xBE); // 發(fā)讀命令</p><p> temp_data[0]=read_byte(); //溫度低8位</p><p> temp_data[1]=read_byte(); //溫度高8位</p><p> ow_reset();</p><p> write_byte(0xCC); // Skip ROM&l
60、t;/p><p> write_byte(0x44); // 發(fā)轉(zhuǎn)換命令</p><p><b> }</b></p><p> /***********溫度數(shù)據(jù)處理函數(shù)**********/</p><p> void work_temp()</p><p><b> {<
61、/b></p><p> uchar n=0;</p><p> display[3]=(temp_data[0]&0xf0)>>4;</p><p> Temp_data[2]=display[3];</p><p> if(!display[2])</p><p><b>
62、; {</b></p><p> display[2]=0x0a;</p><p><b> flag3=0;</b></p><p> if(!display[1])</p><p><b> {</b></p><p> display[1]=0x
63、0a;</p><p><b> flag2=0;</b></p><p><b> }</b></p><p> }//最高位為0時(shí)都不顯示</p><p><b> if(n)</b></p><p> {display[2]=0x0b;/
64、/負(fù)溫度時(shí)最高位顯示"-"</p><p><b> flag3=0;}</b></p><p><b> }</b></p><p> /**************主函數(shù)****************/</p><p><b> main()</b&
65、gt;</p><p><b> {</b></p><p> Disdata=0xff; //初始化端口</p><p> discan=0xff;</p><p> for(h=0;h<3;h++){display[h]=8;}//開機(jī)顯示888</p><p> ow_
66、reset(); // 開機(jī)先轉(zhuǎn)換一次</p><p> write_byte(0xCC); // Skip ROM</p><p> write_byte(0x44); // 發(fā)轉(zhuǎn)換命令</p><p> for(h=0;h<500;h++)</p><p> {scan();} //開機(jī)顯示&q
67、uot;888"2秒</p><p><b> while(1)</b></p><p><b> { </b></p><p> read_temp(); //讀出18B20溫度數(shù)據(jù)</p><p> work_temp(); //處理溫度數(shù)據(jù)&
68、lt;/p><p> scan(); //顯示溫度值2秒</p><p><b> }</b></p><p><b> }</b></p><p><b> 七、參考文獻(xiàn)</b></p><p> 《基于單片機(jī)的嵌入式系統(tǒng)工程設(shè)計(jì)》
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)-- ds18b20的溫度測量與顯示系統(tǒng)
- 課程設(shè)計(jì)---基于ds18b20的單片機(jī)溫度采集系統(tǒng)
- 基于avr單片機(jī)ds18b20的溫度測量實(shí)驗(yàn)
- 單片機(jī)溫度計(jì)課程設(shè)計(jì)--基于ds18b20的溫度計(jì)
- 課程設(shè)計(jì)--基于單片機(jī)的ds18b20數(shù)字溫度計(jì)設(shè)計(jì)
- avr單片機(jī)基于ds18b20的溫度測量實(shí)驗(yàn)七
- 基于單片機(jī)設(shè)計(jì)的溫度計(jì)(ds18b20)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告--ds18b20數(shù)字溫度計(jì)的設(shè)計(jì)與實(shí)現(xiàn)
- 課程設(shè)計(jì)--基于51單片機(jī)與ds18b20的數(shù)字溫度計(jì)設(shè)計(jì)
- 課程設(shè)計(jì)---基于ds18b20的多點(diǎn)溫度測量系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)--基于pic16f877單片機(jī)與ds18b20的溫度采集與顯示
- ds18b20溫度計(jì)課程設(shè)計(jì)
- 基于ds18b20的溫度測量系統(tǒng)設(shè)計(jì)
- 基于ds18b20的溫度測量實(shí)驗(yàn)
- 課程設(shè)計(jì)--ds18b20數(shù)字溫度計(jì)
- 基于ds18b20和1602的溫度計(jì)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì) ---基于ds18b20的溫度測試led顯示
- 課程設(shè)計(jì)-基于ds18b20數(shù)字溫度計(jì)的設(shè)計(jì)
- ds18b20數(shù)字溫度計(jì)設(shè)計(jì)課程設(shè)計(jì)
- 單片機(jī)畢業(yè)設(shè)計(jì)外文翻譯--ds18b20
評論
0/150
提交評論