基于單片機(jī)設(shè)計(jì)的溫度報(bào)警系統(tǒng)_第1頁
基于單片機(jī)設(shè)計(jì)的溫度報(bào)警系統(tǒng)_第2頁
基于單片機(jī)設(shè)計(jì)的溫度報(bào)警系統(tǒng)_第3頁
基于單片機(jī)設(shè)計(jì)的溫度報(bào)警系統(tǒng)_第4頁
基于單片機(jī)設(shè)計(jì)的溫度報(bào)警系統(tǒng)_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、單片機(jī)設(shè)計(jì)的溫度報(bào)警器摘要21、引言32 設(shè)計(jì)內(nèi)容及性能指標(biāo)43 系統(tǒng)方案比較、設(shè)計(jì)與論證43.1 主控制器模塊53.2 溫度測(cè)量53.3 設(shè)置溫度63.3 顯示模塊63.4 電源選取74 系統(tǒng)器件選擇75 硬件實(shí)現(xiàn)及單元電路設(shè)計(jì)85.1 主控制模塊85.2 顯示模塊電路95.3 數(shù)碼管顯示驅(qū)動(dòng)電路10圖6 驅(qū)動(dòng)電路105.4 溫度傳感器(DS18B20)電路105.4.1 DS18B20基本介紹105.4.2 DS18B20控制方法115.4.3 DS18B20供電方式115.6 蜂鳴器、發(fā)光二極管報(bào)警電路126 系統(tǒng)軟件設(shè)計(jì)136.1 程序結(jié)構(gòu)分析136.2 系統(tǒng)程序流圖136.2.1 D

2、S18B20初始化程序流程圖146.2.2 讀溫度子程序流程圖157 系統(tǒng)的安裝與調(diào)試157.1 安裝步驟157.2 電路的調(diào)試167.3 本章小結(jié)16結(jié) 論16參考文獻(xiàn)16附錄1 整體電路原理圖17附錄2 部分源程序18摘要 隨著時(shí)代的進(jìn)步和發(fā)展,單片機(jī)技術(shù)已經(jīng)普及到我們生活、工作、科研、各個(gè)領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù), 本文主要介紹了一個(gè)基于STC89C52單片機(jī)的溫度報(bào)警系統(tǒng),詳細(xì)描述了利用溫度傳感器DS18B20開發(fā)測(cè)溫系統(tǒng)的過程,重點(diǎn)對(duì)傳感器在單片機(jī)下的硬件連接,軟件編程以及各模塊系統(tǒng)流程進(jìn)行了詳盡分析,對(duì)各部分的電路也一一進(jìn)行了介紹,該系統(tǒng)可以方便的實(shí)現(xiàn)溫度采集和顯示,并可根

3、據(jù)需要任意設(shè)定報(bào)警溫度,它使用起來相當(dāng)方便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點(diǎn),適合于我們?nèi)粘I詈凸?、農(nóng)業(yè)生產(chǎn)中的溫度控制,也可以當(dāng)作溫度處理模塊嵌入其它系統(tǒng)中,作為其他主系統(tǒng)的輔助擴(kuò)展。DS18B20與STC89C52結(jié)合實(shí)現(xiàn)最簡(jiǎn)溫度控制系統(tǒng),該系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,抗干擾能力強(qiáng),適合于惡劣環(huán)境下進(jìn)行現(xiàn)場(chǎng)溫度的控制,有廣泛的應(yīng)用前景。關(guān)鍵詞:?jiǎn)纹瑱C(jī);溫度控制;STC89C52;DS18B20;1、引言 隨著科技的不斷發(fā)展,現(xiàn)代社會(huì)對(duì)各種信息參數(shù)的準(zhǔn)確度和精確度的要求都有了幾何級(jí)的增長(zhǎng),而如何準(zhǔn)確而又迅速的獲得這些參數(shù)就需要受制于現(xiàn)代信息基礎(chǔ)的發(fā)展水平。在三大信息信息采集(即傳感器技

4、術(shù))、信息傳輸(通信技術(shù))和信息處理(計(jì)算機(jī)技術(shù))中,傳感器屬于信息技術(shù)的前沿尖端產(chǎn)品,尤其是溫度傳感器技術(shù),在我國(guó)各領(lǐng)域已經(jīng)引用的非常廣泛,可以說是滲透到社會(huì)的每一個(gè)領(lǐng)域,人民的生活與環(huán)境的溫度息息相關(guān),在工業(yè)生產(chǎn)過程中需要實(shí)時(shí)測(cè)量溫度,在農(nóng)業(yè)生產(chǎn)中也離不開溫度的測(cè)量,因此研究溫度的測(cè)量方法和溫度報(bào)警裝置具有重要的意義。測(cè)量溫度的關(guān)鍵是溫度傳感器,溫度傳感器的發(fā)展經(jīng)歷了三個(gè)發(fā)展階段:傳統(tǒng)的分立式溫度傳感器模擬集成溫度傳感器智能集成溫度傳感器。目前的智能溫度傳感器(亦稱數(shù)字溫度傳感器)是在20世紀(jì)90年代中期問世的,它是微電子技術(shù)、計(jì)算機(jī)技術(shù)和自動(dòng)測(cè)試技術(shù)(ATE)的結(jié)晶,特點(diǎn)是能輸出溫度數(shù)據(jù)

