第1章 引言
隨著科學技術的發展,城鎮居民家庭多數以更加安全方便的電熱水器代替了燃氣熱水器;從前風光無限的燃氣熱水器因污染原因和安全問題逐漸退出了我們的視線;新興的太陽能熱水器雖然受到安裝條件和天氣原因的限制,但其安全、節約、環保的特性廣受消費者青睞,發展態勢迅猛。電熱水器相較于燃氣熱水器和太陽能熱水器的優點:便于安裝,不受外部天氣的影響,不受樓層和供水管道的限制,加熱速度快也更加有安全保障,正是因為這些優點大部分家庭選擇電熱水器。由于技術在不斷的發展,對各種嵌入式設備的要求也越來越高了,與此同時熱水器的智能化發展也非常迅速。人們已經不能滿足傳統熱水器非智能的操作方式,再這樣的背景下,本次設計將要設計一款智能化的熱水器設備。通過熱水器智能的調控可以完成自動斷電的安全功能,同時設置的有紅外遙控的功能,可以滿足用戶的遙感的要求。快捷方便,使人們洗浴時能放心享受,安全便捷,其性能滿足人們對現代生活快節奏的需求。
STC89C51的內部資源非常豐富,而且功能強大。STC89C51集成以下功能STC89C52最后一個字符“1”代表了該存儲芯片的Flash容量大小為4k字節。同時它內部集成256字節片內RAM,RAM主要用于程序變量的存儲,256字節可以適用于小型的程序運行。32個數據I/O 接口,這些接口在用于普通功能時用來完成數據通信。這些I/O口有的還有復用功能,這在后面會介紹到。1個看門狗定時器,起到監測程序運行狀況的作用。2 個數據指針,一個堆棧指針,一個程序PC指針。三個16位定時器,大部分要配合中斷來實現定時功能,主要作用是計時的。三個16位計數器,用于監測脈沖跳變次數或者其他計數。6個中斷源,中斷在單片機的內部資源中占有很重要的部分,有了中斷程序可以高效率的執行。全雙工串行口,通過串口來和其他主機通信,起到通訊作用。[1]借助于STC89C51單片機的強大功能,來控制真個系統的協調運行,STC89C51單片機作為此次系統的控制芯片,通過圍連接顯示模塊以、數據輸入模塊,紅外線傳輸模塊以及報警電路完成此次的系統設計。
本設計第一章主要描述了加熱電熱水器控制系統的應用背景、目的和意義;第二章是控制系統的需求分析和設計方案的選擇,主要包括控制器方面的選擇;第三章介紹了控制系統硬件電路的設計;第四章主介紹了控制系統軟件方面的設計;第五章進行了控制系統的仿真和測試;第六章主要是對該系統存在的問題以及解決的方案進行總結。
第2章 系統功能需求分析與控制方案選擇
根據預想所要達到的控制要求有:(1)用LCD1602液晶顯示水溫、設置上下限和定時時間。(2)水溫檢測顯示范圍為00~99℃,精度為±1℃。(3)溫度設置區間為0度到99度,系統不斷檢測當前水溫,如果水溫高于用戶設定的數值,則系統自動斷電,不在加熱。如果水溫低于用戶設定的數值,則系統不會斷電,繼續加熱。(4)設置4個程序按鍵。分別為設置按鍵、加鍵、減鍵、確定鍵。(5)可以紅外遙控,通過紅外一體接收探頭接收遙控器信號,執行與主板按鍵同等功能。由此可以確定兩種方案進行比較選擇。
2.1 系統功能需求分析在此次的系統設計中主要是通過溫度傳感器測得的數據,通過和單片機的連接引腳完成數據的傳輸。單片機通過采集到數據進行溫度值的判斷,來控制加熱器的運行狀態。系統中的數據顯示使用的是LCD1602液晶顯示屏,來顯示實時溫度的數值。報警指示燈(黃):當熱水器出現異常情況時,該指示燈被點亮。
系統在通電之后,單片機內部的PC指針指向程序運行的區域,首先開始的是溫度傳感器的初始化,在完成溫度初始化任務之后,系統就處于檢測判斷狀態。檢測按鍵的發生以及溫度是否超出設定區域。首先進行溫度數值的判斷,接著繼續檢測溫度按鍵,若無按鍵,則接著上一步的執行(以新的設定值開始工作)。若有按鍵,則重新設定溫度范圍,如此循環。
2.2 方案選擇方案一:以STC89C51單片機為控制中心的智能電熱水器。
主控模塊在整個系統中是最中心的部分,承擔著統籌的作用,需要檢測鍵盤等各種參數,以及驅動數碼管的顯示。[2]在本次設計中我選用了51系列單片機中的STC89C51單片機作為系統的主控芯片。因為單片機功能強大,應用廣,從小的電子產品到大的工業控制都有很廣泛的應用。
STC89C系列單片機兼容性很好。除了單片機內部擴展資源不同之外,其余資源都相同。比如說52類型的單片機比51類型的單片機E2PROM擴大了2倍,以及內部隨機數存儲器RAM增大些之外,其余功能全部一樣。也就是說STC89S系列單片機基礎功能都具備,并且引腳位置,中斷地址,以及定時器方式都是一樣的,唯一不同的是擴展的功能。由于單片機在不同場合控制的復雜度不一樣,所以對單片機內部資源配置也不同。以便于適應于多種場合使用,而且選擇合適的單片機型號,可以節約成本。當然,資源豐富的單片機價格也要稍貴一些。
此類單片機以EEPROM電可檫除和Flash技術為主導的存儲器單片機以FLASH作為存儲器的好處很明顯,Flash可擦出次數多,一般很少因為擦除程序超出擦除Flash次數而損害單片機的。單片機的存儲器除了可以存儲程序,還可以運行程序,但是不能存儲程序中的某些變量。這樣可以加快程序的執行速度,提高單片機的效率。STC89系列的單片機具有以下特性:
(1)單片機引出的多個I/O口,使數據交換更加方便。
(2)采用靜態時鐘模式。單片機外部連接晶振電路,通過晶振里面的震蕩電路給單片機提供時鐘脈沖。時鐘脈沖為單片機的程序執行提供了時鐘節拍,在一個時鐘節拍下,單片機的PC指針取一個指令執行,從而完成程序的順序執行。
(3)可以應用于較小系統設計,或者定制用于專用的系統控制器,對需要控制的系統提供一種便捷的處理方法。
(4)通過定時器和計數器,可以設置時間間隔和記錄電壓變化次數。
(5)可以使用匯編語言設計的程序,其執行的效率更加高效。以達到節約單片機內部寶貴的資源為目的。
(6)單片機的品種多,可以選用不同內部資源部處理器,達到節約成本的目的。
下面具體介紹STC89C51芯片的參數:
STC89C51是一個8位微控制器,芯片內部已經集成4K字節存儲區域的Flash,可以直接運行程序。STC89S51采用的是51系列的內核它與工業80C51產品指令和引腳完全兼容。單片機的P0口。如果要改變P0口的輸出電平值時,要在在單片機的相應寄存器里寫入數據1時,單片機就會把相對應的端口輸出高電平。如果在相應的寄存器里面寫入0,單片機就會在相對應的端口輸出定電平。比如在P0的寄存器地址上寫入P0=0x01,則P0.1口位置就會輸出高電平;如果P0=0x00,則P0口位置就會輸出低電平。同理,外部線路提供低電壓則可以通過該引腳讀出低電壓,單片機內部對該位的寄存器就會被寫入0。由于P0口輸出電流較小,所以需要上拉電阻來提供驅動電流。
單片機的P1口。P1口外部不用設置上拉電阻,P1口的能夠提供20MA的驅動電流,所以可以直接對P1口的寄存器寫值。P1口一般沒有復用接口,在STC其他的單片機中有P1口的復用引腳,用來設置定時器PWM波的輸出,或者單片機內部AD電壓值的采集端口。在本次心率計的設計中,并沒有用到PWM的功能,所以選擇的芯片為傳統的51內核單片機。在沒有復用功能的單片機引腳,只有引腳的高電平和低電平輸入輸出功能,以及對單片機引腳的電壓值讀取功能。功能類似于P0口,如果要控制P1口的電平輸出值,就要對P1口的地址寄存器寫入數據。
P2口可以作為普通I/O功能也可以用作第二功能。當P2口作為普通I/O口輸入輸出時,同P0、P1口一樣,只是對該位的引腳輸出高電平和低電平的操作。當P2口作為第二功能使用時,P2口作為外部存儲區域的高八位地址線。當單片機的內部存儲區的容量不夠時,就要采取外部連接存儲芯片的辦法來擴充單片機的存儲容量。[3]由于單片機的程序存儲區域可以直接運行程序,單片機的內部可以直接尋址找到程序所在的地址,在連接單片機外部外部存儲芯片時,要和芯片的讀取地址相對應,所以外部存儲的連接位置是不可改變的,從而確定P2作為復用引腳的地址位置。通過對P2口地址的訪問,可以讀取外部存儲芯片中的數據,也可以對相應的地址為寫入數據。外部連接的存儲芯片的大小可以選擇,通常選用的標準是根據程序的大小來決定的。
P3口是一個可復用的端口。P3口的第一功能是作為數據的輸入輸出,通過對P3口的地址寫入數據,從而控制高低電平的變化。當單片機設置了第二功能是,單片機的第一功能就不再工作,兩種模式只能選用其中的一種。
另外P3口還可以設置第二功能。STC89C51單片機內部集成了6個中斷。中斷的作用是使程序更高效的執行,其中兩個外部中斷通過外部引腳進行觸發,提供感知外部的電壓變化進入中斷。定時器一共有3個中斷,這些中斷是單片機的內部中斷,根據設置相關的寄存器來觸發定時器中斷。[4]中斷的相應與設置的相應中斷標志位有關,一旦中斷響應,就立即進入用戶寫的中斷程序中。另外一個是串口中斷,來檢測串口接收或者發送數據的。串口對于單片機來說是一個與外界通訊的接口。有了串口,可以完成單片機對PC的通訊,或者單片機對單片機的通訊。通過串口傳輸數據,完成對單片機的控制任務。
通過上面所述,可以知道STC89C51單片機具有結構簡單、控制能力強、可靠性高、體積小、價格低等優點。下圖為以STC89C51單片機為控制芯片的系統連接圖:
方案二:PIC16C72單片機為控制器件的智能電熱水器。
PIC16C72是一款8位芯片。它的片內資源要比51單片機豐富,它的片機集成A/D轉換器,片內有大容量的程序存儲器以及數據存儲區。但是它的成本比較貴。通過上面的綜合考慮,這次設計硬件電路時,并不需要處理器片內豐富的資源,這次寫入的程序較小,普通的51單片機就足以應付這次的系統設計,但考慮到成本控制和軟硬件實現難度,采用方案一的控制系統設計比較方便快捷,可以進一步提高電熱水器的智能作用,能夠保證持續的熱水供應,并可以滿足人們日常生活的需要,提高了人們生活的質量。
2.3 本章小結本章主要對此次設計的家用電熱水器控制系統的控制器方案選擇上做了決定,最終決定使用結構簡單、控制能力強、可靠性高、體積小、價格低的STC89C51單片機作為控制器。
第3章 硬件系統設計
本章節的硬件設計主要是系統電源的設計以及為控制芯片的外圍電路設計。下面首先介紹系統電源電路的設計:
3.1 電源電路下圖為系統電源的設計流程圖:
系統供電電壓各部分簡介:
(1)對電壓降壓
由于市電的電壓值較高,單片機不能直接使用,所以在進行電壓處理之前應先進行電壓的降壓操作。
(2)整流濾波電路
電壓進過變壓器的電壓轉化之后電壓值雖然穩定在5V左右,但是輸出的是交流電。需要把交流電轉變為直流電,這一步就需要設計整流濾波電路。
(3)穩壓電路
當電流經過整流濾波之后電壓并不穩定,單片機需要一個穩定的電源這是的電源對單片機的系統穩定性不利。所以需要通過一個穩壓芯片把電壓穩定下拉。[5]本次設計采用的芯片是7805。通過這個芯片可以控制電壓的穩定輸出。下圖為穩壓芯片的電路連接圖:

圖3.2 可調穩壓電路原理圖

圖3.3 7805三端穩壓電源電路
需要特別注意的是,單片機需要輸入較為穩定的電壓波形,雖然穩壓器7805輸出電壓波形比較穩定,但是為了保證系統的穩定性,防止突發事件的產生,需要在其輸入端與輸出端加濾波電容,濾除不需要波形,防止燒壞系統器件,保證系統穩定運行。
3.2 單片機最小系統說明下面主要介紹單片機最小系統的兩個外圍電路:
時鐘電路:晶振電路是單片機程序運行的基礎,晶振振動頻率決定單片機的程序執行速率。晶振作為單片機的時鐘節拍。有兩種時鐘產生方式,一種成為內部時鐘,另一種稱為外部時鐘。為了使單片機的功耗消耗較小,本系統使用的是外部時鐘電路。片機內部集成了一個震蕩電路,在X1和X2引腳連接晶振,并且在晶振的兩端加上電容,給單片機上電,就可以完成單片機晶振起振,本系統選擇的晶振是12MHZ。
復位電路:復位電路,負責單片機的程序復位。當程序運行到某個內存區域時,使用者不愿意程序繼續執行下去,選擇復位引腳,使程序恢復到0地址存儲區域執行。當復位電路中的按鍵按下時,會給兩個電容充電,使RST引腳的電壓升高時間長達單片機的一個時鐘周期,就可以完成單片機程序的復位。

