基于單片機(jī)的空調(diào)溫度控制器設(shè)計(jì)_第1頁
基于單片機(jī)的空調(diào)溫度控制器設(shè)計(jì)_第2頁
基于單片機(jī)的空調(diào)溫度控制器設(shè)計(jì)_第3頁
基于單片機(jī)的空調(diào)溫度控制器設(shè)計(jì)_第4頁
基于單片機(jī)的空調(diào)溫度控制器設(shè)計(jì)_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、接口技術(shù)課程設(shè)計(jì)報(bào)告 基于單片機(jī)的空調(diào)溫度控制器設(shè)計(jì) 摘 要設(shè)計(jì)了基于AT89C52的高精度家用空調(diào)溫度控制系統(tǒng),系統(tǒng)硬件主要由電源電路、溫度采集電路(DS18B20)、鍵盤、顯示電路、輸出控制電路及其他輔助電路組成;軟件采用8051C語言編程;該系統(tǒng)可以完成溫度的顯示、溫度的設(shè)定、空調(diào)的控制等多項(xiàng)功能。關(guān)鍵詞:?jiǎn)纹瑱C(jī);DS18B20;溫度檢測(cè);顯示目錄1 設(shè)計(jì)目的及要求11.1 設(shè)計(jì)目的和意義11.2 設(shè)計(jì)任務(wù)與要求12 硬件電路設(shè)計(jì)22.1 總體方案設(shè)計(jì)22.2 功能模塊電路設(shè)計(jì)32.2.1 單片機(jī)的選型32.2.2 振蕩電路設(shè)計(jì)52.2.3 復(fù)位電路設(shè)計(jì)52.2.4 鍵盤接口電路設(shè)計(jì)62

2、.2.5 溫度測(cè)量電路設(shè)計(jì)62.2.6 系統(tǒng)顯示電路設(shè)計(jì)72.2.7 輸出控制電路設(shè)計(jì)82.3 總電路設(shè)計(jì)82.4 系統(tǒng)所用元器件93 軟件系統(tǒng)設(shè)計(jì)103.1 軟件系統(tǒng)總體方案設(shè)計(jì)103.2 軟件流程圖設(shè)計(jì)104 系統(tǒng)調(diào)試125 總結(jié)135.1 本系統(tǒng)存在的問題及改進(jìn)措施13參考文獻(xiàn)14附錄1:系統(tǒng)的源程序清單15附錄2:系統(tǒng)的PCB圖391 設(shè)計(jì)目的及要求1.1 設(shè)計(jì)目的和意義21世紀(jì)的人們生活質(zhì)量不斷提高,同時(shí)也對(duì)高科技電子產(chǎn)業(yè)提出了更高的要求,為了使人們生活更人性化、智能化。我設(shè)計(jì)了這一基于單片機(jī)的空調(diào)溫度控制系統(tǒng),人們只有生活在一定的溫度環(huán)境內(nèi)才能長期感覺舒服,才能保證不中暑不受凍,所

3、以對(duì)室內(nèi)溫度要求要高。對(duì)于不同地區(qū)空調(diào)要求不同,有的需要升溫,有的需要降溫。一般都要維持在2126°C。目前,雖然我國大量生產(chǎn)空調(diào)制冷產(chǎn)品,但由于我國人口眾多,需求量過盛,在我國的北方地區(qū),還有好多家庭還沒有安裝有效地室內(nèi)溫控系統(tǒng)。溫度不能很好的控制在一定的范圍內(nèi),夏天室內(nèi)溫度過高,冬天溫度過低,這些均對(duì)人們正常生活帶來不利的影響,溫度、濕度均達(dá)不到人們的要求。以前溫度控制主要利用機(jī)械通風(fēng)設(shè)備進(jìn)行室內(nèi)、外空氣的交換來達(dá)到降低室內(nèi)溫度,實(shí)現(xiàn)室內(nèi)溫度適宜人們生活。以前通風(fēng)設(shè)備的開啟和關(guān)停,均是由人手動(dòng)控制的,即由人們定時(shí)查看室內(nèi)外的溫度、濕度情況,按要求開關(guān)通風(fēng)設(shè)備,這樣人們的勞動(dòng)強(qiáng)度大