5、及相關(guān)的溫度控制量,適配各種微控制器(MCU)。社會(huì)的發(fā)展使人們對(duì)傳感器的要求也越來越高,現(xiàn)在的溫度傳感器正在基于單片機(jī)的基礎(chǔ)上從模擬式向數(shù)字式,從集成化向智能化、網(wǎng)絡(luò)化的方向飛速發(fā)展,并朝著高精度、多功能、總線標(biāo)準(zhǔn)化、高可靠性及安全性、開發(fā)虛擬傳感器和網(wǎng)絡(luò)傳感器、研制單片測(cè)溫系統(tǒng)等高科技的方向迅速發(fā)展,本文將介紹智能集成溫度傳感器DS18B20的結(jié)構(gòu)特征及控制方法,并對(duì)以此傳感器,STC89C52單片機(jī)為控制器構(gòu)成的數(shù)字溫度控制裝置的工作原理及程序設(shè)計(jì)作了詳細(xì)的介紹。其具有讀數(shù)方便,方便控制,輸出溫度采用數(shù)字顯示,主要用于對(duì)溫度控制要求比較準(zhǔn)確的場(chǎng)所,或科研實(shí)驗(yàn)室使用。該設(shè)計(jì)控制器使用STC

6、89C52單片機(jī),測(cè)溫傳感器使用DALLAS公司DS18B20,用數(shù)碼管來實(shí)現(xiàn)溫度顯示。2 設(shè)計(jì)內(nèi)容及性能指標(biāo) 本設(shè)計(jì)主要是介紹了單片機(jī)控制下的溫度報(bào)警系統(tǒng),詳細(xì)介紹了其硬件和軟件設(shè)計(jì),并對(duì)其各功能模塊做了詳細(xì)介紹,其主要功能和指標(biāo)如下:?jiǎn)纹瑱C(jī)實(shí)時(shí)檢測(cè)溫度傳感器DS18B20的狀態(tài),并將DS18820得到的數(shù)據(jù)進(jìn)行處理。上電后數(shù)碼管顯示當(dāng)前的環(huán)境溫度,通過按鍵可設(shè)置高低溫報(bào)警值,當(dāng)檢測(cè)到的溫度高于設(shè)置的報(bào)警值的時(shí)候,蜂鳴器報(bào)警同時(shí)報(bào)警燈閃爍,溫度檢測(cè)精確到0.1度。并具有掉電保存功能,數(shù)據(jù)保存在單片機(jī)內(nèi)部EEPOM中,進(jìn)入設(shè)置界面后如果沒有鍵按下系統(tǒng)會(huì)在15秒后自動(dòng)退出設(shè)置界面。3 系統(tǒng)方案比

7、較、設(shè)計(jì)與論證 該系統(tǒng)主要由溫度測(cè)量和溫度設(shè)置及系統(tǒng)狀態(tài)顯示三部分電路組成,下面介紹實(shí)現(xiàn)此系統(tǒng)功能的方案。3.1 主控制器模塊方案1: 采用可編程邏輯器件CPLD作為控制器。CPLD可以實(shí)現(xiàn)各種復(fù)雜的邏輯功能、規(guī)模大、密度高、體積小、穩(wěn)定性高、IO資源豐富、易于進(jìn)行功能擴(kuò)展。采用并行的輸入輸出方式,提高了系統(tǒng)的處理速度,適合作為大規(guī)??刂葡到y(tǒng)的控制核心。但本系統(tǒng)不需要復(fù)雜的邏輯功能,對(duì)數(shù)據(jù)的處理速度的要求也不是非常高。且從使用及經(jīng)濟(jì)的角度考慮我們放棄了此方案。方案2: 采用STC89C52單片機(jī)作為整個(gè)系統(tǒng)的核心,用其控制溫度報(bào)警功能,以實(shí)現(xiàn)其既定的性能指標(biāo)。充分分析我們的系統(tǒng),其關(guān)鍵在于實(shí)現(xiàn)