圖3.4 單片機最小系統
3.3 溫度檢測電路溫度傳感器DS18B20體積特別小,硬件開銷相對較低,測量精度比較高,而且抗干擾能力特別強。DS18B20是全數字溫度轉換及輸出,單總線數據通信,最高能達到12位分辨率,檢測的溫度范圍大,是開發有關溫度產品的極佳選擇。[6]其主要功能特性如下:
(1)獨特的1-Wire總線接口僅需要一個管腳來通信。
(2)具有多路采集的能力使得對于分布式溫度的采集和應用更加簡便。
(3)無需其他外部器件。
(4)能夠通過數據線進行供電,供電范圍為3.0V至5.5V。
(5)待機時無損耗。
(6)可測量溫度的范圍為:-55℃至+125℃(-67℉至+257℉)。
(7)溫度以9 位數字量讀出
(8)如果測量溫度的范圍超過-10℃至85℃之外時,具有+-0.5℃的精度。
(9)使用者用于對溫度報警功能的設置。
(10)使用者設置警報溫度的溫度值,用于報警功能。
DS18B20芯片內部有一個測量溫度的傳感器,它是溫度傳輸的基礎;一個存儲芯片的固有信息的ROM區;用于存儲芯片的ID等信息;一個RAM存儲區,用于芯片的溫度數據以及一些寄存器數值的存放;還有一個警報電路。其工作原理為:低溫度系數晶振的振蕩頻率受溫度影響很小,用于產生固定頻率的脈沖信號送給計數器1。高溫度系數晶振隨溫度變化其振蕩率明顯改變,所產生的信號作為計數器2的脈沖輸入。計數器1和溫度寄存器被預置在-55℃所對應的一個基數值。計數器1對低溫度系數晶振產生的脈沖信號進行減法計數,當計數器1的預置值減到0時,溫度寄存器的值將加1,計數器1的預置將重新被裝入,計數器1重新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環直到計數器2計數到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數值即為所測溫度。斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正計數器1的預置值。
溫度傳感器接單片機時只需要用到一個I/O口,連接單片機的I/O口時沒有特殊的要求,當芯片連接單片機時,單片機通過單總線協議,從這一個I/O口里讀取或者寫入數據。但是不管是哪種方法,I/O口都要接上4.7kΩ左右的上拉電阻。下圖為溫度傳感器的電路連接圖:

圖3.5 測溫模塊
3.4 人機交互電路3.4.1 鍵盤接口電路按鍵的設計常用的有兩種,一個按鍵連接一個I/O,這是獨立按鍵,另一種是矩陣排布。各有優點,首先,獨立按鍵可以直接連接到中斷引腳。這樣設置好單片機的相應中斷位,就可以用按鍵來觸發中斷。這樣做的好處是:程序可以很快的去執行所需要的功能,對按鍵的相應速度很快。可以達到按下按鍵就可以觸發相應的事件。另外獨立按鍵可以減少程序負擔,不用掃描相應的位置,這樣可以加快程序的執行,相對來說,對程序的編寫難度也會有所下降。如果使用矩陣連接鍵盤的方法,它的好處是節約微控制器的I/O資源。比如說25個按鍵可以連接5個接口就可以。用程序的掃描辦法,是可以實現的。比如說用到的按鍵數量較少,當然選用獨立按鍵的辦法,這樣可以減少程序復雜度,也不會浪費單片機的I/O資源。[7]當然如果按鍵較多,那就必須使用矩陣按鍵要不然,單片機只能連接幾個按鍵,而其他外設就連接不上。
按鍵的使用也需要注意。因為現在用的大多數按鍵用的是輕觸按鍵。當按下之后按鍵兩端的電路接通。當松開之后,按鍵的兩端電路斷開。這樣就會產生一個抖動現象。因為單片機采集速度較快,當按下按鍵到按鍵彈起這段時間內可能會產生多次跳動。對數據采集產生不可預估的變動。這要通過程序做相應的延時來消除機械抖動。在本次設計中所使用的是四個獨立的按鍵,接口電路如下圖所示:

圖3.6 鍵盤電路
3.4.2 顯示電路本次設計的顯示模塊使用的是LCD1602,下面介紹這款液晶顯示器以及接口電路。
(1)顯示原理介紹
1602顯示屏可以顯示16×2個單元,每個單元有8×8=64的點組成。其中8為Y坐標的點數,8為X坐標的點數,根據點數的亮滅組成相應的圖形。把需要點亮的點數寫入顯示屏內部寄存器中,顯示器自動在屏幕上打印出預想的圖像。
(2)字符的顯示
用LCD顯示一個字符時,字符顯示對應一個顯示單元,因為一個字符由8×8點陣組成的圖形,所以可以顯示相應簡單的字符。如果想要在顯示屏上顯示一個字符就要在相應的點上寫1,這樣對應的點就點亮,根據點的排列,就顯示出了字符。比較方便的是控制器里面自帶有字符存儲器,寫字符時,可以直接讀取這些字符的存儲位置,就可以得到相應的字符顯示。字符存儲器里面存儲了160個字符,字符種類豐富,可以顯示一些簡單的界面。
(3)漢字的顯示
漢字的顯示要用到電腦上面的取模軟件,先對漢字取模(就是對各個點的顯示,形成一些編碼,復制到程序的存儲數據區),之后把用取模軟件得到的數據寫到LCD的CGRAM中,讀取相應的位置,就可以在屏幕上打印出所需要的漢字。LCD1602顯示屏內部集成了地址命令,這些地址命令控制顯示字符圖像的位置。通過寫命令寫入地址,就可以在顯示屏的地址的位置寫入數據,[8]把數據寫入CGRAM,就可以在液晶顯示字符圖像。
在對液晶顯示屏寫數據和寫命令之前,要先對液晶顯示屏進行初始化,初始化是通過命令表查得想要初始化的功能來設置的。初始化操作包括液晶的顯示位置、光標是否打、屏幕是否左右移動、是否指針每讀一位自動加一、是否清屏等等命令。

圖3.7 單片機與LCD1602的應用電路
LCD1602液晶顯示器廠家已經在CGRAM存儲器里面固化好160個字符的圖形。如圖2-13所示,看以看出存儲的字符有0~9的數字、26個大小寫英文字母、以及一些特殊字符。觀察下圖不難發現,字符的位置都有一個相對的編碼,這個編碼就是寫入液晶顯示屏的數據數值。比如大寫的英文字母“O”的代碼是01001111(二進制),液晶顯示屏就會把對應地址中的字符打印到屏幕上,就可以看到字母“O”。下表為LCD1602的引腳功能圖以及和單片機的接口電路圖:
表3-1 引腳接口說明表
編號 | 符號 | 引腳說明 | 編號 | 符號 | 引腳說明 |
1 | VSS | 電源地 | 9 | D2 | 數據 |
2 | VDD | 電源正極 | 10 | D3 | 數據 |
3 | VL | 液晶顯示偏壓 | 11 | D4 | 數據 |
4 | RS | 數據/命令選擇 | 12 | D5 | 數據 |
5 | R/W | 讀/寫選擇 | 13 | D6 | 數據 |
6 | E | 使能信號 | 14 | D7 | 數據 |
7 | D0 | 數據 | 15 | BLA | 背光源正極 |
8 | D1 | 數據 | 16 | BLK | 背光源負極 |
1602液晶模塊內部的控制器共有11條控制指令,如表所示:
表3-2 指令說明
序號 | 指令 | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
1 | 清顯示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
2 | 光標返回 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | * |
3 | 置輸入模式 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S |
4 | 顯示開/關控制 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B |
5 | 光標或字符移位 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | * | * |
6 | 置功能 | 0 | 0 | 0 | 0 | 1 | DL | N | F | * | * |
7 | 置字符發生存貯器地址 | 0 | 0 | 0 | 1 | 字符發生存貯器地址 |
8 | 置數據存貯器地址 | 0 | 0 | 1 | 顯示數據存貯器地址 |
9 | 讀忙標志或地址 | 0 | 1 | BF | 計數器地址 |
10 | 寫數到CGRAM或DDRAM) | 1 | 0 | 要寫的數據內容 |
11 | 從顯示模塊寄存器讀值 | 1 | 1 | 得到讀出的數值 |
3.5 紅外一體接收模塊發送的遠程控制功能指令代碼通常使用多一些二進制串行代碼及其編碼規則:脈沖頭,代碼系統,數據代碼、數據補充和結束。第一個脈沖作為一幀命令的起始位置,系統代碼是用來區分不同類型的電氣設備,數據代碼是用來完成命令的功能。一個是數據根據數據代碼逆向代碼。[9]
紅外線的一束光的長度是固定的。而一束紅外光里面有包含著豐富的信息,通過對這些信息的判斷,可以分析出發送方要發送的信號。紅外通訊的0和1通過不同的編碼來表示。紅外采集電路如圖:

圖3.8 遙控接收模塊
3.6 報警電路當單片機檢測到溫度傳感器輸入的溫度值大于當前系統設置的溫度值時,在蜂鳴器的連接引腳輸出一個高電平,這是蜂鳴器發聲,反之,蜂鳴器不發聲。

圖3.9 蜂鳴器驅動電路
3.7本章小結本章主要對系統的應用電路進行介紹,主要說明了系統電源電路,處理器的外圍電路,加熱電路,以及聲音提示電路和溫度采集電路等部分,電源電路為系統提供+12V和+5V的電源,人機交互電路負責單片機和外界的信息交流;溫度控制電路實現控制水溫;聲音提示電路負責熱水器在非安全狀態下工作時發出聲響提示用戶。硬件設計部分主要是完成以上電路的設計,包括各個電路的理論分析以及各個電路與單片機的連接等等。
第4章 軟件系統設計
單片機資源分配如表所示,列出了本系統使用STC89C51單片機的所有I/O口資源,包括了人機交互模塊,溫度檢測模塊以及聲音提示模塊等。
表4-1 I/O口資源分配表
4.1 主程序流程圖本系統采用STC89C51單片機為核心控制器對整個系統進行控制,其控制過程如下:首先通過人機交互模塊設定系統的控制策略,然后通過溫度檢測模塊檢測水箱中的溫度,同時通過溫度控制模控制系統的加熱模塊工作。并將熱水器中的溫度值實時的顯示到顯示屏上。[10]系統的主程序主要完成的是對各全局變量進行定義,對時鐘與時間的初始化,調用子函數的功能,流程圖如圖4.1所示。
4.2 液晶顯示程序設計通過閱讀LCD1602的芯片手冊可以得知,液晶屏:LCD1602的顯示模式一般設置為16×2顯示,8位數據接口顯示狀態;光標顯示可按實際需求和個人偏好設定。
4.2.1寫操作時序圖圖4.2是LCD1602寫操作時序圖,分析可知LCD1602液晶的流程如下:LCD1602顯示屏內部集成了地址命令,這些地址命令控制顯示字符圖像的位置。通過寫命令寫入地址,就可以在顯示屏的地址的位置寫入數據,把數據寫入CGRAM,就可以在液晶顯示字符圖像。

圖4.1 xxx主程序流程圖

圖4.2 寫操作時序圖
4.2.2 初始化程序LCD1602初始化包括初始化以下寄存器:顯示模式寄存器、光標設置寄存器和移屏寄存器。顯示模式寄存器通常設置16×2顯示;光標設置可以設置是光標顯示或者是光標不顯示方式;整屏移動可以設置整屏移動或者不移動。LCD1602初始化程序流程圖如圖所示:

圖4.3 LCD1602初始化程序流程圖
4.2.3 向LCD1602發送數據程序設計通過上面的子程序調用,可以向LCD1602內部輸入一個8位的地址,之后在調用一個寫入數據的子函數,就可以完成在對應地址上寫入一個字符。
4.3按鍵掃描程序設計考慮到用戶在進行按鍵操作時,按下及松開的瞬間都容易產生抖動現象,造成單次按鍵操作時按鍵端口電平多次跳變。采取按下按鍵延時判斷或者中斷法都可以克服按鍵的抖動與窄脈沖的干擾影響,采取硬件措施加以克服需要增加額外的元件,本設計采用軟件措施完成去抖動和防干擾處理。[11]本設計采用定時中斷掃描的方式進行按鍵檢測,通過單片機的定時中斷,每隔10ms掃描一次按鍵端口狀態,按鍵檢測過程中無需一直監視按鍵端口或執行額外的延時程序,節省了單片機的CPU資源和中斷資源。按鍵掃描程序流程圖如圖所示。

圖4.4 按鍵掃描程序流程圖
4.4溫度控制程序設計溫度傳感器的信號傳輸,使用的是單總線的產生方法,通過芯片手冊介紹的時序以及延時間隔,可以完成溫度數據的采集。
4.4.1初始化DS18B20首先要進行DS18B20芯片的初始化,通過芯片的初始化,可以設置本次需要傳輸溫度的精度,以及溫度值的轉換的速度。下圖為芯片的初始化時序圖:

圖4.5 DS18B20初始化時序圖

圖4.6 DS18B20初始化流程圖
4.4.2讀取DS18B20當前溫度硬件電路連接好以后,只需要按照下面過程操作即可讀出溫度數據。本設計中只對一個DS18B20進行控制。[12]本次選取的溫度精度為11位,由于該芯片內部的存儲器是八位的,所以需要分兩次讀取溫度的數據。通過溫度的一位運算,最終輸出準確的溫度值。溫度轉換流程圖如圖4.7所示。
4.5控制程序策略設計整個熱水氣的控制系統主要分為三步來執行單片機內部的程序,首先利用溫度傳感器來采集外界的溫度數值,接著通過單片機的程序判斷是否達到溫度的臨界值,通過判斷的結果來執行對熱水器的加熱裝置的控制。這個三個步驟不斷重復,使整個系統實現所需的控制目標。
圖4.7 讀取DS18B20溫度流程圖
下面介紹各個按鍵的功能:
“功能鍵”用于切換數值項的可調狀態。第一次按下定時器變為可調,再次按下溫度上限變為可調,再次按下溫度下限變為可調。此為一個循環,直至“確認鍵”按下,保存當前設置,跳出菜單。
“加鍵”和“減鍵”用來調整設定的時間和溫度。當前狀態為可調狀態時每按一次“加鍵”和“減鍵”,被設置的數據值遞增或遞減。調整溫度值時以1℃為調整單位,調整時間時以1分鐘為調整單位。
“確定鍵”用于推出當前的可調狀態,保存當前設定數值并運行程序。
4.6本章小結本章根據電路原理圖進行軟件設計,對各個子程序進行了相關的原理分析。其中,詳細的介紹了控制策略程序、液晶顯示屏LCD1602操作程序和讀取DS18B20溫度值程序。這樣整個系統的設計部分就完成了。
第5章 仿真與調試
Proteus產品系列包含了革命性的VSM技術,用戶可以對基于微控制器的設計連同所有的周圍電子器件一起仿真,用戶甚至可以實時采用諸如LED/LCD、鍵盤、RS232終端等動態外設模型來對設計進行交互仿真。ISIS提供給用戶圖形外觀包括線寬、填充類型、字符等的全部控制,使用戶能夠生成如雜志上看到一樣精美的原理圖,遠勝過CAD軟件繪制出的稀薄的線條。畫完圖可以以圖形文件輸出,或者拷貝到剪切板以便其他文件使用。[13]這就使得ISIS成為制作技術文件,學術論文,項目報告的理想工具,也是PCB設計的一個出色的前端,其畫圖的外形由風格模板定義。根據硬件設計和軟件編程,可以在Proteus軟件上進行仿真,模擬實際運行結果,下圖為仿真電路圖:

圖5.1 仿真電路
調試流程如下:按鍵→上電復位→水溫檢測→數碼管顯示→下載程序運行。程序調試分為三個部分:按鍵調試,指示燈顯示調試,及數碼管顯示調試。在具體仿真的過程中,按鍵調試時,應注意按鍵的次序,首先是溫度+鍵,然后測試溫度-鍵,否則有時會出現數碼管顯示延時現象,這種情況主要跟程序設計有關。基于編程方面有些薄弱的情況,應該嚴格按照按鍵次序進行調試。指示燈調試時,有時會出現指示燈無顯示或者不明顯、亮度不夠的情況,這是由于指示燈電壓過低造成的,應盡量避免。數碼管顯示時,只要前兩個步驟進行順利,數碼管就可以正常顯示。由于本設計采用獨立式按鍵,主程序調試結束后,各部分運行正常,能夠顯示水溫結果。另外,本次設計采用的溫度檢測模塊,檢測精度不高,有時會出現溫度跳躍式顯示,比如:有時此時刻溫度顯示為39攝氏度,下一時刻會顯示46攝氏度。此種情況出現的原因是由于溫度檢測模塊的內阻過熱,導致檢測結果不夠準時和準確。這是硬件方面的問題,暫時還沒有找到可替換的模塊,所以無法解決,但不影響整體的效果。按此流程對系統在不同的溫度條件下工作情況進行測試。
本設計的控制要求使熱水器內部水溫保持在用戶所需要的溫度范圍內,仿真設置溫度范圍為29攝氏度到35攝氏度,當前溫度低于29攝氏度時,加熱電路工作,水溫升高直至35攝氏度,此時加熱電路停止工作;當環境溫度再次低于29攝氏度時再次加熱直至35攝氏度,循環往復使溫度保持在29攝氏度到35攝氏度之間。設置當前溫度設置為20攝氏度,低于溫度下限29攝氏度,此時報警電路工作,發出報警聲音,繼電器閉合,工作指示燈亮起,加熱電路工作。

圖5.2 低于下限溫度運行狀況
設置當前溫度為32攝氏度,在29攝氏度到35攝氏度范圍之間,此時報警電路不工作,加熱電路不工作。

圖5.3 上下限溫度間運行狀況
設置當前溫度為40攝氏度,高于溫度上限35攝氏度,此時報警電路工作,發出報警聲音,加熱電路不工作。

圖5.4 高于上限溫度運行狀況
仿真結果顯示,熱水器在溫度低于溫度下限時報警加熱;溫度高于溫度上限時報警不加熱;溫度在溫度上下限之間時不報警不加熱;熱水器在各種溫度條件下工作正常,達到設計要求。
第6章 總結
踉踉蹌蹌地忙碌了兩個月,畢業設計課題也終將告一段落。電熱水器也基本達到預期的功能。但由于能力和時間的關系,總是覺得有很多不盡如人意的地方,譬如功能不全、外觀粗糙、做工簡陋、安全性能較低等問題。但做一件事情,不必過于在乎最終的結果,可貴的是過程中的收獲。在進行此次畢業設計中,通過多次去圖書館進行查閱對各方面的知識有了一定的了解,比如單片機之間紅外通信傳輸、溫度采集和處理;在制作過程中,通過對元件放置位置選擇、連線選擇和萬用板焊接,動手制作的能力大大提升。通過對單片機的學習和使用,知道了以后發展的方向和道路,只有真正的去動手操作才能把課堂學習到的理論知識去熟練的運用和提高,為以后的工作和學習打下堅實的基礎,才能更進一步。也希望以后的學習工作中可以做的更好,能夠彌補這次畢業設計中所發現的,不能熟練運用學習到的理論知識,思考問題過于片面,動手制作能力有待提高等問題,這也是畢業設計的初衷,發現自己的不足并提高自己的能力,成為一個各方面全面發展,對社會有貢獻的人。
致謝
感謝老師從選題到最終完成對我進行的幫助,老師細致嚴謹、一絲不茍的作風一直是我學習的榜樣;循循善誘的教導和不拘一格的思路給予我無盡的啟迪。這篇論文的每個細節和每個數據,都離不開老師細心指導。同時也要感謝室友們對我的幫助,正是由于你們的幫助和支持,我才能克服一個一個的困難和疑惑,直至本文順利的完成
在論文即將完成之際,我的心情無法平靜,從開始進入課題到論文的順利完成,有多少可敬的老師、同學、朋友給了我幫助和支持,在這里接受我誠摯的謝意。