4、,可靠性差,而且消耗人們體力,勞累成本過高。為此,需要有一種符合機(jī)械溫控要求的低成本的控制器,在溫差和濕度超過用戶設(shè)定值范圍時(shí),啟動(dòng)制冷通風(fēng)設(shè)備,否則自動(dòng)關(guān)閉制冷通風(fēng)設(shè)備。鑒于目前大多數(shù)制冷設(shè)備現(xiàn)在狀況,我設(shè)計(jì)了一款基于MCS51單片機(jī)的空調(diào)溫度控制系統(tǒng)。1.2 設(shè)計(jì)任務(wù)與要求系統(tǒng)要求利用單片機(jī)設(shè)計(jì)一空調(diào)溫度控制器,能夠?qū)崟r(shí)檢測(cè)并顯示室溫,能夠利用鍵盤設(shè)定溫度,并且和室溫進(jìn)行比較,當(dāng)室溫低于設(shè)定溫度時(shí),系統(tǒng)能夠驅(qū)動(dòng)加熱系統(tǒng)工作,當(dāng)室溫高于設(shè)定溫度時(shí),系統(tǒng)能夠驅(qū)動(dòng)制冷系統(tǒng)工作,當(dāng)兩者溫度相等時(shí),不做動(dòng)作。2 硬件電路設(shè)計(jì)2.1 總體方案設(shè)計(jì)空調(diào)溫度控制系統(tǒng),主要要完成對(duì)溫度的采集、顯示以及設(shè)定等

5、工作,從而實(shí)現(xiàn)對(duì)空調(diào)的控制。傳統(tǒng)采用鉑電阻充當(dāng)測(cè)溫器件的方案,雖然其中段測(cè)量線性度好,精度較高,但是測(cè)量電路的設(shè)計(jì)難度高 ,且測(cè)量電路系統(tǒng)龐大,難于調(diào)試 ,而且成本相對(duì)較高。鑒于上述原因,本系統(tǒng)采用DS18B20充當(dāng)測(cè)溫器件。外部溫度信號(hào)經(jīng) DS18B20將輸入的模擬信號(hào)轉(zhuǎn)換成8位的數(shù)字信號(hào), 通過并 口傳送到單片機(jī)系統(tǒng)( AT89C52) 。單片機(jī)系統(tǒng)將接收的數(shù)字信號(hào)譯碼處理,通過LCD1602將溫度顯示出來,同時(shí)單片機(jī)系統(tǒng)還將完成鍵盤掃描 、按鍵溫度設(shè)定、超溫報(bào)警等程序的處理 ,將處理的溫度信號(hào)與系統(tǒng)設(shè)定溫度值比較,形成可以控制空調(diào)制冷、制熱與停止工作三種工作狀態(tài),從而實(shí)現(xiàn)空調(diào)的智能化。另

6、外,鍵盤輸入方面,采用了軟件來修正誤操作輸入 ,即輸入的溫度范圍必須在系統(tǒng)硬件所確定的范圍內(nèi),直接降低由于誤操作帶來的風(fēng)險(xiǎn),提高了系統(tǒng)的可靠性 ,體現(xiàn)了人性化的系統(tǒng)設(shè)計(jì)原則。系統(tǒng)的整體框圖如圖1所示:圖1 系統(tǒng)整體框圖2.2 功能模塊電路設(shè)計(jì)2.2.1 單片機(jī)的選型由于本系統(tǒng)只需要單片機(jī)完成矩陣鍵盤檢測(cè)以及處理DS18B20送來的溫度數(shù)據(jù)并送LCD1602進(jìn)行顯示對(duì)于I/O資源以及處理速度無特殊要求,故選擇ATMEL公司生產(chǎn)的AT89C52單片機(jī),AT89C52增加了在線調(diào)試功能,即程序可以通過JTAG接口下載,調(diào)試和固化,因而該芯片的開發(fā)不再需要昂貴的硬件仿真器,可實(shí)現(xiàn)實(shí)時(shí)仿真,所有的資源都