8、溫度的自動(dòng)顯示并報(bào)警功能,而在這一點(diǎn)上,單片機(jī)就顯現(xiàn)出來它的優(yōu)勢(shì)控制簡(jiǎn)單、方便、快捷。這樣一來,單片機(jī)就可以充分發(fā)揮其資源豐富、有較為強(qiáng)大的控制功能及可位尋址操作功能、價(jià)格低廉等優(yōu)點(diǎn)。STC89C52單片機(jī)具有功能強(qiáng)大的位操作指令,I/O口均可按位尋址,程序空間多達(dá)8K,對(duì)于本設(shè)計(jì)也綽綽有余,更可貴的是STC89C52單片機(jī)價(jià)格非常低廉。3.2 溫度測(cè)量方案1: 采用數(shù)字溫度芯片DS18B20 測(cè)量實(shí)際溫度,輸出信號(hào)全數(shù)字化。便于單片機(jī)處理及控制,省去傳統(tǒng)的測(cè)溫方法的很多外圍電路。且該芯片的物理化學(xué)性很穩(wěn)定,它能用做工業(yè)測(cè)溫元件,此元件線形較好。在0100 攝氏度時(shí),最大線形偏差小于1 攝氏度

9、。DS18B20 的最大特點(diǎn)之一采用了單總線的數(shù)據(jù)傳輸,由數(shù)字溫度計(jì)DS18B20和微控制器STC89C52構(gòu)成的溫度測(cè)量裝置,它直接輸出溫度的數(shù)字信號(hào),可直接與計(jì)算機(jī)連接。這樣,測(cè)溫系統(tǒng)的結(jié)構(gòu)就比較簡(jiǎn)單,體積也不大。采用51 單片機(jī)控制,軟件編程的自由度大,可通過編程實(shí)現(xiàn)各種各樣的算術(shù)算法和邏輯控制,而且體積小,硬件實(shí)現(xiàn)簡(jiǎn)單,安裝方便。既可以單獨(dú)對(duì)多DS18B20控制工作,還可以與PC 機(jī)通信上傳數(shù)據(jù),另外STC89C52在工業(yè)控制上也有著廣泛的應(yīng)用,編程技術(shù)及外圍功能電路的配合使用都很成熟。方案2: 采用熱電偶溫差電路測(cè)溫,溫度檢測(cè)部分可以使用低溫?zé)崤?,熱電偶由兩個(gè)焊接在一起的異金屬導(dǎo)線所

10、組成(如下圖),熱電偶產(chǎn)生的熱電勢(shì)由兩種金屬的接觸電勢(shì)和單一導(dǎo)體的溫差電勢(shì)組成。通過將參考結(jié)點(diǎn)保持在已知溫度并測(cè)量該電壓,便可推斷出檢測(cè)結(jié)點(diǎn)的溫度。數(shù)據(jù)采集部分則使用帶有A/D 通道的單片機(jī),在將隨被測(cè)溫度變化的電壓或電流采集過來,進(jìn)行A/D 轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測(cè)溫度顯示出來。熱電偶的優(yōu)點(diǎn)是工作溫度范圍非常寬,且體積小,但是它們也存在著輸出電壓小、容易遭受來自導(dǎo)線環(huán)路的噪聲影響以及漂移較高的缺點(diǎn),并且這種設(shè)計(jì)需要用到A/D 轉(zhuǎn)換電路,感溫電路比較麻煩。圖1 熱電偶電路圖從以上兩種方案,容易看出方案二的測(cè)溫裝置可測(cè)溫度范圍寬、體積小,但是線性誤差較大。

11、方案一的測(cè)溫裝置電路簡(jiǎn)單、精確度較高、實(shí)現(xiàn)方便、軟件設(shè)計(jì)也比較簡(jiǎn)單,故本次設(shè)計(jì)采用了方案一。3.3 設(shè)置溫度方案1: 采用鍵盤輸入設(shè)置溫度,鍵盤則可以用4個(gè)按鍵,一個(gè)復(fù)位鍵,一個(gè)功能設(shè)定鍵,一個(gè)加減一個(gè)減鍵。四個(gè)鍵比較常用,而且用到的接口得到了極好的利用,僅需要4個(gè)接口。方案2: 可采用4*4矩陣鍵盤,該鍵盤需要8個(gè)接口,而我們不需這么多鍵。綜上所述,我們選擇第一種方案。3.3 顯示模塊方案1: 用數(shù)碼管進(jìn)行顯示。數(shù)碼管由于顯示速度快,使用簡(jiǎn)單,顯示效果簡(jiǎn)潔明了而得到了廣泛應(yīng)用。方案 2:用LCD液晶進(jìn)行顯示。LCD由于其顯示清晰,顯示內(nèi)容豐富、清晰,顯示信息量大,使用方便,顯示快速而得到了廣

