版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、 接口 技術(shù)課程設(shè)計報告 基于單片機的空調(diào)溫度控制器設(shè)計基于單片機的空調(diào)溫度控制器設(shè)計 學(xué) 院: 年級專業(yè): 學(xué) 號: 姓 名: 指導(dǎo)教師: 完成時間: 成 績: 摘 要設(shè)計了基于 at89c52 的高精度家用空調(diào)溫度控制系統(tǒng),系統(tǒng)硬件主要由電源電路、溫度采集電路(ds18b20) 、鍵盤、顯示電路、輸出控制電路及其他輔助電路組成;軟件采用 8051c 語言編程;該系統(tǒng)可以完成溫度的顯示、溫度的設(shè)定、空調(diào)的控制等多項功能。關(guān)鍵詞:單片機;ds18b20;溫度檢測;顯示目錄目錄1 設(shè)計目的及要求.11.1 設(shè)計目的和意義.11.2 設(shè)計任務(wù)與要求.12 硬件電路設(shè)計.22.1 總體方案設(shè)計.22
2、.2 功能模塊電路設(shè)計.32.2.1 單片機的選型.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參考文獻(xiàn).14附錄 1:系統(tǒng)的源程序清單.15附錄 2:系統(tǒng)的 pcb 圖.3911 設(shè)計目的及要求1.1 設(shè)計目的和意義21 世紀(jì)的人們生活質(zhì)量不斷提高,
3、同時也對高科技電子產(chǎn)業(yè)提出了更高的要求,為了使人們生活更人性化、智能化。我設(shè)計了這一基于單片機的空調(diào)溫度控制系統(tǒng),人們只有生活在一定的溫度環(huán)境內(nèi)才能長期感覺舒服,才能保證不中暑不受凍,所以對室內(nèi)溫度要求要高。對于不同地區(qū)空調(diào)要求不同,有的需要升溫,有的需要降溫。一般都要維持在 2126c。目前,雖然我國大量生產(chǎn)空調(diào)制冷產(chǎn)品,但由于我國人口眾多,需求量過盛,在我國的北方地區(qū),還有好多家庭還沒有安裝有效地室內(nèi)溫控系統(tǒng)。溫度不能很好的控制在一定的范圍內(nèi),夏天室內(nèi)溫度過高,冬天溫度過低,這些均對人們正常生活帶來不利的影響,溫度、濕度均達(dá)不到人們的要求。以前溫度控制主要利用機械通風(fēng)設(shè)備進行室內(nèi)、外空氣的
4、交換來達(dá)到降低室內(nèi)溫度,實現(xiàn)室內(nèi)溫度適宜人們生活。以前通風(fēng)設(shè)備的開啟和關(guān)停,均是由人手動控制的,即由人們定時查看室內(nèi)外的溫度、濕度情況,按要求開關(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ū)動加
5、熱系統(tǒng)工作,當(dāng)室溫高于設(shè)定溫度時,系統(tǒng)能夠驅(qū)動制冷系統(tǒng)工作,當(dāng)兩者溫度相等時,不做動作。22 硬件電路設(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 將溫
6、度顯示出來,同時單片機系統(tǒng)還將完成鍵盤掃描 、按鍵溫度設(shè)定、超溫報警等程序的處理 ,將處理的溫度信號與系統(tǒng)設(shè)定溫度值比較,形成可以控制空調(diào)制冷、制熱與停止工作三種工作狀態(tài),從而實現(xiàn)空調(diào)的智能化。另外,鍵盤輸入方面,采用了軟件來修正誤操作輸入 ,即輸入的溫度范圍必須在系統(tǒng)硬件所確定的范圍內(nèi),直接降低由于誤操作帶來的風(fēng)險,提高了系統(tǒng)的可靠性 ,體現(xiàn)了人性化的系統(tǒng)設(shè)計原則。系統(tǒng)的整體框圖如圖 1 所示:圖圖1 系統(tǒng)整體框圖系統(tǒng)整體框圖32.2 功能模塊電路設(shè)計2.2.1 單片機的選型由于本系統(tǒng)只需要單片機完成矩陣鍵盤檢測以及處理 ds18b20 送來的溫度數(shù)據(jù)并送 lcd1602 進行顯示對于 i/
7、o 資源以及處理速度無特殊要求,故選擇 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 系列單片機兼容。片內(nèi)有 8k 可在線重復(fù)編程的快速內(nèi) 存可擦寫存儲器(flash memory) 。存儲器可循環(huán)寫入/擦寫 10000 次以上。存儲器數(shù)據(jù)保存時間為 10 年以上
8、。寬工作電壓范圍:vcc 可為 2.7v-6.5v。全靜態(tài)工作:可從 0hz-24mhz。程序存儲器具有三級加密保護。256 字節(jié)的內(nèi)部 ram。32 條可編程 i/o 口線。三個 16 位定時器/計數(shù)器。中斷結(jié)構(gòu)具有 5 級(6 級)中斷源和兩個優(yōu)下級??删幊倘p工串行通訊。空閑維持低功耗和掉電狀態(tài)保護存儲數(shù)據(jù)。 at89c52 引腳圖如圖 2 所示。4圖圖 2 at89c52 引腳圖引腳圖vcc: +5v 電源輸入gnd:接地p0 口是一個雙向 8 位三態(tài) i/o 口,每個口可獨立控制。使用時需外接上拉電阻。p1 口是一個準(zhǔn)雙向 8 位 i/o 口,它的功能是單一的,只能用作數(shù)據(jù)的輸入或者
9、輸出。p2 口是一個準(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:程序存儲器允許輸出控制端,常用作片外 rom
10、的讀控制信號,低電平有psen效。reset:復(fù)位引腳,當(dāng)該端加上超過 24 個時鐘周期的高電平時,可是 8051 復(fù)位。系統(tǒng)復(fù)位電路如圖 2.3 所示。x1、x2:外接時鐘引腳。x1 為片內(nèi)振蕩電路的輸入端,x2 為片內(nèi)振蕩電路的輸出端。2.2.2 振蕩電路設(shè)計at89c52 內(nèi)部有一個用于構(gòu)成片內(nèi)振蕩器的高增益反相放大器, 振蕩器產(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)定性、起振圈內(nèi)部振蕩的接法的快速性和溫度穩(wěn)定性。外接石英晶體時, c1 和 c2 一般?。?0pf-10pf) ,外接的是石英晶體, 所以,c1、c2選擇標(biāo)稱值 30pf。系統(tǒng)振蕩電路如圖 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ù)位和6上電復(fù)位。本設(shè)計系統(tǒng)采用的是上電自動復(fù)位。系統(tǒng)復(fù)位電路如圖 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 鍵盤接口電路鍵盤接口電路2.2.5 溫度測量電路設(shè)計 本系統(tǒng)的溫度測量電路采用 ds18b20 來實現(xiàn)。ds18b20 是美國 dallas 半導(dǎo)體公司推出的第一片采用“一線總線”接口的溫度傳感器,它具有微型化、低功耗、高性能、抗干擾、能力強、易配微處理器等優(yōu)點,可直接將溫度轉(zhuǎn)化成串行數(shù)字信號供處理器處理。ds18b20 的性能及特點2:7適應(yīng)電壓范圍寬,電壓范圍在,在寄生電源方式下可由數(shù)據(jù)線供電。v5 . 50 . 3獨特的單線接口方式,它與微處理器連接時僅需一條口線即可實
14、現(xiàn)微處理器與ds18b20 的雙向通信。支持多點組網(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 內(nèi)把溫度轉(zhuǎn)換為數(shù)字;12 位分辨率時,最多在 750ms 內(nèi)把溫度值轉(zhuǎn)換為數(shù)字。測量結(jié)果直接輸出數(shù)字溫度信號,以“一線總線”串行傳送給 cpu,同時可傳送crc 校驗碼,具有極強的
15、抗干擾糾錯能力。負(fù)壓特性。電源極性接反時,芯片不會因發(fā)熱而燒毀,但不能正常工作。系統(tǒng)溫度測量電路如圖 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)。85 腳 r/:讀寫選擇端(h/l) 。w6 腳 e:使
16、能信號。腳:數(shù)據(jù)口。147d7d015 腳 bl1:背光電源正極。16 腳 bl2:背光電源負(fù)極。系統(tǒng)顯示電路如圖 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)。輸出控制電路如圖 8 所
17、示。圖圖 8 輸出控制電路輸出控制電路92.3 總電路設(shè)計系統(tǒng)總電路圖如圖 9 所示。圖圖 9 系統(tǒng)總電路圖系統(tǒng)總電路圖2.4 系統(tǒng)所用元器件本系統(tǒng)所用的元器件清單如表 1 所示。 表表 1 系統(tǒng)所用元器件系統(tǒng)所用元器件元器件名稱元器件名稱數(shù)量數(shù)量點觸式開關(guān)1630pf 瓷片電容210uf 電解電容1藍(lán)色 led1紅色 red15v 電源插座1自鎖開關(guān)1lcd160211/4w10k 電阻31010k 可調(diào)電阻1at89c521ds18b20112mhz 晶振13 軟件系統(tǒng)設(shè)計3.1 軟件系統(tǒng)總體方案設(shè)計 系統(tǒng)軟件由主程序模塊、測溫程序模塊、鍵盤掃描程序模塊以及液晶驅(qū)動程序模塊組成。3.2 軟
18、件流程圖設(shè)計系統(tǒng)軟件流程圖如圖 10 所示。11圖圖 10 系統(tǒng)軟件流程圖系統(tǒng)軟件流程圖4 系統(tǒng)調(diào)試系統(tǒng)調(diào)試程序在 keil uvision4 環(huán)境下編寫,編譯通過后生成.hex 文件加載到 protuse 下可正常運行。程序默認(rèn)溫度為 21.0,protuse 下設(shè)定 ds18b20 的溫度也為 21.0,故開始12運行時兩路 led 燈都不點亮。當(dāng)利用鍵盤設(shè)定的溫度高于 ds18b20 默認(rèn)的 21.0時,紅色 led 燈被點亮;當(dāng)設(shè)定的溫度低于 ds18b20 默認(rèn)的 21.0時,藍(lán)色 led 燈被點亮。附上仿真圖當(dāng)設(shè)定的溫度高于 ds18b20 默認(rèn)的 21.0時,紅色 led 燈被點
19、亮,如圖 11 所示。圖圖 11 紅色紅色 led 燈點亮燈點亮當(dāng)設(shè)定的溫度低于 ds18b20 默認(rèn)的 21.0時,藍(lán)色 led 燈被點亮。如圖 12 所示。13圖圖 12 藍(lán)色藍(lán)色 led 燈點亮燈點亮14 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)要求,在 protuse 里完成硬件原理圖的搭建,然后開始在 keil 環(huán)境下著手編寫各部分程序,調(diào)試相應(yīng)的程序,在調(diào)試通
20、過后再下載到 protuse 里進行仿真,發(fā)現(xiàn)問題后再返回 keil 下修改相應(yīng)程序,直到最后仿真通過,最后在 altium designer 6 中畫出電路原理圖。在本次課程設(shè)計過程中得到了老師以及許多同學(xué)的幫助,感謝那些提供過幫助的老師和同學(xué)。15參考文獻(xiàn)1 郭文川主編. 單片機原理與接口技術(shù). 北京:中國農(nóng)業(yè)出版社,2007.2 郭天祥主編. 51 單片機 c 語言教程. 北京:電子工業(yè)出版社,2009.16附錄 1:系統(tǒng)的源程序清單global.h:ifndef _global_h#define _global_h#include#define uchar unsigned char/
21、宏定義#define uint unsigned int#definek_up 0x20/定義鍵值#definek_down 0x21#definek_clear 0x24#definek_ok 0x25#definek_one 0x30#definek_four 0x31#definek_seven 0x32#definek_point 0x33#definek_two 0x34#definek_five 0x43#definek_eight0x36#definek_zero0x37#definek_three0x3817#definek_six 0x40#definek_nine0x41#
22、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 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ù)/命令選擇端s
23、bit dq =p22;/ds18b20 數(shù)據(jù)端sbit xx =p25;/讀寫選擇端sbit cold =p26;/輸出信號sbit warm =p27;/輸出信號#endifmain.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;uint p_count=0;uint n_count=0;18uint m_count=1;uchar current_tem
24、p_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-5000)%32;ie =0 x82;tr0=1;void timer0() interrupt 1 th0 = (8192-5000)/
25、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()19init_lcd();init_ds18b20();timer0_init();while(1)print();set_num();comparison();void comparison()if(n_count&m_count)if(temp_nowtemp_set
26、)cold=1;warm=0;if(temp_now=temp_set)cold=0;warm=0;18b20.h:#ifndef _18b20_h20#define _18b20_h#includeglobal.hextern uchar init_ds18b20(); extern void read_temperature();extern void display_temperature();#endif18b20.c:#includeglobal.h#include intrins.h#define delaynop() _nop_();_nop_();_nop_();_nop_()
27、;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,0,0,0;bit ds18b20_is_ok = 1;void delay_ini(uint x) while(-x);void delay(unsigned int n)do_nop_();_
28、nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();21n-;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= 1;dq = 1;_nop_();_nop_
29、();if(dq)dat |= 0x80;delay(30);22dq = 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);writeonebyte(0 x44);init_ds18b20();writeonebyte(0 xcc);writeonebyte(0 xbe);temp_value0 = readonebyte(); temp_value1
30、 = readonebyte();ds18b20_is_ok=1;void display_temperature()23uchar t = 150, ng = 0;if(temp_value1&0 xf8)=0 xf8) temp_value1 = temp_value1;temp_value0 = temp_value0+1;if(temp_value0=0 x00)temp_value1+;ng = 1;display_digit0 = df_tabletemp_value0&0 x0f;currentt = (temp_value0&0 xf0)4) | (temp_value1&0
31、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_buffer10 = .;current_temp_display_buffer9 = display_digit1 + 0;current_temp_display_buffer8 = display_digit2 + 0;current_temp_dis
32、play_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 = 0&display_digit3=0)current_temp_display_buffer8 = ;if(ng)temp_now=-(display_digit2*10+display_digit1+display_digit0*0.1); if(curre
33、nt_temp_display_buffer8 = )current_temp_display_buffer8 = -;else if(current_temp_display_buffer7 = )current_temp_display_buffer7 = -;else 24current_temp_display_buffer6 = -; key.h:#ifndef _key_h#define _key_h#includeextern unsigned char keys_scan();extern void set_num();extern void set();#endifkey.c
34、:#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,0 x84,0 x88;void delay_key() uchar i;for(i=0;i200;i+);uchar keys_scan() uchar scode,kcode,k;p3 = 0 xf0;if(p3&0 xf0)!=0 xf0)25 delay_key();if(p3&0 xf
35、0)!=0 xf0) scode = 0 xfe;for(k=0;k47)&(set_temp_display_buffer1147)&(set_temp_display_buffer947)&(set_temp_display_buffer848)&(set_temp_display_buffer1148)&(set_temp_display_buffer948)&(set_temp_display_buffer858) set_temp_display_buffer8-=1;28else if(set_temp_display_buffer8=48) set_temp_display_bu
36、ffer8=57; if(k_one = key)while(keys_scan() = k_one);set_temp_display_buffer11=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_
37、buffer11=4;sel+;if(k_five = key)while(keys_scan() = k_five);set_temp_display_buffer11=5;29sel+;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_t
38、emp_display_buffer11=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);30temp_set=(set_temp_display_buffer8-48)*10+(set_temp_display_buffer9-48)+(set
39、_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;sel=0; if(k_one = key)while(keys_scan() = k
40、_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+;31if(k_three = key)while(keys_scan() = k_three);set_temp_display_buffer10=set_te
41、mp_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_five);set_temp_display_buffer10=set_temp_display_buffer11 ;set_temp_display_bu
42、ffer11=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_display_buffer11=7;sel+;32if(k_eight = key)while(k
43、eys_scan() = k_eight);set_temp_display_buffer10=set_temp_display_buffer11 ;set_temp_display_buffer11=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_b
44、uffer10=set_temp_display_buffer11 ;set_temp_display_buffer11=0;sel+;if(sel=2)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;33sel=0; if(k_point =
45、 key)while(keys_scan() = k_point);set_temp_display_buffer9=set_temp_display_buffer10 ;set_temp_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 =
46、 ;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_buffer8=set_temp_display_buffer9 ;set_temp_display_buffer9=set_temp_display_buffer10 ;set_temp_display_buffer10=set_temp_display_buffer11 ;set_temp_dis
47、play_buffer11=1;sel+;34if(k_two = key)while(keys_scan() = k_two);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=2;sel+;if(k_three = key)while(keys_scan() = k_three);
48、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=3;sel+;if(k_four = key)while(keys_scan() = k_four);set_temp_display_buffer8=set_temp_display_buffer9 ;set_temp_display
49、_buffer9=set_temp_display_buffer10 ;set_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_buffer8=set_temp_display_buffer9 ;set_temp_display_buffer9=set_temp_display_buffer10 ;set_temp_display_buffer10=set_t
50、emp_display_buffer11 ;set_temp_display_buffer11=5;sel+;35if(k_six = key)while(keys_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 =
51、 key)while(keys_scan() = k_seven);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=7;sel+;if(k_eight = key)while(keys_scan() = k_eight);set_temp_display_buffer8=set_te
52、mp_display_buffer9 ;set_temp_display_buffer9=set_temp_display_buffer10 ;set_temp_display_buffer10=set_temp_display_buffer11 ;set_temp_display_buffer11=8;sel+;if(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;36sel+;if(k_zero = key)while(keys_scan() = k_zero);set_temp_display_buffer8=set_temp_display_buffer9
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 開店買二手房合同范例
- 中央食堂資質(zhì)合同范例
- 拖掛車租賃合同范例
- 母嬰食品購銷合同范例
- 古村開發(fā)合同范例
- 全屋定做合同范例
- 承包沙板噴漆合同范例
- 個體租戶合同范例
- 鄉(xiāng)村毛路合同范例
- 廣告活動費合同范例
- 用電安全專項檢查工作方案模版(3篇)
- 《汽車構(gòu)造》期末考試復(fù)習(xí)題庫(含答案)
- 2025年廣東省春季高考數(shù)學(xué)仿真模擬試卷試題(含答案解析+答題卡)
- 陜西省咸陽市2023-2024學(xué)年高一上學(xué)期期末考試 地理 含答案
- 口腔技術(shù)入股股份協(xié)議書(2篇)
- 2024年消防員勞動合同書
- 計量器具管理制度計量器具使用、維護、保養(yǎng)規(guī)章制度
- 齊白石介紹課件
- 第二十五章 銳角的三角比(單元重點綜合測試)
- 低空經(jīng)濟的商業(yè)化路徑分析
- 七年級上冊道德與法治2023-2024期末試題附答案系列
評論
0/150
提交評論