7、可以為用戶所使用,可以在線編程或在系統(tǒng)編程,更進(jìn)一步地說,在線編程或在系統(tǒng)編程是開發(fā)的系統(tǒng)具有了通過網(wǎng)絡(luò)進(jìn)行升級(jí)、維護(hù)的潛在功能。AT89C52的性能及特點(diǎn)1:l 與MCS-51系列單片機(jī)兼容。l 片內(nèi)有8K可在線重復(fù)編程的快速內(nèi) 存可擦寫存儲(chǔ)器(Flash Memory)。l 存儲(chǔ)器可循環(huán)寫入/擦寫10000次以上。l 存儲(chǔ)器數(shù)據(jù)保存時(shí)間為10年以上。l 寬工作電壓范圍:Vcc可為2.7V-6.5V。l 全靜態(tài)工作:可從0Hz-24MHz。l 程序存儲(chǔ)器具有三級(jí)加密保護(hù)。l 256字節(jié)的內(nèi)部RAM。l 32條可編程I/O口線。l 三個(gè)16位定時(shí)器/計(jì)數(shù)器。l 中斷結(jié)構(gòu)具有5級(jí)(6級(jí))中斷源和

8、兩個(gè)優(yōu)下級(jí)。l 可編程全雙工串行通訊。l 空閑維持低功耗和掉電狀態(tài)保護(hù)存儲(chǔ)數(shù)據(jù)。 AT89C52引腳圖如圖2所示。圖2 AT89C52引腳圖VCC: +5V電源輸入GND:接地P0口是一個(gè)雙向8位三態(tài)I/O口,每個(gè)口可獨(dú)立控制。使用時(shí)需外接上拉電阻。P1口是一個(gè)準(zhǔn)雙向8位I/O口,它的功能是單一的,只能用作數(shù)據(jù)的輸入或者輸出。P2口是一個(gè)準(zhǔn)雙向8位I/O口,輸出時(shí),從P2.x端口可輸出CPU寫到鎖存器上的信號(hào)。當(dāng)該接口用做數(shù)據(jù)輸入接口是,應(yīng)先向該位寫1,然后,讀該位即可讀入輸入數(shù)據(jù)。P3口是具有第二功能的準(zhǔn)雙向8位I/O口。ALE/PROG:地址所存/編程信號(hào)線。當(dāng)P0口工作在第二功能時(shí)從該端

9、口可復(fù)用工作,某時(shí)刻該端口可以送出地址信號(hào)A0A7,而另外的時(shí)刻該端口傳送的是數(shù)據(jù)信號(hào)D0D7。利用ALE可以將地址信號(hào)A0A7鎖存到地址鎖存器。/VPP:該控制信號(hào)線也具有雙重功能,是允許訪問片外ROM/編程高電壓引線。:程序存儲(chǔ)器允許輸出控制端,常用作片外ROM的讀控制信號(hào),低電平有效。RESET:復(fù)位引腳,當(dāng)該端加上超過24個(gè)時(shí)鐘周期的高電平時(shí),可是8051復(fù)位。系統(tǒng)復(fù)位電路如圖2.3所示。X1、X2:外接時(shí)鐘引腳。X1為片內(nèi)振蕩電路的輸入端,X2為片內(nèi)振蕩電路的輸出端。2.2.2 振蕩電路設(shè)計(jì)AT89C52內(nèi)部有一個(gè)用于構(gòu)成片內(nèi)振蕩器的高增益反相放大器, 振蕩器產(chǎn)生的信號(hào)送到CPU,

10、作為CPU的時(shí)鐘信號(hào),驅(qū)動(dòng)CPU產(chǎn)生執(zhí)行指令功能的機(jī)器周期。引腳XTAL1和XTAL2是此放大器的輸人端和輸出端。這個(gè)放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起可構(gòu)成一個(gè)自激振蕩器, 振蕩電路的連接如圖所示圖8所示,外接石英晶體或陶瓷諧振器以及電容C1和C2構(gòu)成并聯(lián)諧振電路, 接在放大器的反饋回路中。對(duì)外接電容C1和C2的值雖然沒有嚴(yán)格的要求, 但電容的大小多少會(huì)影響振蕩器頻率的高低、振蕩器的穩(wěn)定性、起振圈內(nèi)部振蕩的接法的快速性和溫度穩(wěn)定性。外接石英晶體時(shí), C1和C2一般?。?0pF-10pF),外接的是石英晶體, 所以,C1、C2選擇標(biāo)稱值30pF。系統(tǒng)振蕩電路如圖3所示。圖3 振

