




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、1 / 43接口 技術(shù)課程設(shè)計報告基于單片機的空調(diào)溫度控制器設(shè)計基于單片機的空調(diào)溫度控制器設(shè)計2 / 43摘 要設(shè)計了基于 AT89C52 的高精度家用空調(diào)溫度控制系統(tǒng),系統(tǒng)硬件主要由電源電路、溫度采集電路(DS18B20) 、鍵盤、顯示電路、輸出控制電路與其他輔助電路組成;軟件采用 8051C 語言編程;該系統(tǒng)可以完成溫度的顯示、溫度的設(shè)定、空調(diào)的控制等多項功能。關(guān)鍵詞:單片機;DS18B20;溫度檢測;顯示3 / 43目錄目錄1 設(shè)計目的與要求 .11.1 設(shè)計目的和意義 11.2 設(shè)計任務(wù)與要求 12 硬件電路設(shè)計 .22.1 總體方案設(shè)計 22.2 功能模塊電路設(shè)計 32.2.1 單片
2、機的選型 32.2.2 振蕩電路設(shè)計 52.2.3 復(fù)位電路設(shè)計 52.2.4 鍵盤接口電路設(shè)計 62.2.5 溫度測量電路設(shè)計 62.2.6 系統(tǒng)顯示電路設(shè)計 72.2.7 輸出控制電路設(shè)計 82.3 總電路設(shè)計 82.4 系統(tǒng)所用元器件 93 軟件系統(tǒng)設(shè)計 .103.1 軟件系統(tǒng)總體方案設(shè)計 103.2 軟件流程圖設(shè)計 104 系統(tǒng)調(diào)試 .125 總結(jié) .135.1 本系統(tǒng)存在的問題與改進措施 13參考文獻 .14附錄 1:系統(tǒng)的源程序清單.15附錄 2:系統(tǒng)的 PCB 圖.391 / 431 設(shè)計目的與要求1.1 設(shè)計目的和意義21 世紀(jì)的人們生活質(zhì)量不斷提高,同時也對高科技電子產(chǎn)業(yè)提出
3、了更高的要求,為了使人們生活更人性化、智能化。我設(shè)計了這一基于單片機的空調(diào)溫度控制系統(tǒng),人們只有生活在一定的溫度環(huán)境才能長期感覺舒服,才能保證不中暑不受凍,所以對室溫度要求要高。對于不同地區(qū)空調(diào)要求不同,有的需要升溫,有的需要降溫。一般都要維持在 2126C。目前,雖然我國大量生產(chǎn)空調(diào)制冷產(chǎn)品,但由于我國人口眾多,需求量過盛,在我國的北方地區(qū),還有好多家庭還沒有安裝有效地室溫控系統(tǒng)。溫度不能很好的控制在一定的圍,夏天室溫度過高,冬天溫度過低,這些均對人們正常生活帶來不利的影響,溫度、濕度均達不到人們的要求。以前溫度控制主要利用機械通風(fēng)設(shè)備進行室、外空氣的交換來達到降低室溫度,實現(xiàn)室溫度適宜人們
4、生活。以前通風(fēng)設(shè)備的開啟和關(guān)停,均是由人手動控制的,即由人們定時查看室外的溫度、濕度情況,按要求開關(guān)通風(fēng)設(shè)備,這樣人們的勞動強度大,可靠性差,而且消耗人們體力,勞累成本過高。為此,需要有一種符合機械溫控要求的低成本的控制器,在溫差和濕度超過用戶設(shè)定值圍時,啟動制冷通風(fēng)設(shè)備,否則自動關(guān)閉制冷通風(fēng)設(shè)備。鑒于目前大多數(shù)制冷設(shè)備現(xiàn)在狀況,我設(shè)計了一款基于 MCS51 單片機的空調(diào)溫度控制系統(tǒng)。1.2 設(shè)計任務(wù)與要求系統(tǒng)要求利用單片機設(shè)計一空調(diào)溫度控制器,能夠?qū)崟r檢測并顯示室溫,能夠利用鍵盤設(shè)定溫度,并且和室溫進行比較,當(dāng)室溫低于設(shè)定溫度時,系統(tǒng)能夠驅(qū)動加熱系統(tǒng)工作,當(dāng)室溫高于設(shè)定溫度時,系統(tǒng)能夠驅(qū)動制
5、冷系統(tǒng)工作,當(dāng)兩者溫度相等時,不做動作。2 / 432 硬件電路設(shè)計2.1 總體方案設(shè)計空調(diào)溫度控制系統(tǒng),主要要完成對溫度的采集、顯示以與設(shè)定等工作,從而實現(xiàn)對空調(diào)的控制。傳統(tǒng)采用鉑電阻充當(dāng)測溫器件的方案,雖然其中段測量線性度好,精度較高,但是測量電路的設(shè)計難度高 ,且測量電路系統(tǒng)龐大,難于調(diào)試 ,而且成本相對較高。鑒于上述原因,本系統(tǒng)采用 DS18B20 充當(dāng)測溫器件。外部溫度信號經(jīng) DS18B20 將輸入的模擬信號轉(zhuǎn)換成 8 位的數(shù)字信號, 通過并 口傳送到單片機系統(tǒng)( AT89C52) 。單片機系統(tǒng)將接收的數(shù)字信號譯碼處理,通過 LCD1602 將溫度顯示出來,同時單片機系統(tǒng)還將完成鍵盤
6、掃描 、按鍵溫度設(shè)定、超溫報警等程序的處理 ,將處理的溫度信號與系統(tǒng)設(shè)定溫度值比較,形成可以控制空調(diào)制冷、制熱與停止工作三種工作狀態(tài),從而實現(xiàn)空調(diào)的智能化。另外,鍵盤輸入方面,采用了軟件來修正誤操作輸入 ,即輸入的溫度圍必須在系統(tǒng)硬件所確定的圍,直接降低由于誤操作帶來的風(fēng)險,提高了系統(tǒng)的可靠性 ,體現(xiàn)了人性化的系統(tǒng)設(shè)計原則。系統(tǒng)的整體框圖如圖 1 所示:圖圖1 1 系統(tǒng)整體框圖系統(tǒng)整體框圖3 / 432.2 功能模塊電路設(shè)計2.2.1 單片機的選型由于本系統(tǒng)只需要單片機完成矩陣鍵盤檢測以與處理 DS18B20 送來的溫度數(shù)據(jù)并送 LCD1602 進行顯示對于 I/O 資源以與處理速度無特殊要求
7、,故選擇 ATMEL 公司生產(chǎn)的 AT89C52 單片機,AT89C52 增加了在線調(diào)試功能,即程序可以通過 JTAG 接口下載,調(diào)試和固化,因而該芯片的開發(fā)不再需要昂貴的硬件仿真器,可實現(xiàn)實時仿真,所有的資源都可以為用戶所使用,可以在線編程或在系統(tǒng)編程,更進一步地說,在線編程或在系統(tǒng)編程是開發(fā)的系統(tǒng)具有了通過網(wǎng)絡(luò)進行升級、維護的潛在功能。AT89C52 的性能與特點1:與 MCS-51 系列單片機兼容。片有 8K 可在線重復(fù)編程的快速 存可擦寫存儲器(Flash Memory) 。存儲器可循環(huán)寫入/擦寫 10000 次以上。存儲器數(shù)據(jù)保存時間為 10 年以上。寬工作電壓圍:Vcc 可為 2.
8、7V-6.5V。全靜態(tài)工作:可從 0Hz-24MHz。程序存儲器具有三級加密保護。256 字節(jié)的部 RAM。32 條可編程 I/O 口線。三個 16 位定時器/計數(shù)器。中斷結(jié)構(gòu)具有 5 級(6 級)中斷源和兩個優(yōu)下級。可編程全雙工串行通訊??臻e維持低功耗和掉電狀態(tài)保護存儲數(shù)據(jù)。 AT89C52 引腳圖如圖 2 所示。4 / 43圖圖 2 2 AT89C52AT89C52 引腳圖引腳圖VCC: +5V 電源輸入GND:接地P0 口是一個雙向 8 位三態(tài) I/O 口,每個口可獨立控制。使用時需外接上拉電阻。P1 口是一個準(zhǔn)雙向 8 位 I/O 口,它的功能是單一的,只能用作數(shù)據(jù)的輸入或者輸出。P2
9、 口是一個準(zhǔn)雙向 8 位 I/O 口,輸出時,從 P2.x 端口可輸出 CPU 寫到鎖存器上的信號。當(dāng)該接口用做數(shù)據(jù)輸入接口是,應(yīng)先向該位寫 1,然后,讀該位即可讀入輸入數(shù)據(jù)。P3 口是具有第二功能的準(zhǔn)雙向 8 位 I/O 口。ALE/PROG:地址所存/編程信號線。當(dāng) P0 口工作在第二功能時從該端口可復(fù)用工作,某時刻該端口可以送出地址信號 A0A7,而另外的時刻該端口傳送的是數(shù)據(jù)信號D0D7。利用 ALE 可以將地址信號 A0A7 鎖存到地址鎖存器。/VPP:該控制信號線也具有雙重功能,是允許訪問片外 ROM/編程高電壓引線。EA5 / 43:程序存儲器允許輸出控制端,常用作片外 ROM
10、的讀控制信號,低電平有PSEN效。RESET:復(fù)位引腳,當(dāng)該端加上超過 24 個時鐘周期的高電平時,可是 8051 復(fù)位。系統(tǒng)復(fù)位電路如圖 2.3 所示。X1、X2:外接時鐘引腳。X1 為片振蕩電路的輸入端,X2 為片振蕩電路的輸出端。2.2.2 振蕩電路設(shè)計AT89C52 部有一個用于構(gòu)成片振蕩器的高增益反相放大器, 振蕩器產(chǎn)生的信號送到CPU, 作為 CPU 的時鐘信號,驅(qū)動 CPU 產(chǎn)生執(zhí)行指令功能的機器周期。引腳 XTAL1 和XTAL2 是此放大器的輸人端和輸出端。這個放大器與作為反饋元件的片外石英晶體或瓷諧振器一起可構(gòu)成一個自激振蕩器, 振蕩電路的連接如圖所示圖 8 所示,外接石英
11、晶體或瓷諧振器以與電容 C1 和 C2 構(gòu)成并聯(lián)諧振電路, 接在放大器的反饋回路中。對外接電容 C1 和 C2 的值雖然沒有嚴(yán)格的要求, 但電容的大小多少會影響振蕩器頻率的高低、振蕩器的穩(wěn)定性、起振圈部振蕩的接法的快速性和溫度穩(wěn)定性。外接石英晶體時, C1 和 C2 一般?。?0pF-10pF) ,外接的是石英晶體, 所以,C1、C2 選擇標(biāo)稱值 30pF。系統(tǒng)振蕩電路如圖 3 所示。圖圖 3 3 振蕩電路振蕩電路2.2.3 復(fù)位電路設(shè)計單片機復(fù)位是使 CPU 和系統(tǒng)中的其他功能部件都處在一個確定的初始狀態(tài), 并從這個狀態(tài)開始工作。無論是在單片機剛開始接上電源時, 還是斷電后或者發(fā)生故障后都要
12、復(fù)位。89 系列單片機的復(fù)位信號是從 RST 引腳輸人到芯片的施密特觸發(fā)器中的。當(dāng)系統(tǒng)處于正常工作狀態(tài)時, 且振蕩器穩(wěn)定后, 如果 RST 引腳有一個高電平并維持 2個機器周期(24 個振蕩周期), 則 CPU 就可響應(yīng)并且將系統(tǒng)復(fù)位。復(fù)位分為手動復(fù)位和上電復(fù)位。本設(shè)計系統(tǒng)采用的是上電自動復(fù)位。系統(tǒng)復(fù)位電路如圖 4 所示。6 / 43圖圖 4 4 復(fù)位電路復(fù)位電路2.2.4 鍵盤接口電路設(shè)計獨立鍵盤與單片機連接時,每個按鍵都需要單片機的一個 I/O 口,若單片機系統(tǒng)需要較多按鍵,如果用獨立按鍵會占用過多的 I/O 口資源。單片機系統(tǒng)中 I/O 口資源往往比較寶貴,當(dāng)用到多個按鍵時,為了節(jié)省 I
13、/O 口線,一般需使用矩陣鍵盤。本系統(tǒng)共需使用 16 個按鍵,故選擇的矩陣鍵盤。鍵盤接口電路如圖 5 所示。44圖圖 5 5 鍵盤接口電路鍵盤接口電路2.2.5 溫度測量電路設(shè)計 本系統(tǒng)的溫度測量電路采用 DS18B20 來實現(xiàn)。DS18B20 是美國 DALLAS 半導(dǎo)體公司推出的第一片采用“一線總線”接口的溫度傳感器,它具有微型化、低功耗、高性能、抗干擾、能力強、易配微處理器等優(yōu)點,可直接將溫度轉(zhuǎn)化成串行數(shù)字信號供處理器處理。DS18B20 的性能與特點2:適應(yīng)電壓圍寬,電壓圍在,在寄生電源方式下可由數(shù)據(jù)線供電。V5 . 50 . 3獨特的單線接口方式,它與微處理器連接時僅需一條口線即可實
14、現(xiàn)微處理器與7 / 43DS18B20 的雙向通信。支持多點組網(wǎng)功能,多個 DS18B20 可以并聯(lián)在唯一的三線上,實現(xiàn)組網(wǎng)多點測溫。在使用中不需要任何外接元件,全部傳感元件與轉(zhuǎn)換電路集成在形如一只三極管的集成電路里。測溫圍-55+125,在-10+85時精度為0.5。可編程分辨率為 912 位,對應(yīng)的可分辨溫度分別為 0.5,0.25,0.125和 0.0625,可實現(xiàn)高精度測溫。在 9 位分辨率時,最多在 93.75ms 把溫度轉(zhuǎn)換為數(shù)字;12 位分辨率時,最多在750ms 把溫度值轉(zhuǎn)換為數(shù)字。測量結(jié)果直接輸出數(shù)字溫度信號,以“一線總線”串行傳送給 CPU,同時可傳送 CRC 校驗碼,具有
15、極強的抗干擾糾錯能力。負(fù)壓特性。電源極性接反時,芯片不會因發(fā)熱而燒毀,但不能正常工作。系統(tǒng)溫度測量電路如圖 6 所示。圖圖 6 6 溫度測量電路溫度測量電路2.2.6 系統(tǒng)顯示電路設(shè)計本系統(tǒng)采用 LCD1602 作為系統(tǒng)的顯示器件,1602 字符型液晶是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊,能分兩行顯示,它有若干個或者等75115點陣字符位組成,每個點陣字符位都可以顯示一個字符。1602 型液晶接口信號如下:1 腳 VSS:電源地。2 腳 VDD:電源正極。3 腳 VO:液晶顯示對比度調(diào)節(jié)端。4 腳 RS:數(shù)據(jù)/命令選擇端(H/L)。5 腳 R/:讀寫選擇端(H/L) 。W6 腳
16、 E:使能信號。腳:數(shù)據(jù)口。147D7D015 腳 BL1:背光電源正極。16 腳 BL2:背光電源負(fù)極。系統(tǒng)顯示電路如圖 7 所示。8 / 43圖圖 7 7 系統(tǒng)顯示電路系統(tǒng)顯示電路2.2.7 輸出控制電路設(shè)計系統(tǒng)要求在當(dāng)前室溫低于設(shè)定溫度時,能夠自動驅(qū)動加熱系統(tǒng)工作 ;在當(dāng)前室溫高于設(shè)定溫度時能夠自動驅(qū)動制冷系統(tǒng)工作。本系統(tǒng)在復(fù)位后即置 P26 腳和 P27 腳為低電平,在當(dāng)前室溫低于設(shè)定溫度時,通過置 P27 腳為高電平來驅(qū)動后級加熱系統(tǒng),本系統(tǒng)采用紅色 LED 來代替加熱系統(tǒng);在當(dāng)前室溫高于設(shè)定溫度時,通過置 P26 腳高電平來驅(qū)動后級制冷系統(tǒng),本系統(tǒng)采用藍(lán)色 LED 來代替制冷系統(tǒng)。
17、輸出控制電路如圖 8 所示。圖圖 8 8 輸出控制電路輸出控制電路2.3 總電路設(shè)計系統(tǒng)總電路圖如圖 9 所示。9 / 43圖圖 9 9 系統(tǒng)總電路圖系統(tǒng)總電路圖2.4 系統(tǒng)所用元器件本系統(tǒng)所用的元器件清單如表 1 所示。表表 1 1 系統(tǒng)所用元器件系統(tǒng)所用元器件元器件名稱元器件名稱數(shù)量數(shù)量點觸式開關(guān)1630pF 瓷片電容210uF 電解電容1藍(lán)色 LED1紅色 RED15V 電源插座1自鎖開關(guān)1LCD160211/4W10K 電阻310K 可調(diào)電阻1AT89C521DS18B20112MHz 晶振110 / 433 軟件系統(tǒng)設(shè)計3.1 軟件系統(tǒng)總體方案設(shè)計 系統(tǒng)軟件由主程序模塊、測溫程序模塊
18、、鍵盤掃描程序模塊以與液晶驅(qū)動程序模塊組成。3.2 軟件流程圖設(shè)計系統(tǒng)軟件流程圖如圖 10 所示。圖圖 1010 系統(tǒng)軟件流程圖系統(tǒng)軟件流程圖11 / 434 4 系統(tǒng)調(diào)試系統(tǒng)調(diào)試程序在 Keil uVision4 環(huán)境下編寫,編譯通過后生成. .hex 文件加載到 Protuse 下可正常運行。程序默認(rèn)溫度為 21.0,Protuse 下設(shè)定 DS18B20 的溫度也為 21.0,故開始運行時兩路 LED 燈都不點亮。當(dāng)利用鍵盤設(shè)定的溫度高于 DS18B20 默認(rèn)的21.0時,紅色 LED 燈被點亮;當(dāng)設(shè)定的溫度低于 DS18B20 默認(rèn)的 21.0時,藍(lán)色LED 燈被點亮。附上仿真圖當(dāng)設(shè)定
19、的溫度高于 DS18B20 默認(rèn)的 21.0時,紅色 LED 燈被點亮,如圖 11 所示。圖圖 1111 紅色紅色 LEDLED 燈點亮燈點亮當(dāng)設(shè)定的溫度低于 DS18B20 默認(rèn)的 21.0時,藍(lán)色 LED 燈被點亮。如圖 12 所示。12 / 43圖圖 1212 藍(lán)色藍(lán)色 LEDLED 燈點亮燈點亮13 / 435 5 總結(jié)總結(jié)5.1 本系統(tǒng)存在的問題與改進措施本系統(tǒng)所設(shè)計的空調(diào)溫度控制器僅對溫度部分實現(xiàn)了控制,但對于實際空調(diào)中的模式選擇以與定時運行等工作過程還無法實現(xiàn),希望在以后的學(xué)習(xí)研究中能夠解決這些問題。5.2 心得體會 本次課程設(shè)計從獲得題目開始便著手準(zhǔn)備,首先分析系統(tǒng)要求,在 P
20、rotuse 里完成硬件原理圖的搭建,然后開始在 Keil 環(huán)境下著手編寫各部分程序,調(diào)試相應(yīng)的程序,在調(diào)試通過后再下載到 Protuse 里進行仿真,發(fā)現(xiàn)問題后再返回 Keil 下修改相應(yīng)程序,直到最后仿真通過,最后在 Altium Designer 6 中畫出電路原理圖。在本次課程設(shè)計過程中得到了老師以與許多同學(xué)的幫助,感那些提供過幫助的老師和同學(xué)。14 / 43參考文獻1 郭文川主編. 單片機原理與接口技術(shù). :中國農(nóng)業(yè),2007.2 郭天祥主編. 51 單片機 C 語言教程. :電子工業(yè),2009.15 / 43附錄 1:系統(tǒng)的源程序清單global.hglobal.h:ifndef
21、_global_H#define _global_H#include#define uchar unsigned char/宏定義#define uint unsigned int#defineK_UP0X20/定義鍵值#defineK_DOWN0X21#defineK_CLEAR 0X24#defineK_OK0X25#defineK_ONE0X30#defineK_FOUR0X31#defineK_SEVEN 0X32#defineK_POINT0X33#defineK_TWO0X34#defineK_FIVE0X43#defineK_EIGHT0X36#defineK_ZERO0X37#
22、defineK_THREE0X3816 / 43#defineK_SIX0X40#defineK_NINE0X41#defineK_SET0X42extern float TEMP_NOW;extern float TEMP_SET;extern uint T_Count;extern uint S_Count;extern uint P_Count;extern uint N_Count;extern uint M_Count;extern uchar Current_Temp_Display_Buffer;extern uchar set_Temp_Display_Buffer;exter
23、n int sel;sbit lcden=P21;/液晶使能sbit lcdrs=P20;/液晶數(shù)據(jù)/命令選擇端sbit DQ =P22;/DS18B20 數(shù)據(jù)端sbit XX =P25;/讀寫選擇端sbit cold =P26;/輸出信號sbit warm =P27;/輸出信號#endifmain.cmain.c:#include#includeglobal.h#includekey.h#include18B20.h#includeLCD.h/全局變量/float TEMP_NOW=0.0;float TEMP_SET=21.0;uint T_Count=0;uint S_Count=0;u
24、int P_Count=0;uint N_Count=0;17 / 43uint M_Count=1;uchar Current_Temp_Display_Buffer= NOW:-23.5 ;uchar set_Temp_Display_Buffer= SET: 21.0 ;int sel=0;void Comparison();/定時/void timer0_init(void)TMOD = 0 x00 ; /設(shè)置定時器 0 的工作方式TH0 = (8192-5000)/32;/單片機晶振為 12MHz,機器周期為 1us,t=5ms, /N=5000/1=5000TL0 = (8192-
25、5000)%32;IE =0 x82;TR0=1;void timer0() interrupt 1 TH0 = (8192-5000)/32;TL0 = (8192-5000)%32; if(+T_Count = 100) /100 為 0.5s TR0=0;Read_Temperature();Display_Temperature() ;T_Count=0;if(+P_Count = 6) N_Count=1; TR0=1;/主程序/void main()18 / 43init_lcd();Init_DS18B20();timer0_init();while(1)Print();set_
26、num();Comparison();void Comparison()if(N_Count&M_Count)if(TEMP_NOWTEMP_SET)cold=1;warm=0;if(TEMP_NOW=TEMP_SET)cold=0;warm=0;18B20.h:18B20.h:#ifndef _18B20_H19 / 43#define _18B20_H#includeglobal.hextern uchar Init_DS18B20(); extern void Read_Temperature();extern void Display_Temperature();#endif1
27、8B20.c:18B20.c:#includeglobal.h#include intrins.h#define delayNOP() _nop_();_nop_();_nop_();_nop_();uchar code Temperature_Char8 = 0 x0c,0 x12,0 x12,0 x0c,0 x00,0 x00,0 x00,0 x00;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=0 x00,0 x00;uchar Display_Digit=0
28、,0,0,0;bit DS18B20_IS_OK = 1;void Delay_INI(uint x) while(-x);void Delay(unsigned int n)do_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();20 / 43n-;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)
29、;DQ = 1;return status;uchar ReadOneByte() uchar i,dat=0;DQ = 1;_nop_();for(i=0;i= 1;DQ = 1;_nop_();_nop_();if(DQ)dat |= 0X80;Delay(30);21 / 43DQ = 1;return dat;void WriteOneByte(uchar dat) uchar i;for(i=0;i= 1;void Read_Temperature() if(Init_DS18B20()=1)DS18B20_IS_OK=0;elseWriteOneByte(0 xcc);WriteO
30、neByte(0 x44);Init_DS18B20();WriteOneByte(0 xcc);WriteOneByte(0 xbe);Temp_Value0 = ReadOneByte(); Temp_Value1 = ReadOneByte();DS18B20_IS_OK=1;void Display_Temperature()22 / 43uchar t = 150, ng = 0;if(Temp_Value1&0 xf8)=0 xf8) Temp_Value1 = Temp_Value1;Temp_Value0 = Temp_Value0+1;if(Temp_Value0=0
31、 x00)Temp_Value1+;ng = 1;Display_Digit0 = df_TableTemp_Value0&0 x0f;CurrentT = (Temp_Value0&0 xf0)4) | (Temp_Value1&0 x07)4);Display_Digit3 = CurrentT/100;Display_Digit2 = CurrentT%100/10;Display_Digit1 = CurrentT%10;Current_Temp_Display_Buffer11 = Display_Digit0 + 0;Current_Temp_Display
32、_Buffer10 = .;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_Buffer7 = ;if(Display_Digit2 =
33、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_Buffer7 = )Current_Temp_Display_Buffer7 = -;23 / 43else Current_Temp_Display_
34、Buffer6 = -; KEY.hKEY.h:#ifndef _KEY_H#define _KEY_H#includeextern unsigned char Keys_Scan();extern void set_num();extern void set();#endifKEY.cKEY.c:#include #include #include #include18B20.huchar code KeyCodeTable= 0 x11,0 x12,0 x14,0 x18,0 x21,0 x22,0 x24,0 x28,0 x41,0 x42,0 x44,0 x48,0 x81,0 x82
35、,0 x84,0 x88;void Delay_key() uchar i;for(i=0;i200;i+);uchar Keys_Scan()24 / 43 uchar sCode,kCode,k;P3 = 0 xf0;if(P3&0 xf0)!=0 xf0) Delay_key();if(P3&0 xf0)!=0 xf0) sCode = 0 xfe;for(k=0;k47)&(set_Temp_Display_Buffer1147)&(set_Temp_Display_Buffer947)&(set_Temp_Display_Buffer848)&
36、amp;(set_Temp_Display_Buffer1148)&(set_Temp_Display_Buffer948)&(set_Temp_Display_Buffer858) 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=1;sel+;if(K_TWO = key)while(Keys_Scan(
37、) = 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);28 / 43set_Temp_Display_Buffer11=4;sel+;if(K_FIVE = key)while(Keys_Scan() = K_FIVE);set_Temp_Display_Buffer11=5;sel+;if(K_SIX = key)w
38、hile(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_Buffer11=8;sel+;if(K_NINE = key)while(Keys_Scan() = K_NINE);set_Temp_Display_Buffer11=9;sel+;if(K_Z
39、ERO = key)29 / 43while(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-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
40、() = 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;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+;30 / 43if(K_TW
41、O = key)while(Keys_Scan() = K_TWO);set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11=2;sel+;if(K_THREE = key)while(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
42、_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11=4;sel+;if(K_FIVE = key)while(Keys_Scan() = K_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_Bu
43、ffer11 ;set_Temp_Display_Buffer11=6;sel+;31 / 43if(K_SEVEN = key)while(Keys_Scan() = K_SEVEN);set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11=7;sel+;if(K_EIGHT = key)while(Keys_Scan() = K_EIGHT);set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buff
44、er11=8;sel+;if(K_NINE = key)while(Keys_Scan() = K_NINE);set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11=9;sel+;if(K_ZERO = key)while(Keys_Scan() = K_ZERO);set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11=0;sel+;if(sel=2)key = Keys_Scan();
45、if(K_CLEAR = key)while(Keys_Scan() = K_CLEAR);32 / 43set_Temp_Display_Buffer8 = ;set_Temp_Display_Buffer9 = ;set_Temp_Display_Buffer10= ;set_Temp_Display_Buffer11= ; M_Count=0;cold=0;warm=0;sel=0; if(K_POINT = key)while(Keys_Scan() = K_POINT);set_Temp_Display_Buffer9=set_Temp_Display_Buffer10 ;set_T
46、emp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11=.;sel+;if(sel=3)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;sel=0; i
47、f(K_ONE = key)33 / 43while(Keys_Scan() = K_ONE);set_Temp_Display_Buffer8=set_Temp_Display_Buffer9 ;set_Temp_Display_Buffer9=set_Temp_Display_Buffer10 ;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_Buff
48、er8=set_Temp_Display_Buffer9 ;set_Temp_Display_Buffer9=set_Temp_Display_Buffer10 ;set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11=2;sel+;if(K_THREE = key)while(Keys_Scan() = K_THREE);set_Temp_Display_Buffer8=set_Temp_Display_Buffer9 ;set_Temp_Display_Buffer9=set_Temp_D
49、isplay_Buffer10 ;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_Buffer8=set_Temp_Display_Buffer9 ;set_Temp_Display_Buffer9=set_Temp_Display_Buffer10 ;set_Temp_Display_Buffer10=set_Temp_Display_Buffer1
50、1 ;set_Temp_Display_Buffer11=4;sel+;if(K_FIVE = key)34 / 43while(Keys_Scan() = K_FIVE);set_Temp_Display_Buffer8=set_Temp_Display_Buffer9 ;set_Temp_Display_Buffer9=set_Temp_Display_Buffer10 ;set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11=5;sel+;if(K_SIX = key)while(Key
51、s_Scan() = K_SIX);set_Temp_Display_Buffer8=set_Temp_Display_Buffer9 ;set_Temp_Display_Buffer9=set_Temp_Display_Buffer10 ;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_Buffer8=set_Temp_Display_Buffe
52、r9 ;set_Temp_Display_Buffer9=set_Temp_Display_Buffer10 ;set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11=7;sel+;if(K_EIGHT = key)while(Keys_Scan() = K_EIGHT);set_Temp_Display_Buffer8=set_Temp_Display_Buffer9 ;set_Temp_Display_Buffer9=set_Temp_Display_Buffer10 ;set_Temp_
53、Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11=8;sel+;35 / 43if(K_NINE = key)while(Keys_Scan() = K_NINE);set_Temp_Display_Buffer8=set_Temp_Display_Buffer9 ;set_Temp_Display_Buffer9=set_Temp_Display_Buffer10 ;set_Temp_Display_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11=9;sel+;if(K_ZERO = key)while(Keys_Scan() = K_ZERO);set_Temp_Display_Buffer8=set_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 知識產(chǎn)權(quán)的跨境保護策略及法律風(fēng)險
- 洗衣合同續(xù)簽合同范本
- 校園科技活動策劃與實施案例分析
- 改造消防合同范本
- 科技中心對未來辦公模式的重塑與影響
- 石墨材料在電子商務(wù)中的營銷模式
- 短視頻營銷與網(wǎng)絡(luò)推廣的案例研究
- 煤礦空氣壓縮機司機職業(yè)技能理論考試題庫150題(含答案)
- 知識產(chǎn)權(quán)登記的未來趨勢與挑戰(zhàn)
- 2025年中央一號文件參考試題庫100題(含答案)
- 第一章-運動選材概述課件
- 藏式建筑簡介優(yōu)質(zhì)課件
- JC-019粉煤灰檢測報告
- 回文詩課件完整版
- 成人學(xué)士學(xué)位英語1000個高頻必考詞匯匯總
- 高中英語 Smartphone a smart choice 課件
- VTE相關(guān)知識考核試題及答案
- YY/T 1537-2017放射治療用激光定位系統(tǒng)性能和試驗方法
- SB/T 10752-2012馬鈴薯雪花全粉
- 高中語文教學(xué)課例《沁園春長沙》課程思政核心素養(yǎng)教學(xué)設(shè)計及總結(jié)反思
- 復(fù)變函數(shù)與積分變換全套課件
評論
0/150
提交評論