標(biāo)題:
利用DS18B20和單片機(jī)實(shí)現(xiàn)溫度控制報(bào)警系統(tǒng)設(shè)計(jì)論文
[打印本頁(yè)]
作者:
2155656656
時(shí)間:
2018-7-2 10:01
標(biāo)題:
利用DS18B20和單片機(jī)實(shí)現(xiàn)溫度控制報(bào)警系統(tǒng)設(shè)計(jì)論文
利用單片機(jī)及DS18B20實(shí)現(xiàn)溫度報(bào)警器的制作
利用單片機(jī)及DS18B20實(shí)現(xiàn)溫度報(bào)警器的制作 摘要:隨著電子技術(shù)的發(fā)展,家用電器和辦公設(shè)備的智能化、系統(tǒng)化已成為發(fā)展趨勢(shì),而這些高性能幾乎都要通過(guò)單片機(jī)實(shí)現(xiàn)。同時(shí),溫度作為與我們生活息息相關(guān)的一個(gè)環(huán)境參數(shù),對(duì)其的測(cè)量和研究也變得極為重要。故溫度檢測(cè)報(bào)警系統(tǒng)在現(xiàn)代生活、生產(chǎn)中得到了越來(lái)越廣泛的應(yīng)用。
本論文介紹了采用溫度傳感器DS18B20作為溫度采集器、AT89S51單片機(jī)為主控制器,外加顯示模塊以及報(bào)警電路實(shí)現(xiàn)該智能溫度測(cè)量報(bào)警器的設(shè)計(jì)方法、工作原理、電路組成等。DS18B20是美國(guó)DALLAS公司生產(chǎn)的單線數(shù)字溫度傳感器,它具有獨(dú)特的單線總線接口方式,使用起來(lái)比較方便,其精度也相當(dāng)高。由于其以上特點(diǎn),故將其應(yīng)用于溫度檢測(cè)電路能夠使系統(tǒng)更簡(jiǎn)單,更可靠。該溫度報(bào)警系統(tǒng)結(jié)構(gòu)設(shè)計(jì)較為簡(jiǎn)單,但可應(yīng)用于生活、生產(chǎn)以及科研等多個(gè)領(lǐng)域,是一種經(jīng)濟(jì)而實(shí)用的溫度控制系統(tǒng),其優(yōu)點(diǎn)很多,有很大實(shí)用價(jià)值。
關(guān)鍵詞:AT89S51;單片機(jī);DS18B20;溫度控制;報(bào)警
1緒 論
溫度是與人們生活息息相關(guān)的環(huán)境參數(shù),許多情況下都需要進(jìn)行溫度測(cè)量及報(bào)警,溫度測(cè)量報(bào)警系統(tǒng)在現(xiàn)代日常生活、科研、工農(nóng)業(yè)生產(chǎn)中已經(jīng)得到了越來(lái)越廣泛的應(yīng)用。所以對(duì)溫度的測(cè)量報(bào)警方法及設(shè)備的研究也變得極其重要。隨著人們生活水平的不斷提高以及應(yīng)對(duì)各種復(fù)雜測(cè)量環(huán)境的需要,我們對(duì)溫度測(cè)量報(bào)警器的要求也越來(lái)越高,利用單片機(jī)來(lái)實(shí)現(xiàn)這些控制無(wú)疑是人們追求的目標(biāo)之一,它帶給我們的方便是不可否定的。其中溫度檢測(cè)報(bào)警器就是一個(gè)典型的例子。要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施,就需要從單片機(jī)技術(shù)入手,向數(shù)字化,智能化控制方向發(fā)展。
本設(shè)計(jì)所介紹的溫度報(bào)警器,可以設(shè)置上下限報(bào)警溫度,當(dāng)溫度不在設(shè)置范圍內(nèi)時(shí),可以報(bào)警 。與傳統(tǒng)的溫度測(cè)量系統(tǒng)相比,本設(shè)計(jì)中的數(shù)字溫度測(cè)量報(bào)警系統(tǒng)具有很多前者沒有的優(yōu)點(diǎn),如測(cè)溫范圍廣而且準(zhǔn)確,采用LCD數(shù)字顯示,讀數(shù)方便等。
1.1 溫度報(bào)警器的研究意義
隨著電子技術(shù)的發(fā)展,家用電器和辦公設(shè)備的智能化、系統(tǒng)化已成為趨勢(shì),而這些高性能幾乎都要通過(guò)單片機(jī)實(shí)現(xiàn)。同時(shí),溫度作為與我們生活息息相關(guān)的一個(gè)環(huán)境參數(shù),對(duì)其的測(cè)量和研究也變得極為重要。故溫度檢測(cè)報(bào)警系統(tǒng)在現(xiàn)代生活、生產(chǎn)中得到了越來(lái)越廣泛的應(yīng)用。
工業(yè)生產(chǎn)帶動(dòng)了人類社會(huì)的進(jìn)步,同時(shí)也促進(jìn)了各種新的傳感器的發(fā)展。在工業(yè)生產(chǎn)中溫度的準(zhǔn)確測(cè)量是一個(gè)比較困難的事情。從最初的酒精、水銀溫度計(jì)到現(xiàn)在的數(shù)字化、集成化的溫度計(jì)可見傳感器的發(fā)展是飛快的。它的快速發(fā)展必將帶來(lái)新一輪的工業(yè)化革命和社會(huì)發(fā)展的飛躍。
本設(shè)計(jì)所介紹的溫度報(bào)警器可以設(shè)置上下限報(bào)警溫度,當(dāng)溫度不在設(shè)定范圍內(nèi)時(shí)可以報(bào)警 ,主要用于對(duì)測(cè)溫比較準(zhǔn)確的場(chǎng)所,或科研實(shí)驗(yàn)室使用。它具有結(jié)構(gòu)簡(jiǎn)單,不需外接元件,可由用戶設(shè)置溫度報(bào)警界限等特點(diǎn),可廣泛用于食品庫(kù)、冷庫(kù)、糧庫(kù)等需要控制溫度的地方。目前,該類產(chǎn)品已在溫控系統(tǒng)中得到廣泛的應(yīng)用。所以設(shè)計(jì)意義較為深遠(yuǎn)。
1.2 溫度報(bào)警器的現(xiàn)狀及發(fā)展
溫度是一種在生產(chǎn)、科研、生活中需要測(cè)量和控制的重要物理量,是國(guó)際單位制七個(gè)基本量之一。其測(cè)量控制一般采用各式各樣形態(tài)的溫度傳感器。根據(jù)它們?cè)谟嵦?hào)輸出方式上的不同可以分為模擬溫度傳感器和數(shù)字溫度傳感器。單片機(jī)技術(shù)的出現(xiàn)則是為現(xiàn)代工業(yè)測(cè)控領(lǐng)域帶來(lái)了一次新的技術(shù)革命,目前,單片機(jī)以其體積小、重量輕、抗干擾能力強(qiáng)、對(duì)環(huán)境要求不高、可靠性高、性價(jià)比高、開發(fā)較為容易等特點(diǎn),在工業(yè)控制、數(shù)據(jù)采集、智能化儀器儀表、辦公自動(dòng)化等諸多領(lǐng)域得到了極為廣泛的應(yīng)用,并已走入我們的日常生活,現(xiàn)在,隨處都可以看到單片機(jī)的蹤影。目前溫度報(bào)警器的發(fā)展已經(jīng)比較成熟了,它能幫助我們實(shí)現(xiàn)想要的溫度控制,解決身邊的很多問(wèn)題。
1.2.1 智能溫度傳感器
智能溫度傳感器(亦稱數(shù)字溫度傳感器)是在20世紀(jì)90年代中期問(wèn)世的。它是微電子技術(shù)、計(jì)算機(jī)技術(shù)和自動(dòng)測(cè)試技術(shù)(ATE)的結(jié)晶。目前,國(guó)際上已開發(fā)出多種智能溫度傳感器系列產(chǎn)品。智能溫度傳感器內(nèi)部都包含溫度傳感器、A/D轉(zhuǎn)換器、信號(hào)處理器、存儲(chǔ)器(或寄存器)和接口電路。有的產(chǎn)品還帶多路選擇器、中央控制器(CPU)、隨機(jī)存取存儲(chǔ)器(RAM)和只讀存儲(chǔ)器(ROM)。智能溫度傳感器的特點(diǎn)是能輸出溫度數(shù)據(jù)及相關(guān)的溫度控制量,適配各種微控制器(MCU);并且它是在硬件的基礎(chǔ)上通過(guò)軟件來(lái)實(shí)現(xiàn)測(cè)試功能的,其智能化程度也取決于軟件的開發(fā)水平。
1.2.2 傳感器發(fā)展趨勢(shì)
現(xiàn)代信息技術(shù)的三大基礎(chǔ)是信息采集(即傳感器技術(shù))、信息傳輸(通信技術(shù))和信息處理(計(jì)算機(jī)技術(shù))。傳感器屬于信息技術(shù)的前沿尖端產(chǎn)品,尤其是溫度傳感器,它被廣泛用于工農(nóng)業(yè)生產(chǎn)、科學(xué)研究和生活等領(lǐng)域,數(shù)量高居各種傳感器之首。近百年來(lái),溫度傳感器的發(fā)展大致經(jīng)歷了以下三個(gè)階段;(1)傳統(tǒng)的
分立式溫度傳感器(含敏感元件);(2)模擬集成溫度傳感器,控制器;(3)智能溫度傳感器。目前,國(guó)際上新型溫度傳感器正從模擬式向數(shù)字式、由集成化向智能化、網(wǎng)絡(luò)化的方向發(fā)展。
2 硬件設(shè)計(jì)
2.1 總體設(shè)計(jì)方案
本設(shè)計(jì)是一個(gè)基于單片機(jī)的溫度測(cè)量電路,傳統(tǒng)的溫度檢測(cè)系統(tǒng)采用熱敏電阻等溫度敏感元件,熱敏電阻雖然成本低,但是需要后續(xù)信號(hào)處理、A/D轉(zhuǎn)換處理等才能將溫度轉(zhuǎn)換成數(shù)字信號(hào),不但電路復(fù)雜,可靠性和精度也相對(duì)較低,在應(yīng)用中還需要解決引線誤差補(bǔ)償、干擾等問(wèn)題,故傳統(tǒng)方案不可取。進(jìn)而非常容易考慮到使用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,單片機(jī)除了可以測(cè)量電信號(hào)外,還可以用于溫度、濕度等非電信號(hào)的測(cè)量,能獨(dú)立工作的單片機(jī)溫度檢測(cè)、溫度控制系統(tǒng)已經(jīng)廣泛的應(yīng)用于很多領(lǐng)域。單片機(jī)的接口信號(hào)是數(shù)字信號(hào),要用單片機(jī)作為控制器測(cè)量溫度這類非電信號(hào),就要使用溫度傳感器將溫度信息轉(zhuǎn)換為電流或者電壓信號(hào)輸出,如果轉(zhuǎn)化的信號(hào)是模擬信號(hào),還需要進(jìn)行A/D轉(zhuǎn)化,以滿足單片機(jī)接口的需要。進(jìn)一步聯(lián)想到可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,成功地進(jìn)行溫度采集以后,就可以利用單片機(jī)進(jìn)行數(shù)據(jù)處理,然后通過(guò)LCD將溫度顯示出來(lái),就可以滿足設(shè)計(jì)要求。硬件部分設(shè)計(jì)主要包括:測(cè)溫電路、傳感器電路及測(cè)溫電路與單片機(jī)的接口、報(bào)警電路與單片機(jī)的接口等組成的。
本設(shè)計(jì)中,溫度傳感器采用DS18B20,控制器采用AT89S51,顯示電路采用LCD1602液晶顯示器實(shí)現(xiàn),總體方框圖如下:
圖3.1 總體方框圖
在研究出總體設(shè)計(jì)方案后,在這一階段主要的主要工作是查閱各芯片資料,熟悉其功能特性和技術(shù)參數(shù),同時(shí)學(xué)習(xí)PROTEL DXP軟件,用其繪制出硬件原理圖,然后繼續(xù)分析各結(jié)構(gòu),查閱國(guó)內(nèi)外相關(guān)技術(shù)資料,查缺補(bǔ)漏,反復(fù)修改設(shè)
4
計(jì)方案,力求完美;通過(guò)原理圖繪制PCB圖;制作PCB板,購(gòu)買所需元件,完成硬件方面的設(shè)計(jì)。
2.2系統(tǒng)器件的選擇
2.2.1 單片機(jī)的選擇
AT89S系列的單片機(jī)是能用下載線進(jìn)行在線編程的 ISP,使用簡(jiǎn)單的HC244電路,就可以通過(guò)電腦上面的程序來(lái)進(jìn)行對(duì)單片機(jī)的編程,是無(wú)須拆下來(lái)放到笨重的編程器上面寫片子的。AT89C系列則沒有這個(gè)功能并且C系列無(wú)法調(diào)試。 2.2.2溫度傳感器的選擇
本設(shè)計(jì)主要應(yīng)用在機(jī)房、糧倉(cāng)等地,測(cè)量溫度在-20到+75攝氏度之間,ds18b20溫度測(cè)量范圍從-55到+125攝氏度,精度為?0.5 ? C,適合設(shè)計(jì)要求,所以傳感器選擇ds18b20溫度傳感器。
2.2.3顯示模塊的選擇
1601顯示一行的16個(gè)字符,1602顯示兩行的16個(gè)字符,1602海可以顯示漢字,滿足設(shè)計(jì)要求,所以選擇LCD1602顯示模塊。
2.3傳感器模塊DS18B20
溫度傳感器是該系統(tǒng)的關(guān)鍵器件,本設(shè)計(jì)采用的DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一款改進(jìn)型智能溫度傳感器,它集溫度測(cè)量、A/D轉(zhuǎn)換為一體,其溫度測(cè)量范圍從-55OC到+125OC,精度為?0.5? C,可在1秒鐘內(nèi)把溫度變換成數(shù)字。DS18B20是世界上第一片支持“一線總線”接口的溫度傳感器,也就是說(shuō),它具有獨(dú)特的單總線接口,僅需要占用一個(gè)I/O端口即可以完成與微處理器間的通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路,為讀寫以及溫度轉(zhuǎn)換帶來(lái)方便,同時(shí),它可以從數(shù)據(jù)線本身獲得能量,不需要外接電源;它支持3V,5.5V 的電壓范圍, 使系統(tǒng)設(shè)計(jì)更靈活、方便;其工作電源既可在遠(yuǎn)端引入, 也可采用寄生電源方式產(chǎn)生;此外,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,DS18B20能直接讀出被測(cè)量的溫度,并且可以根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9,12位的數(shù)字值讀數(shù)方式,它可在1 秒鐘內(nèi)把溫度變換成數(shù)字;由DS18B20 組建的溫度測(cè)量單元體積小, 便于攜帶和安裝。同時(shí),DS18B20 可以直接與單片機(jī)連接,無(wú)需后接A/D 轉(zhuǎn)換, 控制簡(jiǎn)單;還有,它具有負(fù)壓特性,電源極性接反時(shí),僅僅是不能正常工作,但溫度計(jì)不會(huì)因發(fā)熱而
5
燒毀。Ds18b20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。整體來(lái)說(shuō)DS18B20的性能是新一代產(chǎn)品中最好的,性能價(jià)格比也非常出色,所以我們選擇它來(lái)作為設(shè)計(jì)部件。 2.3.1 注意事項(xiàng):
Ds18b20雖然具有測(cè)溫系統(tǒng)簡(jiǎn)單、測(cè)溫精度高、連接方便、占用口線少等優(yōu)點(diǎn),但在實(shí)際應(yīng)用中葉應(yīng)注意以下幾個(gè)方面的問(wèn)題:
1在對(duì)ds18b20進(jìn)行讀寫編程時(shí),必須嚴(yán)格的保證讀寫時(shí)序,否則將無(wú)法讀取測(cè)溫結(jié)果。
2當(dāng)單總線上所掛ds18b20超過(guò)8個(gè)小時(shí),就需要解決微處理器的總線驅(qū)動(dòng)問(wèn)題。
3在用ds18b20進(jìn)行長(zhǎng)距離測(cè)溫系統(tǒng)設(shè)計(jì)是要充分考慮總線分布電容和阻抗匹配問(wèn)題。
Ds18b20從測(cè)溫結(jié)束到將溫度值轉(zhuǎn)換成數(shù)字量需要一定的轉(zhuǎn)換時(shí)間。
圖2.2 DS18B20的外觀圖 圖2.3 DS18B20內(nèi)部結(jié)構(gòu)框圖
圖2.4 DS18B20引腳分布圖
DS18B20的主要技術(shù)指標(biāo)如下:測(cè)量范圍:-55OC—+125OC;測(cè)量精度:0.5OC;
6
反應(yīng)時(shí)間<=500ms。
2.3.2 引腳功能
2、DQ:數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。當(dāng)被用在寄生電源下,此引腳可以向器件提供電源;漏極開路, 常態(tài)下為高電平. 通常要求外接一個(gè)約5kΩ的上拉電阻。
3、VDD:外接供電電源輸入端引腳。電壓范圍:3~5.5V;當(dāng)工作于寄生電源時(shí),此引腳必須接地
在本系統(tǒng)中用外接電源,DQ接到AT89S51的P2(0端,R1為信號(hào)和5V電源之間的上拉電阻。在實(shí)際中,若需要多點(diǎn)檢測(cè)是,可在單總線上掛多個(gè)DS18B20,但超過(guò)8個(gè)是要考慮驅(qū)動(dòng)問(wèn)題,軟件設(shè)計(jì)也變得復(fù)雜多了同事要考慮DS18B20單總線的長(zhǎng)度問(wèn)題,一般不超過(guò)50M,為實(shí)現(xiàn)更遠(yuǎn)程的控制,可以考慮把系統(tǒng)設(shè)計(jì)成無(wú)線系統(tǒng),以突破DA18B20單總線的長(zhǎng)度限制。
表2.1 主要溫度與轉(zhuǎn)換后輸出的數(shù)字對(duì)應(yīng)值表
溫度 /OC 二進(jìn)制表示 十六進(jìn)制表示
+125 0000 0111 1101 0000 07D0H
+85 0000 0101 0101 0000 0550H
+25.0625 0000 0001 1001 0000 0191H
+10.125 0000 0000 1010 0001 00A2H
+0.5 0000 0000 0000 1000 0008H
0 0000 0000 0000 0000 0000H
-0.5 1111 1111 1111 1000 FFF8H
-10.125 1111 1111 0101 1110 FFE5H
-25.0625 1111 1110 0110 1111 FE6FH
-55 1111 1100 1001 0000 FC90H
7
(a)寄生電源工作方式 (b)外接電源工作方式 2.3.3 ds18b20 ROM指令表
指 令 約定代碼 功 能
讀ROM 33H 讀DS1820溫度傳感器ROM中的編碼(即64位地址)
發(fā)出此命令之后,接著發(fā)出 64 位 ROM 編碼,訪
55H 問(wèn)單總線上與該編碼相對(duì)應(yīng)的 DS1820 使之作出響符合 ROM
應(yīng),為下一步對(duì)該 DS1820 的讀寫作準(zhǔn)備。
用于確定掛接在同一總線上 DS1820 的個(gè)數(shù)和識(shí)
0FOH
搜索 ROM 別 64 位 ROM 地址。為操作各器件作好準(zhǔn)備。
0CCH 忽略 64 位 ROM 地址,直接向 DS1820 發(fā)溫度變換命跳過(guò) ROM
令。適用于單片工作。
0ECH 執(zhí)行后只有溫度超過(guò)設(shè)定值上限或下限的片子才做出告警搜索命令
響應(yīng)。
RAM指令表
約定代
指 令 功 能
碼
啟動(dòng)DS1820進(jìn)行溫度轉(zhuǎn)換,12位轉(zhuǎn)換
溫度變
44H 時(shí)最長(zhǎng)為750ms(9位為93.75ms)。結(jié)果存
換
入內(nèi)部9字節(jié)RAM中。
讀內(nèi)部RAM中9字節(jié)的內(nèi)容
8
讀暫存器 0BEH
發(fā)出向內(nèi)部RAM的3、4字節(jié)寫上、下
限溫度數(shù)據(jù)命令,緊跟該命令之后,是傳
寫暫存器 4EH
送兩字節(jié)的數(shù)據(jù)。
將RAM中第3 、4字節(jié)的內(nèi)容復(fù)制到EEPROM
復(fù)制暫存器 48H
中。
將EEPROM中內(nèi)容恢復(fù)到RAM中的第3 、4字
重調(diào) EEPROM 0B8H
節(jié)。
讀供電讀DS1820的供電模式。寄生供電時(shí)DS1820
0B4H
方式 發(fā)送“ 0 ”,外接電源供電 DS1820發(fā)送
“ 1 ”。
2.4主控制器模塊AT89S51
AT89S51是整個(gè)系統(tǒng)的核心處理器,單片機(jī)首先把通過(guò)傳感器測(cè)到的現(xiàn)場(chǎng)溫度與預(yù)先設(shè)置的溫度進(jìn)行比較,如果大于或小于預(yù)先設(shè)置值,就輸出信號(hào)去控制加熱器的工作,從而實(shí)現(xiàn)溫度控制。At89s51還負(fù)責(zé)液晶顯示、報(bào)警以及與上位機(jī)進(jìn)行通信等工作。
AT89S51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的低電壓、高性能位微處理器, 俗稱單片機(jī)。
9
圖3.6 AT89S51單片機(jī)
2.4.1 基本概述
管腳說(shuō)明:
芯片共有40個(gè)引腳,引腳的排列順序?yàn)閺目啃酒娜笨谧筮吥橇幸_逆時(shí)針數(shù)起,依次為1、2、3、4......40,其中芯片的1腳頂上有個(gè)凹點(diǎn)。在單片機(jī)的40個(gè)引腳中,電源引腳線2根,外接晶體振蕩器引腳2根,控制引腳4根以及4組8位可編程I/O引腳3根。
1、電源引腳線(2根)
VCC(Pin40):電源輸入,接,5V電源
GND(Pin20):接地線
2、外接晶振引腳(2根)
XTAL1(Pin19):反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 XTAL2(Pin20):片內(nèi)振蕩電路的輸出端。
3、控制引腳(4根)
RST/VPP(Pin9):復(fù)位引腳,引腳上出現(xiàn)2個(gè)機(jī)器周期的高電平將使單片機(jī)復(fù)位。ALE/PROG(Pin30):地址鎖存允許信號(hào),當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的
10
輸出電平用于鎖存地址的地位字節(jié)。在編程期間, 此引腳用于輸入編程脈沖。在平時(shí), ALE端以不變的頻率周期輸出正脈沖信號(hào), 此頻率為振蕩器頻率的1/6,因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。PSEN(Pin29):外部存儲(chǔ)器讀選通信號(hào),外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取址期間, 每個(gè)機(jī)器周期兩次PSEN有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。EA/VPP(Pin31):程序存儲(chǔ)器的內(nèi)外部選通,接低電平從外部程序存儲(chǔ)器讀指令,如果接高電平則從內(nèi)部程序存儲(chǔ)器讀指令。在/EA保持低電平時(shí), 則在此期間外部程序存儲(chǔ)器(0000H—FFFFH), 不管是否有內(nèi)部程序存儲(chǔ)器。
4、可編程輸入/輸出引腳(32根)
AT89S51單片機(jī)有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個(gè)口有8位(8根引腳),共32根。每一根引腳都可以編程,
PO口(Pin39,Pin32):名稱為P0.0,P0.7,8位雙向I/O口線, P0口為一個(gè)8位漏級(jí)開路雙向I/O口, 每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入,P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的低八位。
P1口(Pin1,Pin8):名稱為P1.0,P1.7 ,8位準(zhǔn)雙向I/O口線, P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流,P1口管腳寫入1后,被內(nèi)部上拉為高, 可用作輸入, P1口被外部下拉為低電平時(shí), 將輸出電流, 這是由于內(nèi)部上拉的緣故。
P2口(Pin21,Pin28):名稱為P2.0,P2.7,8位準(zhǔn)雙向I/O口線, P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收輸出個(gè)4個(gè)TTL門電流。當(dāng)P2口被寫1時(shí), 其管腳被內(nèi)部上拉電阻拉高, 且作為輸入。并因此作為輸入時(shí), P2口的管腳被外部拉低, 將輸出電流, 這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址1時(shí),它利用內(nèi)部上拉優(yōu)勢(shì), 當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。
P3口(Pin10,Pin17):名稱為P3.0,P3.7,8位準(zhǔn)雙向I/O口線, P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口, 可接收輸出4個(gè)TTL門電流。當(dāng)口寫入1后,它們被內(nèi)部上拉為高電平, 并用作輸入,作為輸入, 由于外部下拉為低電平, P3
11
口將輸出電流(ILL),這是由于上拉的緣故。
圖3.7 AT89S51方框圖
2.4.2 功能特性概述
AT89S51提供以下標(biāo)準(zhǔn)功能:4K字節(jié)Flash閃速存儲(chǔ)器,128字節(jié)內(nèi)部RAM,32個(gè)I/O口線,看門狗(WDT),兩個(gè)數(shù)據(jù)指針,兩個(gè)16位定時(shí)/計(jì)數(shù)器,一個(gè)5向量?jī)杉?jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路,同時(shí),AT89S51可降至0HZ的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式?臻e方式停止CPU的工作,但允許RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作,掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位。
AT89S51的特點(diǎn):
1、系統(tǒng)可編程特性: 創(chuàng)造了單片機(jī)學(xué)習(xí)開發(fā)系統(tǒng)的先例,可方便地在系統(tǒng)中實(shí)現(xiàn)程序下載,彌補(bǔ)了實(shí)時(shí)修改程序的不足之處,并可以立即從目標(biāo)系統(tǒng)中反映出修改的結(jié)果,大大縮短單片機(jī)學(xué)習(xí)開發(fā)的周期,提高了工作效率。
2、代碼全速仿真: 彌補(bǔ)傳統(tǒng)學(xué)習(xí)系統(tǒng)不能全速仿真的缺陷,使系統(tǒng)運(yùn)行
12
的結(jié)果完全反映代碼的執(zhí)行情況,更切實(shí)地吻合人們工作、學(xué)習(xí)所需要的特點(diǎn)。其次,在軟件開發(fā)前的仿真調(diào)試后,完全可燒寫入目標(biāo)芯片,并能獲得完全一致的代碼執(zhí)行結(jié)果。是集學(xué)習(xí)、開發(fā)于一身的優(yōu)良的目標(biāo)系統(tǒng)。
3、資源的可重復(fù)利用性: 目標(biāo)系統(tǒng)上的所有資源都能重復(fù)利用并能通過(guò)軟件調(diào)配或通過(guò)擴(kuò)展槽增加其它的功能,進(jìn)而提高系統(tǒng)的實(shí)用性。
4、軟硬結(jié)合,操作簡(jiǎn)單方便:
在AT89S51提供硬件支持的同時(shí),也提供良好的上位機(jī)控制軟件,只要通過(guò)軟件的功能操作就能實(shí)現(xiàn):源代碼的調(diào)試編譯,查找與修改錯(cuò)誤之處,在線代碼下載等功能。使單機(jī)的學(xué)習(xí)與開發(fā)一體化,集成化,更進(jìn)一步體現(xiàn)系統(tǒng)學(xué)習(xí)的優(yōu)越性。
晶體振蕩特性: AT89S51中有一個(gè)用于構(gòu)成內(nèi)部振蕩器的高增益反向放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起構(gòu)成自激振蕩器。
外接石英晶體(或陶瓷振蕩器)及電容C1、C2接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路,對(duì)外接電容C1、C2雖然沒有十分嚴(yán)格的要求,但電容容量的大小會(huì)輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程序及溫度穩(wěn)定性。如果使用石英晶體,則推薦電容使用30Pf+10pF,而如使用陶瓷諧振器建議選擇40Pf+10Pf。也可以采用外部時(shí)鐘,這種情況下,外部時(shí)鐘脈沖接到XTAL1端,即內(nèi)部時(shí)鐘發(fā)生器的輸入端,XTAL2則懸空。
由于外部時(shí)鐘信號(hào)是通過(guò)一個(gè)2分頻觸發(fā)器后作為內(nèi)部時(shí)鐘信號(hào)的,所以對(duì)外部時(shí)鐘信號(hào)的占空比沒有特殊要求,但最小高電平持續(xù)時(shí)間和最大低電平持續(xù)時(shí)間應(yīng)符合技術(shù)條件要求。
圖3.8 晶體接線圖和外接時(shí)鐘線圖
13
AT89S51的極限參數(shù):
工作溫度:-55OC to+125 OC 儲(chǔ)存溫度:-65 OC to +150 OC
任一引腳對(duì)地電壓:1.0V to7.0V 最大工作電壓:6.6V
DC輸出電流:15.0mA
2.5 顯示模塊LCD1602
2.5.1引腳功能和基本特征
圖3.9 LCD1602引腳分布圖
1602采用標(biāo)準(zhǔn)的16腳接口,引腳功能如下:
第1腳:VSS為地電源。
第2腳:VDD接5V正電源。
第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,故通常將此腳接地。
第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。 第5腳:RW為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和RW共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平RW為低電平時(shí)可以寫入數(shù)據(jù)。
第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。
第7,14腳:D0,D7為8位雙向數(shù)據(jù)線。
第15,16腳:空腳。
LCD1602的基本特征:
單5V電源電壓、低功耗、長(zhǎng)壽命、高可靠性。
內(nèi)置192種字符(160個(gè)5×7點(diǎn)陣字符和32個(gè)5×10點(diǎn)陣字符)。
具有64個(gè)字節(jié)的自定義字符RAM,可自定義8個(gè)5×8點(diǎn)陣字符或四個(gè)5×11點(diǎn)
14
陣字符。
顯示方式:STN、半透、正顯。
驅(qū)動(dòng)方式:1/16DUTY,1/5BIAS。
視角方向:6點(diǎn)。
背光方式:底部LED。
通訊方式:4位或8位并口可選。
標(biāo)準(zhǔn)的借口特性,適配MC51和M6800系列MPU的操作時(shí)序。 2.5.2 模塊內(nèi)部結(jié)構(gòu)
圖3.10 LCD1602結(jié)構(gòu)塊圖
模塊組件內(nèi)部結(jié)構(gòu)
模塊組件內(nèi)部主要由LCD顯示屏(LCD panel)、控制器(controller)、列驅(qū)動(dòng)器(segment driver)和偏壓產(chǎn)生電路構(gòu)成。
LCD顯示屏為common和segment交叉形成的點(diǎn)陣,以5×8點(diǎn)陣的字符結(jié)構(gòu)模式和設(shè)置的顯示字符樹木,選擇適宜的行數(shù),分單屏、雙屏或者多屏顯示規(guī)定的字符。對(duì)于雙屏或者多屏顯示結(jié)構(gòu)的LCD,每一顯示屏結(jié)構(gòu)部分,均由各自獨(dú)立的使能信號(hào)E控制。
列驅(qū)動(dòng)器與控制器配套使用,它接收來(lái)自控制器的振蕩、幀同步輸出、串行輸出的數(shù)據(jù)和移位以及鎖存脈沖,產(chǎn)生列segment交流掃描驅(qū)動(dòng)信號(hào)。
控制器接收來(lái)自MPU的指令和數(shù)據(jù),控制著整個(gè)模塊的工作,由CGROM、CGRAM和DDRAM等字符存儲(chǔ)區(qū)域、以及與MPU和列驅(qū)動(dòng)器的I/O接口、指令寄存和譯碼機(jī)
15
構(gòu)、地址計(jì)數(shù)器等部分組成。在控制器的控制下,模塊通過(guò)數(shù)據(jù)總線DB0—DB7和E、R/W、RS三個(gè)輸入控制端與MPU接口。這三根控制線按照規(guī)定的時(shí)序相互協(xié)調(diào)作用,使控制器通過(guò)數(shù)據(jù)總線DB接收MPU發(fā)送來(lái)的指令和數(shù)據(jù),從CGROM中找到欲顯示字符的字符碼,送入DDRAM,在LCD顯示屏上與DDRAM存儲(chǔ)單元對(duì)應(yīng)的規(guī)定位置顯示出該字符。控制器還可以根據(jù)MPU的指令,實(shí)現(xiàn)字符的顯示、閃爍和移位等顯示結(jié)果。
2.6鍵盤控制
鍵盤分為八個(gè)獨(dú)立按鍵,一端與單片機(jī)的p2口及50k上拉電阻相連,另一端接地,當(dāng)任一按鍵按下時(shí),p2口讀取低電平有效。系統(tǒng)上點(diǎn)后,進(jìn)入鍵盤掃描子程序,以查詢的方式確定各按鍵,完成溫度初值的設(shè)定,系統(tǒng)進(jìn)入主程序后按鍵功能無(wú)效。
2.7驅(qū)動(dòng)電路
驅(qū)動(dòng)電路采用繼電器驅(qū)動(dòng)方式。通過(guò)控制繼電器在控制周期內(nèi)通斷的時(shí)間,實(shí)現(xiàn)對(duì)加熱的開關(guān)控制。由單片機(jī)I/O口輸出的控制信號(hào),經(jīng)NPN晶體管放大,驅(qū)動(dòng)繼電器工作。
2.8報(bào)警電路
本設(shè)計(jì)采用蜂鳴器報(bào)警電路,它由晶體管和蜂鳴器組成。由單片機(jī)I/O口輸出信號(hào)控制晶體管的導(dǎo)通或截止,晶體管導(dǎo)通,則蜂鳴器報(bào)警。通過(guò)單片機(jī)來(lái)控制蜂鳴器產(chǎn)生報(bào)警聲音。
2.9溫度控制的實(shí)現(xiàn)
系統(tǒng)工作時(shí)先由使用者設(shè)定預(yù)期達(dá)到的兩位溫度值,溫度值輸入后,打開電源,單片機(jī)自動(dòng)復(fù)位,進(jìn)行初始化,這時(shí)LED顯示器顯示設(shè)定溫度,以便操作人員核對(duì)設(shè)定溫度,然后溫度檢測(cè)電路將測(cè)點(diǎn)的溫度輸入單片機(jī),經(jīng)軟件濾波后作為實(shí)測(cè)溫度,此后顯示器將一直顯示實(shí)測(cè)溫度。若實(shí)測(cè)溫度高于設(shè)定溫度時(shí),則通過(guò)驅(qū)動(dòng)電路關(guān)上加熱器并報(bào)警;若實(shí)測(cè)溫度低于設(shè)定溫度是,則通過(guò)驅(qū)動(dòng)電路打開加熱并報(bào)警;若在設(shè)定溫度范圍內(nèi),則加熱器狀態(tài)不變。2.10各接口電路
2.10.1 主控制模塊與溫度傳感模塊的連接
16
圖2.11 主控制器AT89S51與溫度傳感器DS18B20接口圖
溫度檢測(cè)系統(tǒng)原理如上圖所示,采用寄生電源供電方式。為保證在有效的DS18B20時(shí)鐘周期內(nèi),提供足夠的電流,我們用一個(gè)MOSFET管和89S51的一個(gè)I/O口(P1.0)來(lái)完成對(duì)DS1820總線的上拉。當(dāng)DS1820處于寫存儲(chǔ)器操作和溫度A/D變換操作時(shí),總線上必須有強(qiáng)的上拉,上拉開啟時(shí)間最大為10μs。采用寄生電源供電方式時(shí)VDD必須接地。這一部分的主要功能是電路接通以后,DS18B20進(jìn)行溫度采集工作,然后將收集到的數(shù)據(jù)送入AT89S51進(jìn)行處理,使得主控制器可以將數(shù)據(jù)處理好后送入下一部分電路進(jìn)行工作。
17
2.10.2 主控制模塊與顯示模塊的連接
圖2.12 主控制器AT89S51與顯示模塊LCD連接圖
AT89S51與顯示模塊LCD1602連接形成顯示電路,接通電源后,DS18B20將采集到溫度傳送給主控制器AT89S51,主控制器進(jìn)行計(jì)算、轉(zhuǎn)換等工作之后把數(shù)據(jù)傳給LCD1602模塊,則LCD1602顯示屏上會(huì)顯示出當(dāng)前的溫度。此時(shí)我們按下各功能鍵可以根據(jù)自己的需要進(jìn)行TH和TL的值設(shè)置,在LCD1602顯示屏幕上會(huì)出現(xiàn)設(shè)置的值,另外進(jìn)行測(cè)試時(shí)相關(guān)溫度值也會(huì)直接出現(xiàn)在LCD1602屏幕上,一目了然。
18
2.10.3 系統(tǒng)整體硬件連接
+5
DS1U2R3140P1.0/TVccU32501KP1.1/TLED116339BG GNDP1.2P0.015438BGVCCP1.3P0.114537DB7P1.4P0.213636DB6P1.5P0.312735DB5P1.6P0.411834DB4P1.7P0.51033DB3P0.69932DB2RST/VPDP0.78DB171031DB0P3.0/RXDEA/VPP+5S611SW-DIP4LCD1602EP3.1/TXD5123018RWP3.2/INT0ALE/PROG4132927RSP3.3/INT1PSEN31436VOP3.4/T02152845VCC+5P3.5/T1P2.7R?11627GNDP3.6/WRP2.61726RESP3.7/RDP2.5LCD160225U1P2.418241XTAL2P2.3GNDC119232XTAL1P2.2I/O30PF223P2.1VDDR?2021DS24.7KGndP2.0DS18B20RESR2AT89S51Y2LED22+5
XTAL1
C2R4C1501K22PF30PFLS1VCC
Speaker
圖3.13 溫度測(cè)量報(bào)警系統(tǒng)原理圖 將分開的各功能模塊部分的設(shè)計(jì)工作完成以后,最后整體連接到一起,就得到這個(gè)設(shè)計(jì)的完整電路,在PROTELDXP中繪制好原理圖以后,下一步將其轉(zhuǎn)換為PCB圖,布線、修改、檢查,就完成該設(shè)計(jì)硬件部分的工作。
19
3 系統(tǒng)軟件設(shè)計(jì)
3.1 主程序設(shè)計(jì)
主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示,讀出并處理DS18B20測(cè)量的當(dāng)前溫度值,送入主控制器進(jìn)行數(shù)據(jù)處理并轉(zhuǎn)換為數(shù)字信號(hào)后進(jìn)行顯示,其流程圖如下所示。
圖2.1 主程序流程圖
系統(tǒng)軟件采用C 語(yǔ)言編寫。在中斷服務(wù)程序中,實(shí)現(xiàn)用戶輸入以及上位機(jī)的接口功能;在主程序中,實(shí)現(xiàn)溫度傳感器網(wǎng)絡(luò)的自動(dòng)搜索、獲取溫度信息,并根據(jù)預(yù)先設(shè)定的溫度上下限,實(shí)現(xiàn)相應(yīng)的報(bào)警功能。該系統(tǒng)中,根據(jù)不同的分辨率要求,可通過(guò)編程設(shè)定,該流程可滿足高精度設(shè)計(jì)要求。
20
3.2 子程序設(shè)計(jì)
3.2.1 測(cè)溫子程序流程
圖2.2 測(cè)溫子系統(tǒng)流程圖
在測(cè)溫時(shí)首先設(shè)置DS18B20的DQ為高電平,然后初始化DS18B20,在成功后DS18B20接收單片機(jī)的命令,為了簡(jiǎn)單起見這里跳過(guò)ROM命令設(shè)置匹配過(guò)程,然后再次初始化DS18B20,在成功后啟動(dòng)測(cè)溫,然后將溫度保存起來(lái),返回。3.2.2 讀溫度流程
圖2.3 讀溫度流程圖
讀溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫,如上圖。
21
3.2.3 顯示模塊子程序
在測(cè)得溫度后,將溫度數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)的溫度表示,然后再通過(guò)查表調(diào)用液晶1602顯示在液晶上,這里面數(shù)據(jù)處理類似于由二進(jìn)制轉(zhuǎn)換為十進(jìn)制,再由十進(jìn)制轉(zhuǎn)換為ASCII碼。
首先要對(duì)LCD進(jìn)行初始化設(shè)置,寫入報(bào)警溫度的上、下限值,若傳感器正常工作,則LCD上會(huì)顯示“OK”以及當(dāng)前溫度,同時(shí)進(jìn)行溫度比較,若當(dāng)時(shí)溫度在設(shè)定的上下限范圍內(nèi),則系統(tǒng)無(wú)反應(yīng),若溫度超過(guò)上、下限溫度,則蜂鳴器報(bào)警。
22
4 總體電路的實(shí)現(xiàn)與操作
4.1 設(shè)計(jì)結(jié)果的實(shí)現(xiàn)
在完成前期資料收集、方案構(gòu)造、可行性研究以及軟硬件設(shè)計(jì)工作后,就可以進(jìn)入器件調(diào)試階段。
4.1.1 電路板情況介紹
前期制作工作全部完成之后,呈現(xiàn)在我們面前的是制作成果:溫度報(bào)警器電路板,板子上方是一塊LCD1602顯示屏,往下是一個(gè)蜂鳴器,一個(gè)DS18B20,一塊AT89S51芯片,紅、黃兩個(gè)發(fā)光二極管,下方是編上號(hào)的1—4號(hào)開關(guān)按鈕,兩根電源線:紅色線接+5V電源,藍(lán)色線接地,另外還分布著電阻和電容。4.1.2 溫度報(bào)警器功能的操作步驟
將電路板接上電源,紅色線接+5V電源,藍(lán)色線接地,電路導(dǎo)通后紅色指示燈亮,LCD1602顯示工作狀態(tài)“OK”以及當(dāng)前測(cè)量環(huán)境溫度。按下2號(hào)鍵,表示開始進(jìn)行設(shè)定溫度,同時(shí),2號(hào)鍵也為默認(rèn)的上限溫度調(diào)節(jié)按鈕,1號(hào)鍵表示溫度調(diào)節(jié)加減轉(zhuǎn)換鍵,3號(hào)鍵調(diào)節(jié)下限溫度,了解了各鍵的功能后,便可以開始設(shè)置上下限溫度,比如說(shuō)按一下3鍵后下限溫度下降一度,按下2鍵后上限溫度也下降一度;然后按一下1鍵后轉(zhuǎn)換加減功能,即每次減一度變?yōu)榧右欢。此時(shí)再按下3鍵,下限溫度上升一度,按下2鍵上限溫度上升一度。根據(jù)按此方法即可設(shè)定符合測(cè)量需求的上下限溫度上下限溫度設(shè)定好以后,按下4鍵表確認(rèn),DS18B20完成溫度轉(zhuǎn)換后,就把當(dāng)前測(cè)得的溫度值與TH,TL作比較,若T>TH或T<TL,表明此時(shí)環(huán)境溫度不在設(shè)定范圍內(nèi),則將該器件內(nèi)的告警標(biāo)志置位,并對(duì)主機(jī)發(fā)出的告警搜索命令作出響應(yīng)。即蜂鳴器報(bào)警,黃色二極管發(fā)亮。若當(dāng)前溫度在設(shè)定的上下限范圍內(nèi),則報(bào)警系統(tǒng)繼續(xù)工作,無(wú)異常反應(yīng)。
23
結(jié) 論
本設(shè)計(jì)所介紹的溫度計(jì)報(bào)警器與傳統(tǒng)的溫度計(jì)相比,可以設(shè)置上下報(bào)警溫度,當(dāng)溫度不在設(shè)置范圍內(nèi)時(shí),可以進(jìn)行報(bào)警 ,該系統(tǒng)主要用于對(duì)測(cè)溫比較準(zhǔn)確的場(chǎng)所,或科研實(shí)驗(yàn)室使用。它具有結(jié)構(gòu)簡(jiǎn)單,不需外接元件,可由用戶設(shè)置溫度報(bào)警界限等特點(diǎn),可廣泛用于食品庫(kù)、冷庫(kù)、糧庫(kù)等需要控制溫度的地方。DS18B20集溫度測(cè)量、A/D 轉(zhuǎn)換于一體, 具有體積小、動(dòng)態(tài)范圍寬、測(cè)量精度高、單總線結(jié)構(gòu)、直接與CPU接口等特點(diǎn)。經(jīng)試驗(yàn), 基于AT89S51單片機(jī)和DS18B20 的溫度測(cè)量?jī)x,設(shè)計(jì)簡(jiǎn)單, 控制方便, 測(cè)量準(zhǔn)確, 測(cè)溫范圍寬,另外,利用單總線具有很強(qiáng)的擴(kuò)展性, 還可以組建多點(diǎn)的溫度檢測(cè)網(wǎng)絡(luò)。因此, 基于AT89S51單片機(jī)和DS18B20的溫度測(cè)量?jī)x,具有廣泛的應(yīng)用前景。目前,該類產(chǎn)品已在溫度控制系統(tǒng)中得到了廣泛的應(yīng)用。故該設(shè)計(jì)意義較為深遠(yuǎn)。同時(shí),該方案具有安裝方便、數(shù)字化程度高、精度高、適應(yīng)性強(qiáng)等特點(diǎn),在多種溫度檢測(cè)系統(tǒng)中都具有重大意義。
本設(shè)計(jì)實(shí)現(xiàn)了利用單片機(jī)以及DS18B20進(jìn)行溫度報(bào)警器的制作,通過(guò)這次設(shè)計(jì),使我接觸到了很多之前沒有學(xué)習(xí)過(guò)的理論知識(shí),畢業(yè)設(shè)計(jì)是對(duì)大學(xué)四年學(xué)習(xí)生活的總結(jié)以及學(xué)習(xí)能力的一次綜合檢驗(yàn)。通過(guò)這次設(shè)計(jì),使我在電路知識(shí)方面有很大提高,學(xué)習(xí)并掌握了單片機(jī)應(yīng)用的基本知識(shí)以及溫度傳感器DS18B20等芯片的使用方法;通過(guò)動(dòng)手實(shí)踐操作,將理論知識(shí)應(yīng)用于實(shí)際,使自己的知識(shí)更加生動(dòng)豐富,經(jīng)過(guò)一段時(shí)間的學(xué)習(xí)和制作,最終完成了利用單片及DS18B20實(shí)現(xiàn)溫度報(bào)警器制作的設(shè)計(jì)。
另外,通過(guò)本次設(shè)計(jì),我了解到了溫度報(bào)警器電路設(shè)計(jì)在現(xiàn)代生活、生產(chǎn)領(lǐng)域的重要意義及應(yīng)用情況,F(xiàn)代社會(huì)已經(jīng)步入了一個(gè)數(shù)字時(shí)代,很多使人們生活更便捷的服務(wù)都是建立在電子技術(shù)的基礎(chǔ)上的,而單片機(jī)技術(shù)則可以看作是“基礎(chǔ)中的基礎(chǔ)”,可見,它已經(jīng)深入了我們的生活和工作中,并發(fā)揮著巨大的作用。另外,通過(guò)這次設(shè)計(jì)還使我更加深刻地認(rèn)識(shí)到網(wǎng)絡(luò)是一個(gè)巨大的資源寶庫(kù),要學(xué)會(huì)科學(xué)合理利用這個(gè)大寶藏為我們的生活帶來(lái)更多的便捷。
24
致 謝
能夠完成本篇論文,在此,首先我要衷心地感謝我的畢業(yè)設(shè)計(jì)指導(dǎo)老師—李志偉老師, 在整個(gè)設(shè)計(jì)過(guò)程中, 李老師給了我很大的幫助,從資料收集到具體制作以及論文撰寫,每當(dāng)遇到困難和問(wèn)題,李老師總是耐心指導(dǎo),為我指點(diǎn)迷津,幫助我開拓研究思路,精心點(diǎn)撥、熱忱鼓勵(lì)。在論文撰寫過(guò)程中,李老師還給了我很多修改意見,李老師一絲不茍的作風(fēng),嚴(yán)謹(jǐn)求實(shí)的態(tài)度,踏踏實(shí)實(shí)的精神,他教會(huì)了我們很多課堂上學(xué)不到的東西,將使我終生受益。在此謹(jǐn)向李老師致以誠(chéng)摯的謝意和崇高的敬意。
另外,我還要感謝在實(shí)驗(yàn)室一起做畢業(yè)設(shè)計(jì)的同學(xué)們,大家在一起相處得很愉快, 他們?cè)谠O(shè)計(jì)中為我提供了許多好的意見和建議,有他們的幫助,我得以解決了很多設(shè)計(jì)以及調(diào)試方面的困難;我還要感謝寢室同學(xué),他們給了我巨大的勇氣和戰(zhàn)勝困難的信心,很多同學(xué)還給我提供了不少的參考資料,在此我表示真誠(chéng)的感謝~
25
參考文獻(xiàn)(References)
[1]嚴(yán)蕓.淺談溫度傳感器的現(xiàn)狀與發(fā)展[J].大眾科技,2006,(5):38-39. [2]譚浩強(qiáng).C程序設(shè)計(jì)[M].清華大學(xué)出版社,1999.
[3]楊小川.Protel DXP設(shè)計(jì)指導(dǎo)教程[M].清華大學(xué)出版社,2003. [4]貴國(guó)慶.LCD1602液晶顯示秒表[J].電子制作,2006.(4):59-61.[ [5]朱蕤、張常年.基于AT89C51單片機(jī)的溫度傳感器控制電路[D].北方工業(yè)大學(xué),2006. [6]黃繼昌. 傳感器工作原理及應(yīng)用實(shí)例[M].人民郵電出版社.1998.[7]周航慈. 單片機(jī)程序設(shè)計(jì)基礎(chǔ)[M].北京航空航天大學(xué)出版社.2003. [8]謝宜仁. 單片機(jī)實(shí)用技術(shù)問(wèn)答[M].人民郵電出版社.2003.
[9]朱善君. 單片機(jī)接口技術(shù)與應(yīng)用[M].清華大學(xué)出版社.2005.
[10]郭亨禮. 傳感器實(shí)用電路[M].上?茖W(xué)技術(shù)出版社.1992. [11]謝宜仁. 單片機(jī)實(shí)用技術(shù)問(wèn)答[M].人民郵電出版社.2003.
[12]肖來(lái)勝.單片機(jī)技術(shù)實(shí)用教程[M].華中科技大學(xué)出版社.2004. [13]Transistor specificationsmanual.Howard W. Sams & Co., Inc[M].1972.
26
附 錄(C語(yǔ)言程序設(shè)計(jì))
DS18B20溫度報(bào)警器顯示演示程序(LCD1602顯示)
開機(jī)時(shí)對(duì)DS18B20進(jìn)行檢測(cè),如果DS18B20檢測(cè)不正常,LCD1602顯示:
DS18B20 ERROR
PLEASE CHECK
蜂鳴器報(bào)警。
DS18B20檢測(cè)正常,LCD1602顯示(當(dāng)前所測(cè)溫度):
DS18B20 OK
:C TEMP: **.*
#include < reg51.h >
#include < intrins.h >
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P2^2 ; //定義DS18B20端口DQ
sbit BEEP=P3^4 ; //蜂鳴器驅(qū)動(dòng)線
bit presence ; //器件存在標(biāo)志位
uchar flag ; //溫度正負(fù)標(biāo)志位
sbit LCD_RS = P3^5 ;
sbit LCD_RW = P3^6 ;
sbit LCD_EN = P3^7 ;
uchar code cdis1[ ] = {" DS18B20 OK "} ;
uchar code cdis2[ ] = {" TEMP: . C "} ;
uchar code cdis3[ ] = {" DS18B20 ERR0R "} ;
uchar code cdis4[ ] = {" PLEASE CHECK "} ;
uchar data temp_data[2] = {0x00,0x00} ; //讀出的溫度暫放
uchar data display[5] = {0x00,0x00,0x00,0x00,0x00} ; //顯示溫度數(shù)據(jù) uchar codeditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,
0x06,0x07,0x08,0x08,0x09,0x09} ; //溫度小數(shù)部分轉(zhuǎn)換表 void beep() ;
uchar code mytab[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00} ;
//自定義字符?(C左上方的圓圈)
/*LCD延時(shí)ms程序*/
void delay1(int ms)
{
unsigned char y ;
while(ms--)
{
27
for(y = 250 ; y<250 ; y--)
{
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
}
}
}
/*檢查L(zhǎng)CD忙狀態(tài)*/
/*lcd_busy為1時(shí),忙,等待。lcd_busy為0時(shí),閑,可寫指令與數(shù)據(jù)。*/
bit lcd_busy()
{
bit result ;
LCD_RS = 0 ;
LCD_RW = 1 ;
LCD_EN = 1 ;
_nop_() ;_nop_() ;_nop_() ;_nop_() ;
result = (bit)(P0&0x80) ;
LCD_EN = 0 ;
return(result) ;
}
/*寫指令數(shù)據(jù)到LCD*/
/*RS=0,RW=0,E=高脈沖,D0-D7=指令碼。*/ void lcd_wcmd(uchar cmd) {
while(lcd_busy()) ; //檢測(cè)LCD是否忙碌
LCD_RS = 0 ;
LCD_RW = 0 ;
LCD_EN = 0 ;
_nop_() ;
_nop_() ;
P0 = cmd ;
_nop_() ;_nop_() ;_nop_() ;_nop_() ;
LCD_EN = 1 ;
_nop_() ;_nop_() ;_nop_() ;_nop_() ;
LCD_EN = 0 ;
}
/*寫顯示數(shù)據(jù)到LCD*/
/*RS=1,RW=0,E=高脈沖,D0-D7=數(shù)據(jù)。*/ void lcd_wdat(uchar dat) {
while(lcd_busy()) ; //檢測(cè)LCD是否忙碌
LCD_RS = 1 ;
LCD_RW = 0 ;
LCD_EN = 0 ;
P0 = dat ;
_nop_() ;_nop_() ;_nop_() ;_nop_() ;
LCD_EN = 1 ;
28
_nop_() ;_nop_() ;_nop_() ;_nop_() ;
LCD_EN = 0 ;
}
/*LCD初始化設(shè)定*/
void lcd_init()
{
delay1(15) ;
lcd_wcmd(0x01) ; //清除LCD的顯示內(nèi)容
delay1(5) ;
lcd_wcmd(0x38) ; //功能設(shè)置:8位數(shù)據(jù),16*2雙行顯示,5*7點(diǎn)陣
delay1(5) ;
lcd_wcmd(0x0c) ; //整體顯示(D=1),關(guān)光標(biāo)(C=0),字符不閃爍(B=0)
delay1(5) ;
lcd_wcmd(0x06) ; //設(shè)定輸入方式,增量不移位
delay1(5) ;
lcd_wcmd(0x01) ; //清除LCD的顯示內(nèi)容
delay1(5) ;
}
/*設(shè)定顯示位置*/
void lcd_pos(uchar pos)
{
lcd_wcmd(pos | 0x80) ; //按位或,即:數(shù)據(jù)指針=80+地址變量(DDRAM的固有格式) }
/*自定義字符寫入CGRAM(字符發(fā)生器)*/
void writetab()
{
unsigned char i ;
lcd_wcmd(0x40) ; //寫CGRAM,00H
for (i = 0 ; i< 8 ; i++)
lcd_wdat(mytab[ i ]) ; //寫入數(shù)據(jù)自定義字符?(C左上方的圓圈)
}
/*15us級(jí)延時(shí)函數(shù)*/
void Delay15us(uchar num)
{
do
{ _nop_() ;_nop_() ;_nop_() ;
_nop_() ;_nop_() ;_nop_() ;
_nop_() ;_nop_() ;_nop_() ;
_nop_() ;_nop_() ;_nop_() ;
_nop_() ;
}while( --num ) ;
}
/*初始化DS18B20,復(fù)位脈沖+存在脈沖*/
Init_DS18B20(void)
{
DQ = 1 ; //DQ復(fù)位
Delay15us(3) ; //稍做延時(shí)
DQ = 0 ; //單片機(jī)將DQ拉低,發(fā)出復(fù)位脈沖(要求480us~960us)
29
Delay15us(40) ; //精確延時(shí)600us
DQ = 1 ; //拉高總線,產(chǎn)生復(fù)位脈沖,釋放總線(要求16~60us)
Delay15us(3) ;
presence = DQ ; //讀存在脈沖。如果=0 器件存在,初始化成功;
//=1 器件不存在,初始化失敗
Delay15us(6) ;
DQ = 1 ;
return(presence) ; //返回信號(hào),0= presence,1= no presence
}
/*讀一個(gè)8位的字節(jié),從DS18B20中讀取數(shù)據(jù)*/
ReadOneChar(void)
{
unsigned char i = 0 ;
unsigned char dat = 0 ;
for (i = 8 ; i > 0 ; i--)
{
DQ = 0 ; //清零
_nop_() ; //延時(shí)1us以上
_nop_() ;
dat >>= 1 ; //右移位
DQ = 1 ; //釋放總線,等待DS18B20輸出數(shù)據(jù)
_nop_() ; //data sheet要求大于1us小于15us時(shí)間段內(nèi)控制器采樣
_nop_() ;
if(DQ) //控制器采樣
dat |= 0x80 ; //若采樣位為1,則將dat相應(yīng)的位置1,否則將由第一句的移位置0
Delay15us(6) ; //延時(shí)90us,data sheet要求所有的讀時(shí)間間隙最少為60us
}
return (dat) ; //將讀出的數(shù)據(jù)返回給調(diào)用函數(shù)
}
/*寫一個(gè)8位的字節(jié),寫入數(shù)據(jù)(命令)*/
WriteOneChar(unsigned char dat) {
unsigned char i = 0 ;
for (i = 8 ; i > 0 ; i--)
{
DQ = 0 ; //清零,寫位操作均從零開始,無(wú)論寫1還是寫0
_nop_() ; //延時(shí)1us以上
_nop_() ;
DQ = dat&0x01 ; //取傳遞過(guò)來(lái)的函數(shù)的最低位,并發(fā)送出去
Delay15us(6) ; //延時(shí)90us,data sheet要求大于60小于120us,
DQ = 1 ; //釋放總線
dat>>=1 ; //數(shù)據(jù)向低端移位1位
}
}
/*讀取溫度*/
Read_Temperature(void)
{
Init_DS18B20() ; //初始化
WriteOneChar(0xCC) ; //跳過(guò)讀序號(hào)列號(hào)的操作
30
WriteOneChar(0x44) ; //啟動(dòng)溫度轉(zhuǎn)換
Init_DS18B20() ;
WriteOneChar(0xCC) ; //跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar(0xBE) ; //讀取溫度寄存器(共可讀取9個(gè)寄存器,前兩個(gè)就是溫
度)
temp_data[0] = ReadOneChar() ; //溫度低8位
temp_data[1] = ReadOneChar() ; //溫度高8位 }
/*數(shù)據(jù)轉(zhuǎn)換與溫度顯示*/
Disp_Temperature()
{
flag = 0 ;
if( temp_data[1] > 0x7f ) //判斷正、負(fù)數(shù)
{
temp_data[1]=0x100-temp_data[1] ; //用于負(fù)溫度求補(bǔ)碼,兩者相加為256(8位)
temp_data[0]=0x100-temp_data[0] ;
flag = 1 ;
}
display[4]=temp_data[0]&0x0f ; //低字節(jié)的低4位,即為溫度值的小數(shù)部分
display[0]=ditab[display[4]]+0x30 ; //存放小數(shù)部分,查表得小數(shù)位的值
display[3]=display[4]/100+0x30 ; //百位數(shù)轉(zhuǎn)換
display[1]=display[4]%100 ;
display[2]=display[1]/10+0x30 ; //十位數(shù)轉(zhuǎn)換
display[1]=display[1]%10+0x30 ; //個(gè)位數(shù)轉(zhuǎn)換
if(display[3]==0x30) //判斷是否高位為0
{
display[3]=0x20 ; //顯示空格,即不顯示
if(display[2]==0x30) //判斷次高位是否為0
{
display[2]=0x20 ; //顯示空格,即不顯示
}
}
if( flag==1 )
{
display[3]=0x2d ; //負(fù)溫度時(shí)最高位顯示“-”
}
lcd_pos(0x48) ;
lcd_wdat(display[3]) ; //百位數(shù)顯示
lcd_pos(0x49) ;
lcd_wdat(display[2]) ; //十位數(shù)顯示
lcd_pos(0x4a) ;
lcd_wdat(display[1]) ; //個(gè)位數(shù)顯示
lcd_pos(0x4c) ;
lcd_wdat(display[0]) ; //小數(shù)位數(shù)顯示 }
/*蜂鳴器響一聲*/
void beep()
{
unsigned char y ;
for (y=0 ; y<100 ; y++)
31
{
delay1(2) ;
BEEP=!BEEP ; //BEEP取反,低電平發(fā)聲
}
BEEP=1 ; //關(guān)閉蜂鳴器
uchar m ;
lcd_init() ; //初始化LCD
lcd_pos(0) ; //設(shè)置顯示位置為第一行的第1個(gè)字符
m = 0 ;
while(cdis1[m] != '\0')
{
lcd_wdat(cdis1[m]) ; //顯示字符(DS18B20 OK)
m++ ;
}
lcd_pos(0x40) ; //設(shè)置顯示位置為第二行第1個(gè)字符
m = 0 ;
while(cdis2[m] != '\0')
{
lcd_wdat(cdis2[m]) ; //顯示字符(TEMP:××.×C),即當(dāng)前所測(cè)溫度
m++ ;
}
writetab() ; //自定義字符寫入CGRAM
delay1(5) ;
lcd_pos(0x4d) ;
lcd_wdat(0x00) ; //顯示自定義字符
}
/*DS18B20 ERROR 顯示菜單*/
void Error_Menu ()
{
uchar m ;
lcd_init() ; //初始化LCD
lcd_pos(0) ; //設(shè)置顯示位置為第一行的第1個(gè)字符
m = 0 ;
while(cdis3[m] != '\0')
{
lcd_wdat(cdis3[m]) ; //顯示字符(DS18B20 ERR0R)
m++ ;
}
lcd_pos(0x40) ; //設(shè)置顯示位置為第二行第1個(gè)字符
m = 0 ;
while(cdis4[m] != '\0')
{
lcd_wdat(cdis4[m]) ; //顯示字符(PLEASE CHECK)
m++ ;
}
}
/*主函數(shù)*/
void main()
{
Ok_Menu () ;
do
{
Read_Temperature() ;
32
Disp_Temperature() ;
}
while(!presence) ;
Error_Menu () ;
do
{
Init_DS18B20() ;
beep() ;
}
while(presence) ; }
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1