11、蕩電路2.2.3 復(fù)位電路設(shè)計(jì)單片機(jī)復(fù)位是使CPU和系統(tǒng)中的其他功能部件都處在一個(gè)確定的初始狀態(tài), 并從這個(gè)狀態(tài)開始工作。無論是在單片機(jī)剛開始接上電源時(shí), 還是斷電后或者發(fā)生故障后都要復(fù)位。89系列單片機(jī)的復(fù)位信號(hào)是從RST引腳輸人到芯片的施密特觸發(fā)器中的。當(dāng)系統(tǒng)處于正常工作狀態(tài)時(shí), 且振蕩器穩(wěn)定后, 如果RST引腳有一個(gè)高電平并維持2個(gè)機(jī)器周期(24個(gè)振蕩周期), 則CPU就可響應(yīng)并且將系統(tǒng)復(fù)位。復(fù)位分為手動(dòng)復(fù)位和上電復(fù)位。本設(shè)計(jì)系統(tǒng)采用的是上電自動(dòng)復(fù)位。系統(tǒng)復(fù)位電路如圖4所示。圖4 復(fù)位電路2.2.4 鍵盤接口電路設(shè)計(jì)獨(dú)立鍵盤與單片機(jī)連接時(shí),每個(gè)按鍵都需要單片機(jī)的一個(gè)I/O口,若單片機(jī)系統(tǒng)

12、需要較多按鍵,如果用獨(dú)立按鍵會(huì)占用過多的I/O口資源。單片機(jī)系統(tǒng)中I/O口資源往往比較寶貴,當(dāng)用到多個(gè)按鍵時(shí),為了節(jié)省I/O口線,一般需使用矩陣鍵盤。本系統(tǒng)共需使用16個(gè)按鍵,故選擇的矩陣鍵盤。鍵盤接口電路如圖5所示。圖5 鍵盤接口電路2.2.5 溫度測(cè)量電路設(shè)計(jì) 本系統(tǒng)的溫度測(cè)量電路采用DS18B20來實(shí)現(xiàn)。DS18B20是美國DALLAS半導(dǎo)體公司推出的第一片采用“一線總線”接口的溫度傳感器,它具有微型化、低功耗、高性能、抗干擾、能力強(qiáng)、易配微處理器等優(yōu)點(diǎn),可直接將溫度轉(zhuǎn)化成串行數(shù)字信號(hào)供處理器處理。DS18B20的性能及特點(diǎn)2:l 適應(yīng)電壓范圍寬,電壓范圍在,在寄生電源方式下可由數(shù)據(jù)線供

13、電。l 獨(dú)特的單線接口方式,它與微處理器連接時(shí)僅需一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通信。l 支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測(cè)溫。l 在使用中不需要任何外接元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路里。l 測(cè)溫范圍-55+125,在-10+85時(shí)精度為±0.5。l 可編程分辨率為912位,對(duì)應(yīng)的可分辨溫度分別為0.5,0.25,0.125和0.0625,可實(shí)現(xiàn)高精度測(cè)溫。l 在9位分辨率時(shí),最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字;12位分辨率時(shí),最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字。l 測(cè)量結(jié)果直接輸出數(shù)字溫度信號(hào)

14、,以“一線總線”串行傳送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力。l 負(fù)壓特性。電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀,但不能正常工作。系統(tǒng)溫度測(cè)量電路如圖6所示。圖6 溫度測(cè)量電路2.2.6 系統(tǒng)顯示電路設(shè)計(jì)本系統(tǒng)采用LCD1602作為系統(tǒng)的顯示器件,1602字符型液晶是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊,能分兩行顯示,它有若干個(gè)或者等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符。1602型液晶接口信號(hào)如下:l 1腳VSS:電源地。l 2腳VDD:電源正極。l 3腳VO:液晶顯示對(duì)比度調(diào)節(jié)端。l 4腳RS:數(shù)據(jù)/命令選擇端(H/L)。l 5腳R/:讀寫選擇