12、泛的應(yīng)用。單對(duì)于此系統(tǒng)我們不需要顯示豐富的內(nèi)容,而且LCD液晶價(jià)格貴,因此我們選擇了此方案。 綜上所述我們選擇方案13.4 電源選取 由于本系統(tǒng)采用電池供電,我們考慮了如下幾種方案為系統(tǒng)供電。方案1:采用5V蓄電池為系統(tǒng)供電。蓄電池具有較強(qiáng)的電流驅(qū)動(dòng)能力以及穩(wěn)定的電壓輸出性能。但是蓄電池的體積過于龐大,在小型電動(dòng)車上使用極為不方便。因此我們放棄了此方案。方案2:采用3節(jié)1.5 V干電池共4.5V做電源,經(jīng)過實(shí)驗(yàn)驗(yàn)證系統(tǒng)工作時(shí),單片機(jī)、傳感器的工作電壓穩(wěn)定能夠滿足系統(tǒng)的要求,而且電池更換方便。綜上所述采用方案24 系統(tǒng)器件選擇1.溫度傳感器的選擇 由于傳統(tǒng)的熱敏電阻等測(cè)溫元件測(cè)出的一般都是電壓,

13、再轉(zhuǎn)換成對(duì)應(yīng)的溫度,需要比較多的外部元件支持,且硬件電路復(fù)雜,制作成本相對(duì)較高。這里采用DALLAS公司的數(shù)字溫度傳感器DS18B20作為測(cè)溫元件。 圖2 外部封裝形式 圖3 傳感器電路圖5 硬件實(shí)現(xiàn)及單元電路設(shè)計(jì)5.1 主控制模塊主控制最系統(tǒng)電路如圖4所示。 圖4 單片主控電路5.2 顯示模塊電路 顯示采用四位數(shù)碼管顯示,當(dāng)位選打開時(shí),送入相應(yīng)的段碼,則相應(yīng)的數(shù)碼管打開,關(guān)掉位選,打開另一個(gè)位選,送入相應(yīng)的段碼,則數(shù)碼管打開,而每次打開關(guān)掉相應(yīng)的位選時(shí),時(shí)間間隔低于20ms,從人類視覺的角度上看,就仿佛是全部數(shù)碼管同時(shí)顯示的一樣。顯示電路如圖5圖5 數(shù)碼管顯示5.3 數(shù)碼管顯示驅(qū)動(dòng)電路三極管

14、8550來驅(qū)動(dòng)4位數(shù)碼管,不僅簡(jiǎn)單,而且價(jià)格便宜。圖6 驅(qū)動(dòng)電路5.4 溫度傳感器(DS18B20)電路5.4.1 DS18B20基本介紹DS18B20是美國(guó)DALLAS半導(dǎo)體公司推出的第一片支持“一線總線”接口的溫度傳感器,它具有微型化、低功耗、高性能、抗干擾能力強(qiáng)、易配微處理器等優(yōu)點(diǎn),可直接將溫度轉(zhuǎn)化成串行數(shù)字信號(hào)處理器處理。DS18B20進(jìn)行精確的溫度轉(zhuǎn)換,I/O線必須保證在溫度轉(zhuǎn)換期間提供足夠的能量,由于每個(gè)DS18B20在溫度轉(zhuǎn)換期間工作電流達(dá)到1mA,當(dāng)幾個(gè)溫度傳感器掛在同一根I/O線上進(jìn)行多點(diǎn)測(cè)溫時(shí),只靠4.7K上拉電阻就無法提供足夠的能量,會(huì)造成無法轉(zhuǎn)換溫度或溫度誤差極大。因此

