太陽(yáng)能熱水器控制器的設(shè)計(jì)
摘 要
本文分析了太陽(yáng)能熱水器的基本構(gòu)造并且簡(jiǎn)單介紹了其工作原理,設(shè)計(jì)了與之配套的太陽(yáng)能熱水器控制器。該控制器利用SST89E58單片機(jī)作為核心器件控制整個(gè)系統(tǒng)運(yùn)作;溫度傳感器DS18B20可以用來(lái)實(shí)時(shí)檢測(cè)水溫,并將檢測(cè)到的數(shù)據(jù)送至單片機(jī)進(jìn)行處理后顯示;由4個(gè)按鍵組成的模擬水位用來(lái)檢測(cè)實(shí)時(shí)水位,當(dāng)不同的按鍵按下時(shí),可以模擬出相應(yīng)的水位;由芯片8155控制的4個(gè)數(shù)碼管是用來(lái)顯示水位和水溫的;由LED燈和蜂鳴器組成的報(bào)警電路實(shí)現(xiàn)了聲光報(bào)警,當(dāng)水位或是水溫超出了正常范圍,報(bào)警電路就會(huì)啟動(dòng);由繼電器控制1個(gè)LED燈的亮滅來(lái)模擬輔助加熱系統(tǒng)是否工作。
本篇論文從硬件電路的原理分析、軟件編程的實(shí)現(xiàn)過(guò)程、電路仿真和調(diào)試等內(nèi)容進(jìn)行分析,實(shí)現(xiàn)了控制器的檢測(cè)、顯示和控制功能。
目 錄
摘要
Abstract
第一章 緒論
1.1背景
1.2 現(xiàn)狀分析
第二章 太陽(yáng)能熱水器的結(jié)構(gòu)及工作原理
2.1太陽(yáng)能熱水器的結(jié)構(gòu)及工作原理
2.2 控制器結(jié)構(gòu)及工作原理
第三章 控制器硬件設(shè)計(jì)
3.1 控制器總體設(shè)計(jì)
3.2 單片機(jī)及其外圍電路
3.2.1 單片機(jī)簡(jiǎn)介
3.2.2 晶振電路
3.2.3 手動(dòng)復(fù)位電路
3.3 顯示電路
3.3.1 數(shù)碼管簡(jiǎn)介
3.3.2 8155簡(jiǎn)介
3.4溫度檢測(cè)電路
3.4.1 溫度傳感器DS18B20簡(jiǎn)介
3.4.2 溫度檢測(cè)電路設(shè)計(jì)
3.5 水位檢測(cè)電路及自動(dòng)上水
3.5.1 水位檢測(cè)電路設(shè)計(jì)
3.5.2 自動(dòng)上水設(shè)計(jì)
3.6 溫度設(shè)定及報(bào)警電路
3.6.1 溫度設(shè)定
3.6.2 報(bào)警電路設(shè)計(jì)
3.7 輔助加熱電路
第四章 控制器軟件設(shè)計(jì)
4.1主程序設(shè)計(jì)
4.2 溫度檢測(cè)子程序
4.3 水位檢測(cè)子程序
4.4 報(bào)警子程序
4.5 顯示子程序
4.6 輔助加熱子程序
4.7 自動(dòng)上水子程序
4.8 溫度設(shè)定子程序
第五章 電路調(diào)試及結(jié)果
5.1程序編譯與仿真結(jié)果
5.2 硬件電路調(diào)試
5.3 調(diào)試過(guò)程中遇到的問(wèn)題
總結(jié)
參考文獻(xiàn)
致謝
附錄
第一章 緒論
1.1背景隨著社會(huì)的進(jìn)步,人類(lèi)文明在不斷提高的同時(shí),卻面臨著一個(gè)非常嚴(yán)峻的問(wèn)題:世界上的不可再生能源——煤炭、石油、天然氣的存儲(chǔ)量在以極快的速度減少,在不久的將來(lái),這些寶貴的資源將逐漸從地球上消失。與此同時(shí),使用這些能源給我們周?chē)沫h(huán)境帶來(lái)了巨大的破壞。藍(lán)藻爆發(fā)、臭氧空洞、二噁英事件等環(huán)境問(wèn)題在不斷的出現(xiàn),生態(tài)平衡遭到了嚴(yán)重的破壞。所以,人類(lèi)急需發(fā)現(xiàn)更多無(wú)污染的可再生資源,在這時(shí),太陽(yáng)能這個(gè)無(wú)窮無(wú)盡的綠色資源得到了人們的青睞。使用它不僅可以解決能源短缺的問(wèn)題,而且不用擔(dān)心它會(huì)消耗盡,只要太陽(yáng) 升起,人們就可以得到儲(chǔ)量豐富的太陽(yáng)能;另外,太陽(yáng)能的使用不會(huì)產(chǎn)生CO2等有害氣體,絕對(duì)不會(huì)對(duì)環(huán)境產(chǎn)生任何的污染,有效地緩解了現(xiàn)存的環(huán)境問(wèn)題。太陽(yáng)能技術(shù)也因此得到了飛速的發(fā)展,太陽(yáng)能汽車(chē)、太陽(yáng)能電池、太陽(yáng)能熱水器等新型產(chǎn)品不斷出現(xiàn)在市場(chǎng)上,其中,以太陽(yáng)能熱水器發(fā)展的最為廣泛,也得到了大眾的認(rèn)可。根據(jù)不完全統(tǒng)計(jì),太陽(yáng)能熱水器的銷(xiāo)售量已遠(yuǎn)遠(yuǎn)超過(guò)了其他種類(lèi)的熱水器。隨著太陽(yáng)能技術(shù)的不斷改革,此款熱水器會(huì)有一個(gè)更廣闊、更長(zhǎng)遠(yuǎn)的發(fā)展。 太陽(yáng)能熱水器給人們提供著安全、綠色、節(jié)能的熱水,而且造價(jià)比較低廉,在技術(shù)上也比較成熟,因此受到人們的喜愛(ài)。在整個(gè)太陽(yáng)能熱水器系統(tǒng)中,除了熱水器本身之外,還有一個(gè)系統(tǒng)也起到了及其重要的作用,即控制器。它是用戶(hù)與熱水器之間的交流介質(zhì),通過(guò)控制器,可以將熱水器的水位水溫信息及時(shí)反饋給用戶(hù),而用戶(hù)也可以通過(guò)控制器對(duì)熱水器進(jìn)行操作,比如,當(dāng)熱水器的水箱沒(méi)水時(shí),用戶(hù)可以選擇自動(dòng)上水功能來(lái)加水,當(dāng)雨雪天氣時(shí),沒(méi)有足夠的熱量來(lái)滿(mǎn)足水的溫度,用戶(hù)就可以啟動(dòng)輔助加熱功能,通過(guò)加熱棒來(lái)加熱水,這樣,無(wú)論何時(shí)用戶(hù)都可以使用到熱水。
1.2 現(xiàn)狀分析太陽(yáng)能熱水器的銷(xiāo)量一直成增長(zhǎng)趨勢(shì),十幾年前,市場(chǎng)的主導(dǎo)還是電加熱型的熱水器,太陽(yáng)能熱水器寥寥無(wú)幾,而如今,幾乎每家每戶(hù)都在使用太陽(yáng)能熱水器,以其廉價(jià)、節(jié)能、環(huán)保的優(yōu)勢(shì)占領(lǐng)了絕大部分市場(chǎng)。隨著人們?cè)絹?lái)越濃厚的環(huán)保意識(shí),對(duì)這種綠色的太陽(yáng)能熱水器的需求會(huì)越來(lái)越大。但是與之配套的控制器卻一直沒(méi)有達(dá)到成熟的階段。目前,大多數(shù)控制器只具有簡(jiǎn)單的檢測(cè)、顯示功能,還需要人為的上水,當(dāng)水溫達(dá)不到滿(mǎn)意的溫度時(shí),用戶(hù)束手無(wú)策。因此,一個(gè)多功能的控制器一旦問(wèn)世,一定會(huì)得到人們的喜愛(ài)。這種控制器的市場(chǎng)前景非常廣闊。 這種控制器以單片機(jī)為核心器件,單片機(jī)的價(jià)格低廉、工作穩(wěn)定、設(shè)計(jì)簡(jiǎn)單,非常適合這種控制器的生產(chǎn),智能化的單片機(jī)還能夠根據(jù)不同的需求作出相應(yīng)的調(diào)整,滿(mǎn)足了不同用戶(hù)的多方面需求。另外,單片機(jī)系統(tǒng)耗能較少,能夠最大程度的節(jié)約能源,保護(hù)設(shè)備,增加設(shè)備的使用壽命。它適用于各個(gè)地方的各種需求,且安裝快捷,使用方便,所以它的市場(chǎng)前景廣闊,是目前市面上其他熱水器種類(lèi)的升級(jí)產(chǎn)品?傊瑹o(wú)論從價(jià)格還是技術(shù)來(lái)說(shuō),太陽(yáng)能熱水器及其控制器都具有很大的優(yōu)勢(shì)。
第二章 太陽(yáng)能熱水器的結(jié)構(gòu)及工作原理
2.1太陽(yáng)能熱水器的結(jié)構(gòu)及工作原理 太陽(yáng)能熱水器的組成很簡(jiǎn)單,包括存儲(chǔ)熱水的保溫水箱、用于吸收太陽(yáng)光能量并把它轉(zhuǎn)換為熱量的集熱器、冷水和熱水循環(huán)流動(dòng)的水管,再加上幾個(gè)閥門(mén),用來(lái)控制水的流向。其結(jié)構(gòu)圖如下所示: 
圖2-1太陽(yáng)能熱水器結(jié)構(gòu)原理圖 太陽(yáng)能熱水器產(chǎn)生熱水的過(guò)程也非常簡(jiǎn)單,利用冷熱水密度不同的原理就可以完成水循環(huán),集熱器可以很好的保留太陽(yáng)光的能量,從而將其轉(zhuǎn)換為水的熱量,當(dāng)有水從集熱器中流過(guò)時(shí),冷水被加熱為熱水,再流向保溫水箱儲(chǔ)存起來(lái),以供用戶(hù)隨時(shí)使用,直到水溫達(dá)到設(shè)定值,循環(huán)閥門(mén)關(guān)閉。水循環(huán)過(guò)程如下圖所示:  圖2-2太陽(yáng)能熱水器水循環(huán)原理圖 2.2 控制器結(jié)構(gòu)及工作原理控制器的核心器件為SST89E58單片機(jī),下圖中T1代表保溫水箱中的溫度傳感器DS18B20,由它負(fù)責(zé)實(shí)時(shí)溫度值的檢測(cè),再發(fā)送給單片機(jī)進(jìn)行顯示;T2負(fù)責(zé)水位的檢測(cè),并完成自動(dòng)上水功能;F1、F4分別代表冷水閥門(mén)和熱水閥門(mén);冷水和熱水分別經(jīng)F2、F3循環(huán)流動(dòng),最終存儲(chǔ)在保溫水箱中;電加熱系統(tǒng)負(fù)責(zé)在雨雪天氣進(jìn)行加熱,來(lái)達(dá)到設(shè)定溫度;控制器還應(yīng)有報(bào)警功能,當(dāng)數(shù)據(jù)超過(guò)了正常范圍,報(bào)警器啟動(dòng),提醒用戶(hù)。

