




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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ì)基于單片機(jī)的空調(diào)溫度控制器設(shè)計(jì) 學(xué) 院: 年級(jí)專業(yè): 學(xué) 號(hào): 姓 名: 指導(dǎo)教師: 完成時(shí)間: 成 績(jī): 摘 要設(shè)計(jì)了基于 at89c52 的高精度家用空調(diào)溫度控制系統(tǒng),系統(tǒng)硬件主要由電源電路、溫度采集電路(ds18b20) 、鍵盤、顯示電路、輸出控制電路及其他輔助電路組成;軟件采用 8051c 語(yǔ)言編程;該系統(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、.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.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 圖.3911 設(shè)計(jì)目的及要求1.1 設(shè)計(jì)目的和意義21 世紀(jì)的人們生活質(zhì)量不斷提高,
3、同時(shí)也對(duì)高科技電子產(chǎn)業(yè)提出了更高的要求,為了使人們生活更人性化、智能化。我設(shè)計(jì)了這一基于單片機(jī)的空調(diào)溫度控制系統(tǒng),人們只有生活在一定的溫度環(huán)境內(nèi)才能長(zhǎng)期感覺舒服,才能保證不中暑不受凍,所以對(duì)室內(nèi)溫度要求要高。對(duì)于不同地區(qū)空調(diào)要求不同,有的需要升溫,有的需要降溫。一般都要維持在 2126c。目前,雖然我國(guó)大量生產(chǎn)空調(diào)制冷產(chǎn)品,但由于我國(guó)人口眾多,需求量過(guò)盛,在我國(guó)的北方地區(qū),還有好多家庭還沒有安裝有效地室內(nèi)溫控系統(tǒng)。溫度不能很好的控制在一定的范圍內(nèi),夏天室內(nèi)溫度過(guò)高,冬天溫度過(guò)低,這些均對(duì)人們正常生活帶來(lái)不利的影響,溫度、濕度均達(dá)不到人們的要求。以前溫度控制主要利用機(jī)械通風(fēng)設(shè)備進(jìn)行室內(nèi)、外空氣的
4、交換來(lá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)度大,可靠性差,而且消耗人們體力,勞累成本過(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è)并顯示室溫,能夠利用鍵盤設(shè)定溫度,并且和室溫進(jìn)行比較,當(dāng)室溫低于設(shè)定溫度時(shí),系統(tǒng)能夠驅(qū)動(dòng)加
5、熱系統(tǒng)工作,當(dāng)室溫高于設(shè)定溫度時(shí),系統(tǒng)能夠驅(qū)動(dòng)制冷系統(tǒng)工作,當(dāng)兩者溫度相等時(shí),不做動(dòng)作。22 硬件電路設(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 將溫
6、度顯示出來(lái),同時(shí)單片機(jī)系統(tǒng)還將完成鍵盤掃描 、按鍵溫度設(shè)定、超溫報(bào)警等程序的處理 ,將處理的溫度信號(hào)與系統(tǒng)設(shè)定溫度值比較,形成可以控制空調(diào)制冷、制熱與停止工作三種工作狀態(tài),從而實(shí)現(xiàn)空調(diào)的智能化。另外,鍵盤輸入方面,采用了軟件來(lái)修正誤操作輸入 ,即輸入的溫度范圍必須在系統(tǒng)硬件所確定的范圍內(nèi),直接降低由于誤操作帶來(lái)的風(fēng)險(xiǎn),提高了系統(tǒng)的可靠性 ,體現(xiàn)了人性化的系統(tǒng)設(shè)計(jì)原則。系統(tǒng)的整體框圖如圖 1 所示:圖圖1 系統(tǒng)整體框圖系統(tǒng)整體框圖32.2 功能模塊電路設(shè)計(jì)2.2.1 單片機(jī)的選型由于本系統(tǒng)只需要單片機(jī)完成矩陣鍵盤檢測(cè)以及處理 ds18b20 送來(lái)的溫度數(shù)據(jù)并送 lcd1602 進(jìn)行顯示對(duì)于 i/
7、o 資源以及處理速度無(wú)特殊要求,故選擇 atmel 公司生產(chǎn)的 at89c52 單片機(jī),at89c52 增加了在線調(diào)試功能,即程序可以通過(guò) jtag 接口下載,調(diào)試和固化,因而該芯片的開發(fā)不再需要昂貴的硬件仿真器,可實(shí)現(xiàn)實(shí)時(shí)仿真,所有的資源都可以為用戶所使用,可以在線編程或在系統(tǒng)編程,更進(jìn)一步地說(shuō),在線編程或在系統(tǒng)編程是開發(fā)的系統(tǒng)具有了通過(guò)網(wǎng)絡(luò)進(jìn)行升級(jí)、維護(hù)的潛在功能。at89c52 的性能及特點(diǎn)1:與 mcs-51 系列單片機(jī)兼容。片內(nèi)有 8k 可在線重復(fù)編程的快速內(nèi) 存可擦寫存儲(chǔ)器(flash memory) 。存儲(chǔ)器可循環(huán)寫入/擦寫 10000 次以上。存儲(chǔ)器數(shù)據(jù)保存時(shí)間為 10 年以上
8、。寬工作電壓范圍:vcc 可為 2.7v-6.5v。全靜態(tài)工作:可從 0hz-24mhz。程序存儲(chǔ)器具有三級(jí)加密保護(hù)。256 字節(jié)的內(nèi)部 ram。32 條可編程 i/o 口線。三個(gè) 16 位定時(shí)器/計(jì)數(shù)器。中斷結(jié)構(gòu)具有 5 級(jí)(6 級(jí))中斷源和兩個(gè)優(yōu)下級(jí)。可編程全雙工串行通訊??臻e維持低功耗和掉電狀態(tài)保護(hù)存儲(chǔ)數(shù)據(jù)。 at89c52 引腳圖如圖 2 所示。4圖圖 2 at89c52 引腳圖引腳圖vcc: +5v 電源輸入gnd:接地p0 口是一個(gè)雙向 8 位三態(tài) i/o 口,每個(gè)口可獨(dú)立控制。使用時(shí)需外接上拉電阻。p1 口是一個(gè)準(zhǔn)雙向 8 位 i/o 口,它的功能是單一的,只能用作數(shù)據(jù)的輸入或者
9、輸出。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í)從該端口可復(fù)用工作,某時(shí)刻該端口可以送出地址信號(hào) a0a7,而另外的時(shí)刻該端口傳送的是數(shù)據(jù)信號(hào)d0d7。利用 ale 可以將地址信號(hào) a0a7 鎖存到地址鎖存器。/vpp:該控制信號(hào)線也具有雙重功能,是允許訪問(wèn)片外 rom/編程高電壓引線。ea5:程序存儲(chǔ)器允許輸出控制端,常用作片外 rom
10、的讀控制信號(hào),低電平有psen效。reset:復(fù)位引腳,當(dāng)該端加上超過(guò) 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, 作為 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 的值雖然沒有嚴(yán)格的要求, 但電容的大小多少會(huì)影響振蕩器頻率的高低、振蕩器的穩(wěn)定性、起振圈內(nèi)部振蕩的接法的快速性和溫度穩(wěn)定性。外接石英晶體時(shí), c1 和 c2 一般取(40pf-10pf) ,外接的是石英晶體, 所以,c1、c2選擇標(biāo)稱值 30pf。系統(tǒng)振蕩電路如圖 3 所示。圖圖 3 振蕩電路振蕩電路2.2.3 復(fù)位電路設(shè)計(jì)單片機(jī)復(fù)位是使 cpu 和系統(tǒng)中的其他功能部件都處在一個(gè)確定的初始狀態(tài), 并從這個(gè)狀態(tài)開始工作。無(wú)論是在單片機(jī)剛開始接上電源時(shí), 還是斷電后或者發(fā)生
12、故障后都要復(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ù)位和6上電復(fù)位。本設(shè)計(jì)系統(tǒng)采用的是上電自動(dòng)復(fù)位。系統(tǒng)復(fù)位電路如圖 4 所示。圖圖 4 復(fù)位電路復(fù)位電路2.2.4 鍵盤接口電路設(shè)計(jì)獨(dú)立鍵盤與單片機(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/
13、o 口線,一般需使用矩陣鍵盤。本系統(tǒng)共需使用 16 個(gè)按鍵,故選擇的矩陣鍵盤。鍵盤接口電路如圖 5 所示。44圖圖 5 鍵盤接口電路鍵盤接口電路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:7適應(yīng)電壓范圍寬,電壓范圍在,在寄生電源方式下可由數(shù)據(jù)線供電。v5 . 50 . 3獨(dú)特的單線接口方式,它與微處理器連接時(shí)僅需一條口線即可實(shí)
14、現(xiàn)微處理器與ds18b20 的雙向通信。支持多點(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 內(nèi)把溫度轉(zhuǎn)換為數(shù)字;12 位分辨率時(shí),最多在 750ms 內(nèi)把溫度值轉(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 溫度測(cè)量電路溫度測(cè)量電路2.2.6 系統(tǒng)顯示電路設(shè)計(jì)本系統(tǒng)采用 lcd1602 作為系統(tǒng)的顯示器件,1602 字符型液晶是一種專門用來(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)。85 腳 r/:讀寫選擇端(h/l) 。w6 腳 e:使
16、能信號(hào)。腳:數(shù)據(jù)口。147d7d015 腳 bl1:背光電源正極。16 腳 bl2:背光電源負(fù)極。系統(tǒng)顯示電路如圖 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)。輸出控制電路如圖 8 所
17、示。圖圖 8 輸出控制電路輸出控制電路92.3 總電路設(shè)計(jì)系統(tǒng)總電路圖如圖 9 所示。圖圖 9 系統(tǒng)總電路圖系統(tǒng)總電路圖2.4 系統(tǒng)所用元器件本系統(tǒng)所用的元器件清單如表 1 所示。 表表 1 系統(tǒng)所用元器件系統(tǒng)所用元器件元器件名稱元器件名稱數(shù)量數(shù)量點(diǎn)觸式開關(guān)1630pf 瓷片電容210uf 電解電容1藍(lán)色 led1紅色 red15v 電源插座1自鎖開關(guān)1lcd160211/4w10k 電阻31010k 可調(diào)電阻1at89c521ds18b20112mhz 晶振13 軟件系統(tǒng)設(shè)計(jì)3.1 軟件系統(tǒng)總體方案設(shè)計(jì) 系統(tǒng)軟件由主程序模塊、測(cè)溫程序模塊、鍵盤掃描程序模塊以及液晶驅(qū)動(dòng)程序模塊組成。3.2 軟
18、件流程圖設(shè)計(jì)系統(tǒng)軟件流程圖如圖 10 所示。11圖圖 10 系統(tǒng)軟件流程圖系統(tǒng)軟件流程圖4 系統(tǒng)調(diào)試系統(tǒng)調(diào)試程序在 keil uvision4 環(huán)境下編寫,編譯通過(guò)后生成.hex 文件加載到 protuse 下可正常運(yùn)行。程序默認(rèn)溫度為 21.0,protuse 下設(shè)定 ds18b20 的溫度也為 21.0,故開始12運(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)
19、亮,如圖 11 所示。圖圖 11 紅色紅色 led 燈點(diǎn)亮燈點(diǎn)亮當(dāng)設(shè)定的溫度低于 ds18b20 默認(rèn)的 21.0時(shí),藍(lán)色 led 燈被點(diǎn)亮。如圖 12 所示。13圖圖 12 藍(lán)色藍(lán)色 led 燈點(diǎn)亮燈點(diǎn)亮14 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ì)從獲得題目開始便著手準(zhǔn)備,首先分析系統(tǒng)要求,在 protuse 里完成硬件原理圖的搭建,然后開始在 keil 環(huán)境下著手編寫各部分程序,調(diào)試相應(yīng)的程序,在調(diào)試通
20、過(guò)后再下載到 protuse 里進(jìn)行仿真,發(fā)現(xiàn)問(wèn)題后再返回 keil 下修改相應(yīng)程序,直到最后仿真通過(guò),最后在 altium designer 6 中畫出電路原理圖。在本次課程設(shè)計(jì)過(guò)程中得到了老師以及許多同學(xué)的幫助,感謝那些提供過(guò)幫助的老師和同學(xué)。15參考文獻(xiàn)1 郭文川主編. 單片機(jī)原理與接口技術(shù). 北京:中國(guó)農(nóng)業(yè)出版社,2007.2 郭天祥主編. 51 單片機(jī) c 語(yǔ)言教程. 北京:電子工業(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;/輸出信號(hào)sbit warm =p27;/輸出信號(hào)#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();/定時(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)%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. 本站所有資源如無(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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年地面垂直度調(diào)整設(shè)備項(xiàng)目建議書
- 2025年精細(xì)化學(xué)品:日用化學(xué)品項(xiàng)目建議書
- 2025年液壓元件、系統(tǒng)及裝置合作協(xié)議書
- 2025年電子產(chǎn)品制造設(shè)備:工裝夾具合作協(xié)議書
- 2025年初級(jí)職稱英語(yǔ)考試應(yīng)試技巧試題及答案
- 展柜制作施工方案
- 焊接的施工方案
- 挖方路段施工方案
- 高級(jí)社會(huì)工作者職業(yè)資格筆試2024年考試真題解析
- 2025中級(jí)社會(huì)工作者職業(yè)資格筆試仿真通關(guān)試卷帶答案
- 2025年西班牙語(yǔ)DELE考試真題卷:西班牙語(yǔ)語(yǔ)音與發(fā)音訓(xùn)練試題
- 2025河北地質(zhì)大學(xué)招聘工作人員48人筆試備考題庫(kù)及答案解析
- 2025-2030醫(yī)用超聲儀器市場(chǎng)投資前景分析及供需格局研究研究報(bào)告
- 2025-2030兒童智能手表行業(yè)市場(chǎng)現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025年03月四川天府新區(qū)“蓉漂人才薈”事業(yè)單位(13人)筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 2025年高考物理壓軸題專項(xiàng)訓(xùn)練:用力學(xué)三大觀點(diǎn)處理多過(guò)程運(yùn)動(dòng)問(wèn)題(原卷版)
- 育種學(xué) 課件 第9章 林木抗逆性育種學(xué)習(xí)資料
- 2025年江蘇南通蘇北七市高三二模高考生物試卷(含答案詳解)
- 電氣自動(dòng)化基礎(chǔ)知識(shí)
- 超爾星雅學(xué)習(xí)形勢(shì)與政策(2025春)課程作業(yè)參考答案
- 多智能體協(xié)同控制-第1篇-深度研究
評(píng)論
0/150
提交評(píng)論