15、,下圖電路只適應(yīng)于單一溫度傳感器測(cè)溫情況下使用,不適宜采用電池供電系統(tǒng)中。并且工作電源VCC必須保證在5V,當(dāng)電源電壓下降時(shí),寄生電源能夠汲取的能量也降低,會(huì)使溫度誤差變大。圖7 溫度傳感器電路引腳圖5.4.2 DS18B20控制方法DS18B20有六條控制命令:溫度轉(zhuǎn)換 44H 啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換 讀暫存器 BEH 讀暫存器9個(gè)字節(jié)內(nèi)容 寫暫存器 4EH 將數(shù)據(jù)寫入暫存器的TH、TL字節(jié) 復(fù)制暫存器 48H 把暫存器的TH、TL字節(jié)寫到E2RAM中 重新調(diào)E2RAM B8H 把E2RAM中的TH、TL字節(jié)寫到暫存器TH、TL字節(jié) 讀電源供電方式 B4H 啟動(dòng)DS18B20發(fā)送電源

16、供電方式的信號(hào)給主CPU 5.4.3 DS18B20供電方式DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時(shí)DS18B20的1腳接地,2腳作為信號(hào)線,3腳接電源。另一種是寄生電源供電方式,如圖3.1所示單片機(jī)端口接單線總線,為保證在有效的DS18B20時(shí)鐘周期內(nèi)提供足夠的電流,可用一個(gè)三極管來完成對(duì)總線的上拉。本設(shè)計(jì)采用電源供電方式, P2.2口接單線總線為保證在有效的DS18B20時(shí)鐘周期內(nèi)提供足夠的電流,可用一個(gè)上拉電阻和STC89C52的P2.2來完成對(duì)總線的上拉。當(dāng)DS18B20處于寫存儲(chǔ)器操作和溫度A/D變換操作時(shí),總線上必須有強(qiáng)的上拉,上拉開啟時(shí)間最大為10 s。采

17、用寄生電源供電方式是VDD和GND端均接地。由于單線制只有一根線,因此發(fā)送接收口必須是三狀態(tài)的。主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過3個(gè)步驟:l 初始化。l ROM操作指令。l 存儲(chǔ)器操作指令。5.6 蜂鳴器、發(fā)光二極管報(bào)警電路 電路如圖8主要是用來設(shè)定溫度報(bào)警溫度的、有高溫和低溫報(bào)警。圖8蜂鳴器、發(fā)光二極管驅(qū)動(dòng)引腳圖6 系統(tǒng)軟件設(shè)計(jì)6.1 程序結(jié)構(gòu)分析主程序調(diào)用了3個(gè)子程序,分別是數(shù)碼管顯示程序、溫度信號(hào)處理程序、按鍵設(shè)定報(bào)警溫度程序。溫度信號(hào)處理程序:對(duì)溫度芯片送過來的數(shù)據(jù)進(jìn)行處理,進(jìn)行判斷和顯示。數(shù)碼管顯示程序:向數(shù)碼管的顯示送數(shù),控制系統(tǒng)的顯示部分。按鍵設(shè)定程序:可以設(shè)定低溫和高

18、溫報(bào)警可精確到0.1度。6.2 系統(tǒng)程序流圖主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測(cè)量的當(dāng)前溫度值,溫度測(cè)量每1s進(jìn)行一次。這樣可以在一秒之內(nèi)測(cè)量一次被測(cè)溫度,主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示,讀出并處理DS18B20的當(dāng)前溫度值,與設(shè)定的報(bào)警溫度比較,其程序流程見圖9所示。通過調(diào)用讀溫度子程序把存入內(nèi)存儲(chǔ)中的整數(shù)部分與小數(shù)部分開分存放在不的的兩個(gè)單元中,然后通過調(diào)用顯示子程序顯示出來。調(diào)用顯示子程序初始化1s到?初次上電發(fā)溫度轉(zhuǎn)換開始命令讀出溫度值溫度計(jì)算處理顯示數(shù)據(jù)刷新圖9 DS18B20溫度流程圖6.2.1 DS18B20初始化程序流程圖在DS18B20工作

19、之前需要進(jìn)行初始化,流程圖如下:發(fā)復(fù)位命令發(fā)跳過ROM命令 初始化成功 結(jié)束 圖10 初始化程序流程圖6.2.2 讀溫度子程序流程圖 讀溫度子程序的主要功能是從DS18B20中讀出溫度數(shù)據(jù),移入溫度暫存器保存。其程序流程圖如下:發(fā)復(fù)位命令發(fā)跳過ROM命令 發(fā)讀取溫度命令 移入溫度暫存器 結(jié)束 圖11 溫度子程序流程圖 7 系統(tǒng)的安裝與調(diào)試7.1 安裝步驟1.檢查元件的好壞按電路圖買好元件后首先檢查買回元件的好壞,按各元件的檢測(cè)方法分別進(jìn)行檢測(cè),一定要仔細(xì)認(rèn)真。而且要認(rèn)真核對(duì)原理圖是否一致,在檢查好后才可上件、焊件,防止出現(xiàn)錯(cuò)誤焊件后不便改正。2.放置、焊接各元件按原理圖的位置放置各元件,在放置

