2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論