15、端(H/L)。l 6腳E:使能信號(hào)。l 腳:數(shù)據(jù)口。l 15腳BL1:背光電源正極。l 16腳BL2:背光電源負(fù)極。系統(tǒng)顯示電路如圖7所示。圖7 系統(tǒng)顯示電路2.2.7 輸出控制電路設(shè)計(jì)系統(tǒng)要求在當(dāng)前室溫低于設(shè)定溫度時(shí),能夠自動(dòng)驅(qū)動(dòng)加熱系統(tǒng)工作 ;在當(dāng)前室溫高于設(shè)定溫度時(shí)能夠自動(dòng)驅(qū)動(dòng)制冷系統(tǒng)工作。本系統(tǒng)在復(fù)位后即置P26腳和P27腳為低電平,在當(dāng)前室溫低于設(shè)定溫度時(shí),通過置P27腳為高電平來驅(qū)動(dòng)后級(jí)加熱系統(tǒng),本系統(tǒng)采用紅色LED來代替加熱系統(tǒng);在當(dāng)前室溫高于設(shè)定溫度時(shí),通過置P26腳高電平來驅(qū)動(dòng)后級(jí)制冷系統(tǒng),本系統(tǒng)采用藍(lán)色LED來代替制冷系統(tǒng)。輸出控制電路如圖8所示。圖8 輸出控制電路2.3

16、總電路設(shè)計(jì)系統(tǒng)總電路圖如圖9所示。圖9 系統(tǒng)總電路圖2.4 系統(tǒng)所用元器件本系統(tǒng)所用的元器件清單如表1所示。 表1 系統(tǒng)所用元器件元器件名稱數(shù)量點(diǎn)觸式開關(guān)1630pF瓷片電容210uF電解電容1藍(lán)色LED1紅色RED15V電源插座1自鎖開關(guān)1LCD160211/4W10K電阻310K可調(diào)電阻1AT89C521DS18B20112MHz晶振13 軟件系統(tǒng)設(shè)計(jì)3.1 軟件系統(tǒng)總體方案設(shè)計(jì) 系統(tǒng)軟件由主程序模塊、測(cè)溫程序模塊、鍵盤掃描程序模塊以及液晶驅(qū)動(dòng)程序模塊組成。3.2 軟件流程圖設(shè)計(jì)系統(tǒng)軟件流程圖如圖10所示。圖10 系統(tǒng)軟件流程圖4 系統(tǒng)調(diào)試程序在Keil uVision4環(huán)境下編寫,編譯通

17、過后生成.hex文件加載到Protuse下可正常運(yùn)行。程序默認(rèn)溫度為21.0,Protuse下設(shè)定DS18B20的溫度也為21.0,故開始運(yùn)行時(shí)兩路LED燈都不點(diǎn)亮。當(dāng)利用鍵盤設(shè)定的溫度高于DS18B20默認(rèn)的21.0時(shí),紅色LED燈被點(diǎn)亮;當(dāng)設(shè)定的溫度低于DS18B20默認(rèn)的21.0時(shí),藍(lán)色LED燈被點(diǎn)亮。附上仿真圖當(dāng)設(shè)定的溫度高于DS18B20默認(rèn)的21.0時(shí),紅色LED燈被點(diǎn)亮,如圖11所示。圖11 紅色LED燈點(diǎn)亮當(dāng)設(shè)定的溫度低于DS18B20默認(rèn)的21.0時(shí),藍(lán)色LED燈被點(diǎn)亮。如圖12所示。圖12 藍(lán)色LED燈點(diǎn)亮 5 總結(jié)5.1 本系統(tǒng)存在的問題及改進(jìn)措施本系統(tǒng)所設(shè)計(jì)的空調(diào)溫度控

18、制器僅對(duì)溫度部分實(shí)現(xiàn)了控制,但對(duì)于實(shí)際空調(diào)中的模式選擇以及定時(shí)運(yùn)行等工作過程還無法實(shí)現(xiàn),希望在以后的學(xué)習(xí)研究中能夠解決這些問題。5.2 心得體會(huì) 本次課程設(shè)計(jì)從獲得題目開始便著手準(zhǔn)備,首先分析系統(tǒng)要求,在Protuse里完成硬件原理圖的搭建,然后開始在Keil環(huán)境下著手編寫各部分程序,調(diào)試相應(yīng)的程序,在調(diào)試通過后再下載到Protuse里進(jìn)行仿真,發(fā)現(xiàn)問題后再返回Keil下修改相應(yīng)程序,直到最后仿真通過,最后在Altium Designer 6中畫出電路原理圖。在本次課程設(shè)計(jì)過程中得到了老師以及許多同學(xué)的幫助,感謝那些提供過幫助的老師和同學(xué)。參考文獻(xiàn)1 郭文川主編. 單片機(jī)原理與接口技術(shù). 北京