20、過程中要先放置、焊接較低的元件,后焊較高的和要求較高的元件。特別是容易損壞的元件要后焊,在焊集成芯片時(shí)連續(xù)焊接時(shí)間不要超過10s,注意芯片的安裝方向。7.2 電路的調(diào)試首先燒入顯示程序,看顯示正不正常。在調(diào)試程序時(shí),發(fā)現(xiàn)有的指令用的不正確,導(dǎo)致電路功能不能完全實(shí)現(xiàn),另外軟件程序中的延時(shí)有的過長(zhǎng)、有的過短。類似的現(xiàn)象還有很多就不一一列舉了。7.3 本章小結(jié)本章的主要內(nèi)容是電路的測(cè)試和調(diào)試注意事項(xiàng)結(jié) 論本溫度報(bào)警器,通過單片機(jī)實(shí)時(shí)檢測(cè)溫度傳感器DS18B20的狀態(tài),并將DS18820得到的數(shù)據(jù)進(jìn)行處理。上電后數(shù)碼管顯示當(dāng)前的環(huán)境溫度,通過按鍵可設(shè)置高低溫報(bào)警值,當(dāng)檢測(cè)到的溫度高于設(shè)置的報(bào)警值的時(shí)候

21、,蜂鳴器報(bào)警同時(shí)報(bào)警燈閃爍,溫度檢測(cè)精確到0.1度。并具有掉電保存功能,數(shù)據(jù)保存在單片機(jī)內(nèi)部EEPOM中,進(jìn)入設(shè)置界面后如果沒有鍵按下系統(tǒng)會(huì)在15秒后自動(dòng)退出設(shè)置界面。由于采用了4節(jié)干電池供電使系統(tǒng)的抗干擾性得到加強(qiáng)。在軟件上,充分利用了STC89C52的系統(tǒng)資源,系統(tǒng)運(yùn)行流暢。本設(shè)計(jì)結(jié)構(gòu)簡(jiǎn)單,調(diào)試方便,系統(tǒng)反映快速靈活,經(jīng)實(shí)驗(yàn)測(cè)試,該溫度報(bào)警系統(tǒng)設(shè)計(jì)方案正確、可行,各項(xiàng)指標(biāo)穩(wěn)定、可靠。參考文獻(xiàn)1曹巧媛主編. 單片機(jī)原理及應(yīng)用(第二版). 北京:電子工業(yè)出版社,20022全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽組委會(huì)編.第五屆全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽獲獎(jiǎng)作品選編(2001), 北京:北京理工大學(xué)出版社,20033

22、何力民編. 單片機(jī)高級(jí)教程. 北京:北京航空大學(xué)出版社,20004金發(fā)慶等編. 傳感器技術(shù)與應(yīng)用.北京機(jī)械工業(yè)出版社,20025劉坤、宋戈、趙洪波、張憲棟編51單片機(jī)C語言應(yīng)用開發(fā)技術(shù)大全,北京:人民郵電出版社,20086譚浩強(qiáng)著C程序設(shè)計(jì)北京:清華大學(xué)出版社,2007;7王忠飛,胥芳MCS-51 單片機(jī)原理及嵌入式系統(tǒng)應(yīng)用M西安:西安電子科技大學(xué)出版社,2007P268-2738 Peter Van Der Linden著,徐波譯.C專家編程,人民郵電出版社,2003附錄1 整體電路原理圖附錄2 部分源程序#include <reg52.h>#include "eepo

23、m52.h"#define uchar unsigned char #define uint unsigned int/數(shù)碼管段選定義 0 1 2 3 4 56 7 8 9uchar code smg_du=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff; /斷碼/數(shù)碼管位選定義uchar code smg_we=0xef,0xdf,0xbf,0x7f;uchar dis_smg8 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf

24、8;uchar smg_i = 3; /顯示數(shù)碼管的個(gè)位數(shù)sbit dq = P24;/18b20 IO口的定義sbit beep = P25; /蜂鳴器IO口定義uchar a_a;uint temperature ; /bit flag_300ms ;uchar key_can; /按鍵值的變量uchar menu_1; /菜單設(shè)計(jì)的變量uint t_high = 300,t_low = 100;bit flag_lj_en; /按鍵連加使能bit flag_lj_3_en; /按鍵連3次連加后使能 加的數(shù)就越大了 uchar key_time,flag_value; /用做連加的中間變量

