




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、0 / 42接口 技術(shù)課程設(shè)計(jì)報(bào)告基于單片機(jī)的空調(diào)溫度控制器設(shè)計(jì)基于單片機(jī)的空調(diào)溫度控制器設(shè)計(jì)摘 要設(shè)計(jì)了基于 AT89C52 的高精度家用空調(diào)溫度控制系統(tǒng),系統(tǒng)硬件主要由電源電路、溫度采集電路(DS18B20) 、鍵盤(pán)、顯示電路、輸出控制電路與其他輔助電路組成;軟件采用 8051C 語(yǔ)言編程;該系統(tǒng)可以完成溫度的顯示、溫度的設(shè)定、空調(diào)的控制等多項(xiàng)功能。關(guān)鍵詞:?jiǎn)纹瑱C(jī);DS18B20;溫度檢測(cè);顯示1 / 42目錄目錄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ī)的選型 3
2、2.2.2 振蕩電路設(shè)計(jì) 52.2.3 復(fù)位電路設(shè)計(jì) 52.2.4 鍵盤(pán)接口電路設(shè)計(jì) 62.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)存在的問(wèn)題與改進(jìn)措施 13參考文獻(xiàn) .14附錄 1:系統(tǒng)的源程序清單.15附錄 2:系統(tǒng)的 PCB 圖.390 / 421 設(shè)計(jì)目的與要求1.1 設(shè)計(jì)目的和意義21 世紀(jì)的人們生活質(zhì)量不斷提高,同時(shí)也對(duì)高科技電子產(chǎn)業(yè)提出了更高的要求
3、,為了使人們生活更人性化、智能化。我設(shè)計(jì)了這一基于單片機(jī)的空調(diào)溫度控制系統(tǒng),人們只有生活在一定的溫度環(huán)境才能長(zhǎng)期感覺(jué)舒服,才能保證不中暑不受凍,所以對(duì)室溫度要求要高。對(duì)于不同地區(qū)空調(diào)要求不同,有的需要升溫,有的需要降溫。一般都要維持在 2126C。目前,雖然我國(guó)大量生產(chǎn)空調(diào)制冷產(chǎn)品,但由于我國(guó)人口眾多,需求量過(guò)盛,在我國(guó)的北方地區(qū),還有好多家庭還沒(méi)有安裝有效地室溫控系統(tǒng)。溫度不能很好的控制在一定的圍,夏天室溫度過(guò)高,冬天溫度過(guò)低,這些均對(duì)人們正常生活帶來(lái)不利的影響,溫度、濕度均達(dá)不到人們的要求。以前溫度控制主要利用機(jī)械通風(fēng)設(shè)備進(jìn)行室、外空氣的交換來(lái)達(dá)到降低室溫度,實(shí)現(xiàn)室溫度適宜人們生活。以前通
4、風(fēng)設(shè)備的開(kāi)啟和關(guān)停,均是由人手動(dòng)控制的,即由人們定時(shí)查看室外的溫度、濕度情況,按要求開(kāi)關(guān)通風(fēng)設(shè)備,這樣人們的勞動(dòng)強(qiáng)度大,可靠性差,而且消耗人們體力,勞累成本過(guò)高。為此,需要有一種符合機(jī)械溫控要求的低成本的控制器,在溫差和濕度超過(guò)用戶設(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è)并顯示室溫,能夠利用鍵盤(pán)設(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)工作,
5、當(dāng)兩者溫度相等時(shí),不做動(dòng)作。1 / 422 硬件電路設(shè)計(jì)2.1 總體方案設(shè)計(jì)空調(diào)溫度控制系統(tǒng),主要要完成對(duì)溫度的采集、顯示以與設(shè)定等工作,從而實(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), 通過(guò)并 口傳送到單片機(jī)系統(tǒng)( AT89C52) 。單片機(jī)系統(tǒng)將接收的數(shù)字信號(hào)譯碼處理,通過(guò) LCD1602 將溫度顯示出來(lái),同時(shí)單片機(jī)系統(tǒng)還將完成鍵盤(pán)掃描 、按鍵
6、溫度設(shè)定、超溫報(bào)警等程序的處理 ,將處理的溫度信號(hào)與系統(tǒng)設(shè)定溫度值比較,形成可以控制空調(diào)制冷、制熱與停止工作三種工作狀態(tài),從而實(shí)現(xiàn)空調(diào)的智能化。另外,鍵盤(pán)輸入方面,采用了軟件來(lái)修正誤操作輸入 ,即輸入的溫度圍必須在系統(tǒng)硬件所確定的圍,直接降低由于誤操作帶來(lái)的風(fēng)險(xiǎn),提高了系統(tǒng)的可靠性 ,體現(xiàn)了人性化的系統(tǒng)設(shè)計(jì)原則。系統(tǒng)的整體框圖如圖 1 所示:圖圖1 1 系統(tǒng)整體框圖系統(tǒng)整體框圖2 / 422.2 功能模塊電路設(shè)計(jì)2.2.1 單片機(jī)的選型由于本系統(tǒng)只需要單片機(jī)完成矩陣鍵盤(pán)檢測(cè)以與處理 DS18B20 送來(lái)的溫度數(shù)據(jù)并送 LCD1602 進(jìn)行顯示對(duì)于 I/O 資源以與處理速度無(wú)特殊要求,故選擇 A
7、TMEL 公司生產(chǎn)的 AT89C52 單片機(jī),AT89C52 增加了在線調(diào)試功能,即程序可以通過(guò) JTAG 接口下載,調(diào)試和固化,因而該芯片的開(kāi)發(fā)不再需要昂貴的硬件仿真器,可實(shí)現(xiàn)實(shí)時(shí)仿真,所有的資源都可以為用戶所使用,可以在線編程或在系統(tǒng)編程,更進(jìn)一步地說(shuō),在線編程或在系統(tǒng)編程是開(kāi)發(fā)的系統(tǒng)具有了通過(guò)網(wǎng)絡(luò)進(jìn)行升級(jí)、維護(hù)的潛在功能。AT89C52 的性能與特點(diǎn)1:與 MCS-51 系列單片機(jī)兼容。片有 8K 可在線重復(fù)編程的快速 存可擦寫(xiě)存儲(chǔ)器(Flash Memory) 。存儲(chǔ)器可循環(huán)寫(xiě)入/擦寫(xiě) 10000 次以上。存儲(chǔ)器數(shù)據(jù)保存時(shí)間為 10 年以上。寬工作電壓圍:Vcc 可為 2.7V-6.5
8、V。全靜態(tài)工作:可從 0Hz-24MHz。程序存儲(chǔ)器具有三級(jí)加密保護(hù)。256 字節(jié)的部 RAM。32 條可編程 I/O 口線。三個(gè) 16 位定時(shí)器/計(jì)數(shù)器。中斷結(jié)構(gòu)具有 5 級(jí)(6 級(jí))中斷源和兩個(gè)優(yōu)下級(jí)??删幊倘p工串行通訊??臻e維持低功耗和掉電狀態(tài)保護(hù)存儲(chǔ)數(shù)據(jù)。 AT89C52 引腳圖如圖 2 所示。3 / 42圖圖 2 2 AT89C52AT89C52 引腳圖引腳圖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)
9、雙向 8 位 I/O 口,輸出時(shí),從 P2.x 端口可輸出 CPU 寫(xiě)到鎖存器上的信號(hào)。當(dāng)該接口用做數(shù)據(jù)輸入接口是,應(yīng)先向該位寫(xiě) 1,然后,讀該位即可讀入輸入數(shù)據(jù)。P3 口是具有第二功能的準(zhǔn)雙向 8 位 I/O 口。ALE/PROG:地址所存/編程信號(hào)線。當(dāng) P0 口工作在第二功能時(shí)從該端口可復(fù)用工作,某時(shí)刻該端口可以送出地址信號(hào) A0A7,而另外的時(shí)刻該端口傳送的是數(shù)據(jù)信號(hào)D0D7。利用 ALE 可以將地址信號(hào) A0A7 鎖存到地址鎖存器。/VPP:該控制信號(hào)線也具有雙重功能,是允許訪問(wèn)片外 ROM/編程高電壓引線。EA4 / 42:程序存儲(chǔ)器允許輸出控制端,常用作片外 ROM 的讀控制信號(hào)
10、,低電平有PSEN效。RESET:復(fù)位引腳,當(dāng)該端加上超過(guò) 24 個(gè)時(shí)鐘周期的高電平時(shí),可是 8051 復(fù)位。系統(tǒng)復(fù)位電路如圖 2.3 所示。X1、X2:外接時(shí)鐘引腳。X1 為片振蕩電路的輸入端,X2 為片振蕩電路的輸出端。2.2.2 振蕩電路設(shè)計(jì)AT89C52 部有一個(gè)用于構(gòu)成片振蕩器的高增益反相放大器, 振蕩器產(chǎn)生的信號(hào)送到CPU, 作為 CPU 的時(shí)鐘信號(hào),驅(qū)動(dòng) CPU 產(chǎn)生執(zhí)行指令功能的機(jī)器周期。引腳 XTAL1 和XTAL2 是此放大器的輸人端和輸出端。這個(gè)放大器與作為反饋元件的片外石英晶體或瓷諧振器一起可構(gòu)成一個(gè)自激振蕩器, 振蕩電路的連接如圖所示圖 8 所示,外接石英晶體或瓷諧振
11、器以與電容 C1 和 C2 構(gòu)成并聯(lián)諧振電路, 接在放大器的反饋回路中。對(duì)外接電容 C1 和 C2 的值雖然沒(méi)有嚴(yán)格的要求, 但電容的大小多少會(huì)影響振蕩器頻率的高低、振蕩器的穩(wěn)定性、起振圈部振蕩的接法的快速性和溫度穩(wěn)定性。外接石英晶體時(shí), C1 和 C2 一般取(40pF-10pF) ,外接的是石英晶體, 所以,C1、C2 選擇標(biāo)稱值 30pF。系統(tǒng)振蕩電路如圖 3 所示。圖圖 3 3 振蕩電路振蕩電路2.2.3 復(fù)位電路設(shè)計(jì)單片機(jī)復(fù)位是使 CPU 和系統(tǒng)中的其他功能部件都處在一個(gè)確定的初始狀態(tài), 并從這個(gè)狀態(tài)開(kāi)始工作。無(wú)論是在單片機(jī)剛開(kāi)始接上電源時(shí), 還是斷電后或者發(fā)生故障后都要復(fù)位。89
12、系列單片機(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 所示。5 / 42圖圖 4 4 復(fù)位電路復(fù)位電路2.2.4 鍵盤(pán)接口電路設(shè)計(jì)獨(dú)立鍵盤(pán)與單片機(jī)連接時(shí),每個(gè)按鍵都需要單片機(jī)的一個(gè) I/O 口,若單片機(jī)系統(tǒng)需要較多按鍵,如果用獨(dú)立按鍵會(huì)占用過(guò)多的 I/O 口資源。單片機(jī)系統(tǒng)中 I/O 口資源往往比較寶貴,當(dāng)用到多個(gè)按鍵時(shí),為了節(jié)省 I/O 口線,
13、一般需使用矩陣鍵盤(pán)。本系統(tǒng)共需使用 16 個(gè)按鍵,故選擇的矩陣鍵盤(pán)。鍵盤(pán)接口電路如圖 5 所示。44圖圖 5 5 鍵盤(pán)接口電路鍵盤(pán)接口電路2.2.5 溫度測(cè)量電路設(shè)計(jì) 本系統(tǒng)的溫度測(cè)量電路采用 DS18B20 來(lái)實(shí)現(xiàn)。DS18B20 是美國(guó) DALLAS 半導(dǎo)體公司推出的第一片采用“一線總線”接口的溫度傳感器,它具有微型化、低功耗、高性能、抗干擾、能力強(qiáng)、易配微處理器等優(yōu)點(diǎn),可直接將溫度轉(zhuǎn)化成串行數(shù)字信號(hào)供處理器處理。DS18B20 的性能與特點(diǎn)2:適應(yīng)電壓圍寬,電壓圍在,在寄生電源方式下可由數(shù)據(jù)線供電。V5 . 50 . 3獨(dú)特的單線接口方式,它與微處理器連接時(shí)僅需一條口線即可實(shí)現(xiàn)微處理器與
14、6 / 42DS18B20 的雙向通信。支持多點(diǎn)組網(wǎng)功能,多個(gè) DS18B20 可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測(cè)溫。在使用中不需要任何外接元件,全部傳感元件與轉(zhuǎn)換電路集成在形如一只三極管的集成電路里。測(cè)溫圍-55+125,在-10+85時(shí)精度為0.5??删幊谭直媛蕿?912 位,對(duì)應(yīng)的可分辨溫度分別為 0.5,0.25,0.125和 0.0625,可實(shí)現(xiàn)高精度測(cè)溫。在 9 位分辨率時(shí),最多在 93.75ms 把溫度轉(zhuǎn)換為數(shù)字;12 位分辨率時(shí),最多在750ms 把溫度值轉(zhuǎn)換為數(shù)字。測(cè)量結(jié)果直接輸出數(shù)字溫度信號(hào),以“一線總線”串行傳送給 CPU,同時(shí)可傳送 CRC 校驗(yàn)碼,具有極強(qiáng)的抗干擾
15、糾錯(cuò)能力。負(fù)壓特性。電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀,但不能正常工作。系統(tǒng)溫度測(cè)量電路如圖 6 所示。圖圖 6 6 溫度測(cè)量電路溫度測(cè)量電路2.2.6 系統(tǒng)顯示電路設(shè)計(jì)本系統(tǒng)采用 LCD1602 作為系統(tǒng)的顯示器件,1602 字符型液晶是一種專門(mén)用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊,能分兩行顯示,它有若干個(gè)或者等75115點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符。1602 型液晶接口信號(hào)如下:1 腳 VSS:電源地。2 腳 VDD:電源正極。3 腳 VO:液晶顯示對(duì)比度調(diào)節(jié)端。4 腳 RS:數(shù)據(jù)/命令選擇端(H/L)。5 腳 R/:讀寫(xiě)選擇端(H/L) 。W6 腳 E:使能信
16、號(hào)。腳:數(shù)據(jù)口。147D7D015 腳 BL1:背光電源正極。16 腳 BL2:背光電源負(fù)極。系統(tǒng)顯示電路如圖 7 所示。7 / 42圖圖 7 7 系統(tǒng)顯示電路系統(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í),通過(guò)置 P27 腳為高電平來(lái)驅(qū)動(dòng)后級(jí)加熱系統(tǒng),本系統(tǒng)采用紅色 LED 來(lái)代替加熱系統(tǒng);在當(dāng)前室溫高于設(shè)定溫度時(shí),通過(guò)置 P26 腳高電平來(lái)驅(qū)動(dòng)后級(jí)制冷系統(tǒng),本系統(tǒng)采用藍(lán)色 LED 來(lái)代替制冷系統(tǒng)。輸出控制電路
17、如圖 8 所示。圖圖 8 8 輸出控制電路輸出控制電路2.3 總電路設(shè)計(jì)系統(tǒng)總電路圖如圖 9 所示。8 / 42圖圖 9 9 系統(tǒng)總電路圖系統(tǒng)總電路圖2.4 系統(tǒng)所用元器件本系統(tǒng)所用的元器件清單如表 1 所示。表表 1 1 系統(tǒng)所用元器件系統(tǒng)所用元器件元器件名稱元器件名稱數(shù)量數(shù)量點(diǎn)觸式開(kāi)關(guān)1630pF 瓷片電容210uF 電解電容1藍(lán)色 LED1紅色 RED15V 電源插座1自鎖開(kāi)關(guān)1LCD160211/4W10K 電阻310K 可調(diào)電阻1AT89C521DS18B20112MHz 晶振19 / 423 軟件系統(tǒng)設(shè)計(jì)3.1 軟件系統(tǒng)總體方案設(shè)計(jì) 系統(tǒng)軟件由主程序模塊、測(cè)溫程序模塊、鍵盤(pán)掃描程序
18、模塊以與液晶驅(qū)動(dòng)程序模塊組成。3.2 軟件流程圖設(shè)計(jì)系統(tǒng)軟件流程圖如圖 10 所示。圖圖 1010 系統(tǒng)軟件流程圖系統(tǒng)軟件流程圖10 / 424 4 系統(tǒng)調(diào)試系統(tǒng)調(diào)試程序在 Keil uVision4 環(huán)境下編寫(xiě),編譯通過(guò)后生成. .hex 文件加載到 Protuse 下可正常運(yùn)行。程序默認(rèn)溫度為 21.0,Protuse 下設(shè)定 DS18B20 的溫度也為 21.0,故開(kāi)始運(yùn)行時(shí)兩路 LED 燈都不點(diǎn)亮。當(dāng)利用鍵盤(pán)設(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è)定的溫度高于 D
19、S18B20 默認(rèn)的 21.0時(shí),紅色 LED 燈被點(diǎn)亮,如圖 11 所示。圖圖 1111 紅色紅色 LEDLED 燈點(diǎn)亮燈點(diǎn)亮當(dāng)設(shè)定的溫度低于 DS18B20 默認(rèn)的 21.0時(shí),藍(lán)色 LED 燈被點(diǎn)亮。如圖 12 所示。11 / 42圖圖 1212 藍(lán)色藍(lán)色 LEDLED 燈點(diǎn)亮燈點(diǎn)亮12 / 425 5 總結(jié)總結(jié)5.1 本系統(tǒng)存在的問(wèn)題與改進(jìn)措施本系統(tǒng)所設(shè)計(jì)的空調(diào)溫度控制器僅對(duì)溫度部分實(shí)現(xiàn)了控制,但對(duì)于實(shí)際空調(diào)中的模式選擇以與定時(shí)運(yùn)行等工作過(guò)程還無(wú)法實(shí)現(xiàn),希望在以后的學(xué)習(xí)研究中能夠解決這些問(wèn)題。5.2 心得體會(huì) 本次課程設(shè)計(jì)從獲得題目開(kāi)始便著手準(zhǔn)備,首先分析系統(tǒng)要求,在 Protuse
20、里完成硬件原理圖的搭建,然后開(kāi)始在 Keil 環(huán)境下著手編寫(xiě)各部分程序,調(diào)試相應(yīng)的程序,在調(diào)試通過(guò)后再下載到 Protuse 里進(jìn)行仿真,發(fā)現(xiàn)問(wèn)題后再返回 Keil 下修改相應(yīng)程序,直到最后仿真通過(guò),最后在 Altium Designer 6 中畫(huà)出電路原理圖。在本次課程設(shè)計(jì)過(guò)程中得到了老師以與許多同學(xué)的幫助,感那些提供過(guò)幫助的老師和同學(xué)。13 / 42參考文獻(xiàn)1 郭文川主編. 單片機(jī)原理與接口技術(shù). :中國(guó)農(nóng)業(yè),2007.2 郭天祥主編. 51 單片機(jī) C 語(yǔ)言教程. :電子工業(yè),2009.14 / 42附錄 1:系統(tǒng)的源程序清單global.hglobal.h:ifndef _global
21、_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#defineK
22、_THREE0X3815 / 42#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;extern int s
23、el;sbit lcden=P21;/液晶使能sbit lcdrs=P20;/液晶數(shù)據(jù)/命令選擇端sbit DQ =P22;/DS18B20 數(shù)據(jù)端sbit XX =P25;/讀寫(xiě)選擇端sbit cold =P26;/輸出信號(hào)sbit warm =P27;/輸出信號(hào)#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;uint P_C
24、ount=0;uint N_Count=0;16 / 42uint M_Count=1;uchar Current_Temp_Display_Buffer= NOW:-23.5 ;uchar set_Temp_Display_Buffer= SET: 21.0 ;int sel=0;void Comparison();/定時(shí)/void timer0_init(void)TMOD = 0 x00 ; /設(shè)置定時(shí)器 0 的工作方式TH0 = (8192-5000)/32;/單片機(jī)晶振為 12MHz,機(jī)器周期為 1us,t=5ms, /N=5000/1=5000TL0 = (8192-5000)%3
25、2;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()17 / 42init_lcd();Init_DS18B20();timer0_init();while(1)Print();set_num();C
26、omparison();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_H18 / 42#define _18B20_H#includeglobal.hextern uchar Init_DS18B20(); extern void Read_Temperature();extern void Display_Temperature();#endif18B20.c:
27、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,0,0,0;
28、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_();19 / 42n-;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
29、;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);20 / 42DQ = 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(
30、0 x44);Init_DS18B20();WriteOneByte(0 xcc);WriteOneByte(0 xbe);Temp_Value0 = ReadOneByte(); Temp_Value1 = ReadOneByte();DS18B20_IS_OK=1;void Display_Temperature()21 / 42uchar 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)Te
31、mp_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_Buffer
32、10 = .;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 = 0&D
33、isplay_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 = -;22 / 42else Current_Temp_Display_Buffer6
34、 = -; 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,0 x84,
35、0 x88;void Delay_key() uchar i;for(i=0;i200;i+);uchar Keys_Scan()23 / 42 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)&(se
36、t_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() = K_T
37、WO);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);27 / 42set_Temp_Display_Buffer11=4;sel+;if(K_FIVE = key)while(Keys_Scan() = K_FIVE);set_Temp_Display_Buffer11=5;sel+;if(K_SIX = key)while(Ke
38、ys_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_ZERO = k
39、ey)28 / 42while(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() = K_
40、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+;29 / 42if(K_TWO = key
41、)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_Temp_D
42、isplay_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_Buffer11
43、;set_Temp_Display_Buffer11=6;sel+;30 / 42if(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_Buffer11=8;
44、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(); if(K_CL
45、EAR = key)while(Keys_Scan() = K_CLEAR);31 / 42set_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_Temp_Dis
46、play_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; if(K_ONE
47、 = key)32 / 42while(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_Buffer8=set
48、_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_Display_
49、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_Buffer11 ;set_
50、Temp_Display_Buffer11=4;sel+;if(K_FIVE = key)33 / 42while(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(Keys_Scan(
51、) = 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_Buffer9 ;set
52、_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_Display
53、_Buffer10=set_Temp_Display_Buffer11 ;set_Temp_Display_Buffer11=8;sel+;34 / 42if(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_T
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 駱駝祥子人物性格分析教學(xué)教案:探究社會(huì)變遷與人性的掙扎
- 汽車(chē)租賃三方合同
- 農(nóng)作物種植技術(shù)手冊(cè)
- 圖表展示各類(lèi)數(shù)據(jù)統(tǒng)計(jì)情況
- 小學(xué)生數(shù)學(xué)應(yīng)用題的作文分析與實(shí)踐指導(dǎo)
- 留置擔(dān)保合同協(xié)議書(shū)
- 文學(xué)佳作圍城中的人物形象解讀
- 智能交通大數(shù)據(jù)平臺(tái)開(kāi)發(fā)協(xié)議
- 企業(yè)戰(zhàn)略聯(lián)盟穩(wěn)定性評(píng)價(jià)與維護(hù)
- 產(chǎn)品推廣合作合同
- FZ/T 24011-2019羊絨機(jī)織圍巾、披肩
- 【課件】2.1.1植物細(xì)胞工程的基本技術(shù)課件-2021-2022學(xué)年高二下學(xué)期生物人教版選擇性必修3
- 35kV集電線路直埋施工組織設(shè)計(jì)方案
- 客戶來(lái)訪登記表
- 日產(chǎn)新軒逸電子手冊(cè)cvt
- 人教八年級(jí)下冊(cè)英語(yǔ)U5Do-you-remember-what-you-were-doing?課件
- 大連市小升初手冊(cè)
- 醫(yī)療垃圾管理及手衛(wèi)生培訓(xùn)PPT課件
- 嚇數(shù)基礎(chǔ)知識(shí)共20
- 鋰電池安全知識(shí)培訓(xùn)-課件
- 電子產(chǎn)品高可靠性裝聯(lián)工藝下
評(píng)論
0/150
提交評(píng)論