19、:中國農(nóng)業(yè)出版社,2007.2 郭天祥主編. 51單片機(jī)C語言教程. 北京:電子工業(yè)出版社,2009.附錄1:系統(tǒng)的源程序清單global.h:ifndef _global_H#define _global_H#include<reg52.h>#define uchar unsigned char/宏定義#define uint unsigned int#defineK_UP 0X20/定義鍵值#defineK_DOWN 0X21#defineK_CLEAR 0X24#defineK_OK 0X25#defineK_ONE 0X30#defineK_FOUR 0X31#define

20、K_SEVEN 0X32#defineK_POINT 0X33#defineK_TWO 0X34#defineK_FIVE 0X43#defineK_EIGHT0X36#defineK_ZERO0X37#defineK_THREE0X38#defineK_SIX 0X40#defineK_NINE0X41#defineK_SET 0X42extern float TEMP_NOW;extern float TEMP_SET;extern uint T_Count;extern uint S_Count;extern uint P_Count;extern uint N_Count;extern

21、 uint M_Count;extern uchar Current_Temp_Display_Buffer;extern uchar set_Temp_Display_Buffer;extern int sel;sbit lcden=P21;/液晶使能sbit lcdrs=P20;/液晶數(shù)據(jù)/命令選擇端sbit DQ =P22;/DS18B20數(shù)據(jù)端sbit XX =P25;/讀寫選擇端sbit cold =P26;/輸出信號(hào)sbit warm =P27;/輸出信號(hào)#endifmain.c:#include<reg52.h>#include"global.h"

22、#include"key.h"#include"18B20.h"#include"LCD.h"/全局變量/float TEMP_NOW=0.0;float TEMP_SET=21.0;uint T_Count=0;uint S_Count=0;uint P_Count=0;uint N_Count=0;uint M_Count=1;uchar Current_Temp_Display_Buffer=" NOW:-23.5 "uchar set_Temp_Display_Buffer= " SET: 21.

23、0 "int sel=0;void Comparison();/定時(shí)/void timer0_init(void)TMOD =0x00 ; /設(shè)置定時(shí)器0的工作方式TH0 = (8192-5000)/32;/單片機(jī)晶振為12MHz,機(jī)器周期為1us,t=5ms, /N=5000/1=5000TL0 = (8192-5000)%32;IE =0x82;TR0=1;void timer0() interrupt 1 TH0 = (8192-5000)/32;TL0 = (8192-5000)%32; if(+T_Count = 100) /100為0.5s TR0=0;Read_Temp

24、erature();Display_Temperature() ;T_Count=0;if(+P_Count = 6) N_Count=1; TR0=1;/主程序/void main()init_lcd();Init_DS18B20();timer0_init();while(1)Print();set_num();Comparison();void Comparison()if(N_Count&&M_Count)if(TEMP_NOW<TEMP_SET)warm=1;cold=0;if(TEMP_NOW>TEMP_SET)cold=1;warm=0;if(TEMP

25、_NOW=TEMP_SET)cold=0;warm=0;18B20.h:#ifndef _18B20_H#define _18B20_H#include"global.h"extern uchar Init_DS18B20(); extern void Read_Temperature();extern void Display_Temperature();#endif18B20.c:#include"global.h"#include "intrins.h"#define delayNOP() _nop_();_nop_();_no

26、p_();_nop_();uchar code Temperature_Char8 = 0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00;uchar code df_Table=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;uchar CurrentT = 0;uchar Temp_Value=0x00,0x00;uchar Display_Digit=0,0,0,0;bit DS18B20_IS_OK = 1;void Delay_INI(uint x) while(-x);void Delay(unsigned int n)do_nop_()

27、;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();n-;while(n);uchar Init_DS18B20() uchar status;DQ = 1;Delay_INI(8);DQ = 0;Delay_INI(90);DQ = 1;Delay_INI(8);status=DQ;Delay_INI(100);DQ = 1;return status;uchar ReadOneByte() uchar i,dat=0;DQ = 1;_nop_();for(i=0;i<8;i+) DQ = 0;dat >

28、;>= 1;DQ = 1;_nop_();_nop_();if(DQ)dat |= 0X80;Delay(30);DQ = 1;return dat;void WriteOneByte(uchar dat) uchar i;for(i=0;i<8;i+) DQ = 0;DQ = dat& 0x01;Delay(5);DQ = 1;dat >>= 1;void Read_Temperature() if(Init_DS18B20()=1)DS18B20_IS_OK=0;elseWriteOneByte(0xcc);WriteOneByte(0x44);Init_D