25、bit key_500ms ;uchar flag_clock;uchar zd_break_en,zd_break_value; /自動(dòng)退出設(shè)置界面/*1ms延時(shí)函數(shù)*/void delay_1ms(uint q)uint i,j;for(i=0;i<q;i+)for(j=0;j<120;j+);/*小延時(shí)函數(shù)*/void delay_uint(uint q)while(q-);/*數(shù)碼顯示函數(shù)*/void display()uchar i;for(i=0;i<smg_i;i+) P3 = smg_wei; /位選P1 = dis_smgi; /段選 delay_1ms(1

26、); P3 = 0xff; /位選P1 = 0xff; /消隱 /*把數(shù)據(jù)保存到單片機(jī)內(nèi)部eepom中*/void write_eepom()SectorErase(0x2000);byte_write(0x2000, t_high % 256);byte_write(0x2001, t_high / 256);byte_write(0x2002, t_low % 256);byte_write(0x2003, t_low / 256);byte_write(0x2055, a_a);/*把數(shù)據(jù)從單片機(jī)內(nèi)部eepom中讀出來*/void read_eepom()t_high = byte_re

27、ad(0x2001);t_high <<= 8;t_high |= byte_read(0x2000);t_low = byte_read(0x2003);t_low <<= 8;t_low |= byte_read(0x2002);a_a = byte_read(0x2055);/*18b20初始化函數(shù)*/void init_18b20()bit q;dq = 1;/把總線拿高delay_uint(1); /15usdq = 0;/給復(fù)位脈沖delay_uint(80);/750usdq = 1;/把總線拿高 等待delay_uint(10);/110usq = dq

28、;/讀取18b20初始化信號(hào)delay_uint(20);/200usdq = 1;/把總線拿高 釋放總線/*寫18b20內(nèi)的數(shù)據(jù)*/void write_18b20(uchar dat)uchar i;for(i=0;i<8;i+) /寫數(shù)據(jù)是低位開始dq = 0; /把總線拿低寫時(shí)間隙開始 dq = dat & 0x01; /向18b20總線寫數(shù)據(jù)了delay_uint(5); / 60usdq = 1; /釋放總線dat >>= 1;/*讀取18b20內(nèi)的數(shù)據(jù)*/uchar read_18b20()uchar i,value;for(i=0;i<8;i+)

29、dq = 0; /把總線拿低讀時(shí)間隙開始 value >>= 1; /讀數(shù)據(jù)是低位開始dq = 1; /釋放總線if(dq = 1) /開始讀寫數(shù)據(jù) value |= 0x80;delay_uint(5); /60us讀一個(gè)時(shí)間隙最少要保持60us的時(shí)間return value; /返回?cái)?shù)據(jù)/*讀取溫度的值 讀出來的是小數(shù)*/uint read_temp()uint value;uchar low; /在讀取溫度的時(shí)候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否則會(huì)影響到18b20的時(shí)序init_18b20(); /初始化18b20write_18b20(0xcc); /跳過64位R

30、OMwrite_18b20(0x44); /啟動(dòng)一次溫度轉(zhuǎn)換命令delay_uint(50); /500usinit_18b20(); /初始化18b20write_18b20(0xcc); /跳過64位ROMwrite_18b20(0xbe); /發(fā)出讀取暫存器命令EA = 0;low = read_18b20(); /讀溫度低字節(jié)value = read_18b20(); /讀溫度高字節(jié)EA = 1;value <<= 8; /把溫度的高位左移8位value |= low; /把讀出的溫度低位放到value的低八位中value *= 0.625; /轉(zhuǎn)換到溫度值 小數(shù)retur

31、n value; /返回讀出的溫度 帶小數(shù)/*定時(shí)器0初始化程序*/void time_init() EA = 1; /開總中斷TMOD = 0X01; /定時(shí)器0、定時(shí)器1工作方式1ET0 = 1; /開定時(shí)器0中斷 TR0 = 1; /允許定時(shí)器0定時(shí)/*獨(dú)立按鍵處理函數(shù)*/void key()static uchar key_new = 0,key_old = 0,key_value = 0;if(key_new = 0) /按鍵松開的時(shí)候做松手檢測(cè)if(P2 & 0x0f) = 0x0f)key_value +;else key_value = 0;if(key_value &

32、gt;= 10)write_eepom();key_value = 0;key_new = 1;flag_lj_en = 0;/關(guān)閉連加使能flag_lj_3_en = 0;/關(guān)閉3秒后使能flag_value = 0;/清零else if(P2 & 0x0f) != 0x0f)key_value +; /按鍵按下的時(shí)候else key_value = 0;if(key_value >= 7)key_value = 0;key_new = 0;flag_lj_en = 1; /連加使能zd_break_en = 1; /自動(dòng)退出設(shè)置界使能zd_break_value = 0; /

