版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 綜合課程設(shè)計(jì)論文</b></p><p> 實(shí)訓(xùn)課題: 數(shù)字溫度測(cè)量系統(tǒng) 專業(yè)班級(jí): 應(yīng)用電子技術(shù)(1)班</p><p><b> 摘要</b></p><p> 隨著社會(huì)的進(jìn)步和工業(yè)技術(shù)的發(fā)展,人們?cè)絹?lái)越重視溫度因素,許多產(chǎn)品對(duì)溫度范圍要求嚴(yán)格,而目前市場(chǎng)上普遍存在
2、的溫度檢測(cè)儀器大都是單點(diǎn)測(cè)量,同時(shí)有溫度信息傳遞不及時(shí)、精度不夠的缺點(diǎn),不利于工業(yè)控制者根據(jù)溫度變化及時(shí)做出決定。在這樣的形式下,開(kāi)發(fā)一種能夠同時(shí)測(cè)量多點(diǎn),并且實(shí)時(shí)性高、精度高,能夠綜合處理多點(diǎn)溫度信息的測(cè)量系統(tǒng)就很有必要。</p><p> 本課題以AT89C51單片機(jī)系統(tǒng)為核心,能對(duì)多點(diǎn)的溫度進(jìn)行實(shí)時(shí)巡檢。DS18B20是一種可組網(wǎng)的高精度數(shù)字式溫度傳感器,由于其具有單總線的獨(dú)特優(yōu)點(diǎn),可以使用戶輕松地組建起
3、傳感器網(wǎng)絡(luò),并可使多點(diǎn)溫度測(cè)量電路變得簡(jiǎn)單、可靠。本文結(jié)合實(shí)際使用經(jīng)驗(yàn),介紹了DS18B20數(shù)字溫度傳感器在單片機(jī)下的硬件連接及軟件編程,并給出了軟件流程圖。</p><p> 關(guān)鍵詞:溫度測(cè)量;單總線;數(shù)字溫度傳感器;單片機(jī)</p><p><b> 目錄</b></p><p><b> 引言</b></p
4、><p> 數(shù)字溫度計(jì)的結(jié)構(gòu)及功能介紹</p><p> 單片機(jī) STC80C52RC</p><p> DS18B20數(shù)字溫度傳感器</p><p><b> 顯示器的選擇</b></p><p><b> 設(shè)計(jì)原理及原理圖</b></p><p&
5、gt;<b> 設(shè)計(jì)程序流程圖</b></p><p><b> 總結(jié)</b></p><p><b> 附錄</b></p><p><b> 程序代碼</b></p><p><b> 仿真</b></p>
6、<p><b> 一、引言</b></p><p> 本系統(tǒng)利用DS18B20進(jìn)行測(cè)溫,基于單片機(jī)AT89S52進(jìn)行溫度控制,具有硬件電路簡(jiǎn)單,控溫精度高、功能強(qiáng),體積小,簡(jiǎn)單靈活等優(yōu)點(diǎn),可以應(yīng)用于控制溫度在-55℃到+125℃之間的各種場(chǎng)合,可以實(shí)現(xiàn)溫度的實(shí)時(shí)采集、顯示功能 。</p><p> 溫度是一種最基本的環(huán)境參數(shù)之一,日常生活和工農(nóng)業(yè)生產(chǎn)
7、中經(jīng)常要檢測(cè)溫度。傳統(tǒng)的方式是采用熱電偶或熱電阻,但是由于模擬溫度傳感器輸出為模擬信號(hào),必須經(jīng)過(guò)A/D轉(zhuǎn)換環(huán)節(jié)獲得數(shù)字信號(hào)后才能與單片機(jī)等微處理器接口,使得硬件電路結(jié)果復(fù)雜,制作成本較高。美國(guó)DALLAS公司生產(chǎn)的DS18B20為代表的新型單總線數(shù)字式溫度傳感器以其突出優(yōu)點(diǎn)廣泛使用于倉(cāng)庫(kù)管理、工農(nóng)業(yè)生產(chǎn)制造、氣象觀測(cè)、科學(xué)研究以及日常生活中。</p><p> 本文提出用DALLAS公司生產(chǎn)的DS18B20數(shù)字
8、溫度傳感器和89S52單片機(jī)構(gòu)成的多路測(cè)溫系統(tǒng),采用單總線的方式(一根數(shù)據(jù)線,在一個(gè)I/O口上),可以在單總線上掛接多個(gè)18B20,在單片機(jī)控制下巡回檢測(cè)多點(diǎn)溫度,并可以設(shè)置高、低溫度超限報(bào)警等功能。</p><p><b> 二、結(jié)構(gòu)及功能介紹</b></p><p> 1、單片機(jī) STC80C52RC</p><p> a、該系統(tǒng)采用
9、MCS-51系列單片機(jī)AT89C51作為控制核心,該系統(tǒng)可以完成運(yùn)算控制、信號(hào)識(shí)別以及顯示功能的實(shí)現(xiàn)。由于用了單片機(jī),使其技術(shù)比較成熟,應(yīng)用起來(lái)方便、簡(jiǎn)單并且單片機(jī)周圍的輔助電路也比較少,便于控制和實(shí)現(xiàn)。整個(gè)系統(tǒng)具有極其靈活的可編程性,能方便地對(duì)系統(tǒng)進(jìn)行功能的擴(kuò)張和更改。MCS-51單片機(jī)特點(diǎn)如下:</p><p> b、單片機(jī)主機(jī)系統(tǒng)電路</p><p> AT89C51單片機(jī)是屬于
10、51系列單片機(jī)里的。它的內(nèi)部自帶2K字節(jié)可編程FLASH存儲(chǔ)器的低電壓、高性能COMS 8位微處理器。AT89C51單片機(jī)還與Intel MCS-51系列單片機(jī)的輸出管腳和指令相互兼容。由于AT89C51將多功能8位CPU和閃速存儲(chǔ)器結(jié)合在單個(gè)的芯片里,所以,AT89C51構(gòu)成的單片機(jī)系統(tǒng)是所有系統(tǒng)里結(jié)構(gòu)最簡(jiǎn)便,價(jià)格最便宜,使用效率最高的控制系統(tǒng),它還節(jié)省了外部的RAM與ROM和接口器件,削減了硬件方便的開(kāi)銷。節(jié)省了制造成本,提高了系統(tǒng)
11、的性價(jià)比。</p><p><b> c.主要芯片的介紹</b></p><p> 本課題采用單片機(jī)AT89C51控制的數(shù)字溫度測(cè)量與顯示系統(tǒng),其功能的實(shí)現(xiàn)主要通過(guò)軟件編程來(lái)完成,采用單片機(jī)AT89C51,它是低功耗、高性能的CMOS型8位單片機(jī)。片內(nèi)帶有4KB的Flash存儲(chǔ)器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。且AT89C51的使用壽命很長(zhǎng),數(shù)據(jù)保留時(shí)間也較長(zhǎng)
12、,可以達(dá)到十年的時(shí)間。就是因?yàn)檫@一些類的特性,與優(yōu)點(diǎn)。所以本次設(shè)計(jì)我才會(huì)選擇使用這一類的單片機(jī)來(lái)作為我實(shí)現(xiàn)此系統(tǒng)的工具。</p><p><b> 單片機(jī)主機(jī)系統(tǒng)圖</b></p><p> 根據(jù)設(shè)計(jì)的要求,要利用溫度傳感器實(shí)時(shí)溫度。當(dāng)溫度高于設(shè)定的溫度時(shí)(60℃),當(dāng)溫度高于設(shè)置報(bào)警的上限值時(shí)風(fēng)扇轉(zhuǎn)同時(shí)紅色led亮,當(dāng)?shù)陀跁r(shí)繼電器以留出接口。同時(shí)要求能設(shè)定溫度。
13、畢業(yè)設(shè)計(jì)的主要任務(wù)是能對(duì)溫度進(jìn)行自動(dòng)的檢測(cè)和控制。設(shè)計(jì)中采用單片機(jī)來(lái)控制溫度,因此要有溫度的顯示電路,溫控電路,報(bào)警電路等幾個(gè)部分。</p><p> 要實(shí)現(xiàn)系統(tǒng)的設(shè)計(jì)要用到的知識(shí)點(diǎn)有單片機(jī)的原理及其應(yīng)用,溫度傳感器的原理和應(yīng)用,及顯示電路的設(shè)計(jì)等。</p><p> 2、 DS18B20數(shù)字溫度傳感器</p><p> 2.1 DS18B20 簡(jiǎn)介</
14、p><p> 新的“一線器件”DS18B20體積更小,適用電壓更寬、更經(jīng)濟(jì),做為一線總線數(shù)字化溫度床感器,支持“一線總線”接口,測(cè)量溫度范圍為-55℃~+125℃,在-10℃~+85℃范圍內(nèi),精度為±0.5℃。獨(dú)特的電源和信號(hào)復(fù)合在一起,僅適用一條口線,每個(gè)芯片唯一編碼,支持聯(lián)網(wǎng)尋址,簡(jiǎn)單的網(wǎng)絡(luò)化的溫度感知,零功能等待。</p><p> 2.2 DS18B20特性</p
15、><p> DS18B20可以由程序設(shè)定9~12位的分辨率,精度為±0.5℃。</p><p> ①獨(dú)特的單線接口僅需一個(gè)端口引腳進(jìn)行通訊</p><p> ?、诤?jiǎn)單的多點(diǎn)分布應(yīng)用</p><p><b> ?、蹮o(wú)需外部器件</b></p><p><b> ?、芸赏ㄟ^(guò)數(shù)據(jù)線供
16、電</b></p><p><b> ?、萘愦龣C(jī)功耗</b></p><p> ?、逌y(cè)溫范圍-55~+125℃,以0.5℃遞增華氏器件-67~+257℉,以0.9℉遞增</p><p> ⑦溫度以9位數(shù)字量讀出</p><p> ?、鄿囟葦?shù)字量轉(zhuǎn)換時(shí)間200ms(典型值)</p><p&
17、gt; ?、嵊脩艨啥x的非易失性溫度報(bào)警設(shè)置</p><p> ⑩報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件</p><p> 應(yīng)用包括溫度控制、工業(yè)系統(tǒng)、消費(fèi)品、溫度計(jì)或任何感測(cè)系統(tǒng)。</p><p><b> 2.3 說(shuō)明:</b></p><p> DS18B20有三個(gè)主要數(shù)字部件:&
18、lt;/p><p> 1)64位激光ROM</p><p><b> 2)溫度傳感器</b></p><p> 3)非易失性溫度報(bào)警觸發(fā)器TH和TL</p><p> 4)器件用如下方式從單線通訊線上汲取能量,在信號(hào)線處于高電平期間把能量存儲(chǔ)在內(nèi)部電容里,在信號(hào)線處于低電平期間消耗電容上的電能工作,知道高電平到來(lái)再給
19、寄生電源(電容)充電。DS18B20也可用外部5V電源供電。</p><p> DS18B20依靠一個(gè)單線端口通訊。在單線端口條件下,必須先建立ROM操作協(xié)議,才能進(jìn)行存儲(chǔ)器和控制操作。因此,控制器必須首先提供下面5個(gè)ROM操作命令之一:1)讀ROM,2)匹配ROM,3)搜索ROM,4)跳過(guò)ROM,5)報(bào)警搜索。這些命令對(duì)每個(gè)器件的激光ROM部分進(jìn)行操作,在單總線上掛有多個(gè)器件時(shí),可以區(qū)分出單個(gè)器件,同時(shí)可以向
20、總線控制器指明有多少器件或是什么型號(hào)的器件。成功執(zhí)行完一條ROM操作序列后,即可進(jìn)行存儲(chǔ)器可控制操作,控制器可以提供6條存儲(chǔ)器和控制操作指令中的任一條。一條控制操作命令指示DS18B20完成一次溫度測(cè)量,測(cè)量結(jié)果放在內(nèi)部暫存器中暫存,用一條讀暫存器內(nèi)容的存儲(chǔ)器操作命令可以把暫存器中數(shù)據(jù)讀出。</p><p> 2.4 DS18B20測(cè)溫原理:</p><p> 用一個(gè)高溫度系數(shù)的振蕩
21、器確定一個(gè)門周期,內(nèi)部計(jì)數(shù)器在這個(gè)門周期內(nèi)對(duì)一個(gè)低溫度系數(shù)的振蕩器的脈沖進(jìn)行計(jì)數(shù)來(lái)的到溫度值。計(jì)數(shù)器被預(yù)置到對(duì)應(yīng)于-55的一個(gè)值。如果計(jì)數(shù)器在門周期結(jié)束前到達(dá)0,則溫度寄存器(同樣被預(yù)置到-55℃)的值增加,表明所測(cè)溫度大于-55℃。同時(shí),計(jì)數(shù)器被復(fù)位到一個(gè)值,這個(gè)值由斜坡式累加器電路確定,斜坡式累加器電路用來(lái)補(bǔ)償感溫振蕩器的拋物線特性。然后計(jì)數(shù)器又開(kāi)始計(jì)數(shù)知道0,如果門周期仍未結(jié)束,將重復(fù)這一過(guò)程。斜坡式累加器用來(lái)補(bǔ)償感溫振蕩器的非線
22、性,以期測(cè)溫時(shí)獲得比較高的分辨力,這是通過(guò)改變計(jì)數(shù)器對(duì)溫度每增加一度所需計(jì)數(shù)的值來(lái)實(shí)現(xiàn)的。因此,要想獲得所需的分辨力,必須同時(shí)知道在給定溫度下計(jì)數(shù)器的值和每一度的計(jì)數(shù)值。DS18B20內(nèi)部對(duì)此計(jì)算的結(jié)果可提供0.5℃的分辨力。溫度以16bit帶符號(hào)位擴(kuò)展的二進(jìn)制補(bǔ)碼形式讀出,表一給出了溫度值和輸出數(shù)據(jù)的關(guān)系。數(shù)據(jù)通過(guò)單線接口以串行方式傳輸。DS18B20測(cè)溫范圍-55℃~+125℃,以0.5℃遞增。如用于華氏溫度,必須要用一個(gè)轉(zhuǎn)換因子查
23、找表。</p><p><b> 表一</b></p><p> 注意DS18B20內(nèi)溫度表示值為1/2℃LSB,如下所示9bit格式:</p><p><b> 表二</b></p><p> 最高有效(符號(hào))位被復(fù)制充滿存儲(chǔ)器中兩字節(jié)溫度存儲(chǔ)器的高M(jìn)SB位,由這種“符號(hào)位擴(kuò)展”產(chǎn)生出了表
24、一的16bit溫度讀數(shù)。</p><p> 2.5 DS18B20測(cè)溫原理圖:</p><p> 圖二 DS18B20 測(cè)溫原理框圖</p><p> 可用下述方法獲得更高的分辨力。首先,讀取溫度值,將0.5℃位(LSB)從讀取的值中截去,這個(gè)值叫做TEMP_READ。然后讀取計(jì)數(shù)器中剩余的值,這個(gè)值是門周期結(jié)束后保留下來(lái)的值(COUNT_REMAIN)。最
25、后,我們用到在這個(gè)溫度下每度的計(jì)數(shù)值(COUNT_PER_C)。用戶可以用下面的公式計(jì)算實(shí)際溫度值:</p><p> 2.6 64位激光刻ROM</p><p> 每只18B20都有一個(gè)唯一的長(zhǎng)達(dá)64位的編碼。最前面8位是單線系列編碼。后面48為是一個(gè)唯一的序列號(hào)。最后8為是以上56位的CRC碼。</p><p><b> 表三</b>
26、;</p><p> 2.7 CRC發(fā)生器</p><p> DS18B20中有8位CRC存儲(chǔ)在64位ROM的最高有效字節(jié)中??偩€控制器可以用64位ROM中的前56位計(jì)算出一個(gè)CRC值,再用這個(gè)和存儲(chǔ)在DS18B20中的值進(jìn)行比較,以確定ROM數(shù)據(jù)是否被總線控制器接受無(wú)誤。CRC計(jì)算等式如下:8+5+4+。單總線CRC可以有一個(gè)由移位寄存器和XOR門構(gòu)成的多項(xiàng)式發(fā)生器來(lái)產(chǎn)生,如下圖
27、所示:</p><p> 圖三 單總線CRC的結(jié)構(gòu)原理圖</p><p> 2.8 單總線系統(tǒng)</p><p> 單總線系統(tǒng)包括一個(gè)總線控制器和一個(gè)或多個(gè)從機(jī)。DS18B20充當(dāng)從機(jī),當(dāng)只有一只從機(jī)掛接在總線上時(shí),系統(tǒng)被稱為“單點(diǎn)”系統(tǒng);如果由多只從機(jī)掛接在總線上,系統(tǒng)被稱為“多點(diǎn)”。所有的數(shù)據(jù)和指令的傳遞都是從最低有效位開(kāi)始通過(guò)單總線進(jìn)行傳送的。</
28、p><p> 2.9 DS18B20指令控制</p><p> 執(zhí)行序列通過(guò)單線總線端口訪問(wèn)DS18B20的協(xié)議如下:</p><p><b> 步驟一:初始化;</b></p><p> 步驟二:ROM操作指令;</p><p> 步驟三:DS18B20功能指令。</p>&
29、lt;p> 每一次DS18B20的操作都必須滿足以上步驟,若是缺少步驟或是順序混亂,器件將不會(huì)返回值。例如這樣的順序:發(fā)起ROM搜索指令[F0H]和報(bào)警搜索指令[ECH]之后,總線控制器必須返回步驟一。</p><p> 2.10 ROM時(shí)序指令控制</p><p> 通過(guò)單總線的所有執(zhí)行操作處理都從一個(gè)初始化序列開(kāi)始。初始化序列包括一個(gè)由總線控制器發(fā)出的復(fù)位脈沖和其后由從機(jī)
30、發(fā)出的存在脈沖。存在脈沖讓總線控制器知道DS18B20在總線上且已準(zhǔn)備好操作。</p><p> 一旦總線控制器探測(cè)到一個(gè)存在脈沖,它就發(fā)出一條ROM指令。如果總線上掛有多只DS18B20,這些指令將基于器件獨(dú)有的64位ROM片序列碼使得總線控制器選出特定要進(jìn)行操作的器件。這些指令同樣也可以使總線控制器識(shí)別有多少只,什么型號(hào)的器件掛在總線上,同樣,它們也可以識(shí)別哪些器件已經(jīng)符合報(bào)警條件。</p>
31、<p> ?、臩earch ROM[F0H](搜索ROM指令)</p><p> 當(dāng)系統(tǒng)上電初始化的時(shí)候,總線控制器必須通過(guò)識(shí)別總線上所有ROM片序列碼去得到從機(jī)的數(shù)目和型號(hào)??偩€控制器通過(guò)搜索ROM指令多次循環(huán)搜索ROM編碼,以確認(rèn)所有從機(jī)器件。如果總線上只有一只從機(jī),那么可以用較為簡(jiǎn)單的讀取ROM 代替搜索ROM指令。在每次搜索ROM指令之后,總線控制器必須返回步驟一。</p>&
32、lt;p> ?、芌EAD ROM[33H](讀取ROM指令)</p><p> 只有在總線上存在單只DS18B20的時(shí)候才能使用這條命令。該命令允許總線控制器在不使用搜索ROM的情況下讀取從機(jī)的64位片序列碼。如果總線上有不止一只從機(jī),當(dāng)所有從機(jī)試圖同時(shí)傳送信號(hào)時(shí)就會(huì)發(fā)生數(shù)據(jù)沖突。</p><p> ?、荕ATHCH ROM[55H](匹配ROM指令)</p><
33、;p> 匹配ROM指令,后跟64位ROM編碼序列,讓總線控制器在多點(diǎn)總線上定位一只特定的DS18B20。只有和64為ROM片序列碼完全匹配的DS18B20才能響應(yīng)隨后的存儲(chǔ)操作指令;所有和64位ROM片序列碼不匹配的從機(jī)都將等待復(fù)位脈沖。</p><p> ⑷SKIP ROM[CCH](跳過(guò)ROM指令)</p><p> 這條指令允許總線控制器不用提供64位ROM編碼就使用功能
34、指令。例如,總線控制器可以先發(fā)出一條跳過(guò)ROM指令,然后發(fā)出溫度轉(zhuǎn)換指令[44H],從而完成溫度轉(zhuǎn)換操作。注意,當(dāng)只有一只從機(jī)在總線上時(shí),無(wú)論如何,跳過(guò)ROM指令之后只能跟著發(fā)出一條讀取暫存器指令[BEH]。在單點(diǎn)總線情況下使用該命令,器件無(wú)需發(fā)回64位ROM編碼,從而節(jié)省了時(shí)間。如果總線上有不止一只從機(jī),若發(fā)出跳過(guò)ROM指令,由于多只從機(jī)同時(shí)傳送信號(hào),總線上就會(huì)發(fā)生數(shù)據(jù)沖突。</p><p> 2.11DS
35、18B20功能指令控制</p><p> 在總線空盒子錢發(fā)給欲連接的DS18B20一條ROM命令后,跟著可以發(fā)送一條DS18B20功能指令。這些命令允許總線控制器讀寫DS18B20的暫存器,發(fā)起溫度轉(zhuǎn)換和識(shí)別電源模式。DS18B20的功能指令如下所示:</p><p> ?、臗ONVERT T [44H](溫度轉(zhuǎn)換指令)</p><p> 這條命令用以啟動(dòng)一次溫
36、度轉(zhuǎn)換。溫度轉(zhuǎn)換指令被執(zhí)行,產(chǎn)生的溫度轉(zhuǎn)換結(jié)果數(shù)據(jù)以2個(gè)字節(jié)的形式被存儲(chǔ)在高速暫存器中,而后DS18B20保持等待狀態(tài)。如果寄生電源模式下發(fā)出該命令后,在溫度轉(zhuǎn)換期間,必須在10US(最多)內(nèi)給單總線上一個(gè)強(qiáng)上拉。如果DS18B20以外部電源供電,總線控制器在發(fā)出該命令后跟著發(fā)出讀時(shí)序,DS18B20如處于轉(zhuǎn)換中,將在總線上返回0,若溫度轉(zhuǎn)換完成,則返回1。寄生電源模式下,總線被強(qiáng)上拉拉高前這樣的通訊技術(shù)不會(huì)被使用。</p>
37、<p> ?、芖RITE SCRATCHPAD [4EH](寫暫存器指令)</p><p> 這條命令向DS18B20的暫存器寫入數(shù)據(jù),開(kāi)始位置在TH寄存器(暫存器的第二個(gè)字節(jié)),接下來(lái)寫入TL寄存器(暫存器的第三個(gè)字節(jié)),最后寫入配置寄存器(暫存器的第四個(gè)字節(jié))。數(shù)據(jù)以最低有效位開(kāi)始傳送。上述三個(gè)字節(jié)的寫入必須發(fā)生在總線控制器發(fā)出復(fù)位命令前,否則會(huì)終止寫入。</p><p&g
38、t; ?、荝EAD SCRATCHPAD [BEH] (讀暫存器指令)</p><p> 這條命令讀取暫存器的內(nèi)容。讀取將從字節(jié)0開(kāi)始,一直進(jìn)行下去,直到第九個(gè)字節(jié)(字節(jié)8,CRC)讀完,如果不想讀完所有字節(jié),控制器可以在任何時(shí)間發(fā)出復(fù)位命令來(lái)中止讀取。</p><p><b> 備注:</b></p><p> ?、賹?duì)于寄生電源模式下的D
39、S18B20,在溫度轉(zhuǎn)換和拷貝數(shù)據(jù)到EEPROM其間,必須給但總線一個(gè)強(qiáng)上拉,總線上載這段時(shí)間內(nèi)不能有其他活動(dòng)。</p><p> ②總線控制器在任何時(shí)刻都可以通過(guò)發(fā)出復(fù)位信號(hào)中止數(shù)據(jù)傳輸。</p><p> ?、跿H、TL和配置寄存器這三個(gè)字節(jié)的寫入必須在復(fù)位信號(hào)發(fā)起之前。</p><p> 2.12 18B20時(shí)序詳解</p><p>
40、;<b> 初始化時(shí)序</b></p><p> 圖四 初始化時(shí)序示意圖</p><p><b> 讀/寫時(shí)序</b></p><p> DS18B20的數(shù)據(jù)讀寫是通過(guò)時(shí)序處理來(lái)確認(rèn)信息交換的。</p><p> ⑴寫時(shí)序:有兩種寫時(shí)序:寫1時(shí)序和寫0時(shí)序。總線控制器通過(guò)寫1時(shí)序?qū)戇壿?到
41、DS18B20,寫0時(shí)序?qū)戇壿?到DS18B20。所有寫時(shí)序必須最少持續(xù)60us,包括兩個(gè)寫中期之間至少1us的回復(fù)時(shí)間。當(dāng)總線控制器把數(shù)據(jù)線從邏輯高電平拉到低電平的時(shí)候,寫時(shí)序開(kāi)始。(見(jiàn)圖五)</p><p><b> 圖五 讀/寫時(shí)序圖</b></p><p> 總線控制器要產(chǎn)生一個(gè)寫時(shí)序,必須把數(shù)據(jù)線拉到低電平后釋放,在寫時(shí)序開(kāi)始后的15us釋放中線。當(dāng)總線
42、被釋放的時(shí)候,5K的上拉電阻將拉高總線。總控制器要生成一個(gè)寫0時(shí)序,必須把數(shù)據(jù)線拉到低電平并持續(xù)保持(至少60us)。</p><p> 總線控制器初始化寫時(shí)序后,DS18B20在一個(gè)15us到60us的窗口內(nèi)對(duì)I/O線采樣。如果線上是高電平,就是寫1。如果線上是低電平,就是寫0。</p><p><b> ?、谱x時(shí)序</b></p><p>
43、; 總線控制器發(fā)起讀時(shí)序時(shí),DS18B20僅被用來(lái)傳輸數(shù)據(jù)給控制器。因此,總線控制器在發(fā)出讀暫存器指令[BEH]后必須立刻開(kāi)始讀時(shí)序,DS18B20可以提供請(qǐng)求信息。除此之外,總線控制器在發(fā)出發(fā)送溫度轉(zhuǎn)換指令[44H]或召回EEPROM指令[B8H]之后讀時(shí)序。</p><p> 所有讀時(shí)序必須最少60us,包括兩個(gè)度周期間至少1us的恢復(fù)時(shí)間。當(dāng)總線控制器把數(shù)據(jù)線從高電平拉到低電平時(shí),讀時(shí)序開(kāi)始,數(shù)據(jù)線必須
44、至少保持1us,然后總線被釋放。在總線控制器發(fā)出讀時(shí)序后,DS18B20通過(guò)拉高或拉低總線來(lái)傳輸1或0。當(dāng)傳輸邏輯0結(jié)束后,總線將被釋放,通過(guò)上拉電阻回到上升沿狀態(tài)。從DS18B20輸出的數(shù)據(jù)在讀時(shí)序的下降沿出現(xiàn)后15us內(nèi)有效。因此,總線控制器在讀時(shí)序開(kāi)始后必須停止把I/O腳驅(qū)動(dòng)為低電平15us,以讀取I/O腳狀態(tài)。</p><p><b> ⑶極限使用條件</b></p>
45、<p> 各引腳對(duì)地電壓:-0.5V到+0.6V</p><p> 工作溫度: -55℃到+125℃</p><p> 存儲(chǔ)溫度: -55℃到+125℃</p><p> 焊接溫度: 260℃ 10 秒</p><p><b> ?、戎绷麟娞匦?lt;/b></p>
46、;<p><b> 表四</b></p><p><b> 備注:</b></p><p> ?、偎械碾妷簠⒖键c(diǎn)都是接地點(diǎn)。</p><p> ?、谏侠妷海杭僭O(shè)上拉器件是理想的,因此上拉的高電平應(yīng)該與VPU相等。為了達(dá)到DS18B20的VIH規(guī)格,實(shí)際晶體管上拉供電必須包括電壓跌落極限;因此,VPU_
47、ACTUAL=VPU_IDEAL+VTRANSISTOR.</p><p> ?、圻壿?電壓在吸收電流為1mA時(shí)得到。</p><p> ?、茉诩纳娫茨J降蛪籂顟B(tài)選,為保證出線一個(gè)脈沖,VLMAX在VCC低至0.5V時(shí)得到。</p><p> ?、葸壿?電壓在源電流為1mA時(shí)得到</p><p> ?、薮龣C(jī)電流最大定義為到70℃,125℃時(shí)
48、典型待機(jī)電流為3uA。</p><p> ?、邽榱藢DDS減到最少,DQ的范圍如下:GND≤DQ≤GND+0.3V or VDD-0.3V≤DQ≤VDD.</p><p> ?、鄤?dòng)態(tài)電流涉及溫度轉(zhuǎn)換和寫EEPROM存儲(chǔ)器。</p><p> ?、酓Q數(shù)據(jù)線為高狀態(tài)。</p><p> 誤差數(shù)據(jù)在125℃,VDD=5.5V條件下測(cè)試1000
49、小時(shí)得到。</p><p><b> 3、顯示器的選擇</b></p><p> ?。ㄒ唬?LCD1602顯示器</p><p> 工業(yè)字符型液晶,能夠同時(shí)顯示16x02即32個(gè)字符。雖然LCD顯示器的價(jià)格比數(shù)碼管要貴。但是它有一個(gè)非常本質(zhì)的優(yōu)點(diǎn)就是它的顯示效果好,所以采用LCD 作為顯示器。</p><p><
50、;b> ?。ǘ㎜CD引腳圖</b></p><p> 1602有16個(gè)引腳:</p><p> 1602顯示質(zhì)量高,功耗小。</p><p> 三、 設(shè)計(jì)硬件原理及原理圖</p><p> 圖十 設(shè)計(jì)硬件原理圖</p><p> 本系統(tǒng)中通過(guò)溫度傳感器DS18B20的數(shù)據(jù)線DQ與主控芯片5
51、1單片機(jī)的P3.3相連接,DS18B20將采集到的數(shù)據(jù)送給單片機(jī),經(jīng)過(guò)單片機(jī)出來(lái)后,顯示在8位數(shù)據(jù)線與單片機(jī)P0口的液晶LCD上。蜂鳴器經(jīng)過(guò)三極管的驅(qū)動(dòng)后接到單片機(jī)的P3.7,來(lái)實(shí)現(xiàn)當(dāng)實(shí)時(shí)溫度大于下限或高于上限的報(bào)警。4個(gè)按鍵K1~K4接到單片機(jī)的P1.0~P1.3,來(lái)實(shí)現(xiàn)對(duì)上限值和下限值的查看與設(shè)定。液晶LCD的RS、RW、E分別接到單片機(jī)的P2.0~P2.2來(lái)實(shí)現(xiàn)單片機(jī)控制液晶的讀寫命令和數(shù)據(jù)的控制。</p><
52、p><b> 四、設(shè)計(jì)程序流程圖</b></p><p> LCD顯示子程序開(kāi)始先讓LCD初始化,接著光標(biāo)定位,顯示字符,最后放回。</p><p><b> LCD流程圖</b></p><p> 主程序首先設(shè)置堆棧為5FH,設(shè)置定時(shí)器工作方式T1為方式2。接著開(kāi)始啟動(dòng)定時(shí)器,調(diào)用LCD初始化子程序,調(diào)用D
53、S18B20復(fù)位子程序。接著調(diào)用上下限寫入暫存器子程序,把溫度報(bào)警值拷貝回暫存器,調(diào)用讀取溫度子程序,調(diào)用處理顯示子程序,調(diào)用實(shí)際溫度值與上下限溫度值比較子程序,調(diào)用按鍵掃描子程序后返回到調(diào)用讀取溫度子程序。</p><p><b> 主程序框圖</b></p><p> 按鍵掃描子程序首先判斷按鍵K1是否按下,如果按下就調(diào)用蜂鳴子程序,接著判斷K1是否放開(kāi),直到
54、K1放開(kāi),調(diào)用顯示數(shù)據(jù)子程序,然后去判斷K3是否按下,直到K3按下,調(diào)用蜂鳴子程序,最后放回;如果K1沒(méi)有按下去判斷K2是否按下,如果沒(méi)按下就跳到返回,如果有按下就調(diào)用鳴響子程序,然后去判斷K3是否放開(kāi),若放開(kāi)接著調(diào)用顯示字符子程序,調(diào)用設(shè)定報(bào)警TH、TL子程序,調(diào)用報(bào)警上下限寫入暫存器子程序,調(diào)用報(bào)警值拷貝EEROM子程序。</p><p><b> 按鍵掃描子程序框圖</b></
55、p><p><b> 五、總結(jié)</b></p><p> 該系統(tǒng)利用DS18B20進(jìn)行測(cè)溫,基于單片機(jī)AT89S52進(jìn)行溫度控制,具有硬件電路簡(jiǎn)單,控溫精度高、功能強(qiáng)、體積小,簡(jiǎn)單靈活等優(yōu)點(diǎn),可以應(yīng)用于控制溫度在-55℃到+125℃之間的各種場(chǎng)合,可以實(shí)現(xiàn)溫度的實(shí)時(shí)采集、顯示功能與控制功能,是一種比較理想的只能化控制系統(tǒng)。由此構(gòu)成的單片機(jī)控制的但總線溫度多路采集系統(tǒng)比
56、傳統(tǒng)的測(cè)溫系統(tǒng)可靠性高,易于構(gòu)成網(wǎng)絡(luò)控制,使用與各種溫度檢測(cè)與控制系統(tǒng)。該單總線技術(shù)可以為其他過(guò)程參數(shù)測(cè)控系統(tǒng)提供技術(shù)支持,具有實(shí)用價(jià)值。</p><p> AT89C51的時(shí)鐘為12M,I/O口可達(dá)32個(gè),較高的時(shí)鐘頻率和豐富的I/O,都為實(shí)現(xiàn)電路功能提供了非常有利的條件。同時(shí)也AT89S51內(nèi)含4KB FLASH ROM,開(kāi)發(fā)環(huán)境友好,易用,方便,加上Proteus仿真大大加快本系統(tǒng)設(shè)計(jì)開(kāi)發(fā)。在此次設(shè)計(jì)中學(xué)
57、會(huì)了對(duì)Proteus的基本使用,對(duì)里面一些基本元件的英文,如電阻RES、電容CAP、晶振CRYSTAL等,學(xué)會(huì)了連線和運(yùn)行。</p><p> 在設(shè)計(jì)過(guò)程中也遇到一些問(wèn)題,由于LCD是現(xiàn)實(shí)的字符型數(shù)據(jù),數(shù)字不能直接送去顯示,所有對(duì)于數(shù)字的顯示首先要轉(zhuǎn)換為字符格式,方法為:數(shù)字+‘0’;對(duì)于溫度傳感器的小數(shù)處理也遇到一些問(wèn)題,兩個(gè)選的是12位,精度為0.0625,DS18B20的溫度寄存器里低八位的低四位為小數(shù)部
58、分,小數(shù)的值為0.0625*低八位的低四位,但是由于單片機(jī)的數(shù)據(jù)處理能力較差,不能處理小數(shù)的乘法運(yùn)算,用上方法就顯示錯(cuò)誤,后來(lái)想到可以把小數(shù)先變成整數(shù)處理,令低八位的低四位為t,小數(shù)后的第一位=625*t/1000,然后將這個(gè)數(shù)字在小數(shù)點(diǎn)后顯示即可。</p><p> 其實(shí)該本設(shè)計(jì)還有很多的不足,本實(shí)驗(yàn)是用單片機(jī)的多個(gè)I/O口來(lái)驅(qū)動(dòng)多路,DS18B20是一總線結(jié)構(gòu),每一個(gè)DS18B20 在其ROM 中都存有一個(gè)
59、其唯一的48位序列號(hào),在出廠前已寫入片內(nèi)RMO中,主機(jī)在進(jìn)行操作程序前必須逐一接入18B20 用讀ROM(33H)命令將該18B20 的序列號(hào)讀出并登錄.當(dāng)主機(jī)需要對(duì)眾多在線的DS18B20 的某一個(gè)進(jìn)行操作,首先要發(fā)出匹配ROM 命令(55H),緊接著主機(jī)提供64位序列(包括該DS8B20的48位序列號(hào)),之后操作就是針對(duì)該DS18B20的.而所謂跳過(guò)ROM 命令.即為:之后的操作是對(duì)所有DS18B20 的,所以可以在一根總線上掛多個(gè)
60、DS18B20。</p><p><b> 六、 附錄</b></p><p><b> 1、程序代碼</b></p><p> #include<reg52.h></p><p> #include<intrins.h></p><p>
61、 #define KEY P1</p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit lcden=P2^2;//1602使能</p><p> sbit lcdrd=P2^0;//數(shù)據(jù)、命令選擇端</p&
62、gt;<p> sbit lcdrw=P2^1;//讀,寫選擇端</p><p> sbit dq=P3^3;//18B20數(shù)據(jù)線</p><p> sbit key1 = P1^0;</p><p> sbit key2 = P1^1;</p><p> sbit key3 = P1^2;</p>
63、<p> sbit key4 = P1^3;</p><p> sbit beeee = P3^7;</p><p> uint set_t = 23;</p><p> uchar code str1[]="temperature:";</p><p> uchar code str2[]=&qu
64、ot; ";</p><p> uchar data disdata[5];</p><p> uint tvalue;</p><p> uchar tflag;</p><p> void delayms(uint ms)//延時(shí)毫秒</p><p> { uint
65、 i,j;</p><p> for(i=ms;i>0;i--)</p><p> for(j=100;j>0;j--);</p><p><b> }</b></p><p> void key_cut(void)</p><p><b> {</b>
66、</p><p> unsigned int ii;</p><p> if (KEY != 0xff)</p><p><b> {</b></p><p> delayms(10);</p><p> if(key1 == 0)</p><p><b&g
67、t; {</b></p><p><b> set_t ++;</b></p><p><b> }</b></p><p> else if(key2 == 0)</p><p><b> {</b></p><p><b&
68、gt; set_t --;</b></p><p><b> }</b></p><p> else if(key3 == 0)</p><p><b> {</b></p><p><b> }</b></p><p> els
69、e if(key4 == 0)</p><p><b> {</b></p><p><b> }</b></p><p> while(KEY != 0xff);</p><p><b> }</b></p><p><b> }&
70、lt;/b></p><p> void write_com(uchar com)//向1602中寫入命令碼</p><p> { lcden=0;</p><p><b> lcdrd=0;</b></p><p><b> lcdrw=0;</b></p><p
71、><b> P0=com;</b></p><p> delayms(1);</p><p><b> lcden=1;</b></p><p> delayms(1);</p><p><b> lcden=0;</b></p><p>
72、;<b> }</b></p><p> void write_date(uchar date)//向1602中寫入數(shù)據(jù)</p><p> { lcden=0;</p><p><b> lcdrd=1;</b></p><p><b> lcdrw=0;</b>&l
73、t;/p><p><b> P0=date;</b></p><p> delayms(1);</p><p><b> lcden=1;</b></p><p> delayms(1);</p><p><b> lcden=0;</b><
74、/p><p><b> }</b></p><p> void display(uchar *p)//1602顯示</p><p> { while(*p!='\0')</p><p> { write_date(*p);</p><p><b> p++;<
75、/b></p><p> delayms(1);</p><p><b> }</b></p><p><b> }</b></p><p> void lcd_init()//1602初始化</p><p> { write_com(0x38);</p
76、><p> delayms(5);</p><p> write_com(0x01);</p><p> delayms(5);</p><p> write_com(0x0c);</p><p> delayms(5);</p><p> write_com(0x06);</p&
77、gt;<p> delayms(5);</p><p><b> }</b></p><p> void lcd_display()//1602顯示初始化</p><p> {lcd_init();</p><p> write_com(0x80);</p><p> d
78、isplay(str1);</p><p> write_com(0xc0);</p><p> display(str2);</p><p><b> }</b></p><p> void delayus(uint i)//延時(shí)微妙</p><p> {while(i--);<
79、/p><p><b> }</b></p><p> void ds_init()//18B20初始化</p><p><b> {dq=1;</b></p><p> delayus(4);</p><p><b> dq=0;</b></
80、p><p> delayus(480);</p><p><b> dq=1;</b></p><p> delayus(60);</p><p><b> if(dq==0)</b></p><p> delayus(240);</p><p>
81、;<b> }</b></p><p> void ds_write(uchar date1)//向18B20中寫入數(shù)據(jù)</p><p> { uchar i;</p><p> for(i=0;i<8;i++)</p><p><b> { dq=0;</b></p>
82、<p> if((date1&0x01)==1)</p><p><b> dq=1;</b></p><p><b> else</b></p><p><b> dq=0;</b></p><p> delayus(21);</p>
83、<p><b> dq=1;</b></p><p> date1>>=1;</p><p><b> }</b></p><p><b> }</b></p><p> uchar ds_read()//由18B20讀取數(shù)據(jù)</p&g
84、t;<p> { uchar i,temp;</p><p> for(i=0;i<8;i++)</p><p><b> { dq=0;</b></p><p><b> dq=1;</b></p><p><b> temp>>=1;</
85、b></p><p><b> if(dq==1)</b></p><p> temp|=0x80;</p><p> delayus(30);</p><p><b> }</b></p><p> return(temp);</p><
86、p><b> dq=1;</b></p><p><b> }</b></p><p> uint ds_temp()//從18B20中讀取溫度值</p><p> { uchar a,b;</p><p> ds_init();</p><p> ds_w
87、rite(0xcc);</p><p> ds_write(0x44);</p><p> ds_init();</p><p> ds_write(0xcc);</p><p> ds_write(0xbe);</p><p> a=ds_read();</p><p> b=ds
88、_read();</p><p><b> tvalue=b;</b></p><p> tvalue<<=8;</p><p> tvalue=tvalue|a;</p><p> if(tvalue<0x0fff)</p><p><b> tflag=0
89、;</b></p><p><b> else</b></p><p> {tvalue=~tvalue+1;</p><p><b> tflag=1;</b></p><p><b> }</b></p><p> tvalue
90、=tvalue*(0.625);</p><p> return(tvalue);</p><p><b> }</b></p><p> void ds_dis()//把溫度值送入1602中顯示</p><p><b> {</b></p><p> uchar
91、flagdat;</p><p> disdata[0]=tvalue/1000+0x30;</p><p> disdata[1]=tvalue%1000/100+0x30;</p><p> disdata[2]=tvalue%100/10+0x30;</p><p> disdata[3]=tvalue%10+0x30;<
92、/p><p> if(tflag==0)</p><p> flagdat=0x20;</p><p> if(tflag==1)</p><p> flagdat=0x2d;</p><p> if(disdata[0]==0x30)</p><p> {disdata[0]=0x20
93、;</p><p> if(disdata[1]==0x30)</p><p> {disdata[1]=0x20;</p><p><b> }</b></p><p><b> }</b></p><p> write_com(0xc0);</p>
94、<p> write_date(flagdat);</p><p> write_com(0xc1);</p><p> write_date(disdata[0]);</p><p> write_com(0xc2);</p><p> write_date(disdata[1]);</p><p&
95、gt; write_com(0xc3);</p><p> write_date(disdata[2]);</p><p> write_com(0xc4);</p><p> write_date(0x2e);</p><p> write_com(0xc5);</p><p> write_date(d
96、isdata[3]);</p><p><b> }</b></p><p> void T_baojing(void)</p><p><b> {</b></p><p> unsigned char ii = 0xc8;</p><p> write_com(
97、ii);</p><p> write_date((set_t/100)+0x30);</p><p> write_com(ii+1);</p><p> write_date((set_t%100/10)+0x30);</p><p> write_com(ii+2);</p><p> write_da
98、te((set_t%100%10)+0x30);</p><p> if((tvalue/10) >= set_t)</p><p><b> {</b></p><p> beeee = 0;</p><p><b> }</b></p><p><b&
99、gt; else</b></p><p><b> {</b></p><p> beeee = 1;</p><p><b> }</b></p><p><b> }</b></p><p> void main()//主程序
100、</p><p><b> {</b></p><p> beeee = 1;</p><p> lcd_display();//1602顯示初始化</p><p><b> while(1)</b></p><p><b> {</b><
101、;/p><p> ds_temp();//從18B20中讀取溫度</p><p> ds_dis();//1602顯示溫度</p><p> T_baojing();</p><p> key_cut();</p><p><b> }</b></p><p><
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字溫度測(cè)量系統(tǒng)課程設(shè)計(jì)論文
- 溫度測(cè)量與控制課程設(shè)計(jì)
- 溫度測(cè)量與控制課程設(shè)計(jì)
- 溫度測(cè)量課程設(shè)計(jì)
- 數(shù)字電子技術(shù)課程設(shè)計(jì)---溫度測(cè)量與控制設(shè)計(jì)
- 糧庫(kù)溫度測(cè)量顯示系統(tǒng)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--多路數(shù)字溫度測(cè)量系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)---溫度測(cè)量與控制電路
- 溫度控制系統(tǒng)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字溫度控制系統(tǒng)
- 溫度測(cè)量與控制電路課程設(shè)計(jì)
- 課程設(shè)計(jì)---數(shù)字式溫度測(cè)量控制電路的設(shè)計(jì)
- 溫度控制系統(tǒng)課程設(shè)計(jì)--儲(chǔ)液罐溫度控制系統(tǒng)
- 課程設(shè)計(jì)---溫度控制系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)---溫度控制系統(tǒng)設(shè)計(jì)
- 溫度控制系統(tǒng)設(shè)計(jì)課程設(shè)計(jì)
- 溫度測(cè)量?jī)x課程設(shè)計(jì)
- 溫度測(cè)量顯示電路課程設(shè)計(jì)--溫度測(cè)量顯示電路設(shè)計(jì)
- 溫度測(cè)量?jī)x課程設(shè)計(jì)
- 溫度測(cè)量?jī)x課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論