29、S18B20();WriteOneByte(0xcc);WriteOneByte(0xbe);Temp_Value0 = ReadOneByte(); Temp_Value1 = ReadOneByte();DS18B20_IS_OK=1;void Display_Temperature()uchar t = 150, ng = 0;if(Temp_Value1&0xf8)=0xf8) Temp_Value1 = Temp_Value1;Temp_Value0 = Temp_Value0+1;if(Temp_Value0=0x00)Temp_Value1+;ng = 1;Display

30、_Digit0 = df_TableTemp_Value0&0x0f;CurrentT = (Temp_Value0&0xf0)>>4) | (Temp_Value1&0x07)<<4);Display_Digit3 = CurrentT/100;Display_Digit2 = CurrentT%100/10;Display_Digit1 = CurrentT%10;Current_Temp_Display_Buffer11 = Display_Digit0 + '0'Current_Temp_Display_Buffer10

31、= '.'Current_Temp_Display_Buffer9 = Display_Digit1 + '0'Current_Temp_Display_Buffer8 = Display_Digit2 + '0'Current_Temp_Display_Buffer7 = Display_Digit3 + '0'TEMP_NOW=Display_Digit2*10+Display_Digit1+Display_Digit0*0.1 ;if(Display_Digit3 = 0)Current_Temp_Display_Buffe

32、r7 = ' 'if(Display_Digit2 = 0&&Display_Digit3=0)Current_Temp_Display_Buffer8 = ' 'if(ng)TEMP_NOW=-(Display_Digit2*10+Display_Digit1+Display_Digit0*0.1); if(Current_Temp_Display_Buffer8 = ' ')Current_Temp_Display_Buffer8 = '-'else if(Current_Temp_Display_Buffer

33、7 = ' ')Current_Temp_Display_Buffer7 = '-'else Current_Temp_Display_Buffer6 = '-' KEY.h:#ifndef _KEY_H#define _KEY_H#include<global.h>extern unsigned char Keys_Scan();extern void set_num();extern void set();#endifKEY.c:#include <reg52.h>#include <intrins.h>#

34、include <global.h>#include"18B20.h"uchar code KeyCodeTable= 0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88;void Delay_key() uchar i;for(i=0;i<200;i+);uchar Keys_Scan() uchar sCode,kCode,k;P3 = 0xf0;if(P3&0xf0)!=0xf0) Delay_key();if(P3&0xf0)

35、!=0xf0) sCode = 0xfe;for(k=0;k<4;k+) P3 = sCode;if(P3&0xf0)!=0xf0) kCode = P3;if(kCode = KeyCodeTable0) return K_ONE; else if(kCode = KeyCodeTable1) return K_TWO;else if(kCode = KeyCodeTable2) return K_THREE;else if(kCode = KeyCodeTable3) return K_FOUR;else if(kCode = KeyCodeTable4) return K_