33、自動(dòng)退出設(shè)置界變量清零key_can = 20;if(key_500ms = 1)key_500ms = 0;zd_break_en = 1; /自動(dòng)退出設(shè)置界使能zd_break_value = 0; /自動(dòng)退出設(shè)置界變量清零key_new = 0;key_old = 1;if(key_new = 0) && (key_old = 1)switch(P2 & 0x0f)case 0x0e: key_can = 4; break; /得到k1鍵值case 0x0d: key_can = 3; break; /得到k2鍵值case 0x0b: key_can = 2; b

34、reak; /得到k3鍵值case 0x07: key_can = 1; break; /得到k4鍵值 key_old = key_new; /*按鍵處理數(shù)碼管顯示函數(shù)*/void key_with()if(key_can = 4)menu_1 +;if(menu_1 >= 3)menu_1 = 0;if(menu_1 = 0)dis_smg0 = smg_dutemperature % 10; /取溫度的小數(shù)顯示dis_smg1 = smg_dutemperature / 10 % 10 & 0x7f; /取溫度的個(gè)位顯示dis_smg2 = smg_dutemperature

35、 / 100 % 10 ; /取溫度的十位顯示smg_i = 3;if(menu_1 = 1)dis_smg0 = smg_dut_high % 10; /取小數(shù)顯示dis_smg1 = smg_dut_high / 10 % 10 & 0x7f; /取個(gè)位顯示dis_smg2 = smg_dut_high / 100 % 10 ; /取low十位顯示dis_smg3 = 0x89;smg_i = 4;if(menu_1 = 2)dis_smg0 = smg_dut_low % 10; /取low小數(shù)顯示dis_smg1 = smg_dut_low / 10 % 10 & 0x

36、7f; /取個(gè)位顯示dis_smg2 = smg_dut_low / 100 % 10 ; /取十位顯示dis_smg3 = 0xc7;smg_i = 4;if(menu_1 = 1)/設(shè)置高溫報(bào)警if(key_can = 3)if(flag_lj_3_en = 0)t_high + ;/按鍵按下未松開自動(dòng)加三次else t_high += 10;/按鍵按下未松開自動(dòng)加三次之后每次自動(dòng)加10if(t_high > 990)t_high = 990;dis_smg0 = smg_dut_high % 10; /取小數(shù)顯示dis_smg1 = smg_dut_high / 10 % 10 &

37、amp; 0x7f; /取個(gè)位顯示dis_smg2 = smg_dut_high / 100 % 10 ; /取十位顯示dis_smg3 = 0x89; /Hif(key_can = 1)if(flag_lj_3_en = 0)t_high - ;/按鍵按下未松開自動(dòng)加三次else t_high -= 10;/按鍵按下未松開自動(dòng)減三次之后每次自動(dòng)減10if(t_high <= t_low)t_high = t_low + 1;dis_smg0 = smg_dut_high % 10; /取小數(shù)顯示dis_smg1 = smg_dut_high / 10 % 10 & 0x7f;

38、/取個(gè)位顯示dis_smg2 = smg_dut_high / 100 % 10 ; /取十位顯示dis_smg3 = 0x89; /H/write_eepom();if(menu_1 = 2)/設(shè)置低溫報(bào)警if(key_can = 3)if(flag_lj_3_en = 0)t_low + ;else t_low += 10;if(t_low >= t_high)t_low = t_high - 1;dis_smg0 = smg_dut_low % 10; /取小數(shù)顯示dis_smg1 = smg_dut_low / 10 % 10 & 0x7f; /取個(gè)位顯示dis_smg2

39、 = smg_dut_low / 100 % 10 ; /取十位顯示dis_smg3 = 0xc7; /Lif(key_can = 1)if(flag_lj_3_en = 0)t_low - ;else t_low -= 10;if(t_low <= 10)t_low = 10;dis_smg0 = smg_dut_low % 10; /取小數(shù)顯示dis_smg1 = smg_dut_low / 10 % 10 & 0x7f; /取個(gè)位顯示dis_smg2 = smg_dut_low / 100 % 10 ; /取十位顯示dis_smg3 = 0xc7; /L/write_eepom(); /*報(bào)警函數(shù)*/void clock_h_l()if(temperature

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論