版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 摘 要</b></p><p> 本論文介紹了一種以單片機(jī)為主的控制器件,一種以DS18B20為溫度傳感器的新型數(shù)字溫度計(jì)。主要包括硬件電路的設(shè)計(jì)和系統(tǒng)程序的編寫。硬件電路主要包括主控制器,測溫控制電路和顯示電路等,主控制器采用AT89S51單片機(jī),溫度傳感器采用美國DALLAS半導(dǎo)體公司生產(chǎn)的DS18B20,顯示電路采用8位共陰極LED數(shù)碼管,74HC573
2、為驅(qū)動(dòng)的動(dòng)態(tài)掃描顯示。測溫控制電路由傳感器和預(yù)制溫度比較電路組成。系統(tǒng)程序主要包括主程序,測溫子程序和顯示子程序等。DS18B20新型單總線數(shù)字溫度傳感器是DALLAS公司生產(chǎn)的單線數(shù)字溫度傳感器,集溫度測量和A/D轉(zhuǎn)換于一體,直接輸出數(shù)字量,具有接口簡單、精度高、抗干擾能力強(qiáng)、工作穩(wěn)定可靠等特點(diǎn)。</p><p> 由于采用了改進(jìn)型智能溫度傳感器DS18B20作為檢測元件,與傳統(tǒng)的溫度計(jì)相比,本數(shù)字溫度計(jì)減少
3、了外部的硬件電路,具有低成本和易使用的點(diǎn)特點(diǎn)。DS18B20溫度計(jì)還可以在高溫報(bào)警、遠(yuǎn)距離多點(diǎn)測溫控制等方面進(jìn)行應(yīng)用。</p><p> 關(guān)鍵詞:STC89C52,DS18B20,數(shù)碼管,動(dòng)態(tài)顯示</p><p><b> ABSTRACT</b></p><p> This paper introduces a microcontrol
4、ler based control device, a temperature sensortoDS18B20 for the new digital thermometer. Including hardware design and system procedures for the preparation. Hardware circuit includes a main controller, temperature contr
5、ol circuit and display circuit, the main controller uses STC89C52, DALLAS Semiconductor temperature sensor used by the U.S. company's DS18B20, display circuit with eight common cathode LED digital tube, 74HC573-drive
6、n dynamic scan display. Temp</p><p> As a result of improved temperature sensor DS18B20 as the detection of intelligent components, compared with the traditional thermometer, digital thermometer to reduce t
7、he external hardware circuitry, low cost and easy to use point features. DS18B20 thermometer can also be at a high temperature alarm, remote control multi-point temperature measurement applications in areas such as.</
8、p><p> Keywords: STC89C52, DS18B20, digital control, dynamic display</p><p><b> 目 錄</b></p><p><b> 第1章 前言1</b></p><p> 1.1 設(shè)計(jì)目標(biāo)1</p>&
9、lt;p> 1.1.1 前景1</p><p> 1.1.2 實(shí)現(xiàn)的可行性1</p><p> 1.2 設(shè)計(jì)思路2</p><p> 1.2.1 硬件設(shè)計(jì)思路2</p><p> 1.2.2 軟件設(shè)計(jì)思路2</p><p> 第2章 方案論證4</p><p>
10、2.1 方案一:使用熱敏電阻4</p><p> 2.2 方案二:采用數(shù)字溫度芯片DS18B204</p><p> 第3章 各電路設(shè)計(jì)及論證6</p><p> 3.1 主控制器7</p><p> 3.1.1 方案一:采用PC機(jī)實(shí)現(xiàn)7</p><p> 3.1.2 方案二:使用單片機(jī)7<
11、/p><p> 3.2 顯示電路10</p><p> 3.2.1 方案一:采用七段LED數(shù)碼顯示10</p><p> 3.2.2 方案二:采用SMCI602A液晶顯示模塊芯片10</p><p> 3.3 溫度傳感器的選擇11</p><p> 3.3.1 方案一:采用熱敏電阻11</p>
12、;<p> 3.3.2 方案二:數(shù)字溫度傳感器DS18B2011</p><p> 第4章 軟件設(shè)計(jì)18</p><p> 4.1 軟件總體設(shè)計(jì)流程18</p><p> 4.2 模塊設(shè)計(jì)18</p><p> 4.2.1 讀出溫度流程18</p><p> 4.2.2 溫度處理
13、流程19</p><p> 4.2.3 LED 顯示模塊20</p><p> 4.2.4 整體的溫度處理及顯示流程21</p><p> 4.2 源程序21</p><p> 4.3 軟硬件系統(tǒng)的調(diào)試26</p><p><b> 結(jié) 論31</b></p>
14、<p><b> 參考文獻(xiàn)32</b></p><p><b> 致 謝33</b></p><p><b> 附 錄34</b></p><p><b> 第1章 前言</b></p><p> 隨著科學(xué)技術(shù)日益迅速的發(fā)展
15、,數(shù)字監(jiān)控系統(tǒng)已經(jīng)深入到生活的各個(gè)方面。數(shù)字溫度計(jì)作為數(shù)字監(jiān)控系統(tǒng)的重要組成部分發(fā)揮著極其重要的作用。它克服了接觸式溫度計(jì)對(duì)傳感器的耐熱性能要求比較苛刻的缺點(diǎn),使溫度計(jì)無論在使用范圍還是測量精度上都有了長足的進(jìn)步。 </p><p> 本設(shè)計(jì)就是在這種廣闊的應(yīng)用背景下應(yīng)運(yùn)而生的。下面就本設(shè)計(jì)的設(shè)計(jì)目標(biāo)和思路進(jìn)行簡單介紹。 </p><p><b> 1.1 設(shè)計(jì)目標(biāo) <
16、/b></p><p> 系統(tǒng)上電復(fù)位并初始化后,主控制器將發(fā)出略讀電可擦除只讀存儲(chǔ)器及溫度轉(zhuǎn)換命令,然后執(zhí)行讀出溫度和溫度處理函數(shù),最后用 4 位 LED 數(shù)碼管顯示溫度值的百位、十位、個(gè)位及小數(shù)部分,以十進(jìn)制方式顯示。 </p><p><b> 1.1.1 前景 </b></p><p> 溫度是工業(yè)中非常關(guān)鍵的一項(xiàng)物理量,在
17、農(nóng)業(yè),現(xiàn)代科學(xué)研究和各種高新技術(shù)的開發(fā)和研究中也是一個(gè)非常普遍和常用的測量參數(shù)。 溫度測量的原理主要是:將隨溫度變化而變化的物理參數(shù),如膨脹、電阻、電容、熱電動(dòng)勢、磁性、頻率、光學(xué)特性等通過溫度傳感器轉(zhuǎn)變成電的或其他信號(hào),傳給處理電路。最后轉(zhuǎn)換成溫度數(shù)值顯示出來。 </p><p> 傳統(tǒng)的溫度測量方法基本上是接觸式的,主要有:熱膨脹式溫度計(jì),電阻式溫度計(jì),熱電偶式溫度計(jì)等。 這些接觸式溫度計(jì)的主要缺點(diǎn)是對(duì)傳感
18、器的耐熱性能要求比較苛刻,所以對(duì)應(yīng)的使用溫度范圍比較有限。它們的精度也大大限制了他們的應(yīng)用領(lǐng)域。 此外,由于這些測量方法大都是接觸式的,會(huì)污染一些高純度,高腐蝕性的測量對(duì)象。目前應(yīng)用的比較廣泛的非接觸溫度測量技術(shù)有紅外非接觸溫度測量技術(shù),單總線數(shù)字式溫度測量技術(shù)等等。此外,激光測量溫度技術(shù),基于彩色三基色的溫度測量技術(shù)也開始成為溫度測量的手段。隨著科學(xué)技術(shù)的進(jìn)一步發(fā)展,相信更多更先進(jìn)的溫度測量手段會(huì)出現(xiàn)并影響我們的生產(chǎn)、生活和社會(huì)生活的
19、方方面面。 </p><p> 1.1.2 實(shí)現(xiàn)的可行性 </p><p> 在嵌入式系統(tǒng)設(shè)計(jì)中,LED 顯示器是常用的顯示設(shè)備之一,它具有使用方便、價(jià)格便宜、電路接口簡單等優(yōu)點(diǎn),因此,在嵌入式系統(tǒng)中被廣泛使用。 為了實(shí)現(xiàn) LED 顯示器的數(shù)字顯示,可以采用靜態(tài)顯示法和動(dòng)態(tài)顯示法。由于靜態(tài)顯示法需要數(shù)據(jù)鎖存器等硬件,接口復(fù)雜一些,考慮到溫度計(jì)顯示只有 4 位,且系統(tǒng)沒有其它復(fù)雜的處理任
20、務(wù),所以計(jì)劃采用動(dòng)態(tài)掃描法實(shí)現(xiàn) LED 顯示。主控制器計(jì)劃采用飛思卡爾公司的 MC9S12DG128 單片機(jī),這種單片機(jī)具有足夠的空余硬件資源,以便可以實(shí)現(xiàn)其它的擴(kuò)</p><p> 充功能。數(shù)字溫度計(jì)要求用 4 位共陰極 LED 數(shù)碼管顯示溫度值的百位、十位、個(gè)位及小數(shù)部分,以十進(jìn)制方式顯示。 </p><p><b> 1.2 設(shè)計(jì)思路 </b></p
21、><p> 主控制器采用飛思卡爾公司的 MC9S12DG128 單片機(jī),這種單片機(jī)具有足夠的空余硬件資源,以便可以實(shí)現(xiàn)其它的擴(kuò)充功能。利用溫度傳感器 DS18S20 來實(shí)現(xiàn)測溫,它可以實(shí)現(xiàn)-55 至+125℃的顯示,本設(shè)計(jì)使用 4 位共陰極 LED 顯示,可滿足該范圍內(nèi)溫度的顯示。 </p><p> 1.2.1 硬件設(shè)計(jì)思路 </p><p> 硬件設(shè)計(jì)是整個(gè)系
22、統(tǒng)的基礎(chǔ),要考慮的方方面面很多,除了實(shí)現(xiàn)此設(shè)計(jì)基本功能以外,主要還要考慮如下幾個(gè)因素:①系統(tǒng)穩(wěn)定度;②器件的通用性或易選購性;③ 軟件編程的易實(shí)現(xiàn)性;④系統(tǒng)其它功能及性能指標(biāo);因此硬件設(shè)計(jì)至關(guān)重要。 主要設(shè)計(jì)包括以下三部分: </p><p> 單片機(jī)主控模塊:采用 MC9S12DG128,單片機(jī)作為整個(gè)硬件系統(tǒng)的核心,它既是協(xié)調(diào)整機(jī)工作的控制器,又是數(shù)據(jù)處理器。關(guān)于主控芯片的體系結(jié)構(gòu)在第二章會(huì)有詳細(xì)的介紹。
23、</p><p> 數(shù)字溫度計(jì)模塊:采用 DS18S20,DS18S20 是美國 DALLAS 公司推出的一種高性能、低功耗、實(shí)現(xiàn)單總線協(xié)議的溫度傳感器,它可以顯示-55 至+125℃范圍內(nèi)的溫度,采用單總線接口與 CPU 進(jìn)行同步通信,在這個(gè)總線系統(tǒng)中,微處理器(主設(shè)備)識(shí)別并尋址在總線上的設(shè)備要使用每個(gè)設(shè)備的獨(dú)一無二的 64 位碼。DS18S20 能夠不依靠額外的電能供應(yīng)就能獨(dú)立運(yùn)行。它的主要特性在第三章有
24、詳細(xì)介紹。 </p><p> LED 顯示模塊:在微控制器應(yīng)用系統(tǒng)中,如果需要顯示的內(nèi)容只有數(shù)碼和某些字母,則使用 LED 數(shù)碼管是一種較好的選擇。LED 數(shù)碼管顯示清晰,成本低廉,配置靈活,與微控制器的接口簡單易行。LED 顯示器有動(dòng)態(tài)掃描和靜態(tài)顯示兩種方式,動(dòng)態(tài)掃描需要耗費(fèi)大量的 MCU 時(shí)間,且亮度不夠;而靜態(tài)顯示亮度高,MCU 負(fù)擔(dān)小,但由于溫度測量精度的要求較高,所以本設(shè)計(jì)采用 LED 動(dòng)態(tài)掃描。
25、</p><p> 1.2.2 軟件設(shè)計(jì)思路 </p><p> 程序比較簡單,初始化完成后,調(diào)用讀出溫度子程序,將溫度寄存器中的溫度讀出,然后調(diào)用溫度處理子程序,將溫度數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制值并送 LED 顯示。主要模塊有讀出溫度模塊、溫度處理模塊和 LED 顯示模塊。 </p><p> 讀出溫度模塊:首先復(fù)位后發(fā)送略讀 ROM 命令,由于本設(shè)計(jì)總線上只有一個(gè)
26、DS18S20,因而總線控制器不用提供 64 位 ROM 編碼就使用存儲(chǔ)器操作命令。其次發(fā)送讀取超高速中間結(jié)果存儲(chǔ)器命令,用于將超高速中間結(jié)果存儲(chǔ)器中的內(nèi)容讀出。讀出后存放在一個(gè) 16位數(shù)組 temp_data[]中,其中將低 8 位放在 temp_data[0]中,高 8 位放在 temp_data[1]中。再次復(fù)位并再發(fā)略讀 ROM 命令,以便讀出下一個(gè)溫度值。最后發(fā)送溫度轉(zhuǎn)換命令。 </p><p> 溫
27、度處理模塊:首先判斷讀出的溫度數(shù)據(jù)是正還是負(fù),若為負(fù)則取補(bǔ)碼;其次取出temp_data[0]中的bit0位并放入display[0],該部分為溫度值的小數(shù)部分; temp_data[0]中的剩余部分為溫度值的整數(shù)部分,并分別取出百位、十位、個(gè)位數(shù)分別放在 display[3]、display[2]和 display[1]中;最后對(duì)符號(hào)位是否顯示做出處理。 </p><p> LED 顯示模塊:由于 LED 數(shù)
28、碼管有共陽極和共陰極之分,而本設(shè)計(jì)采用的是共陰極數(shù)碼管,因此需定義共陰極的十六進(jìn)制數(shù)據(jù)到段碼的轉(zhuǎn)換表。本模塊使用全局變量</p><p> DispDigMsk 指向下一個(gè)要顯示的數(shù)碼;使用 DispSegTbl[DISP_N_DIG]表示與每個(gè)要顯示的數(shù)碼相對(duì)應(yīng)的段碼;使用 DispSegTblIx 表示指向下一個(gè)要顯示數(shù)碼在段碼表中的位置。具體處理步驟如下: </p><p> 1
29、、進(jìn)行與顯示驅(qū)動(dòng)相關(guān)的 I/O 引腳初始化 </p><p> 2、中斷顯示處理: </p><p> ?。?) 清模計(jì)數(shù)器中斷標(biāo)志 </p><p> ?。?) 選擇下一個(gè)要顯示的數(shù)碼 </p><p> ?。?) 輸出該數(shù)碼的段碼 </p><p> ?。?) 調(diào)整指針。如果在指向下一個(gè)段碼時(shí)發(fā)現(xiàn)已經(jīng)到了
30、最后一個(gè)則返回第一個(gè),</p><p> 否則指針后移并且 DispDigMsk 指向下一個(gè)要顯示的數(shù)碼。LED 的動(dòng)態(tài)掃描功能通過以上步驟的循環(huán)實(shí)現(xiàn)。</p><p><b> 第2章 方案論證</b></p><p> 該系統(tǒng)主要由溫度測量和數(shù)據(jù)采集兩部分電路組成,實(shí)現(xiàn)的方法有很多種,下面將列出兩種在日常生活中和工農(nóng)業(yè)生產(chǎn)中經(jīng)常用到的
31、實(shí)現(xiàn)方案。</p><p> 2.1 方案一:使用熱敏電阻</p><p> 由于本設(shè)計(jì)是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。</p><p> 2.2 方案二:采用數(shù)
32、字溫度芯片DS18B20</p><p> 采用數(shù)字溫度芯片DS18B20 測量溫度,輸出信號(hào)全數(shù)字化。便于單片機(jī)處理及控制,省去傳統(tǒng)的測溫方法的很多外圍電路。且該芯片的物理化學(xué)性很穩(wěn)定,它能用做工業(yè)測溫元件,此元件線形較好。在0—100 攝氏度時(shí),最大線形偏差小于1 攝氏度。DS18B20 的最大特點(diǎn)之一采用了單總線的數(shù)據(jù)傳輸,由數(shù)字溫度計(jì)DS18B20和微控制器AT89S51構(gòu)成的溫度測量裝置,它直接輸出溫
33、度的數(shù)字信號(hào),可直接與計(jì)算機(jī)連接。這樣,測溫系統(tǒng)的結(jié)構(gòu)就比較簡單,體積也不大。采用51 單片機(jī)控制,軟件編程的自由度大,可通過編程實(shí)現(xiàn)各種各樣的算術(shù)算法和邏輯控制,而且體積小,硬件實(shí)現(xiàn)簡單,安裝方便。</p><p> 控制工作,還可以與PC 機(jī)通信上傳數(shù)據(jù),另外AT89S51 在工業(yè)控制上也有著廣泛的應(yīng)用,編程技術(shù)及外圍功能電路的配合使用都很成熟。</p><p> 該系統(tǒng)利用AT8
34、9S51芯片控制溫度傳感器DS18B20進(jìn)行實(shí)時(shí)溫度檢測并顯示,能夠?qū)崿F(xiàn)快速測量環(huán)境溫度,并可以根據(jù)需要設(shè)定上下限報(bào)警溫度。該系統(tǒng)擴(kuò)展性非常強(qiáng),它可以在設(shè)計(jì)中加入時(shí)鐘芯片DS1302以獲取時(shí)間數(shù)據(jù),在數(shù)據(jù)處理同時(shí)顯示時(shí)間,并可以利用AT24C16芯片作為存儲(chǔ)器件,以此來對(duì)某些時(shí)間點(diǎn)的溫度數(shù)據(jù)進(jìn)行存儲(chǔ),利用鍵盤來進(jìn)行調(diào)時(shí)和溫度查詢,獲得的數(shù)據(jù)可以通過MAX232芯片與計(jì)算機(jī)的RS232接口進(jìn)行串口通信,方便的采集和整理時(shí)間溫度數(shù)據(jù)。<
35、;/p><p> 系統(tǒng)框圖如圖1.1所示</p><p> 圖2.1 DS18B20溫度測溫系統(tǒng)框</p><p> 從以上兩種方案,容易看出方案一的測溫裝置可測溫度范圍寬、體積小,但是線性誤差較大。方案二的測溫裝置電路簡單、精確度較高、實(shí)現(xiàn)方便、軟件設(shè)計(jì)也比較簡單,故本次設(shè)計(jì)采用了方案二。</p><p> 第3章 各電路設(shè)計(jì)及論證&l
36、t;/p><p> 溫度計(jì)電路設(shè)計(jì)原理圖如圖3.1所示,控制器使用單片機(jī)AT89C2051,溫度計(jì)傳感器使用DS18B20,用數(shù)碼管實(shí)現(xiàn)溫度顯示。本溫度計(jì)大體分三個(gè)工作過程。首先,由DS18820溫度傳感器芯片測量當(dāng)前的溫度,并將結(jié)果送入單片機(jī)。然后,通過89C205I單片機(jī)芯片對(duì)送來的測量溫度讀數(shù)進(jìn)行計(jì)算和轉(zhuǎn)換,井將此結(jié)果送入顯示模塊。 由圖2.1可看到,本電路主要由DSl8820溫度傳感器芯片、數(shù)碼管
37、顯示模塊和89C2051單片機(jī)芯片組成。其中,DSI8B20溫度傳感器芯片采用“一線制”與單片機(jī)相連,它獨(dú)立地完成溫度測量以及將溫度測量結(jié)果送到單片機(jī)的工作。</p><p> 圖3.1 溫度計(jì)電路設(shè)計(jì)原理圖</p><p><b> 3.1 主控制器</b></p><p> 3.1.1 方案一:采用PC機(jī)實(shí)現(xiàn)</p>
38、<p> 此方案采用PC機(jī)實(shí)現(xiàn)。它可在線編程,可在線仿真的功能,這讓調(diào)試變得方便。且人機(jī)交互友好。但是PC機(jī)輸出信號(hào)不能直接與DS18B20通信。需要通過RS232電平轉(zhuǎn)換兼容,硬件的合成在線調(diào)試,較為繁瑣,很不簡便。而且在一些環(huán)境比較惡劣的場合,PC機(jī)的體積大,攜帶安裝不方便,性能不穩(wěn)定,給工程帶來很多麻煩!</p><p> 3.1.2 方案二:使用單片機(jī)</p><p>
39、; 使用單片機(jī),對(duì)于單片機(jī)的選擇,可以考慮使用8031與8051系列,由于8031沒有內(nèi)部RAM,系統(tǒng)又需要大量內(nèi)存存儲(chǔ)數(shù)據(jù),因而不適用。AT89S51 是美國 ATMEL 公司生產(chǎn)的低功耗,高性能 CMOS8 位單片機(jī),片內(nèi)含 4kbytes 的可編程的 Flash 只讀程序存儲(chǔ)器,兼容標(biāo)準(zhǔn) 8051 指令系統(tǒng)及引腳。它集 Flash 程序存儲(chǔ)器既可在線編程(ISP),也可用傳統(tǒng)方法進(jìn)行編程,所以低價(jià)位 AT89S51單片機(jī)可為提供
40、許多高性價(jià)比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域,對(duì)于簡單的測溫系統(tǒng)已經(jīng)足夠。單片機(jī)AT89S51 具有低電壓供電和體積小等特點(diǎn),四個(gè)端口只需要兩個(gè)口就能滿足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(tǒng)可用二節(jié)電池供電。主要特性如下</p><p> ●與MCS-51 兼容</p><p> ●4K字節(jié)可編程閃爍存儲(chǔ)器</p><p> ●壽命:10
41、00寫/擦循環(huán)</p><p> ●數(shù)據(jù)保留時(shí)間:10年</p><p> ●全靜態(tài)工作:0Hz-24Hz</p><p> ●三級(jí)程序存儲(chǔ)器鎖定</p><p> ●128*8位內(nèi)部RAM</p><p> ●32可編程I/O線</p><p> ●兩個(gè)16位定時(shí)器/計(jì)數(shù)器<
42、/p><p><b> ●5個(gè)中斷源</b></p><p> ●可編程串行通道 </p><p> ●低功耗的閑置和掉電模式</p><p> ●片內(nèi)振蕩器和時(shí)鐘電路 </p><p> 89S51 引腳功能介紹</p>
43、;<p> 圖3.2 AT89S51單片機(jī)引腳圖</p><p> AT89S51單片機(jī)為40引腳雙列直插式封裝。 </p><p> 其引腳排列和邏輯符號(hào)如圖3.2所示: </p><p> 各引腳功能簡單介紹如下:</p><p><b> ●VCC:供電電壓</b>
44、;</p><p> ●GND:接地</p><p> ●P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每個(gè)管腳可吸收8TTL門電流。當(dāng)P1口的管腳寫“1”時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FLASH編程時(shí),P0口作為原碼輸入口,當(dāng)FLASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部電位必須被拉高。</p>
45、;<p> ●P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入“1”后,電位被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。</p><p> ●P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)
46、P2口被寫“1”時(shí),其管腳電位被內(nèi)部上拉電阻拉高,且作為輸入。作為輸入時(shí),P2口的管腳電位被外部拉低,將輸出電流,這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉的優(yōu)勢,當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。</p><p>
47、; ●P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入時(shí),由于外部下拉為低電平,P3口將輸出電流(ILL),也是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口:</p><p> P3.0 RXD(串行輸入口)</p><p> ??P3.1 TXD(串行輸出口)<
48、/p><p> ??P3.2 INT0(外部中斷0)</p><p> ??P3.3 INT1(外部中斷1)</p><p> ??P3.4 T0(記時(shí)器0外部輸入)</p><p> ??P3.5 T1(記時(shí)器1外部輸入)</p><p> ??P3.6 WR (外部數(shù)據(jù)存儲(chǔ)器寫選通)</p>&
49、lt;p> ??P3.7 RD (外部數(shù)據(jù)存儲(chǔ)器讀選通)</p><p> 同時(shí)P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。</p><p> ●RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。</p><p> ●ALE / PROG :當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編
50、程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令時(shí)ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p>
51、; ●PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取址期間,每個(gè)機(jī)器周期PSEN兩次有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的PSEN信號(hào)將不出現(xiàn)。</p><p> ●EA/VPP:當(dāng)EA保持低電平時(shí),訪問外部ROM;注意加密方式1時(shí),EA將內(nèi)部鎖定為RESET;當(dāng)EA端保持高電平時(shí),訪問內(nèi)部ROM。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><
52、p> ●XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。</p><p> ●XTAL2:來自反向振蕩器的輸出。</p><p> 單片機(jī)AT89C2051具有低電壓供電和小體積等特點(diǎn),兩個(gè)端口剛好滿足電路系統(tǒng)的設(shè)計(jì)需要,很合適攜手特式產(chǎn)品的使用。主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個(gè)步驟:初始化、ROM操作指令、存儲(chǔ)器操作指令。必須先啟動(dòng)DS18B20開始轉(zhuǎn)
53、換,再讀出溫度轉(zhuǎn)換值。</p><p><b> 3.2 顯示電路</b></p><p> 3.2.1 方案一:采用七段LED數(shù)碼顯示</p><p> 采用七段LED數(shù)碼顯示,LED顯示器內(nèi)部由7段發(fā)光二極管組成,因此亦稱之為七段LED顯示器,由于主要用于顯示各種數(shù)字符號(hào),故又稱之為LED數(shù)碼管。每個(gè)顯示器還有一個(gè)圓點(diǎn)型發(fā)光二極管,用
54、于顯示小數(shù)點(diǎn)。但其編程相對(duì)復(fù)雜,可顯示字符比較少。但是本設(shè)計(jì)采用此種方案。</p><p> 3.2.2 方案二:采用SMCI602A液晶顯示模塊芯片</p><p> 采用SMCI602A液晶顯示模塊芯片,該芯片可顯示16×2個(gè)字符,比以前的七段數(shù)碼管LED顯示器在顯示字符的數(shù)量上要多得多。另外,由于SMCl602芯片編程比較簡單,界面直觀,因此更加易于使用者操作和觀測。S
55、MCl602A芯片的接口信號(hào)說明如表2.1所列。</p><p> 表3.1 SMCl602A芯片的接口信號(hào)說明</p><p> 3.3 溫度傳感器的選擇</p><p> 3.3.1 方案一:采用熱敏電阻</p><p> 采用熱敏電阻,可滿足40攝氏度至90攝氏度測量范圍,但熱敏電阻精度、重復(fù)性、可靠性較差,對(duì)于檢測1攝氏度的
56、信號(hào)是不適用的。而且在溫度測量系統(tǒng)中,采用單片溫度傳感器,比如AD590,LM35等.但這些芯片輸出的都是模擬信號(hào),必須經(jīng)過A/D轉(zhuǎn)換后才能送給計(jì)算機(jī),這樣就使得測溫裝置的結(jié)構(gòu)較復(fù)雜.另外,這種測溫裝置的一根線上只能掛一個(gè)傳感器,不能進(jìn)行多點(diǎn)測量.即使能實(shí)現(xiàn),也要用到復(fù)雜的算法,一定程度上也增加了軟件實(shí)現(xiàn)的難度。</p><p> 3.3.2 方案二:數(shù)字溫度傳感器DS18B20</p><
57、p> 由于傳統(tǒng)的熱敏電阻等測溫元件測出的一般都是電壓,再轉(zhuǎn)換成對(duì)應(yīng)的溫度,需要比較多的外部元件支持,且硬件電路復(fù)雜,制作成本相對(duì)較高。這里采用DALLAS公司的數(shù)字溫度傳感器DS18B20作為測溫元件。</p><p> 3.3.2.1 DS18B20簡單介紹</p><p> DALLAS 最新單線數(shù)字溫度傳感器DS18B20是一種新型的“一線器件”,其體積更小、更適用于多種
58、場合、且適用電壓更寬、更經(jīng)濟(jì)。DALLAS 半導(dǎo)體公司的數(shù)字化溫度傳感器DS18B20是世界上第一片支持“一線總線”接口的溫度傳感器。溫度測量范圍為-55~+125 攝氏度,可編程為9位~12 位轉(zhuǎn)換精度,測溫分辨率可達(dá)0.0625攝氏度,分辨率設(shè)定參數(shù)以及用戶設(shè)定的報(bào)警溫度存儲(chǔ)在EEPROM 中,掉電后依然保存。被測溫度用符號(hào)擴(kuò)展的16位數(shù)字量方式串行輸出;其工作電源既可以在遠(yuǎn)端引入,也可以采用寄生電源方式產(chǎn)生;多個(gè)DS18B20可以
59、并聯(lián)到3 根或2 根線上,CPU只需一根端口線就能與諸多DS18B20 通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。因此用它來組成一個(gè)測溫系統(tǒng),具有線路簡單,在一根通信線,可以掛很多這樣的數(shù)字溫度計(jì),十分方便。</p><p> DS18B20 的性能特點(diǎn)如下:</p><p> ●獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS1
60、8B20的雙向通訊</p><p> ●DS18B20支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測溫</p><p> ●DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)</p><p> ●適應(yīng)電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電</p&g
61、t;<p> ●溫范圍-55℃~+125℃,在-10~+85℃時(shí)精度為±0.5℃</p><p><b> ●零待機(jī)功耗</b></p><p> ●可編程的分辨率為9~12位,對(duì)應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實(shí)現(xiàn)高精度測溫</p><p> ●在9位分辨率時(shí)最多在93
62、.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時(shí)最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快</p><p> ●用戶可定義報(bào)警設(shè)置</p><p> ●報(bào)警搜索命令識(shí)別并標(biāo)志超過程序限定溫度(溫度報(bào)警條件)的器件</p><p> ●測量結(jié)果直接輸出數(shù)字溫度信號(hào),以"一線總線"串行傳送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能
63、力</p><p> ●負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作</p><p> 以上特點(diǎn)使DS18B20非常適用與多點(diǎn)、遠(yuǎn)距離溫度檢測系統(tǒng)。</p><p> DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列、各種封裝形式如圖 4 所示,D
64、Q 為數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。當(dāng)被用著在寄生電源下,也可以向器件提供電源;GND為地信號(hào);VDD為可選擇的VDD引腳。當(dāng)工作于寄生電源時(shí),此引腳必須接地。其電路圖3.3所示</p><p> 圖3.3 外部封裝形式</p><p> 圖3.4 傳感器引腳圖</p><p> 3.3.2.2 DS18B20使用中的注意事項(xiàng)</p>
65、<p> DS18B20 雖然具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點(diǎn),但在實(shí)際應(yīng)用中也應(yīng)注意以下幾方面的問題:</p><p> ●DS18B20 從測溫結(jié)束到將溫度值轉(zhuǎn)換成數(shù)字量需要一定的轉(zhuǎn)換時(shí)間,這是必須保證的,不然會(huì)出現(xiàn)轉(zhuǎn)換錯(cuò)誤的現(xiàn)象,使溫度輸出總是顯示85。</p><p> ●在實(shí)際使用中發(fā)現(xiàn),應(yīng)使電源電壓保持在5V 左右,若電源電壓過低,會(huì)使所
66、測得的溫度精度降低。</p><p> ●較小的硬件開銷需要相對(duì)復(fù)雜的軟件進(jìn)行補(bǔ)償,由于DS1820與微處理器間采用串行數(shù)據(jù)傳送,因此,在對(duì)DS1820進(jìn)行讀寫編程時(shí),必須嚴(yán)格的保證讀寫時(shí)序,否則將無法讀取測溫結(jié)果。在使用PL/M、C等高級(jí)語言進(jìn)行系統(tǒng)程序設(shè)計(jì)時(shí),對(duì)DS1820操作部分最好采用匯編語言實(shí)現(xiàn)。</p><p> ●在DS18B20的有關(guān)資料中均未提及單總線上所掛DS18B
67、20 數(shù)量問題,容易使人誤認(rèn)為可以掛任意多個(gè)DS18B20,在實(shí)際應(yīng)用中并非如此,當(dāng)單總線上所掛DS18B20 超過8 個(gè)時(shí),就需要解決微處理器的總線驅(qū)動(dòng)問題,這一點(diǎn)在進(jìn)行多點(diǎn)測溫系統(tǒng)設(shè)計(jì)時(shí)要加以注意。</p><p> ●在DS18B20測溫程序設(shè)計(jì)中,向DS18B20 發(fā)出溫度轉(zhuǎn)換命令后,程序總要等待DS18B20的返回信號(hào),一旦某個(gè)DS18B20 接觸不好或斷線,當(dāng)程序讀該DS18B20 時(shí),將沒有返回信
68、號(hào),程序進(jìn)入死循環(huán),這一點(diǎn)在進(jìn)行DS18B20硬件連接和軟件設(shè)計(jì)時(shí)也要給予一定的重視。</p><p> 3.3.2.3 DS18B20內(nèi)部結(jié)構(gòu)</p><p> 圖為DS1820的內(nèi)部框圖,它主要包括寄生電源、溫度傳感器、64位激光ROM單線接口、存放中間數(shù)據(jù)的高速暫存器(內(nèi)含便箋式RAM),用于存儲(chǔ)用戶設(shè)定的溫度上下限值的TH和TL觸發(fā)器存儲(chǔ)與控制邏輯、8位循環(huán)冗余校驗(yàn)碼(CRC)
69、發(fā)生器等七部分。</p><p> DS18B20采用3腳PR-35 封裝或8腳SOIC封裝,其內(nèi)部結(jié)構(gòu)框圖如圖3.5所示</p><p> 圖3.5 DS18B20內(nèi)部結(jié)構(gòu)框圖</p><p> 64 b閃速ROM的結(jié)構(gòu)如下:</p><p> 表3.2 ROM的結(jié)構(gòu)</p><p> MSBLSB
70、 MSB LSB MSBLSB</p><p> 開始8位是產(chǎn)品類型的編號(hào),接著是每個(gè)器件的惟一的序號(hào),共有48 位,最后8位是前面56 位的CRC 檢驗(yàn)碼,這也是多個(gè)DS18B20 可以采用一線進(jìn)行通信的原因。溫度報(bào)警觸發(fā)器TH和TL,可通過軟件寫入戶報(bào)警上下限</p><p> DS18B20 溫度傳感器的內(nèi)部存儲(chǔ)器</p><p&g
71、t; 還包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的EERAM。高速暫存RAM 的結(jié)構(gòu)為8字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如圖3.6所示</p><p> 便箋式存儲(chǔ)器(上電狀態(tài))</p><p><b> Byte0</b></p><p><b> Byte1</b></p><p><b&
72、gt; Byte2</b></p><p><b> Byte3</b></p><p><b> Byte4</b></p><p><b> Byte5</b></p><p><b> Byte6</b></p>
73、<p><b> Byte7</b></p><p><b> Byte8</b></p><p> 圖 3.6 高速暫存RAM結(jié)構(gòu)圖</p><p> 前2個(gè)字節(jié)包含測得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換
74、分辨率。DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。</p><p><b> 其溫度值如下:</b></p><p> 表3.2 溫度數(shù)值表</p><p> LSB MSB</p><p>
75、 當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動(dòng)轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲(chǔ)在高速暫存存儲(chǔ)器的第1,2字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時(shí)低位在前,高位在后,數(shù)據(jù)格式以0.062 5 ℃/LSB形式表示。溫度值格式如下:</p><p> 表3.3 轉(zhuǎn)換后的溫度值</p><p> MSB LSB<
76、/p><p> MSB LSB </p><p> 這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.
77、0625即可得到實(shí)際溫度。圖中,S表示位。對(duì)應(yīng)的溫度計(jì)算:當(dāng)符號(hào)位S=0時(shí),表示測得的溫度植為正值,直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)S=1時(shí),表示測得的溫度植為負(fù)值,先將補(bǔ)碼變換為原碼,再計(jì)算十進(jìn)制值。例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。</p><p> DS18B20溫度傳感器主要用于對(duì)溫度進(jìn)
78、行測量,數(shù)據(jù)可用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,并以0.0625℃/LSB形式表示。表2是部分溫度值對(duì)應(yīng)的二進(jìn)制溫度表示數(shù)據(jù)。</p><p> 表3.4 部分溫度值</p><p> DS18B20完成溫度轉(zhuǎn)換后,就把測得的溫度值與RAM中的TH、TL字節(jié)內(nèi)容作比較,若T>TH或T<TL,則將該器件內(nèi)的告警標(biāo)志置位,并對(duì)主機(jī)發(fā)出的告警搜索命令作出響應(yīng)。因此,可用多
79、只DS18B20同時(shí)測量溫度并進(jìn)行告警搜索。</p><p> 在64位ROM的最高有效字節(jié)中存儲(chǔ)有循環(huán)冗余校驗(yàn)碼(CRC)。主機(jī)根據(jù)ROM的前 56位來計(jì)算CRC值,并和存入DS18B20中的CRC值做比較,以判斷主機(jī)收到的ROM數(shù) 據(jù)是否正確。</p><p> 3.3.2.4 DS18B20測溫原理</p><p> DS18B20的測溫原理如圖8所示
80、,圖中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給減法計(jì)數(shù)器1,高溫度系數(shù)晶振隨溫度變化其震蕩頻率明顯改變,所產(chǎn)生的信號(hào)作為減法計(jì)數(shù)器2的脈沖輸入,圖中還隱含著計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DS18B20就對(duì)低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖后進(jìn)行計(jì)數(shù),進(jìn)而完成溫度測量.計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將-55 ℃所對(duì)應(yīng)的基數(shù)分別置入減法計(jì)數(shù)器1和溫度寄存器中,減法計(jì)數(shù)器1和溫度寄存器被預(yù)置在
81、-55 ℃所對(duì)應(yīng)的一個(gè)基數(shù)值。</p><p> 減法計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí)溫度寄存器的值將加1,減法計(jì)數(shù)器 1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測溫圖2中的斜率累加器用于補(bǔ)償和修正測溫過程中的非線性其輸出用,于修正減法
82、計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)門仍未關(guān)閉就重復(fù)上述過程,直至溫度寄存器值達(dá)到被測溫度值,這就是DS18B20的測溫原理。</p><p> 另外,由于DS18B20單線通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)序很重要。系統(tǒng)對(duì)DS18B20的各種操作必須按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲(chǔ)器操作命令→處理數(shù)據(jù)。</p><p> 圖3
83、.7 DS18B20測溫原理圖</p><p> 在正常測溫情況下,DS1820的測溫分辨力為0.5℃,可采用下述方法獲得高分辨率的溫度測量結(jié)果:首先用DS1820提供的讀暫存器指令(BEH)讀出以0.5℃為分辨率的溫度測量結(jié)果,然后切去測量結(jié)果中的最低有效位(LSB),得到所測實(shí)際溫度的整數(shù)部分Tz,然后再用BEH指令取計(jì)數(shù)器1的計(jì)數(shù)剩余值Cs和每度計(jì)數(shù)值CD??紤]到DS1820測量溫度的整數(shù)部分以0.25℃
84、、0.75℃為進(jìn)位界限的關(guān)系,實(shí)際溫度Ts可用下式計(jì)算:</p><p> Ts=(Tz-0.25℃)+(CD-Cs)/CD(3.1) </p><p><b> 第4章 軟件設(shè)計(jì)</b></p><p> 本章介紹數(shù)字溫度計(jì)的軟件設(shè)計(jì)部分。該部分主要包括:軟件總體設(shè)計(jì)流程、模塊設(shè)計(jì)及測試。其中,模塊設(shè)計(jì)介紹了數(shù)字溫度計(jì)實(shí)現(xiàn)依賴的 3 個(gè)
85、功能模塊,它們分別是:讀出溫度模塊、溫度處理模塊和 LED 顯示模塊。測試部分介紹了測試的意義、環(huán)境和測試用例。</p><p> 4.1 軟件總體設(shè)計(jì)流程 </p><p> 主程序比較簡單,初始化完成后,調(diào)用讀出溫度、溫度處理及 LED 顯示程序,取得溫度顯示。系統(tǒng)主程序主要完成溫度顯示功能,總體設(shè)計(jì)流程如下圖所示:</p><p> 圖4.1 DS18
86、S20數(shù)字溫度計(jì)主流圖</p><p> 4.2 模塊設(shè)計(jì) </p><p> 本設(shè)計(jì)的主要模塊有讀出溫度模塊、溫度處理模塊和LED顯示模塊。 </p><p> 4.2.1 讀出溫度流程 </p><p> 溫度傳感器測出溫度后會(huì)將數(shù)據(jù)存儲(chǔ)在上、下限報(bào)警寄存器 TH 和 TL 里,要實(shí)現(xiàn)讀出溫度,要將 TH 和 TL 中的數(shù)據(jù)讀出
87、。TH和TL是兩個(gè)8位寄存器,因此在讀這兩個(gè)寄存器中的數(shù)據(jù)時(shí)需要一個(gè)16 位數(shù)組來存放分別來自 TH 和 TL 的數(shù)據(jù)。具體流程如下圖:</p><p> 圖4.2 讀出溫度流程圖</p><p> 4.2.2 溫度處理流程 </p><p> 溫度處理是將讀出的溫度數(shù)據(jù)轉(zhuǎn)換成區(qū)分整數(shù)部分與小數(shù)部分的 BCD 值,并對(duì)溫度的正負(fù)做出判斷處理的函數(shù)。具體流程見下
88、圖:</p><p> 圖4.3 溫度處理流程圖</p><p> 4.2.3 LED 顯示模塊 </p><p> LED 顯示模塊的作用是將處理好的數(shù)據(jù)顯示出來。該部分要完成 16 進(jìn)制到 7 段數(shù)碼的段碼轉(zhuǎn)換,并最終將正確的段碼輸出,以此點(diǎn)亮相應(yīng)的數(shù)碼管。具體流程如下圖所示:</p><p> 圖4.4 LED顯示流程圖<
89、/p><p> 4.2.4 整體的溫度處理及顯示流程</p><p> 圖4.5 整體的溫度處理及顯示流程</p><p><b> 4.2 源程序</b></p><p> #include <AT89X52.H></p><p> #include <INTRINS.h
90、></p><p> unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,</p><p> 0xef,0xdf,0xbf,0x7f};</p><p> unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,</p><p&g
91、t; 0x66,0x6d,0x7d,0x07,</p><p> 0x7f,0x6f,0x77,0x7c,</p><p> 0x39,0x5e,0x79,0x71,0x00,0x40};</p><p> unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,</p><p> 2
92、5,28,31,34,38,41,44,48,</p><p> 50,53,56,59,63,66,69,72,</p><p> 75,78,81,84,88,91,94,97};</p><p> unsigned char displaycount;</p><p> unsigned char displaybuf[8]={
93、16,16,16,16,16,16,16,16};</p><p> unsigned char timecount;</p><p> unsigned char readdata[8];</p><p> sbit DQ=P3^7;</p><p> bit sflag;</p><p> bit res
94、etpulse(void)</p><p><b> {</b></p><p> unsigned char i;</p><p><b> DQ=0;</b></p><p> for(i=255;i>0;i--);</p><p><b> D
95、Q=1;</b></p><p> for(i=60;i>0;i--);</p><p> return(DQ);</p><p> for(i=200;i>0;i--);</p><p><b> }</b></p><p> void writecommand
96、tods18b20(unsigned char command)</p><p><b> {</b></p><p> unsigned char i;</p><p> unsigned char j;</p><p> for(i=0;i<8;i++)</p><p><
97、b> {</b></p><p> if((command & 0x01)==0)</p><p><b> {</b></p><p><b> DQ=0;</b></p><p> for(j=35;j>0;j--);</p><p&
98、gt;<b> DQ=1;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> DQ=0;</b></p>
99、<p> for(j=2;j>0;j--);</p><p><b> DQ=1;</b></p><p> for(j=33;j>0;j--);</p><p><b> }</b></p><p> command=_cror_(command,1); </
100、p><p><b> }</b></p><p><b> }</b></p><p> unsigned char readdatafromds18b20(void)</p><p><b> {</b></p><p> unsigned ch
101、ar i;</p><p> unsigned char j;</p><p> unsigned char temp;</p><p><b> temp=0;</b></p><p> for(i=0;i<8;i++)</p><p><b> {</b>
102、</p><p> temp=_cror_(temp,1);</p><p><b> DQ=0;</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b>
103、 DQ=1;</b></p><p> for(j=10;j>0;j--);</p><p><b> if(DQ==1)</b></p><p><b> {</b></p><p> temp=temp | 0x80;</p><p><
104、b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> temp=temp | 0x00;</p><p><b> }</b></p><p> for(j=2
105、00;j>0;j--);</p><p><b> }</b></p><p> return(temp);</p><p><b> }</b></p><p> void main(void)</p><p><b> {</b>&l
106、t;/p><p> TMOD=0x01;</p><p> TH0=(65536-4000)/256;</p><p> TL0=(65536-4000)%256;</p><p><b> ET0=1;</b></p><p><b> EA=1;</b></p
107、><p> while(resetpulse());</p><p> writecommandtods18b20(0xcc);</p><p> writecommandtods18b20(0x44);</p><p><b> TR0=1;</b></p><p><b> w
108、hile(1)</b></p><p><b> {</b></p><p><b> ;</b></p><p><b> }</b></p><p><b> }</b></p><p> void t0(
109、void) interrupt 1 using 0</p><p><b> {</b></p><p> unsigned char x;</p><p> unsigned int result;</p><p> TH0=(65536-4000)/256;</p><p> TL0
110、=(65536-4000)%256;</p><p> if(displaycount==2)</p><p><b> {</b></p><p> P0=displaycode[displaybuf[displaycount]] | 0x80;</p><p><b> }</b><
111、;/p><p><b> else</b></p><p><b> {</b></p><p> P0=displaycode[displaybuf[displaycount]];</p><p><b> }</b></p><p> P2=d
112、isplaybit[displaycount];</p><p> displaycount++;</p><p> if(displaycount==8)</p><p><b> {</b></p><p> displaycount=0;</p><p><b> }&l
113、t;/b></p><p> timecount++;</p><p> if(timecount==150)</p><p><b> {</b></p><p> timecount=0;</p><p> while(resetpulse());</p><
114、;p> writecommandtods18b20(0xcc);</p><p> writecommandtods18b20(0xbe);</p><p> readdata[0]=readdatafromds18b20();</p><p> readdata[1]=readdatafromds18b20();</p><p&g
115、t; for(x=0;x<8;x++)</p><p><b> {</b></p><p> displaybuf[x]=16;</p><p><b> }</b></p><p><b> sflag=0;</b></p><p>
116、 if((readdata[1] & 0xf8)!=0x00)</p><p><b> {</b></p><p><b> sflag=1;</b></p><p> readdata[1]=~readdata[1];</p><p> readdata[0]=~readdat
117、a[0];</p><p> result=readdata[0]+1;</p><p> readdata[0]=result;</p><p> if(result>255)</p><p><b> {</b></p><p> readdata[1]++;</p>
118、;<p><b> }</b></p><p><b> }</b></p><p> readdata[1]=readdata[1]<<4;</p><p> readdata[1]=readdata[1] & 0x70;</p><p> x=read
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機(jī)數(shù)字溫度計(jì)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)數(shù)字溫度計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于單片機(jī)數(shù)字溫度計(jì)
- 基于單片機(jī)的數(shù)字溫度計(jì)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的數(shù)字溫度計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)——基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
- 單片機(jī)的數(shù)字溫度計(jì)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì) 畢業(yè)設(shè)計(jì)
- 基于單片機(jī)控制的數(shù)字溫度計(jì)----畢業(yè)設(shè)計(jì)
- 基于5單片機(jī)的數(shù)字溫度計(jì)畢業(yè)設(shè)計(jì)
- 基于51單片機(jī)的數(shù)字溫度計(jì)-畢業(yè)設(shè)計(jì)
- 單片機(jī)畢業(yè)設(shè)計(jì)--單片機(jī)設(shè)計(jì)數(shù)字溫度計(jì)
- 基于單片機(jī)的數(shù)字溫度計(jì)畢業(yè)設(shè)計(jì)論文
- 畢業(yè)設(shè)計(jì)(論文)-基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
- 基于單片機(jī)的數(shù)字溫度計(jì)的設(shè)計(jì) 畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)基于單片機(jī)的數(shù)字語音溫度計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論