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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

22、何力民編. 單片機高級教程. 北京:北京航空大學出版社,20004金發(fā)慶等編. 傳感器技術與應用.北京機械工業(yè)出版社,20025劉坤、宋戈、趙洪波、張憲棟編51單片機C語言應用開發(fā)技術大全,北京:人民郵電出版社,20086譚浩強著C程序設計北京:清華大學出版社,2007;7王忠飛,胥芳MCS-51 單片機原理及嵌入式系統(tǒng)應用M西安:西安電子科技大學出版社,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ù)碼管的個位數(shù)sbit dq = P24;/18b20 IO口的定義sbit beep = P25; /蜂鳴器IO口定義uchar a_a;uint temperature ; /bit flag_300ms ;uchar key_can; /按鍵值的變量uchar menu_1; /菜單設計的變量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; /自動退出設置界面/*1ms延時函數(shù)*/void delay_1ms(uint q)uint i,j;for(i=0;i<q;i+)for(j=0;j<120;j+);/*小延時函數(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ù)保存到單片機內部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ù)從單片機內部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;/給復位脈沖delay_uint(80);/750usdq = 1;/把總線拿高 等待delay_uint(10);/110usq = dq

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

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

30、OMwrite_18b20(0x44); /啟動一次溫度轉換命令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; /轉換到溫度值 小數(shù)retur

31、n value; /返回讀出的溫度 帶小數(shù)/*定時器0初始化程序*/void time_init() EA = 1; /開總中斷TMOD = 0X01; /定時器0、定時器1工作方式1ET0 = 1; /開定時器0中斷 TR0 = 1; /允許定時器0定時/*獨立按鍵處理函數(shù)*/void key()static uchar key_new = 0,key_old = 0,key_value = 0;if(key_new = 0) /按鍵松開的時候做松手檢測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;/關閉連加使能flag_lj_3_en = 0;/關閉3秒后使能flag_value = 0;/清零else if(P2 & 0x0f) != 0x0f)key_value +; /按鍵按下的時候else key_value = 0;if(key_value >= 7)key_value = 0;key_new = 0;flag_lj_en = 1; /連加使能zd_break_en = 1; /自動退出設置界使能zd_break_value = 0; /

33、自動退出設置界變量清零key_can = 20;if(key_500ms = 1)key_500ms = 0;zd_break_en = 1; /自動退出設置界使能zd_break_value = 0; /自動退出設置界變量清零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; /取溫度的個位顯示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; /取個位顯示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; /取個位顯示dis_smg2 = smg_dut_low / 100 % 10 ; /取十位顯示dis_smg3 = 0xc7;smg_i = 4;if(menu_1 = 1)/設置高溫報警if(key_can = 3)if(flag_lj_3_en = 0)t_high + ;/按鍵按下未松開自動加三次else t_high += 10;/按鍵按下未松開自動加三次之后每次自動加10if(t_high > 990)t_high = 990;dis_smg0 = smg_dut_high % 10; /取小數(shù)顯示dis_smg1 = smg_dut_high / 10 % 10 &

37、amp; 0x7f; /取個位顯示dis_smg2 = smg_dut_high / 100 % 10 ; /取十位顯示dis_smg3 = 0x89; /Hif(key_can = 1)if(flag_lj_3_en = 0)t_high - ;/按鍵按下未松開自動加三次else t_high -= 10;/按鍵按下未松開自動減三次之后每次自動減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、/取個位顯示dis_smg2 = smg_dut_high / 100 % 10 ; /取十位顯示dis_smg3 = 0x89; /H/write_eepom();if(menu_1 = 2)/設置低溫報警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; /取個位顯示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; /取個位顯示dis_smg2 = smg_dut_low / 100 % 10 ; /取十位顯示dis_smg3 = 0xc7; /L/write_eepom(); /*報警函數(shù)*/void clock_h_l()if(temperature

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論