36、FIVE;else if(kCode = KeyCodeTable5) return K_SIX;else if(kCode = KeyCodeTable6) return K_SEVEN;else if(kCode = KeyCodeTable7) return K_EIGHT;else if(kCode = KeyCodeTable8) return K_NINE;else if(kCode = KeyCodeTable9) return K_UP;else if(kCode = KeyCodeTable10) return K_DOWN;else if(kCode = KeyCodeTa

37、ble11) return K_CLEAR;else if(kCode = KeyCodeTable12) return K_OK;else if(kCode = KeyCodeTable13) return K_ZERO;else if(kCode = KeyCodeTable14) return K_POINT;else if(kCode = KeyCodeTable15) return K_SET;else sCode = _crol_(sCode,1);return -1;void set_num()uchar key;if(sel=0)key = Keys_Scan(); if(K_

38、CLEAR = key)while(Keys_Scan() = K_CLEAR);set_Temp_Display_Buffer8 =' 'set_Temp_Display_Buffer9 =' 'set_Temp_Display_Buffer10=' 'set_Temp_Display_Buffer11=' ' / 48(0)49(1)50(2)51(3)52(4)53(5)54(6)55(7)56(8)57(9)M_Count=0;cold=0;warm=0; if(K_UP = key)while(Keys_Scan() =

39、 K_UP);if(set_Temp_Display_Buffer11>47)&&(set_Temp_Display_Buffer11<57)set_Temp_Display_Buffer11+=1; else if(set_Temp_Display_Buffer11=57) set_Temp_Display_Buffer11=48;if(set_Temp_Display_Buffer9>47)&&(set_Temp_Display_Buffer9<57)set_Temp_Display_Buffer9+=1;else if(set_Te

40、mp_Display_Buffer9=57)set_Temp_Display_Buffer9=48;if(set_Temp_Display_Buffer8>47)&&(set_Temp_Display_Buffer8<57) set_Temp_Display_Buffer8+=1;else if(set_Temp_Display_Buffer8=57) set_Temp_Display_Buffer8=48; if(K_DOWN = key) / 48(0)49(1)50(2)51(3)52(4)53(5)54(6)55(7)56(8)57(9)while(Keys

41、_Scan() = K_DOWN);if(set_Temp_Display_Buffer11>48)&&(set_Temp_Display_Buffer11<58)set_Temp_Display_Buffer11-=1; else if(set_Temp_Display_Buffer11=48) set_Temp_Display_Buffer11=57;if(set_Temp_Display_Buffer9>48)&&(set_Temp_Display_Buffer9<58)set_Temp_Display_Buffer9-=1;els

42、e if(set_Temp_Display_Buffer9=48)set_Temp_Display_Buffer9=57;if(set_Temp_Display_Buffer8>48)&&(set_Temp_Display_Buffer8<58) set_Temp_Display_Buffer8-=1;else if(set_Temp_Display_Buffer8=48) set_Temp_Display_Buffer8=57; if(K_ONE = key)while(Keys_Scan() = K_ONE);set_Temp_Display_Buffer11=

43、'1'sel+;if(K_TWO = key)while(Keys_Scan() = K_TWO);set_Temp_Display_Buffer11='2'sel+;if(K_THREE = key)while(Keys_Scan() = K_THREE);set_Temp_Display_Buffer11='3'sel+;if(K_FOUR = key)while(Keys_Scan() = K_FOUR);set_Temp_Display_Buffer11='4'sel+;if(K_FIVE = key)while(Keys

44、_Scan() = K_FIVE);set_Temp_Display_Buffer11='5'sel+;if(K_SIX = key)while(Keys_Scan() = K_SIX);set_Temp_Display_Buffer11='6'sel+;if(K_SEVEN = key)while(Keys_Scan() = K_SEVEN);set_Temp_Display_Buffer11='7'sel+;if(K_EIGHT = key)while(Keys_Scan() = K_EIGHT);set_Temp_Display_Buffe

45、r11='8'sel+;if(K_NINE = key)while(Keys_Scan() = K_NINE);set_Temp_Display_Buffer11='9'sel+;if(K_ZERO = key)while(Keys_Scan() = K_ZERO);set_Temp_Display_Buffer11='0'sel+;if(K_OK = key)while(Keys_Scan() = K_OK);TEMP_SET=(set_Temp_Display_Buffer8-48)*10+(set_Temp_Display_Buffer9-

46、48)+(set_Temp_Display_Buffer11-48)*0.1;sel=0;M_Count=1;if(sel=1)key = Keys_Scan();if(K_CLEAR = key)while(Keys_Scan() = K_CLEAR);set_Temp_Display_Buffer8 =' 'set_Temp_Display_Buffer9 =' 'set_Temp_Display_Buffer10=' 'set_Temp_Display_Buffer11=' ' M_Count=0;cold=0;warm=0

47、;sel=0; if(K_ONE = key)while(Keys_Scan() = K_ONE);set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11='1'sel+;if(K_TWO = key)while(Keys_Scan() = K_TWO);set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11='2'sel+;if(K_THREE = key)w

48、hile(Keys_Scan() = K_THREE);set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11='3'sel+;if(K_FOUR = key)while(Keys_Scan() = K_FOUR);set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11='4'sel+;if(K_FIVE = key)while(Keys_Scan() = K_

49、FIVE);set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11='5'sel+;if(K_SIX = key)while(Keys_Scan() = K_SIX);set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11='6'sel+;if(K_SEVEN = key)while(Keys_Scan() = K_SEVEN);set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp

溫馨提示

  • 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)論