圖2-3控制系統(tǒng)結(jié)構(gòu)簡(jiǎn)圖
工作原理: 白天集熱器工作時(shí),打開(kāi)閥門(mén)F2、F3,冷水從水箱流向集熱器,經(jīng)過(guò)加熱后的熱水經(jīng)F3流向保溫水箱。溫度傳感器T1實(shí)時(shí)檢測(cè)水溫,當(dāng)溫度達(dá)到設(shè)定值時(shí),關(guān)閉閥門(mén)F2,F(xiàn)3。用戶(hù)使用水時(shí),打開(kāi)閥門(mén)F4。沒(méi)有水時(shí),打開(kāi)閥門(mén)F1上水。當(dāng)陽(yáng)光不足的陰雨天氣時(shí),水溫達(dá)不到設(shè)定值,可以啟動(dòng)輔助加熱系統(tǒng)。
第三章 控制器硬件設(shè)計(jì)控制器通過(guò)顯示電路能夠及時(shí)的反映出熱水器的實(shí)時(shí)狀態(tài),包括水的溫度、水箱中剩余的水量,它的輔助加熱系統(tǒng)使人們?cè)陉幱晏鞖庖材軌蚴褂玫綗崴,?bào)警功能能夠督促人們?nèi)ジ淖儫崴鞯臓顟B(tài),使之處于正常的工作范圍。總之,控制器為人們使用太陽(yáng)能熱水器帶來(lái)了方便。對(duì)本課題進(jìn)行分析之后,擬出了三個(gè)方案,如下所示: 方案一:以FPGA為基礎(chǔ)設(shè)計(jì)系統(tǒng) 本方案以VHDL語(yǔ)言和EDA技術(shù)為基礎(chǔ),設(shè)計(jì)了一款太陽(yáng)能熱水器控制器,該系統(tǒng)的實(shí)現(xiàn)基于FPGA,控制器的硬件電路和軟件程序相結(jié)合,完成了對(duì)水箱中的水溫、水位等信息的采集和顯示。 方案二:以CPLD為基礎(chǔ)設(shè)計(jì)系統(tǒng) 本方案以芯片EPMl270作為核心器件,將控制器的外接電路檢測(cè)得到的水溫水位信息進(jìn)行處理和分析,并從LCD液晶顯示屏上展示給用戶(hù),有效地解決了使用太陽(yáng)能熱水器過(guò)程中遇到的問(wèn)題。 方案三:以單片機(jī)SST89E58為基礎(chǔ)設(shè)計(jì)太陽(yáng)能熱水器控制系統(tǒng) 本方案以SST89E58作為中心環(huán)節(jié),它與80C51完全兼容,選擇DS18B20為溫度傳感器、8155作為接口芯片,再加上鍵盤(pán)、顯示電路,實(shí)現(xiàn)了對(duì)太能熱水器的水溫水位的檢測(cè)和控制?刂破鬟有一套輔助加熱的從系統(tǒng),以繼電器作為啟動(dòng)從系統(tǒng)的開(kāi)關(guān)。 通過(guò)對(duì)以上三個(gè)方案的優(yōu)缺點(diǎn)的分析,從實(shí)際的可行度,個(gè)人的知識(shí)掌握情況以及節(jié)約成本考慮,本設(shè)計(jì)選用第三種方案。
3.1 控制器總體設(shè)計(jì)本設(shè)計(jì)的核心器件為SST89E58單片機(jī),由它控制所有的功能完成運(yùn)行,溫度的檢測(cè)需要用到溫度傳感器,這里選用DS18B20,水位的檢測(cè)需要用到水位傳感器,為了方便實(shí)驗(yàn),本設(shè)計(jì)中用四個(gè)按鍵來(lái)模擬不同的水位,不同的按鍵按下會(huì)得到相應(yīng)的水位信息,顯示用到數(shù)碼管,并由芯片8155作為接口電路,還需要由蜂鳴器和LED組成的報(bào)警電路來(lái)實(shí)現(xiàn)聲光報(bào)警,輔助加熱系統(tǒng)必須要用到繼電器,以此來(lái)控制開(kāi)關(guān)。根據(jù)以上設(shè)計(jì),得到控制系統(tǒng)方框圖如下: 
圖3-1 控制系統(tǒng)方框圖 3.2 單片機(jī)及其外圍電路基于單片機(jī)設(shè)計(jì)的電路簡(jiǎn)單,I/O口擴(kuò)展方便,因此可以外接多個(gè)電路,完全滿(mǎn)足了控制器的需求,對(duì)單片機(jī)的編程也可使用匯編和C語(yǔ)言,編程方便;此外,單片機(jī)價(jià)格低廉、工作穩(wěn)定、耗能較少,非常適合實(shí)驗(yàn)使用。 3.2.1 單片機(jī)簡(jiǎn)介單片機(jī)是一個(gè)集成在芯片上的計(jì)算機(jī),SST89E58與80C51完全兼容,編程方便,程序被保存在ROM中,因此具有掉電保存功能,單片機(jī)擁有大量的I/O口和外擴(kuò)I/O口,可以基于單片機(jī)設(shè)計(jì)很多電路,它的總線(xiàn)結(jié)構(gòu)負(fù)責(zé)片內(nèi)所有部件的通信,提高了工作過(guò)程中的可靠程度。片內(nèi)有256個(gè)數(shù)據(jù)存儲(chǔ)空間,絕對(duì)能夠滿(mǎn)足控制器的需求。在本設(shè)計(jì)中只使用到了單片機(jī)的某些引腳,例如外接石英晶體和電容的X1、X2等,單片機(jī)引腳圖如下所示:  圖3-2 單片機(jī)引腳排列圖 部分引腳功能介紹: 表3-1 芯片引腳介紹  3.2.2 晶振電路時(shí)鐘電路提供了系統(tǒng)所需要的時(shí)鐘信號(hào),控制著單片機(jī)的工作節(jié)奏。其電路圖如下所示,圖中X1為石英晶體振蕩器,C1、C2是兩個(gè)值為30pF的反饋電容,它們構(gòu)成的外部電路從XTAL1 、XTAL2端輸入,與片內(nèi)的反相器相結(jié)合,產(chǎn)生震蕩脈沖,再經(jīng)過(guò)分頻電路,得到需要的時(shí)鐘信號(hào),以供單片機(jī)使用。本設(shè)計(jì)中晶振的頻率為11.0592MHz。 
圖3-3 晶振電路
3.2.3 手動(dòng)復(fù)位電路單片機(jī)的復(fù)位電路用于產(chǎn)生復(fù)位信號(hào),并從RST端輸入,當(dāng)單片機(jī)檢測(cè)到RST端有超過(guò)2個(gè)周期的高電平后,系統(tǒng)進(jìn)行復(fù)位,本設(shè)計(jì)采用手動(dòng)復(fù)位,如圖3-4所示,當(dāng)按下圖中的按鍵時(shí),RST電平變高,單片機(jī)復(fù)位。  圖3-4 手動(dòng)復(fù)位電路 3.3 顯示電路控制器的顯示電路可以顯示水箱中水的剩余量以及水的溫度,使人們及時(shí)的了解熱水器的工作狀態(tài),采用數(shù)碼管與8155的結(jié)合來(lái)顯示,這樣便有效的節(jié)省了大量的I/O端口,功耗低,應(yīng)用非常廣泛,且設(shè)計(jì)方便,硬件電路也較為簡(jiǎn)單。 3.3.1 數(shù)碼管簡(jiǎn)介為了對(duì)采集到的水溫和水位的進(jìn)行顯示,要用到4個(gè)數(shù)碼管。其中2個(gè)用來(lái)顯示水位的高低,另外2個(gè)用來(lái)顯示實(shí)時(shí)的水溫。 發(fā)光二極管的縮寫(xiě)字母是LED,它是能夠?qū)㈦娦盘?hào)轉(zhuǎn)換為光信號(hào)的發(fā)光器件。數(shù)碼管就是由多個(gè)LED按照數(shù)字8的形狀排列而成的。本設(shè)計(jì)中使用的是8段數(shù)碼管,其發(fā)光二極管的排列形狀如圖3-5(a)。  圖3-5 8段LED顯示器 在使用過(guò)程中,為了給發(fā)光二極管提供電壓使其發(fā)光,會(huì)把8個(gè)二極管的一端相連,給予高電平或是接地,連接方式有以下2種: ?共陽(yáng)極。此方法給8個(gè)發(fā)光二極管的陽(yáng)極端提供高電平,如圖3-5(b)所示,另一端提供低電平的二極管會(huì)被點(diǎn)亮,否則滅。 ?共陰極。此方法將8個(gè)發(fā)光二極管的陰極端接地,如圖3-5(c)所示,另一端提供高電平的二極管會(huì)被點(diǎn)亮,否則滅。 本設(shè)計(jì)中用到的是共陰極接法,所以給陽(yáng)極引腳加上高電平二極管就會(huì)發(fā)光。 3.3.2 8155簡(jiǎn)介本設(shè)計(jì)中用8155作4位數(shù)碼管的接口芯片。如圖3-6所示,其中PA口為位碼輸出口,PA4~PA7為輸出位控線(xiàn),由于8155的高電平輸出電流很小,數(shù)碼管會(huì)很暗,所以在每個(gè)數(shù)碼管的位控線(xiàn)上要加入一個(gè)三極管來(lái)放大電流。PB口控制段碼的輸出值。 
圖3-6 顯示電路
使用8155作數(shù)碼管的接口芯片時(shí),8155只能輸出顯示的段碼,而不能夠控制輸出的內(nèi)容,動(dòng)態(tài)控制的實(shí)現(xiàn)要依靠軟件程序。在程序設(shè)計(jì)的時(shí)候,需要設(shè)置一個(gè)顯示緩沖區(qū),將要顯示的數(shù)值存放到這個(gè)區(qū)域,本設(shè)計(jì)中用到4個(gè)數(shù)碼管,因此設(shè)置了4個(gè)單元,地址為30H~33H。在每一個(gè)數(shù)碼管被點(diǎn)亮之后,應(yīng)加一段延時(shí)程序,以保證該數(shù)碼管有足夠的顯示亮度。 3.4溫度檢測(cè)電路溫度檢測(cè)電路可以實(shí)時(shí)的反映出當(dāng)前的水溫,選擇DS18B20主要由于其硬件電路簡(jiǎn)單,只需一條數(shù)據(jù)線(xiàn)與單片機(jī)相連即可,成本較低,誤差小,非常適用于熱水器溫度的檢測(cè)。 3.4.1 溫度傳感器DS18B20簡(jiǎn)介DS18B20的主要特征如下表所示: 表3-2 DS18B20的主要特征 
DS18B20芯片封裝結(jié)構(gòu):  圖3-7 DS18B20芯片封裝 DS18B20引腳功能: ·引腳1:GND 電壓地 ·引腳2:DQ 單數(shù)據(jù)總線(xiàn) ·引腳3:VDD 電源電壓 DS18B20的工作原理: DS18B20一個(gè)芯片即可完成溫度的檢測(cè)和數(shù)字?jǐn)?shù)據(jù)的輸出, 增強(qiáng)了其抗干擾能力。它的一個(gè)工作周期可分為溫度檢測(cè)和數(shù)據(jù)處理這兩個(gè)部分。18B20共有三種存儲(chǔ)器,它們分別是:ROM 、RAM 和EEPROM。 控制器對(duì)18B20操作流程: 在DS18B20工作之前,先要進(jìn)行一段時(shí)間的復(fù)位。復(fù)位結(jié)束后,單片機(jī)給出高電平,以便接收一個(gè)存在脈沖。至此,單片機(jī)和18B20達(dá)成了基本的通信協(xié)議,接下來(lái)將完成兩者間的數(shù)據(jù)通信。之后控制器發(fā)送ROM指令,一共有5條指令,由5個(gè)工作周期完成,當(dāng)單片機(jī)只外接一個(gè)DS18B20時(shí),可以跳過(guò)ROM指令,在本設(shè)計(jì)中就跳過(guò)了ROM指令。接下來(lái)控制器發(fā)送存儲(chǔ)器操作指令,該指令包括寫(xiě)RAM數(shù)據(jù)、讀RAM數(shù)據(jù)、將RAM數(shù)據(jù)復(fù)制到EEPROM、溫度轉(zhuǎn)換、將EEPROM中的報(bào)警值復(fù)制到RAM、工作方式切換。當(dāng)存儲(chǔ)器操作指令結(jié)束后,將執(zhí)行溫度轉(zhuǎn)換指令或讀數(shù)據(jù)指令。 若要讀出實(shí)時(shí)的水溫?cái)?shù)據(jù)則需要執(zhí)行兩個(gè)工作周期,第一個(gè)周期為復(fù)位、跳過(guò)ROM指令、執(zhí)行溫度轉(zhuǎn)換存儲(chǔ)器操作指令、等待500uS溫度轉(zhuǎn)換時(shí)間。接下來(lái)執(zhí)行第二個(gè)周期,為復(fù)位、跳過(guò)ROM指令、執(zhí)行讀RAM的存儲(chǔ)器操作指令、讀數(shù)據(jù)。至此,DS18B20的工作完成,之后單片機(jī)便可以對(duì)數(shù)據(jù)做相應(yīng)的處理。 3.4.2 溫度檢測(cè)電路設(shè)計(jì)單片機(jī)和溫度傳感器的電路圖:  圖3-8 溫度檢測(cè)電路 如上圖所示,DS18B20的數(shù)據(jù)端口與單片機(jī)的P1.0相連,硬件電路非常簡(jiǎn)單,溫度數(shù)據(jù)經(jīng)過(guò)處理后會(huì)送到數(shù)碼管顯示。 3.5 水位檢測(cè)電路及自動(dòng)上水3.5.1 水位檢測(cè)電路設(shè)計(jì)蓄水箱的水位也是控制器需要檢測(cè)的一個(gè)重要數(shù)據(jù),最好是采用連續(xù)液位傳感器,這樣測(cè)得的數(shù)據(jù)可以準(zhǔn)確的反映出蓄水箱的真實(shí)水位,但是為了簡(jiǎn)化實(shí)驗(yàn),本設(shè)計(jì)采用分段式液位傳感器,并用四個(gè)按鍵來(lái)代替水位。由于單片機(jī)實(shí)驗(yàn)板上獨(dú)立按鍵個(gè)數(shù)有限,這里采用矩陣鍵盤(pán)中的部分按鍵來(lái)設(shè)計(jì)電路。KEY1按下代表水位為0%,KEY5按下代表水位為30%,KEY9按下代表水位為60%,KEY13按下代表水位為90%。鍵盤(pán)上有行線(xiàn)和列線(xiàn)之分,本矩陣電路有4條列線(xiàn)4條行線(xiàn)。在行線(xiàn)和列線(xiàn)的交點(diǎn)處放置了一個(gè)按鍵,由于行線(xiàn)和列線(xiàn)分別連接著按鍵的不同端,當(dāng)按鈕沒(méi)有被按下時(shí),行線(xiàn)和列線(xiàn)是不相通的。當(dāng)有按鍵按下時(shí),對(duì)應(yīng)的行線(xiàn)變?yōu)榈碗娖。這樣就能采集到是哪個(gè)鍵按下。矩陣鍵盤(pán)原理圖如下: 
圖3-9 矩陣鍵盤(pán)電路 將圖中P2.0~P2.4連接到單片機(jī)后,在軟件編程時(shí),只需將P2.4清0,水位檢測(cè)電路就完成了,當(dāng)按鍵1按下時(shí),數(shù)碼管會(huì)顯示00,當(dāng)按鍵5按下時(shí),數(shù)碼管會(huì)顯示30,當(dāng)按鍵9按下時(shí),數(shù)碼管會(huì)顯示60,當(dāng)按鍵13按下時(shí),數(shù)碼管會(huì)顯示90。 3.5.2 自動(dòng)上水設(shè)計(jì)當(dāng)蓄水箱沒(méi)水時(shí),希望通過(guò)一個(gè)按鍵的控制來(lái)實(shí)現(xiàn)自動(dòng)上水。在實(shí)際應(yīng)用中,應(yīng)用一個(gè)按鍵來(lái)控制電磁閥的開(kāi)閉,以調(diào)整水位的多少,而在實(shí)驗(yàn)中,電磁閥的開(kāi)閉難以實(shí)現(xiàn),只能通過(guò)數(shù)碼管顯示水位來(lái)假設(shè)水位的上升。在軟件設(shè)計(jì)時(shí),需要用到外部中斷1,并由INT1引腳引入中斷請(qǐng)求。當(dāng)芯片檢測(cè)到有中斷信號(hào)時(shí),進(jìn)入中斷程序,數(shù)碼管自動(dòng)顯示為“00→30→60→90”,然后退出中斷,返回到主程序,自動(dòng)上水功能至此完成。 3.6 溫度設(shè)定及報(bào)警電路溫度的設(shè)定是利用單片機(jī)的計(jì)數(shù)中斷功能,按鍵按下,進(jìn)入相應(yīng)的中斷,溫度值相應(yīng)改變。聲光報(bào)警電路利用LED燈和蜂鳴器的組合,成本低廉,設(shè)計(jì)方便,電路簡(jiǎn)單。 3.6.1 溫度設(shè)定在太陽(yáng)能熱水器控制器使用過(guò)程中,用戶(hù)會(huì)根據(jù)自身需求設(shè)定一個(gè)溫度值,當(dāng)處于加熱狀態(tài)時(shí),達(dá)到這個(gè)溫度就會(huì)停止加熱,溫度不再上升。溫度設(shè)定需要用到2個(gè)定時(shí)器中斷,分別用來(lái)完成溫度的加1和溫度的減1。這樣用戶(hù)就可以根據(jù)實(shí)際需求來(lái)設(shè)定0~99中的任意一個(gè)數(shù)。 將4個(gè)定時(shí)器TL0、TH0、TL1、TH1的初始值設(shè)置為FFH,這樣,當(dāng)有按鍵按下時(shí),相當(dāng)于從T0或T1中輸入了脈沖,對(duì)應(yīng)的定時(shí)器的值加1,進(jìn)入中斷服務(wù)程序,完成中斷工作后,返回到主程序。在軟件設(shè)計(jì)時(shí),只需將定時(shí)器方式選擇寄存器(TMOD)中的C/ 設(shè)置為1即表示在計(jì)數(shù)工作方式,計(jì)數(shù)脈沖由2個(gè)按鍵負(fù)責(zé)提供。那么當(dāng)采集到一個(gè)按鍵按下時(shí)就會(huì)進(jìn)入相應(yīng)的中斷,對(duì)溫度值進(jìn)行加減。 3.6.2 報(bào)警電路設(shè)計(jì)當(dāng)水溫、水位過(guò)高或過(guò)低時(shí),系統(tǒng)應(yīng)該發(fā)出警告信號(hào)來(lái)提醒用戶(hù),考慮到自然水本身溫度只有幾度,如果設(shè)置低溫報(bào)警,那么一上水系統(tǒng)就會(huì)報(bào)警,這是不希望出現(xiàn)的狀況,所以本設(shè)計(jì)只設(shè)置一個(gè)高溫報(bào)警值,這個(gè)值可以由用戶(hù)隨意設(shè)定。水位報(bào)警值分別為沒(méi)水時(shí)的00%和溢水時(shí)的90%。在控制器的工作過(guò)程中,單片機(jī)會(huì)不斷的將實(shí)時(shí)水溫和水位與報(bào)警設(shè)定值進(jìn)行比較,一旦到達(dá)這個(gè)值,報(bào)警燈會(huì)啟動(dòng),蜂鳴器響,當(dāng)實(shí)時(shí)數(shù)據(jù)下降到正常范圍內(nèi),報(bào)警燈會(huì)滅掉,蜂鳴器不響。此部分電路設(shè)計(jì)非常簡(jiǎn)單,只需由P1.1和P1.2引腳分別控制一個(gè)蜂鳴器和1個(gè)LED燈,當(dāng)需要報(bào)警時(shí),將對(duì)應(yīng)的引腳設(shè)置成需要的值即可。報(bào)警電路圖如下所示:  圖3-10 報(bào)警電路圖
3.7 輔助加熱電路輔助加熱由繼電器來(lái)控制,繼電器是一種很好的控制開(kāi)關(guān),價(jià)格低,控制方便,配合一個(gè)LED燈來(lái)模擬加熱過(guò)程,使電路簡(jiǎn)單易行。 當(dāng)天氣晴朗時(shí),陽(yáng)光很充足,熱水器水箱中的水能夠被加熱到滿(mǎn)意溫度,但是當(dāng)雨雪天氣,集熱器吸收的能量無(wú)法使溫度達(dá)到設(shè)定值,所以控制器還需要一套輔助加熱系統(tǒng),當(dāng)水溫滿(mǎn)足不了用戶(hù)的需求時(shí),可以通過(guò)按鍵開(kāi)啟加熱系統(tǒng),水箱中的加熱棒便開(kāi)始發(fā)熱工作,當(dāng)水被加熱到設(shè)定值時(shí),加熱系統(tǒng)自動(dòng)關(guān)閉。 本設(shè)計(jì)中使用的繼電器的型號(hào)是SRD-05VDC-SL-C。電磁繼電器一般由銜鐵、線(xiàn)圈、鐵芯、觸點(diǎn)簧片等幾部分組成。當(dāng)給繼電器兩端加上一個(gè)電壓時(shí),電磁效應(yīng)就此產(chǎn)生,開(kāi)關(guān)打到常開(kāi)觸點(diǎn)。當(dāng)線(xiàn)圈斷電后,電磁的吸力也隨之消失,開(kāi)關(guān)打到常閉觸點(diǎn)。 輔助加熱的電路圖如下所示: 在仿真時(shí),由于軟件中沒(méi)有SRD-05VDC-SL-C型號(hào)的繼電器,所以用G2R-14-AC120型號(hào)的繼電器代替,兩者的工作原理相似。  圖3-11 輔助加熱電路圖 輔助加熱功能由外部中斷0實(shí)現(xiàn),當(dāng)采集到按鍵按下時(shí),進(jìn)入中斷。當(dāng)輔助加熱時(shí),單片機(jī)的P2.6口輸出的是高電平,三極管導(dǎo)通,開(kāi)關(guān)打到常開(kāi)狀態(tài),發(fā)光二極管被點(diǎn)亮,當(dāng)不需要輔助加熱時(shí),P2.6口輸出的是低電平,三極管未導(dǎo)通,開(kāi)關(guān)在常閉狀態(tài),發(fā)光二極管不亮。圖中的D1為一個(gè)續(xù)流二極管,當(dāng)線(xiàn)圈突然斷電后,電流不會(huì)立刻消失,剩余的能量會(huì)損壞線(xiàn)圈,為了防止這種現(xiàn)象發(fā)生,用一個(gè)二極管構(gòu)成一個(gè)回路,使能量慢慢釋放完,保護(hù)了線(xiàn)圈,增加了它的壽命。 當(dāng)蓄水箱中沒(méi)水時(shí),是嚴(yán)禁啟動(dòng)輔助加熱的,否則加熱器會(huì)燒壞。在軟件設(shè)計(jì)的時(shí)候,當(dāng)進(jìn)入輔助加熱中斷后,應(yīng)先判斷是否有水,即33H中的值是否為0,當(dāng)為0時(shí),跳出中斷,不對(duì)P2.6的狀態(tài)做任何改變,當(dāng)不為0時(shí),P2.6輸出高電平,即開(kāi)啟輔助加熱系統(tǒng)。
第四章 控制器軟件設(shè)計(jì)4.1主程序設(shè)計(jì)控制器的功能比較多,代碼也有幾百行,為了方便修改和設(shè)計(jì),這里采用模塊化結(jié)構(gòu),包括主程序、溫度檢測(cè)子程序、水位檢測(cè)子程序、報(bào)警子程序、顯示子程序以及4個(gè)中斷程序:輔助加熱子程序、自動(dòng)上水子程序和溫度設(shè)定子程序。由主程序調(diào)用不同的子程序來(lái)實(shí)現(xiàn)控制器的所有功能。 在編寫(xiě)系統(tǒng)初始化程序時(shí)需要注意以下幾點(diǎn): ?設(shè)置4個(gè)單元的顯示緩沖區(qū)30H~33H,數(shù)碼管顯示的數(shù)字存放在這里。 ?在50H、51H中存放溫度設(shè)定的初始值。 ?程序會(huì)使用到中斷,所以在初始化時(shí)必須對(duì)與中斷相關(guān)的寄存器進(jìn)行一些設(shè)置。 主程序流程圖如下所示:  圖4-1 主程序流程圖
4.2 溫度檢測(cè)子程序將采集到的溫度值轉(zhuǎn)換成數(shù)字?jǐn)?shù)據(jù)后送到單片機(jī)進(jìn)行處理,得到一個(gè)3位數(shù)的值,由于實(shí)際生活中顯示的溫度只需要2位就可以滿(mǎn)足,這里放棄了百位值的顯示,處理后的數(shù)據(jù)送到33H、32H保存并通過(guò)數(shù)碼管顯示。 4.3 水位檢測(cè)子程序4個(gè)按鍵的一端分別接到P2口的4個(gè)引腳,當(dāng)按鍵按下時(shí),對(duì)應(yīng)的引腳電平變低。判斷出哪個(gè)按鍵按下后數(shù)碼管會(huì)顯示出對(duì)應(yīng)的值。流程圖如下所示:  圖4-2 水位檢測(cè)流程圖 4.4 報(bào)警子程序將檢測(cè)到的水溫、水位與報(bào)警值進(jìn)行比較,當(dāng)超出范圍時(shí),報(bào)警燈亮,當(dāng)又回到正常范圍內(nèi)時(shí),報(bào)警燈暗。報(bào)警子程序流程圖如下所示:  圖4-3 報(bào)警流程圖 4.5 顯示子程序當(dāng)采集到水溫水位的數(shù)據(jù)后,被保存在30H~33H中,然后調(diào)用顯示子程序,在每個(gè)時(shí)間點(diǎn)被點(diǎn)亮的數(shù)碼管只有一個(gè),但是時(shí)間間隔太短,人眼無(wú)法分辨出,所以平時(shí)看到的都是4個(gè)數(shù)碼管同時(shí)亮著。 4.6 輔助加熱子程序輔助加熱功能由外部中斷0實(shí)現(xiàn),當(dāng)采集到按鍵按下時(shí),進(jìn)入中斷。進(jìn)入中斷后首先判斷是否有水,沒(méi)水就退出,不需要加熱;如果有水,開(kāi)啟加熱,當(dāng)加熱到設(shè)定值后,停止加熱。輔助加熱流程圖如下:  圖4-4 輔助加熱流程圖 4.7 自動(dòng)上水子程序自動(dòng)上水功能需要用到外部中斷1,當(dāng)檢測(cè)到相應(yīng)按鍵按下時(shí),進(jìn)入中斷,然后控制數(shù)碼管從00到30到60到90的顯示,完成后退出中斷。 4.8 溫度設(shè)定子程序溫度設(shè)定需要用到2個(gè)定時(shí)器中斷,定時(shí)器中斷0用來(lái)完成溫度加1度,定時(shí)器中1用來(lái)完成溫度減1度。當(dāng)進(jìn)入溫度加1中斷后,判斷當(dāng)前值的個(gè)位是否為9,若為9,則十位加1,個(gè)位清0;若不為9,則INC 50H即可。調(diào)用顯示后返回主程序。當(dāng)進(jìn)入溫度減1中斷后,判斷當(dāng)前值的個(gè)位是否為0,若為0,則十位減1,個(gè)位變?yōu)?;若不為0,則DEC 50H即可。調(diào)用顯示后返回主程序。
第五章 電路調(diào)試及結(jié)果
5.1程序編譯與仿真結(jié)果程序編譯的目的是為了檢測(cè)編寫(xiě)的程序是否成功,或找出其中錯(cuò)誤,以便更好的改善,保證能夠正確的實(shí)現(xiàn)系統(tǒng)的軟件功能。本設(shè)計(jì)用的開(kāi)發(fā)工具是KeilC,并使用匯編語(yǔ)言進(jìn)行編程,程序編譯后的結(jié)果如下圖所示: 圖5-1 編譯后的結(jié)果 程序編譯正確之后,即可用仿真電路圖進(jìn)行調(diào)試。仿真電路圖如下所示,由于矩陣鍵盤(pán)的效果與獨(dú)立按鍵的效果一樣,為了方便仿真,在此仿真時(shí)用獨(dú)立按鍵代替矩陣鍵盤(pán),并用80C51代替SST89E58進(jìn)行仿真: 
圖5-2 仿真電路圖 點(diǎn)擊開(kāi)始按鈕,程序開(kāi)始運(yùn)行,以下選取幾種仿真結(jié)果: - 當(dāng)按鍵2按下時(shí),代表此時(shí)水位為30%,改變DS18B20的值,使之為22。
數(shù)碼管顯示應(yīng)為3022,如下所示: 
圖5-3 仿真結(jié)果顯示 (2)當(dāng)按鍵3按下時(shí),代表水位為60%,改變DS18B20的值,使之為40。數(shù)碼管顯示應(yīng)為6040,如下所示: 
圖5-4 仿真結(jié)果顯示 (3)當(dāng)按鍵4按下時(shí),代表水位為90%,達(dá)到報(bào)警值,此時(shí)不管溫度值為多少,系統(tǒng)都會(huì)報(bào)警,蜂鳴器會(huì)響,LED燈D1亮,如下所示: 
圖5-5 仿真結(jié)果顯示 - 當(dāng)水溫達(dá)不到設(shè)定值時(shí),開(kāi)啟輔助加熱系統(tǒng),按下按鍵5,繼電器打到常開(kāi)狀態(tài),LED燈D3亮,代表正在加熱,如下圖所示:
 圖5-6 仿真結(jié)果顯示 - 當(dāng)按鍵6按下時(shí),代表正在自動(dòng)上水,數(shù)碼管顯示00-30-60-90,每個(gè)數(shù)字停留顯示幾秒,如下所示:
    圖5-7 仿真結(jié)果顯示 (6)當(dāng)按鍵7按下時(shí),溫度的設(shè)定值加1,由25變?yōu)?6,如下所示: →→
圖5-8 仿真結(jié)果顯示 - 當(dāng)按鍵8按下時(shí),溫度的設(shè)定值減1,由25變?yōu)?4,如下所示:
→→
圖5-9 仿真結(jié)果顯示
5.2 硬件電路調(diào)試硬件實(shí)物圖如下所示: 
圖5-10 硬件實(shí)物圖 提供外部電源后硬件便開(kāi)始工作,這里選取幾種結(jié)果演示: - 當(dāng)KEY9按下時(shí),代表水位為30%,此時(shí)水溫為23,則數(shù)碼管顯示結(jié)果為:

圖5-11硬件結(jié)果顯示 (2)當(dāng)KEY5按下時(shí),代表水位為60%,此時(shí)水溫為30,則數(shù)碼管顯示結(jié)果為: 
圖5-12硬件結(jié)果顯示 (3)當(dāng)KEY1按下時(shí),代表水位為90%,此時(shí)達(dá)到報(bào)警值,不管水溫為多少,系統(tǒng)都會(huì)報(bào)警,蜂鳴器響,LED燈被點(diǎn)亮,結(jié)果如下所示: 
圖5-13硬件結(jié)果顯示 - 當(dāng)KEY17按下時(shí),單片機(jī)檢測(cè)到計(jì)數(shù)脈沖,進(jìn)入定時(shí)器中斷0,用戶(hù)自己設(shè)置的溫度值加1,結(jié)果如下圖所示:
→
圖5-14 硬件結(jié)果顯示 - 當(dāng)KEY18按下時(shí),單片機(jī)檢測(cè)到計(jì)數(shù)脈沖,進(jìn)入定時(shí)器中斷1,用戶(hù)自己設(shè)置的溫度值減1,結(jié)果如下圖所示:
→
圖5-15 硬件結(jié)果顯示 5.3 調(diào)試過(guò)程中遇到的問(wèn)題- 一開(kāi)始由于將溫度傳感器的正負(fù)極接反了,導(dǎo)致不管檢測(cè)到什么溫度,數(shù)碼管顯示的都是0,一直修改程序也沒(méi)有什么作用,仔細(xì)的研究了DS18B20的引腳說(shuō)明后才發(fā)現(xiàn)問(wèn)題的所在,重新焊接了之后,問(wèn)題得到了解決。
- 在處理溫度設(shè)置的中斷子程序方面,由于先前沒(méi)有考慮到保護(hù)現(xiàn)場(chǎng)的問(wèn)題,導(dǎo)致退出中斷后改變了原先的數(shù)值,經(jīng)過(guò)改善后,在剛跳轉(zhuǎn)進(jìn)入中斷子程序的時(shí)候就加上PUSH 語(yǔ)句,在中斷最后加上POP語(yǔ)句,就很好的阻止了沖突,實(shí)現(xiàn)了中斷。
- 起初的設(shè)計(jì)中水位檢測(cè)電路是選擇的電極式水位傳感器,其工作原理是:根據(jù)水位的不同,傳感器輸出的電阻就會(huì)不同,水位越高,電阻越小,將這個(gè)電阻值接入AD轉(zhuǎn)換芯片,經(jīng)過(guò)處理后得到數(shù)字信號(hào),傳輸給單片機(jī)進(jìn)行顯示,但實(shí)際設(shè)計(jì)過(guò)程中,一直沒(méi)能處理好芯片TLC1549的工作時(shí)序,導(dǎo)致程序頻頻出錯(cuò),至此還沒(méi)有得到解決的方法,所以只能選擇用按鍵來(lái)模擬水位。
總結(jié)通過(guò)設(shè)計(jì)之前所學(xué)的知識(shí)都得到了廣泛的應(yīng)用,加深了理論與實(shí)際的聯(lián)系。提高了本人的動(dòng)手能力,自己的創(chuàng)新意識(shí)也得到了培養(yǎng),使自己對(duì)單片機(jī)的了解更加的全面了。一開(kāi)始接觸這個(gè)課題的時(shí)候,完全沒(méi)有思路,雖然很熟悉太陽(yáng)能熱水器,控制器的功能也理解,但要自己動(dòng)手用軟件和硬件來(lái)實(shí)現(xiàn),卻無(wú)從下手。從網(wǎng)上找了很多資料,也借鑒了其他人設(shè)計(jì)的控制器,在一番深入的了解之后終于得到了一個(gè)初步的設(shè)計(jì)思路,并在之后的代碼編寫(xiě)和硬件焊接過(guò)程中,不斷的完善,最終完成了本次設(shè)計(jì)。 在這次設(shè)計(jì)中,接觸到了溫度傳感器,這款芯片是本人從來(lái)沒(méi)有使用過(guò)的,雖然它與單片機(jī)的連接非常簡(jiǎn)單,但是硬件的簡(jiǎn)化導(dǎo)致了軟件的開(kāi)銷(xiāo),所以在軟件編程時(shí),溫度檢測(cè)這一模塊的代碼困擾了本人很久,查了很多資料,對(duì)傳感器的工作原理也了解了很多,可是編寫(xiě)的代碼始終不能運(yùn)行,經(jīng)過(guò)了三周左右的努力,終于發(fā)現(xiàn)了代碼中的錯(cuò)誤,原因是因?yàn)闆](méi)有給復(fù)位足夠的時(shí)間導(dǎo)致18B20不能工作,修改后成功的將溫度檢測(cè)模塊編寫(xiě)完成。設(shè)計(jì)中另外一個(gè)難點(diǎn)是溫度設(shè)定中斷代碼的編寫(xiě),在一開(kāi)始的設(shè)計(jì)思路中,進(jìn)入中斷后沒(méi)有PUSH、POP的內(nèi)容,在中斷子程序中修改溫度后回到主程序時(shí)發(fā)生了沖突,意識(shí)到這一點(diǎn)后修改了代碼,完成了中斷子程序的編寫(xiě)。至于其他模塊的代碼編寫(xiě)比較簡(jiǎn)單,過(guò)程中并未遇到什么挫折。 硬件電路的焊接也不是非常順利,設(shè)計(jì)初的報(bào)警電路是由LED燈和蜂鳴器組成的,但是在下程序的過(guò)程中不小心把蜂鳴器弄壞了,所以在耽擱了一周之后才完成。本次硬件電路是基于之前課程設(shè)計(jì)中用過(guò)的單片機(jī)實(shí)驗(yàn)板,因此布局布線(xiàn)比較簡(jiǎn)單,這為硬件的搭建省了很多事,也為此次設(shè)計(jì)提供了很多方便。 三個(gè)多月的時(shí)間很快就過(guò)去了,在這段時(shí)間里,本人各方面的能力都得到了提升,總之,這次設(shè)計(jì)讓本人學(xué)到了很多。
致謝經(jīng)過(guò)幾個(gè)月的努力,本人的設(shè)計(jì)已經(jīng)完成;叵脒@幾個(gè)月的學(xué)習(xí),從開(kāi)題到論文的順利完成,得到了老師和同學(xué)們的很多幫助。 首先要感謝本人的指導(dǎo)老師,在設(shè)計(jì)的過(guò)程中,從選題,設(shè)計(jì)方案,論文修改直至成稿一直給予了很多的指導(dǎo)和幫助,同時(shí)也提供了相關(guān)的參考資料,為本人解答疑惑,提供了很多關(guān)鍵性的建議。她嚴(yán)謹(jǐn)細(xì)致,一絲不茍的作風(fēng)一直是本人學(xué)習(xí)、工作中的榜樣,他循循善誘的教導(dǎo)和不拘一格的思路給本人無(wú)盡的啟迪。 還有本人的室友和很多同學(xué)也給了很多的幫助,他們給予鼓勵(lì)與意見(jiàn),讓本人度過(guò)了這段艱辛的時(shí)期。特別要感謝寢室的同學(xué)們,一直以來(lái)都在鼓勵(lì)本人,在做仿真時(shí)一直都在幫助本人,如果沒(méi)有她們的熱心幫忙,此次設(shè)計(jì)的完成將變得非常困難。 對(duì)于這次設(shè)計(jì)中給予本人幫助的老師和同學(xué)致以感謝!
附錄
附錄1:程序
GE_BIT EQU 40H
SHI_BIT EQU 41H
DI_8BIT EQU 43H
GAO_8BIT EQU 44H
DQ EQU P1.0 ;溫度傳感器I/O口
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP HEAT ;輔助加熱
ORG 000BH
LJMP PLUS ;溫度加1
ORG 0013H
LJMP RISE ;自動(dòng)加水
ORG 001BH
LJMP MINUS ;溫度減1
ORG 0020H
MAIN:MOV SP,#60H
MOV 30H,#0 ;30H-33H顯示緩沖區(qū)
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 50H,#5 ;存放溫度設(shè)定值
MOV 51H,#2
MOV DPTR,#07100H ;選中8155
MOV A,#3H
MOVX @DPTR,A
MOV IP,#0FH ;中斷優(yōu)先級(jí)
MOV TCON,#05H ;外部中斷脈沖觸發(fā)有效
MOV IE,#8FH ;中斷總允許,允許定時(shí)器和外部中斷
MOV TMOD,#55H ;接通外部技術(shù)引腳T0T1
MOV TH0,#0FFH
MOV TL0,#0FFH
MOV TH1,#0FFH
MOV TL1,#0FFH
SETB TR0 ;啟動(dòng)定時(shí)器
SETB TR1
CLR P2.4
CLR P2.6
TURN:
LCALL WATER
LCALL ZHUANHUAN ;調(diào)用讀溫度子程序
LCALL DISPLAY
LCALL WARN ;水溫水位報(bào)警
AJMP TURN
WATER: ;水位按鍵判斷
JNB P2.3 ,LOOP5
JNB P2.2,LOOP4
JNB P2.1,LOOP3
JNB P2.0,LOOP2
LCALL DISP
RET
LOOP2:MOV 32H,#0
MOV 33H,#0
LCALL DISP
RET
LOOP3:MOV 32H,#0
MOV 33H,#3
LCALL DISP
RET
LOOP4:MOV 32H,#0
MOV 33H,#6
LCALL DISP
RET
LOOP5:MOV 32H,#0
MOV 33H,#9
LCALL DISP
RET
WARN:MOV A,51H ;水溫報(bào)警
SWAP A
ORL A,50H
MOV 52H,A ;50H和51H 合并
MOV A,31H
SWAP A ;30H和51H合并
ORL A,30H
CJNE A,52H,PD ;檢測(cè)到的溫度與設(shè)定溫度比較
CLR P2.6
CLR P1.2
SETB P1.1
LJMP EXIT
PD:JC BBB ;溫度<設(shè)定值則 跳到BBB
CLR P2.6
CLR P1.2
SETB P1.1
SJMP EXIT
BBB:LCALL WARNING
EXIT:RET
WARNING:MOV A,#0 ;水位報(bào)警
CJNE A,33H,PD1 ;沒(méi)水時(shí)報(bào)警
CLR P1.2
SETB P1.1
AJMP OUT1
PD1:MOV A,#9
CJNE A,33H,BB ;水滿(mǎn)時(shí)報(bào)警
CLR P1.2
SETB P1.1
AJMP OUT1
BB:SETB P1.2
CLR P1.1
OUT1:RET
/*4個(gè)中斷*/
PLUS: ;溫度加1中斷
PUSH 30H
PUSH 31H
MOV TH0,#0FFH
MOV TL0,#0FFH
MOV A,50H
CJNE A,#9,CC
MOV 50H,#0
INC 51H
AJMP CC1
CC:INC 50H
CC1:
MOV 30H,50H
MOV 31H,51H
MOV R1,#07FH
CFU:LCALL DISP1 ;將設(shè)定值顯示一段時(shí)間
DJNZ R1,CFU
POP 30H
POP 31H
RETI
MINUS: ;溫度減1中斷
PUSH 30H
PUSH 31H
MOV TH1,#0FFH
MOV TL1,#0FFH
MOV A,50H
CJNE A,#0,CC2
MOV 50H,#9
DEC 51H
AJMP CC3
CC2:DEC 50H
CC3:
MOV 30H,50H
MOV 31H,51H
MOV R1,#07FH
CFU1:LCALL DISP1
DJNZ R1,CFU1
POP 30H
POP 31H
RETI
HEAT: ;輔助加熱中斷
MOV A,33H
JZ OUT ;沒(méi)水時(shí)不能打開(kāi)繼電器,JZ累加器判0轉(zhuǎn)移
SETB P2.6
OUT:RETI
RISE: MOV 32H,#0 ;自動(dòng)上水
MOV 33H,#0
MOV R1,#0FFH
CFU2:LCALL DISP
DJNZ R1,CFU2
MOV 33H,#3
MOV R1,#0FFH
CFU3:LCALL DISP
DJNZ R1,CFU3
MOV 33H,#6
MOV R1,#0FFH
CFU4:LCALL DISP
DJNZ R1,CFU4
MOV 33H,#9
MOV R1,#0FFH
CFU5:LCALL DISP
DJNZ R1,CFU5
RETI
/***顯示程序***/
DISP:
MOV A,#40H ;水位顯示子程序
MOV DPTR,#07101H
MOVX @DPTR,A
MOV A,32H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#07102H
MOVX @DPTR,A
LCALL DELAY00
MOV A,#80H
MOV DPTR,#07101H
MOVX @DPTR,A
MOV A,33H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#07102H
MOVX @DPTR,A
LCALL DELAY
RET
DISP1:
MOV A,#10H ;溫度顯示子程序
MOV DPTR,#07101H
MOVX @DPTR,A
MOV A,30H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#07102H
MOVX @DPTR,A
LCALL DELAY00
MOV A,#20H
MOV DPTR,#07101H
MOVX @DPTR,A
MOV A,31H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#07102H
MOVX @DPTR,A
LCALL DELAY
RET
/*---------------------延時(shí)子程序-------------------- */
DELAY: MOV R5,#0FH
DELAY4: MOV R4,#0FH
DELAY5: DJNZ R4,DELAY5
DJNZ R5,DELAY4
RET
DELAY00:MOV R6,#0AH
DELAY8: MOV R7,#0AFH
DELAY9: DJNZ R7,DELAY9
DJNZ R6,DELAY8
RET
;這是DS18B20復(fù)位初始化子程序
INIT_1820:
SETB DQ
NOP
CLR DQ ;主機(jī)發(fā)出延時(shí)537微秒的復(fù)位低脈沖
MOV R1,#3
DU_1:
MOV R0,#107
DJNZ R0,$
DJNZ R1,DU_1
SETB DQ ;然后拉高數(shù)據(jù)線(xiàn)
NOP
NOP
NOP
MOV R0,#25H
DU_2:JNB DQ,DU_3 ;等待DS18B20回應(yīng)
DJNZ R0,DU_2
LJMP DU_4 ;延時(shí)
DU_3:SETB F0 ;置標(biāo)志位,表示DS1820存在
LJMP DU_5
DU_4:CLR F0 ;清標(biāo)志位
LJMP DU_7
DU_5:MOV R0,#117
DU_6:DJNZ R0,DU_6
DU_7:SETB DQ
RET
;-------------------------------------------------
;寫(xiě)DS18B20的子程序
WRITE_1820:MOV R2,#8
CLR C
WR1:CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
;-------------------------------------------------
;讀DS18B20的子程序,
READ_1820:MOV R4,#2
MOV R1,#DI_8BIT ;低位存入DI_8BIT,高位存入GAO_8BIT
RE0:MOV R2,#8
RE1:CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#9
RE2:DJNZ R3,RE2
MOV C,DQ
MOV R3,#23
RE3:DJNZ R3,RE3
RRC A
DJNZ R2,RE1
MOV @R1,A
INC R1
DJNZ R4,RE0
RET
;-------------------------------------------------
;讀出后轉(zhuǎn)換的溫度值
ZHUANHUAN:
LCALL INIT_1820 ;先復(fù)位DS18B20
JB F0,ZH1
RET
ZH1:MOV A,#0CCH
LCALL WRITE_1820
MOV A,#44H
LCALL WRITE_1820
LCALL DISPLAY ;等待AD轉(zhuǎn)換結(jié)束,12位的話(huà)750微秒
LCALL INIT_1820
MOV A,#0CCH ;跳過(guò)ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ;發(fā)出讀溫度命令
LCALL WRITE_1820
LCALL READ_1820
;CHULI
MOV A,GAO_8BIT
MOV A,DI_8BIT
MOV B,#16
DIV AB
MOV 35H,A ;將DI_8BIT的高四位右移四位,存入35H中(溫度值)
MOV A,B ;將TEMPER_L的低四位X10/16得小數(shù)后一位數(shù).
MOV B,#10
MUL AB
MOV B,#16
DIV AB
MOV 36H,A ;將小數(shù)后一位數(shù).存入36H中
MOV A,GAO_8BIT ;TEMPER_H中存放高8位數(shù),權(quán)重16
MOV B,#16
MUL AB
ADD A,35H ;35H中存入溫度值的整數(shù)部分
MOV B,#10
DIV AB
MOV GE_BIT,B ;個(gè)位存入40H中
MOV B,#10 ;
DIV AB ;
MOV SHI_BIT,B ;十位存入41H中
RET
;-------------------------------------------------
DISPLAY:
MOV A,SHI_BIT //顯示溫度十位
MOV 31H,A
MOV A,GE_BIT //顯示溫度個(gè)位
MOV 30H,A
LCALL DISP1
RET
/*************** 段碼緩沖區(qū) **********************************/
TABLE: DB 0fcH,60H,0daH,0f2H,66H,0b6H,0beH,0e0H,0feH,0f6H
End
附錄2:原理圖
以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁(yè)上的一模一樣,方便保存):
|