版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第2章全自動(dòng)電加熱鍋爐控制器設(shè)計(jì)
2.1引言2.2全自動(dòng)電加熱鍋爐控制器設(shè)計(jì)任務(wù)書2.3設(shè)計(jì)方案2.4硬件電路設(shè)計(jì)2.5軟件設(shè)計(jì)2.6程序清單2.1引言電加熱鍋爐具有清潔、高效等優(yōu)點(diǎn),可實(shí)現(xiàn)采暖供熱、供應(yīng)熱水等功能。具有自動(dòng)控制功能的電加熱鍋爐被廣泛應(yīng)用于家庭及賓館等場所的供熱及熱水供應(yīng),因此開發(fā)自動(dòng)化程度高、操作方便、安全可靠的電加熱鍋爐具有實(shí)際的應(yīng)用價(jià)值。2.2全自動(dòng)電加熱鍋爐控制器設(shè)計(jì)任務(wù)書
1.設(shè)計(jì)任務(wù)設(shè)計(jì)一個(gè)全自動(dòng)電加熱鍋爐控制器,該控制器能夠按照設(shè)定的溫度在設(shè)定的時(shí)間段內(nèi)自動(dòng)運(yùn)行,并控制加熱器及水泵使鍋爐輸出的熱水水溫保持在設(shè)定值,從而實(shí)現(xiàn)全自動(dòng)的加熱控制。用戶可以通過鍵盤設(shè)定溫度、運(yùn)行時(shí)間段及系統(tǒng)時(shí)間等信息,系統(tǒng)的運(yùn)行溫度、設(shè)定溫度及時(shí)間信息通過LCD顯示器顯示。系統(tǒng)要求具有過熱及缺水的報(bào)警功能。
2.設(shè)計(jì)要求
(1)溫度的設(shè)定功能。通過鍵盤設(shè)定運(yùn)行時(shí)的溫度,溫度的設(shè)定范圍為5~90?C。
(2)定時(shí)功能。系統(tǒng)運(yùn)行時(shí)可以在一天時(shí)間內(nèi)最多設(shè)定4個(gè)運(yùn)行的時(shí)間段,運(yùn)行時(shí)間段通過鍵盤進(jìn)行設(shè)定,系統(tǒng)啟動(dòng)運(yùn)行時(shí)只在設(shè)定的時(shí)間段內(nèi)運(yùn)行,其他時(shí)間段內(nèi)系統(tǒng)處于待機(jī)狀態(tài)。
(3)運(yùn)行控制功能。通過鍵盤實(shí)現(xiàn)系統(tǒng)的運(yùn)行與停止控制功能。一旦系統(tǒng)投入運(yùn)行,控制器自動(dòng)控制加熱器和水泵的啟停,使鍋爐出水的溫度為設(shè)定的溫度,并顯示運(yùn)行溫度與當(dāng)前時(shí)間等運(yùn)行信息。
(4)溫度測量、控制與報(bào)警功能。系統(tǒng)投入運(yùn)行后,自動(dòng)測量水溫,使?fàn)t內(nèi)水溫在設(shè)定的范圍內(nèi)運(yùn)行,當(dāng)溫度低于設(shè)定溫度時(shí)加熱器運(yùn)行,當(dāng)溫度高于設(shè)定溫度時(shí)水泵運(yùn)行,加熱器停止運(yùn)行。
(5)顯示功能。系統(tǒng)要求能夠顯示時(shí)間、溫度以及運(yùn)行時(shí)的相關(guān)信息。
(6)時(shí)間的記憶功能。當(dāng)出現(xiàn)停電或斷電情況時(shí),系統(tǒng)能夠保存當(dāng)前運(yùn)行的相關(guān)設(shè)定值,重新上電后系統(tǒng)可以按照原來的設(shè)定值運(yùn)行。
(7)故障報(bào)警功能。當(dāng)系統(tǒng)在運(yùn)行過程中出現(xiàn)過熱或者缺水干燒現(xiàn)象時(shí),系統(tǒng)進(jìn)入過熱保護(hù)狀態(tài),加熱器停止運(yùn)行,并發(fā)出運(yùn)行報(bào)警信號。2.3設(shè)計(jì)方案依據(jù)設(shè)計(jì)任務(wù)書所提出的各項(xiàng)要求進(jìn)行分析,可以得出該控制器必須具備以下的功能電路模塊或相關(guān)的接口電路:鍵盤及其接口電路、LCD接口電路、溫度測量電路、加熱器與水泵控制接口電路、報(bào)警指示電路、時(shí)鐘電路及ROM存儲器電路等。當(dāng)然,要把這些單元電路組合在一起還離不開主處理器或CPU。由此可以得出全自動(dòng)電加熱鍋爐控制器的結(jié)構(gòu)框圖,如圖2-1所示。圖2-1控制器結(jié)構(gòu)框圖考慮到該控制器的主要控制任務(wù)及其接口設(shè)備的情況,該控制器的主CPU還是以單片機(jī)作為主處理器較為合適。對于該控制器而言并沒有實(shí)時(shí)性能特別高的控制要求,也沒有大量的、復(fù)雜的控制算法,接口設(shè)備主要是鍵盤、LCD顯示器、時(shí)鐘芯片及加熱、水泵的控制接口,對于這些控制要求及相關(guān)的設(shè)備接口實(shí)現(xiàn)采用單片機(jī)完全可以達(dá)到要求,并且實(shí)現(xiàn)起來方案簡單,靈活、成本低廉。根據(jù)以上的分析,本設(shè)計(jì)采用了以W78E58B為主處理器的設(shè)計(jì)方案。該處理器具有與51系列單片機(jī)完全兼容的指令系統(tǒng),開發(fā)平臺及開發(fā)手段豐富;內(nèi)置有36?KB的程序存儲器,方便用來存放大量的程序代碼;豐富的I/O接口等資源,方便用來連接外圍的接口設(shè)備等。2.4硬件電路設(shè)計(jì)該系統(tǒng)的主要外圍硬件有鍵盤、LCD顯示器、時(shí)鐘芯片、串行口ROM、溫度測量電路、加熱器和水泵控制電路及故障檢測電路等。在此系統(tǒng)的設(shè)計(jì)中對這些外圍接口電路的設(shè)計(jì)與應(yīng)用是該系統(tǒng)設(shè)計(jì)成敗的關(guān)鍵,下面就針對這些接口電路的設(shè)計(jì)分別加以介紹。2.4.1鍵盤接口設(shè)計(jì)該系統(tǒng)中鍵盤的主要功能為設(shè)置運(yùn)行的相關(guān)參數(shù)及輸入操作命令,為了便于操作,這里設(shè)置了8個(gè)按鍵來輸入相關(guān)的鍵盤命令。為了設(shè)計(jì)的簡化,這里的鍵盤電路采用了獨(dú)立式鍵盤接口,按鍵的個(gè)數(shù)為8個(gè),正好可以用一個(gè)8位的I/O口來連接鍵盤。在該系統(tǒng)的設(shè)計(jì)中由于要連接LCD顯示器,因此CPU的引腳數(shù)目不夠分配,為簡化設(shè)計(jì)的硬件,這里采用了復(fù)用技術(shù)以減少I/O引腳的需求。具體來說就是把鍵盤接口和LCD的數(shù)據(jù)端口進(jìn)行了復(fù)用,由于這里鍵盤接口對于CPU來說為輸入接口,而LCD的數(shù)據(jù)口對CPU來說為一個(gè)輸出口,因此可以把這兩個(gè)端口進(jìn)行復(fù)用,以達(dá)到節(jié)約I/O引腳的目的。圖2-2為鍵盤接口電路圖。其中圖2-2(a)為鍵盤接口板的電路圖,圖2-2(b)為鍵盤接口板與主控制器的連接電路圖。也就是說,控制系統(tǒng)被分成了兩個(gè)電路板來實(shí)現(xiàn),鍵盤和狀態(tài)指示燈被單獨(dú)布置在一塊電路板上,主處理器及其他電路被布置在一塊電路板上,這樣便于電路系統(tǒng)的安裝。因此圖2-2(a)中所示的鍵盤與主控制器之間通過JP_KEY接口相連。還可以看出,鍵盤接口信號連接到主控制器板后并不是直接連接到P0口,而是通過一片74LS244進(jìn)行緩沖之后才連接到P0口的。在此要特別指出的是,此處P0口被用作一般I/O口,因此需外部上拉。當(dāng)CPU要進(jìn)行鍵盤掃描時(shí),通過I/O口線控制74LS244的數(shù)據(jù)傳輸使能信號,即標(biāo)號為_KEY的信號變低有效就可以實(shí)現(xiàn)鍵盤狀態(tài)的讀取了,而當(dāng)_KEY信號為高電平時(shí),鍵盤接口為高阻,此時(shí)可以通過P0口進(jìn)行LCD的相關(guān)操作,以實(shí)現(xiàn)P0口的復(fù)用。通過JP_KEY接口把3個(gè)LED指示燈和1個(gè)蜂鳴器控制信號引到鍵盤接口板,這樣就可以把狀態(tài)指示與蜂鳴器都安裝在鍵盤接口板上了。圖2-2鍵盤接口電路圖2.4.2LCD接口設(shè)計(jì)在這個(gè)系統(tǒng)中需要顯示的信息較多,包括溫度設(shè)定值和實(shí)際運(yùn)行的溫度值,運(yùn)行時(shí)間段的設(shè)定值,運(yùn)行過程中的實(shí)時(shí)時(shí)間值等信息。由于顯示的信息較多,內(nèi)容較復(fù)雜,采用LED數(shù)碼管顯示很難達(dá)到現(xiàn)實(shí)要求,因此這里采用了LCD顯示模塊來實(shí)現(xiàn)各種信息的顯示。
LCD顯示模塊的種類繁多,在單片機(jī)作為控制器的系統(tǒng)中常采用的液晶顯示模塊有字符式LCD顯示模塊和圖形式LCD顯示模塊,字符式LCD顯示模塊通常只能顯示字符庫中定義的西文或中文字符,不支持圖形的顯示,因此顯示的靈活性受到限制。圖形式LCD顯示模塊既可以顯示中文、西文字符,也可以顯示點(diǎn)陣圖形,因此應(yīng)用靈活,是目前電子系統(tǒng)中常用的顯示手段。本設(shè)計(jì)中采用了圖形式LCD顯示模塊。圖形式LCD顯示模塊的種類也非常多,選用時(shí)應(yīng)主要查看以下參數(shù):首先要選擇合適尺寸和面積的LCD模塊,不同生產(chǎn)廠商生產(chǎn)的LCD模塊其尺寸不一,不同點(diǎn)數(shù)的LCD模塊尺寸通常不同,即使同樣點(diǎn)數(shù)的LCD模塊因?yàn)閱蝹€(gè)點(diǎn)的大小不同也可能不同,在實(shí)際應(yīng)用中應(yīng)選擇滿足要求尺寸的LCD模塊;其次要注意LCD模塊所采用控制器的型號,控制器不同會使外部操作的方法有差異;其次還要注意LCD模塊的外部接口形式,有些采用了并行接口,而有些采用了串行接口。此次設(shè)計(jì)中采用了TOPWAY公司的圖形式LCD模塊LM6029,LM6029與單片機(jī)之間的接口如圖2-3所示。圖2-3LM6029與單片機(jī)之間的接口2.4.3時(shí)鐘芯片接口設(shè)計(jì)該系統(tǒng)要實(shí)現(xiàn)定時(shí)控制功能,系統(tǒng)啟動(dòng)投入運(yùn)行后能夠在每天設(shè)定的時(shí)間段內(nèi)自動(dòng)運(yùn)行,因此必須要有實(shí)時(shí)的系統(tǒng)時(shí)鐘用于計(jì)時(shí),要實(shí)現(xiàn)這一功能最簡單的辦法就是采用時(shí)鐘芯片進(jìn)行計(jì)時(shí)。如果給時(shí)鐘芯片配以后備電池供電則可以實(shí)現(xiàn)連續(xù)不斷的計(jì)時(shí),不管系統(tǒng)斷電還是上電。時(shí)鐘芯片計(jì)時(shí)時(shí)間將作為控制器運(yùn)行的基準(zhǔn)時(shí)間,控制器獲取該時(shí)間與設(shè)定的運(yùn)行時(shí)間進(jìn)行比較就可以控制電鍋爐是否運(yùn)行了。時(shí)鐘芯片的種類也較多,這里選用的時(shí)鐘芯片為DS1302,這是DALLAS公司生產(chǎn)的串行接口的時(shí)鐘芯片,該芯片的主要功能如下:
(1)可以實(shí)時(shí)地計(jì)數(shù)秒、分、小時(shí)、日、月及年,并且可以進(jìn)行閏年的補(bǔ)償,可以計(jì)時(shí)到2100年。
(2)具有31個(gè)采用后備電池供電的非易失性RAM字節(jié)單元。
(3)通過串行接口實(shí)現(xiàn)了最簡的I/O接口。
(4)操作電壓范圍為2.0~5.0V。
(5)?2.0V時(shí)消耗的電流小于200nA。
(6)可通過猝發(fā)模式讀寫地址連續(xù)的時(shí)鐘單元或RAM。
(7)采用8腳的DIP封裝或便于表面貼裝的8腳SOIC封裝。
(8)簡單的3線接口。
(9)?TTL信號兼容(VCC=5V)。
(10)優(yōu)化的工業(yè)級工作溫度范圍:-40~+85℃。圖2-4是DS1302的封裝圖。圖2-4DS1302封裝圖
DS1302是具有實(shí)時(shí)時(shí)鐘功能并帶有31B靜態(tài)RAM的時(shí)鐘芯片,該芯片可以很方便地通過串行口與微處理器進(jìn)行通信,芯片內(nèi)的實(shí)時(shí)時(shí)鐘可以提供秒、分、時(shí)、日、月及年等時(shí)間信息,并且可以在實(shí)時(shí)計(jì)時(shí)的過程中按照每月不超過31天來調(diào)整每月的天數(shù)以及對閏年進(jìn)行自動(dòng)的修正。時(shí)鐘計(jì)時(shí)可以通過AM/PM標(biāo)志位設(shè)定為24小時(shí)制或12小時(shí)制。
DS1302與微處理器之間的接口通過同步串行口來實(shí)現(xiàn),僅需3根信號線就可以實(shí)現(xiàn)通信,這些信號線分別為復(fù)位信號、SCLK同步時(shí)鐘信號及I/O串行數(shù)據(jù)的輸入/輸出信號。數(shù)據(jù)輸入/輸出時(shí)可以一次傳輸1B,也可以通過猝發(fā)方式一次傳輸最多31B。DS1302工作時(shí)的功耗很小,在其保持?jǐn)?shù)據(jù)并維持內(nèi)部時(shí)鐘運(yùn)行的情況下消耗的功耗小于1mW。
DS1302的內(nèi)部結(jié)構(gòu)主要包括輸入移位寄存器、實(shí)時(shí)時(shí)鐘、振蕩分頻電路、控制邏輯及31B的RAM,其內(nèi)結(jié)構(gòu)見圖2-5。圖2-5DS1302內(nèi)部結(jié)構(gòu)圖
DS1302的引腳功能介紹如下:
VCC1、VCC2:VCC2為芯片供電的主電源,當(dāng)VCC2有主電源輸入時(shí),芯片的電源供給由該端來提供,并且可以向連接在VCC1端的后備電池充電。也就是說,VCC1端為后備電源輸入端,用于連接后備電池,在系統(tǒng)主電源缺失的情況下由該后備電池向芯片提供電源以維持內(nèi)部實(shí)時(shí)時(shí)鐘的工作和內(nèi)部RAM中數(shù)據(jù)的安全。具體地,只要VCC2<VCC1+0.2V,則芯片的供電即由VCC1來承擔(dān)。
SCLK:同步時(shí)鐘信號輸入端,用于串行口數(shù)據(jù)的同步輸入/輸出,該引腳的內(nèi)部有一個(gè)40kΩ的內(nèi)部上拉電阻。
I/O:同步數(shù)據(jù)的輸入/輸出端,該段內(nèi)部也有40kΩ的內(nèi)部上拉電阻。
?:復(fù)位信號輸入端,在正常的讀/寫操作中該端子必須設(shè)置為高電平。該引腳內(nèi)部同樣通過40kΩ的上拉電阻上拉。
X1、X2:外部晶振的連接端,通過這兩個(gè)引腳在芯片的外部連接一個(gè)32.768kHz的晶振,晶振與內(nèi)部的振蕩電路組成完整的振蕩電路,振蕩信號經(jīng)過分頻產(chǎn)生實(shí)時(shí)時(shí)鐘的計(jì)時(shí)脈沖信號。
1.DS1302的命令寄存器
DS1302的命令寄存器的結(jié)構(gòu)如圖2-6所示。對DS1302的任何數(shù)據(jù)傳輸操作都須通過命令寄存器來實(shí)現(xiàn),在進(jìn)行命令操作時(shí)必須使命令字的最高位為1,否則該命令將被DS1302忽略。命令寄存器的第6位用來設(shè)定訪問的是DS1302內(nèi)部的RAM還是實(shí)時(shí)時(shí)鐘,當(dāng)該位為0時(shí)訪問內(nèi)部實(shí)時(shí)時(shí)鐘,當(dāng)該位為1時(shí)訪問DS1302內(nèi)部的RAM。第5位到第1位用來指定被訪問的寄存器的地址。最低位用來指定當(dāng)前操作的性質(zhì):設(shè)置為0表示寫操作,設(shè)置為1表示讀操作。圖2-6命令寄存器的結(jié)構(gòu)
2.復(fù)位與時(shí)鐘操作信號提供了兩個(gè)方面的功能:
(1)當(dāng)該信號為高電平時(shí),打開DS1302內(nèi)部移位寄存器,使能外部微處理器的訪問。
(2)當(dāng)該信號為低電平時(shí),中斷當(dāng)前的數(shù)據(jù)傳輸操作,不管當(dāng)前正在進(jìn)行的是單字節(jié)的傳輸還是多字節(jié)的猝發(fā)傳輸。
SCLK信號用來同步數(shù)據(jù)的輸入/輸出操作,當(dāng)信號為高電平輸入數(shù)據(jù)時(shí),輸入數(shù)據(jù)必須在時(shí)鐘信號的上升沿來到之前有效;而當(dāng)輸出數(shù)據(jù)時(shí),數(shù)據(jù)是在時(shí)鐘的下降沿被同步輸出的。在數(shù)據(jù)輸入/輸出的過程中,信號變低,則當(dāng)前的數(shù)據(jù)傳輸被中斷取消,I/O信號線變?yōu)楦咦锠顟B(tài)。
3.?dāng)?shù)據(jù)的輸入操作在8個(gè)SCLK信號的同步之下先輸入一個(gè)字節(jié)的命令字,隨后在另外8個(gè)時(shí)鐘信號的同步下輸入要輸入的數(shù)據(jù),多余的時(shí)鐘信號將被忽略。數(shù)據(jù)的輸入是從最低位開始傳送的。
4.?dāng)?shù)據(jù)的輸出操作要從DS1302讀取數(shù)據(jù)必須先輸入讀命令,在SCLK信號的同步下,8位的命令字被輸入后,即可從I/O端口得到要讀出的數(shù)據(jù)。這里要注意讀出的第一個(gè)數(shù)據(jù)是在輸入命令最后一位被輸入后的第一個(gè)時(shí)鐘下降沿送出的。當(dāng)一個(gè)字節(jié)被讀出之后,如果還有SCLK信號送給DS1302,則DS1302將會送出下一個(gè)字節(jié),并且一直持續(xù)到信號被拉低才結(jié)束數(shù)據(jù)輸出。圖2-7是DS1302的讀/寫操作時(shí)序圖。圖2-7DS1302讀/寫操作時(shí)序
5.猝發(fā)傳送通過尋址地址號為31的單元可以實(shí)現(xiàn)DS1302內(nèi)部時(shí)鐘單元和RAM存儲空間的猝發(fā)讀/寫訪問(即當(dāng)傳送命令字時(shí)使命令字的1~5位全為高電平)。如同進(jìn)行單字節(jié)的操作一樣,命令字的第6位用來指定是對時(shí)鐘還是對RAM進(jìn)行訪問,而第0位用來指定是進(jìn)行讀訪問還是寫訪問。通過猝發(fā)方式訪問時(shí)鐘單元地址為9~31的寄存器單元是不存在的,當(dāng)然也就不具有數(shù)據(jù)的存放能力了,對于RAM地址為31的單元也是沒有數(shù)據(jù)存放能力的。猝發(fā)讀/寫時(shí)總是從地址號為0的單元的第0位開始進(jìn)行操作的。當(dāng)通過猝發(fā)方式對時(shí)鐘單元進(jìn)行寫入時(shí),前8個(gè)字節(jié)單元的數(shù)據(jù)必須按照順序依次寫入,而當(dāng)寫RAM單元時(shí)并沒有必要一定把所有的31個(gè)字節(jié)數(shù)據(jù)都寫入,每一個(gè)寫入RAM單元的數(shù)據(jù)均對應(yīng)存入RAM單元,不管是否寫滿31個(gè)字節(jié)。
6.時(shí)鐘/日期單元時(shí)鐘/日期單元由7個(gè)可讀/寫的寄存器組成,如圖2-8所示。時(shí)鐘/日期單元寄存器內(nèi)的數(shù)據(jù)格式為BCD碼格式。
7.時(shí)鐘停止標(biāo)志秒(SEC)寄存器的第7位(CH)被定義為時(shí)鐘停止標(biāo)志。當(dāng)該位被設(shè)置為1時(shí),時(shí)鐘振蕩器停止工作且DS1302將工作于低功耗的維持狀態(tài),消耗的電流小于100nA;當(dāng)該位被設(shè)置為0時(shí),時(shí)鐘將開始工作。圖2-8時(shí)鐘/日期寄存器的結(jié)構(gòu)示意圖
8.AM-PM/12-24模式設(shè)定小時(shí)(HR)寄存器單元的第7位用來指定當(dāng)前時(shí)鐘是工作于12小時(shí)模式還是24小時(shí)模式。當(dāng)該位為1時(shí)設(shè)定為12小時(shí)模式,此時(shí)小時(shí)寄存器單元的第5位用來設(shè)置AM/PM標(biāo)志;當(dāng)該位為1時(shí)表示PM,否則為AM。在24小時(shí)模式下,第5位用來表示小時(shí)值十進(jìn)制位的第2個(gè)數(shù)字位。
9.寫保護(hù)位控制寄存器(ControlRegister)的第7位為寫保護(hù)位WP,控制寄存器的低7位,即第0位到第6位必須為0,讀出時(shí)也始終為0。如果需要進(jìn)行時(shí)鐘寄存器或RAM單元的寫入操作,則必須使控制寄存器各位均為0。當(dāng)WP為高電平時(shí),將阻止對任何DS1302的任何寫入操作,因此如果要對DS1302進(jìn)行寫入操作,則必須使WP位設(shè)置為0。10.涓流充電控制寄存器(TrickleChargeRegister)涓流充電寄存器用來控制DS1302的涓流充電特性。圖2-9是涓流充電電路的結(jié)構(gòu)框圖。涓流充電控制寄存器的高4位為充電狀態(tài)選擇位,為了防止意外的使能涓流充電,只有設(shè)置這4位為1010b時(shí)才使能涓流充電功能,而所有其他組合狀態(tài)將禁止涓流充電功能。DS1302上電后的默認(rèn)狀態(tài)是禁止涓流充電功能的。控制寄存器的第3位、第2位用來選擇充電二極管,當(dāng)這兩位的組合為01時(shí),一個(gè)二極管被選擇用來實(shí)現(xiàn)VCC2到VCC1之間的涓流充電;當(dāng)這兩位的組合為10時(shí),兩個(gè)二極管被選擇用來實(shí)現(xiàn)VCC2到VCC1之間的涓流充電;當(dāng)這兩位的狀態(tài)組合為00和11時(shí),涓流充電功能也會被禁止??刂萍拇嫫鞯淖畹蛢晌挥脕韺?shí)現(xiàn)充電限流電阻的選擇,選擇關(guān)系見表2-1。圖2-9涓流充電電路結(jié)構(gòu)圖表2-1選擇關(guān)系由表可知,當(dāng)最低兩位設(shè)置為00時(shí)沒有電阻被選中,此時(shí)涓流充電功能同樣也是被禁止的。通過充電電阻和充電二極管的選擇可以控制涓流充電的最大電流。假如VCC2=5V,并且通過涓流充電寄存器設(shè)定通過一個(gè)二極管進(jìn)行充電,充電限流電阻選擇4kΩ,則最大的充電電流為以上內(nèi)容是就DS1302的基本操作情況所做的基本介紹。下面給出設(shè)計(jì)中DS1302與單片機(jī)之間的接口電路,如圖2-10所示。圖2-10DS1320與單片機(jī)之間的接口圖2-10中,VCC1外接備用電池B1,也可以通過JP_B插座引入后備供電電池。SCLK、D_IO、為DS1302與單片機(jī)之間的連接信號,單片機(jī)通過這三根信號線實(shí)現(xiàn)對DS1302的讀/寫操作。X1、X2引腳需要外接32.768kHz的標(biāo)準(zhǔn)晶振,其與內(nèi)部電路共同組成完整的振蕩信號。2.4.4串行E2PROM接口設(shè)計(jì)在該控制器的設(shè)計(jì)任務(wù)中,要求當(dāng)系統(tǒng)斷電之后,系統(tǒng)設(shè)定的運(yùn)行信息能夠繼續(xù)保存,當(dāng)系統(tǒng)重新上電之后,系統(tǒng)可以直接按照上次斷電之前的設(shè)置信息運(yùn)行,為了實(shí)現(xiàn)該項(xiàng)功能就必須設(shè)法保證設(shè)置信息在斷電時(shí)不丟失。能夠?qū)崿F(xiàn)這一功能的措施有多種,可以采用SRAM+?后備供電電池的方法、鐵電存儲器的方法或采用E2PROM來實(shí)現(xiàn)。這里考慮實(shí)際存儲的數(shù)據(jù)量大小及成本等因素采用了串口E2PROM來存儲設(shè)置信息,以及選擇了24系列E2PROM存儲器芯片AT24C02,這是一個(gè)具有2048位(256×8)的存儲芯片,該芯片與單片機(jī)之間的接口電路如圖2-11所示。圖2-11AT24C02與單片機(jī)之間的接口下面以ATMEL公司的產(chǎn)品為例簡要介紹24系列串行E2PROM的特征、結(jié)構(gòu)、接口及操作情況。
1.24系列串行E2PROM的特征
(1)支持低電壓和標(biāo)準(zhǔn)電壓操作,最低操作電壓低至1.8V。
(2)與I2C兼容的兩線串行總線接口。
(3)施密特觸發(fā)器輸入以抑制噪聲。
(4)兼容100kHz(1.8V)和400kHz(不小于2.5V)兩種傳輸速率。
(5)自定時(shí)擦/寫周期(包括自動(dòng)擦除)。
(6)?8B或16B頁寫入緩沖器。
(7)具有硬件寫保護(hù)功能。
(8)擦寫次數(shù)1000000次以上。
(9)數(shù)據(jù)保存器100年。
(10)?ESD保護(hù)電壓>3000V。
(11)提供8引腳PDIP、SOIC、TSSOP和MSOP封裝。
2.24系列存儲器的內(nèi)部結(jié)構(gòu)
24系列存儲器的內(nèi)部結(jié)構(gòu)主要由串行口控制邏輯、器件地址比較邏輯、總線操作啟停邏輯、內(nèi)部定時(shí)計(jì)數(shù)邏輯及E2PROM存儲陣列等部分組成。當(dāng)對器件進(jìn)行操作時(shí),控制邏輯對串行總線送來的信號進(jìn)行解釋執(zhí)行,也可從存儲陣列中讀取數(shù)據(jù),或者向指定的單元寫入數(shù)據(jù)。
3.24系列串行E2PROM存儲器的引腳
SCL:串行時(shí)鐘信號。該信號用于串行數(shù)據(jù)輸入/輸出的同步,對于24系列器件該信號為輸入信號。
SDA:串行數(shù)據(jù)引腳。該引腳為雙向,用于把數(shù)據(jù)和地址輸入/輸出器件。該引腳為開漏輸出,在使用時(shí)需外部接上拉電阻,當(dāng)操作頻率為100kHz時(shí),外接電阻通常選10kΩ;當(dāng)操作頻率為400kHz時(shí),外接電阻選2kΩ。
A2、A1、A0:器件/頁地址輸入端。在一個(gè)由I2C總線系統(tǒng)構(gòu)成的E2PROM存儲系統(tǒng)中,可以通過I2C總線連接多個(gè)存儲器芯片,各個(gè)芯片分別編配不同的地址,訪問時(shí),主器件可以通過器件的地址對各器件進(jìn)行尋址并訪問。對于AT24C01A和AT24C02,可以在一個(gè)I2C系統(tǒng)中最多連接8個(gè)芯片,每個(gè)器件的地址編號由其A2、A1、A0的硬件連接來決定,比如A2A1A0=001B,則該器件的地址編號為001B,當(dāng)主器件在訪問發(fā)送器件編號為001B的器件時(shí),該器件響應(yīng)并給主器件做出應(yīng)答。對于AT24C04,只用A2和A1作為器件的編址引腳,A0不用。對于AT24C08,只用A2作為器件的地址編碼,A1和A0不用連接。對于AT24C16,地址編碼引腳A2、A1、A0均不用,在一個(gè)系統(tǒng)中只能連接一片這樣的器件。
WP:寫保護(hù)引腳。該引腳接地則允許對器件進(jìn)行正常的讀/寫操作,當(dāng)該引腳接VCC時(shí),AT24C01A、AT24C02、AT24C04將進(jìn)入寫保護(hù)功能,禁止外部數(shù)據(jù)的寫入,但器件仍可以正常讀出。AT24C08的寫保護(hù)功能無效,AT24C16的寫保護(hù)功能只對高地址8K位有效。
4.I2C操作協(xié)議
24系列器件的操作完全兼容I2C總線的操作規(guī)范,因此這里介紹的24系列器件的接口操作實(shí)際上就是I2C總線的操作。I2C總線信號有兩個(gè),即SCL和SDA信號。在I2C總線系統(tǒng)中進(jìn)行數(shù)據(jù)操作的基本過程為:主器件先在總線上發(fā)送起始條件,隨后主器件發(fā)送從器件的地址,被尋址的從器件做出應(yīng)答,然后進(jìn)行數(shù)據(jù)的讀/寫操作,數(shù)據(jù)讀/寫操作結(jié)束后主器件產(chǎn)生停止條件并結(jié)束總線操作。
I2C總線協(xié)議規(guī)定只有在總線空閑時(shí)才可以進(jìn)行數(shù)據(jù)傳輸,并且在數(shù)據(jù)傳輸期間,在時(shí)鐘線為高電平時(shí),無論何時(shí),數(shù)據(jù)線都必須保持穩(wěn)定。時(shí)鐘線為高電平時(shí)改變數(shù)據(jù)線將視為總線起始或停止條件。數(shù)據(jù)線和時(shí)鐘線同為高電平被視為總線空閑狀態(tài)。當(dāng)時(shí)鐘線SCL為高電平時(shí),數(shù)據(jù)線SDA從高電平變?yōu)榈碗娖奖硎究偩€操作起始條件,起始條件必須先于所有命令產(chǎn)生。當(dāng)SCL線為高電平時(shí),SDA從低電平變?yōu)楦唠娖奖硎究偩€停止條件,所有總線操作必須在停止條件之前完成。圖2-12為I2C總線操作起始條件和結(jié)束條件示意圖。
I2C總線的數(shù)據(jù)傳送格式是:在I2C總線開始傳送信號后,送出的第一個(gè)字節(jié)數(shù)據(jù)是用來選擇從器件地址的,其中前7位為地址碼,第8位為方向位(R/W)。方向位為“0”表示發(fā)送,即主器件把信息寫入所選擇的從器件;方向位為“1”表示主器件將從從器件讀信息。開始傳送信號后,系統(tǒng)中的各個(gè)器件將自己的地址(即通過A2A1A0的外部連接所確定的地址)和主器件送到總線上的地址進(jìn)行比較,如果與主器件發(fā)送到總線上的地址一致,則該器件即為被主器件尋址的器件,其用來接收信息還是發(fā)送信息則由第8位(R/W)確定。圖2-12I2C總線操作起始條件和結(jié)束條件示意圖在I2C總線上每次傳送的數(shù)據(jù)字節(jié)數(shù)不限,但每一個(gè)字節(jié)必須為8位,而且每個(gè)傳送的字節(jié)后面必須跟一個(gè)認(rèn)可位(第9位),也叫應(yīng)答位(ACK)。每次都是先傳最高位,通常從器件在接收到每個(gè)字節(jié)后都會做出響應(yīng),即釋放SCL線返回高電平,準(zhǔn)備接收下一個(gè)數(shù)據(jù)字節(jié),主器件可繼續(xù)傳送。如果從器件正在處理一個(gè)實(shí)時(shí)事件而不能接收數(shù)據(jù)(例如正在處理一個(gè)內(nèi)部中斷,在這個(gè)中斷處理完之前就不能接收I2C總線上的數(shù)據(jù)字節(jié)),則可以使時(shí)鐘SCL線保持低電平,從器件必須使SDA保持高電平,此時(shí)主器件產(chǎn)生1個(gè)結(jié)束信號,使傳送異常結(jié)束,迫使主器件處于等待狀態(tài)。當(dāng)從器件處理完畢時(shí)將釋放SCL線,主器件繼續(xù)傳送。當(dāng)主器件發(fā)送完一個(gè)字節(jié)的數(shù)據(jù)后,接著發(fā)出對應(yīng)于SCL線上的一個(gè)時(shí)鐘(ACK)認(rèn)可位,在此時(shí)鐘內(nèi)主器件釋放SDA線,一個(gè)字節(jié)傳送結(jié)束,而從器件的響應(yīng)信號將SDA線拉成低電平,使SDA在該時(shí)鐘的高電平期間為穩(wěn)定的低電平。從器件的響應(yīng)信號結(jié)束后,SDA線返回高電平,進(jìn)入下一個(gè)傳送周期。
5.AT24系列讀/寫操作
24系列E2PROM的讀/寫操作在起始條件之后,首先由主器件發(fā)送要訪問的從器件的地址,不同型號的器件其地址的表示方法不同,具體的地址分配如圖2-13所示。圖2-1324系列E2PROM器件地址分配圖對于AT24C01A/02,A2A1A0均表示從器件的地址,因此在一個(gè)I2C總線系統(tǒng)中,最多可以連接8個(gè)這樣的器件。對于AT24C04,只有A2A1用來表示器件地址,P0用來表示器件的內(nèi)部單元地址,原因是AT24C04的容量為4kb,對應(yīng)的字節(jié)單元為512個(gè),要表示這512個(gè)字節(jié)單元地址位數(shù)需要9位,因此P0實(shí)際就用來表示器件內(nèi)部單元地址的第8位,此時(shí)系統(tǒng)中如果連接AT24C04,則最多可以連接4片。對于AT24C08/16也是同樣的道理,這里不再贅述。
24系列器件的寫操作可以分為按字節(jié)寫操作和按頁寫操作兩種情況。圖2-14是按字節(jié)寫操作的時(shí)序圖。圖2-14按字節(jié)寫操作時(shí)序從圖2-14可以看出,在進(jìn)行字節(jié)寫操作時(shí),總線上先產(chǎn)生起始條件,隨后主器件發(fā)送要訪問的從器件地址,并給出讀/寫命令,被選中的從器件做出應(yīng)答并發(fā)送ACK信號到總線上,主器件繼續(xù)發(fā)送被選中器件的內(nèi)部字節(jié)地址,并由從器件應(yīng)答,之后主器件寫入一個(gè)字節(jié)到被選中的單元并由從器件做出應(yīng)答,這些操作完成之后,總線產(chǎn)生停止條件,整個(gè)寫操作過程結(jié)束。圖2-15為按頁進(jìn)行寫操作的時(shí)序圖。在該操作模式下,首先由主器件發(fā)送從器件的地址及從器件中要寫入的第一個(gè)字節(jié)單元的地址,隨后向選中的地址單元中可以連續(xù)寫入最多一頁數(shù)據(jù),不同的器件一頁數(shù)據(jù)對應(yīng)的字節(jié)數(shù)不同,對于AT24C01A/02,一頁數(shù)據(jù)對應(yīng)的字節(jié)數(shù)為8,而對于AT24C04/08/16,每頁數(shù)據(jù)對應(yīng)的字節(jié)數(shù)為16。當(dāng)進(jìn)行頁寫入操作時(shí),寫入的字節(jié)數(shù)超過了一頁的最大字節(jié)數(shù)則數(shù)據(jù)會發(fā)生卷繞,多出來的數(shù)據(jù)又會重新從被選中的第一個(gè)字節(jié)單元開始寫入,從而覆蓋原來寫入的數(shù)據(jù)。同單字節(jié)寫入相同,每次寫入一個(gè)字節(jié),從器件都會做出相應(yīng)的應(yīng)答。按頁寫操作同樣以總線停止條件結(jié)束。圖2-15按頁寫操作時(shí)序
AT24CXX系列器件的讀操作可以分為三種情況,即當(dāng)前地址讀操作、隨機(jī)讀操作和連續(xù)讀操作。在進(jìn)行讀操時(shí)涉及到當(dāng)前地址的概念。所謂當(dāng)前地址,是指器件在上次寫或者讀操作時(shí)最后操作過的字節(jié)單元地址+1,AT24XX系列器件內(nèi)部的字節(jié)地址計(jì)數(shù)器就是用來保存當(dāng)前地址的。當(dāng)讀/寫的單元地址為器件末頁的最后一個(gè)單元地址時(shí),當(dāng)前地址會發(fā)生卷繞,即當(dāng)前讀/寫操作的地址為器件的最后一個(gè)字節(jié)地址時(shí),內(nèi)部字節(jié)地址寄存器中的地址會卷回到器件的首個(gè)單元地址。圖2-16為當(dāng)前字節(jié)讀操作時(shí)序示意圖。主器件產(chǎn)生起始條件后發(fā)送器件地址并使R/W位置1,被尋址的從器件做出應(yīng)答,隨后從器件就向總線送出當(dāng)前字節(jié)內(nèi)的8位數(shù)據(jù),主器件接收到數(shù)據(jù)后并不做出應(yīng)答,但隨后就產(chǎn)生停止條件結(jié)束當(dāng)前的總線操作。圖2-16當(dāng)前字節(jié)讀操作時(shí)序隨機(jī)讀操作的時(shí)序如圖2-17所示。在讀操作之前,先要進(jìn)行一次假寫操作,通過該操作來選定操作的器件和器件中的字節(jié)單元地址。在假讀操作之后,主器件立刻產(chǎn)生一次讀操作讀取從器件送出的數(shù)據(jù),主器件在接收到數(shù)據(jù)之后不進(jìn)行應(yīng)答,隨后產(chǎn)生停止條件結(jié)束整個(gè)總線操作。圖2-17隨機(jī)讀操作時(shí)序以當(dāng)前字節(jié)讀操作或隨機(jī)讀操作為先導(dǎo),都可以引起一次連續(xù)讀操作。例如進(jìn)行一次當(dāng)前字節(jié)單元的讀操作,在從器件送出第一個(gè)數(shù)據(jù)之后,如果主器件對從器件做出應(yīng)答,則從器件會接著送出下一個(gè)字節(jié)數(shù)據(jù),主器件對接收到的數(shù)據(jù)再進(jìn)行應(yīng)答,則從器件會再送出下一個(gè)字節(jié)單元的數(shù)據(jù)并一直這樣循環(huán)下去,直到主器件接收到數(shù)據(jù)后不再應(yīng)答,從器件將停止向主器件發(fā)送數(shù)據(jù),最后主器件產(chǎn)生停止條件結(jié)束當(dāng)前總線操作。隨機(jī)讀操作同樣也可以引起一次連續(xù)讀操作。圖2-18為連續(xù)讀操作的時(shí)序圖。關(guān)于24系列器件還有許多大容量的器件,其操作方法與16kb以下的器件的操作方法還存在著不同,這里對這些器件的操作不再贅述,如果需要可以查閱相關(guān)資料。圖2-18連續(xù)讀操作時(shí)序2.4.5溫度測量電路設(shè)計(jì)溫度測量電路采用的傳感器為PT100,這種傳感器具有測溫范圍寬、精度高、可靠性高等優(yōu)點(diǎn)。溫度測量電路的核心是對有傳感器輸出的信號進(jìn)行放大和調(diào)理,然后對該溫度信號進(jìn)行A/D轉(zhuǎn)換,使單片機(jī)識別。為了降低成本,這里采用了廉價(jià)的運(yùn)放LM324作為溫度信號的放大和調(diào)理,其輸出的信號由A/D轉(zhuǎn)換芯片TLC549轉(zhuǎn)換為數(shù)字信號。這里選用的A/D轉(zhuǎn)換芯片為8位串行接口的A/D轉(zhuǎn)換器,轉(zhuǎn)換的精度雖然不高,但完全可以滿足設(shè)計(jì)的需要。圖2-19是溫度測量電路原理圖。圖2-19溫度測量電路原理圖在該電路中,JP_SEN用來連接溫度傳感器PT100,這里采用了三線制的連接方法,用以減少引線造成的誤差。PT100的信號是通過電橋電路輸出的,為了提高電橋電路工作的精度,其供電電源采用高精度的2.5V穩(wěn)定電源,該電源由TL431提供,同時(shí)這里還采用了高精度的電阻來構(gòu)成電橋電路。這里需要測量的溫度信號實(shí)際上是有著特定范圍的,加熱器的溫度在通常情況下是正的溫度而不會是負(fù)的或者零下溫度,因此這里主要要解決的問題是如何測量零度以上正的溫度。為了實(shí)現(xiàn)這樣的目的并且簡化電路的設(shè)計(jì),這里采用了單電源給LM324供電的方式來實(shí)現(xiàn)信號的放大及調(diào)理。在此把從電橋電路輸出的信號先通過兩個(gè)信號跟隨器,由于用單電源供電,因此運(yùn)放的最小輸入電壓不能太小,電橋的兩個(gè)橋臂輸出的電壓信號是2.5V的基準(zhǔn)信號經(jīng)過分壓得到的,其幅值在0.25V附近變化,可以滿足信號跟隨器的要求。由于通常情況下加熱器的水溫高于零攝氏度,因此可以看出從接有傳感器PT100的橋臂輸出的信號大小總是高于固定橋臂輸出的信號。經(jīng)過兩個(gè)電壓跟隨器后的信號再送入一個(gè)減法器進(jìn)行比較,從而檢測出溫度信號,該溫度信號經(jīng)過最后一級的調(diào)理放大即可送入A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換了。該電路看上去和儀用放大電路非常相似,但其實(shí)并不相同,在儀用放大器電路中通常要采用正負(fù)電源供電,這里只采用了單電源供電,此外,放大器的連接方法也有較大的區(qū)別。從TL431輸出的2.5V基準(zhǔn)信號既作為電橋電路的電源也作為A/D轉(zhuǎn)換器TLC549的參考電壓。從TLC549轉(zhuǎn)換輸出的數(shù)字信號由單片機(jī)讀取進(jìn)行處理。
TLC549是由德州儀器公司(TI)生產(chǎn)的8位CMOSA/D轉(zhuǎn)換器,其主要特點(diǎn)如下:
(1)具有8位分辨率。
(2)支持差分參考電壓輸入。
(3)最小轉(zhuǎn)換時(shí)間為17
s。
(4)轉(zhuǎn)換頻率可達(dá)到40kHz。
(5)具有編程控制的采樣保持功能。
(6)帶有片內(nèi)時(shí)鐘系統(tǒng),典型操作頻率為4MHz。
(7)寬電壓工作范圍為3~6V。
(8)最大功耗為15mW。
(9)采用CMOS工藝。
(10)采用串行接口,方便與處理器進(jìn)行連接。
TLC549的芯片引腳圖如圖2-20所示,共有8個(gè)引腳,這些引腳的功能簡述如下:
REF+、REF-:參考電壓輸入端。TLC549的參考電壓輸入支持單端輸入,也支持差分電壓輸入。當(dāng)采用單端輸入時(shí),REF+端的電壓應(yīng)高于2.5V,REF-端的電壓應(yīng)低于2.5V,并且REF+與REF-之間的電壓差應(yīng)該高于1V;當(dāng)REF+和REF-作為差分電壓輸入時(shí),這兩個(gè)輸入端的電壓差不應(yīng)低于4.75V,否則A/D轉(zhuǎn)換器的不可調(diào)整誤差將增加。
ANALOGIN:模擬信號輸入端。待轉(zhuǎn)化的模擬信號從該端子輸入到A/D轉(zhuǎn)換器。
I/OCLOCK:輸入/輸出時(shí)鐘信號。其最高操作頻率達(dá)到1.1MHz。
DATAOUT:數(shù)據(jù)輸出端。該引腳輸出A/D轉(zhuǎn)化的結(jié)果。:片選信號。該信號與I/OCLOCK和DATAOUT共同配合實(shí)現(xiàn)外部處理器對TLC549的讀/寫操作。圖2-20TLC549引腳圖
TLC549的操作規(guī)則為:當(dāng)為高電平時(shí),DATAOUT引腳呈現(xiàn)高阻狀態(tài),I/OCLOCK信號無效,此時(shí)對TLC549的操作無效。當(dāng)為低電平時(shí),可以通過I/OCLOCK和DATAOUT引腳對TLC549進(jìn)行操作,讀取前一次的轉(zhuǎn)換結(jié)果,并啟動(dòng)當(dāng)前一次的A/D轉(zhuǎn)換。具體來說,引腳變低之后,DATAOUT立刻輸出前一次A/D轉(zhuǎn)換結(jié)果的最高位A7,隨后I/OCLOCK引腳每輸入一個(gè)時(shí)鐘的負(fù)跳沿,上次的轉(zhuǎn)換結(jié)果就向DATAOUT移出一位,經(jīng)過7個(gè)脈沖負(fù)跳沿,前次轉(zhuǎn)換結(jié)果就全部輸出到DATAOUT數(shù)據(jù)線上。之后I/OCLOCK引腳還需要輸入一個(gè)負(fù)跳沿,當(dāng)這些操作都完成之后,應(yīng)被重新上拉為高電平,對TLC549的一次操作就完成了。這樣的一次操作實(shí)際上完成了兩件事情,其一是通過上述操作從TLC549內(nèi)部讀取了前一次A/D轉(zhuǎn)換的結(jié)果,其二是啟動(dòng)了當(dāng)前一次的A/D轉(zhuǎn)換。TLC549內(nèi)置了系統(tǒng)操作時(shí)鐘,該操作時(shí)鐘與I/OCLOCK引腳的時(shí)鐘頻率沒有同步關(guān)系,這樣就方便了用戶的軟、硬件設(shè)計(jì)。每次對TLC549進(jìn)行操作時(shí)除讀取前一次的轉(zhuǎn)換結(jié)果之外,實(shí)際上也實(shí)現(xiàn)了新的一次A/D轉(zhuǎn)換的采樣,并啟動(dòng)當(dāng)前轉(zhuǎn)換,轉(zhuǎn)換啟動(dòng)之后是在內(nèi)部時(shí)鐘的作用下自動(dòng)完成的。對于TLC549來講,從采樣開始到轉(zhuǎn)換完成所需要的總時(shí)間為25
s,因此TLC549的轉(zhuǎn)換頻率可以達(dá)到40kHz。圖2-21是TLC549的操作時(shí)序圖。圖2-21TLC549操作時(shí)序圖2.4.6加熱器和水泵控制電路設(shè)計(jì)加熱器和水泵均采用220V的市電供電,為了避免市電對主控制器的弱電系統(tǒng)造成干擾,這里采用了光電隔離措施來提高系統(tǒng)的抗干擾性能,來自于單片機(jī)的控制信號HEATER和PUMP信號分別用來控制加熱器和水泵的運(yùn)行與停止。經(jīng)過光電隔離之后的信號用來控制兩個(gè)24V的繼電器,這兩個(gè)繼電器所提供的干接點(diǎn)在此用于220V加熱器和水泵的控制。這里采用的光電隔離器為TLP521-2,內(nèi)部含有兩路光電通道,由于對速度沒有特別的要求,因此在使用時(shí)主要考慮光電隔離器的驅(qū)動(dòng)電流和電壓要適當(dāng)。為了可靠驅(qū)動(dòng)繼電器的線包,從光電耦合器輸出的信號再經(jīng)過三極管驅(qū)動(dòng)去控制繼電器工作。除了上述主要電路之外,該系統(tǒng)還包含缺水檢測電路和電源電路。當(dāng)加熱器工作時(shí),缺水檢測電路檢測系統(tǒng)是否缺水,以防止加熱器缺水干燒造成事故。電源電路微系統(tǒng)提供+5V和?+24V兩種工作電壓,+5V電壓為控制器弱電系統(tǒng)提供工作電源,+24V為系統(tǒng)繼電器部分提供電源。圖2-22為加熱器和水泵控制電路。圖2-22加熱器和水泵控制電路2.5軟件設(shè)計(jì)該系統(tǒng)軟件設(shè)計(jì)的主要任務(wù)并不在于控制加熱器及水泵的程序本身,這部分的程序并不復(fù)雜,程序編寫量也不大,而主要的程序任務(wù)集中在顯示與鍵盤相關(guān)的人機(jī)界面程序設(shè)計(jì)上。為了減少編程任務(wù),提高編程的效率,這里采用C語言進(jìn)行編程。下面對主要程序模塊的編程進(jìn)行必要的說明。2.5.1鍵盤掃描程序設(shè)計(jì)系統(tǒng)中鍵盤掃描程序的使用是非常頻繁的,系統(tǒng)日期和時(shí)間的設(shè)定、運(yùn)行溫度的設(shè)定、運(yùn)行時(shí)間段的設(shè)定及系統(tǒng)的啟動(dòng)停止控制都需要使用鍵盤掃描程序。系統(tǒng)中共設(shè)置了8個(gè)按鍵,每次進(jìn)行鍵掃描都會帶回一個(gè)鍵值,該鍵值反映當(dāng)前有無鍵被按下,按下的鍵為哪一個(gè)。當(dāng)鍵盤中僅有一個(gè)鍵被按下時(shí),帶回的鍵值為01H~08H,當(dāng)有多個(gè)鍵同時(shí)被按下或無鍵被按下時(shí),掃描程序帶回的鍵值均為0FFH。由于鍵盤接口與LCD的數(shù)據(jù)接口共用單片機(jī)的P0口,因此在操作時(shí)必須進(jìn)行必要的控制切換。鍵盤掃描程序如下:
unsignedcharKey_Scan(void)
{
uchartemp,key;
_CS1=1;
_CS_KEY=0;
P0=0xff;
_nop_();
_nop_();
_nop_();
_nop_();
temp=P0;
if((~temp)==0x00){_CS_KEY=1;_CS1=0;key=0xff;return(key);}Delay_10ms();temp=P0;if((~temp)==0x00){_CS_KEY=1;_CS1=0;key=0xff;return(key);}temp=~temp;switch(temp){case0x01:key=0x01;break;case0x02:key=0x02;break;case0x04:key=0x03;break;case0x08:key=0x04;break;
case0x10:key=0x05;break;case0x20:key=0x06;break;case0x40:key=0x07;break;case0x80:key=0x08;break;default:key=0xff;}
_FMQ=ON;for(;;){temp=P0;if((~temp)==0x00)break;}_FMQ=OFF;_CS_KEY=1;_CS1=0;return(key);}2.5.2LCD顯示程序設(shè)計(jì)在此系統(tǒng)中LCD顯示器被用來顯示日期、時(shí)間及溫度等信息,只有編寫出基本的LCD操作程序才能更進(jìn)一步編寫各種更復(fù)雜的信息顯示程序。LCD模塊要正常使用,首先必須進(jìn)行正常的初始化操作,這是對LCD進(jìn)行操作的前提。現(xiàn)在的LCD模塊一般都提供完整的初始化操作程序樣例,用戶只需按照廠家提供的初始化例程去操作一般都可以順利實(shí)現(xiàn)正常初始化,在完成初始化操作之后就可以在LCD模塊上顯示信息了。這里選用的LCD模塊為圖形點(diǎn)陣模塊,所顯示的字符信息實(shí)際上要用字模生成軟件生成,并存儲在單片機(jī)系統(tǒng)的ROM中。LCD要顯示這些字符信息,首先必須設(shè)定字符信息在LCD屏上的坐標(biāo)位置,隨后由單片機(jī)控制把要顯示的字符點(diǎn)陣數(shù)據(jù)傳送到LCD模塊的顯示存儲器中進(jìn)行顯示。LCD顯示模塊內(nèi)部帶有顯示控制器,該控制器負(fù)責(zé)接收外部處理器的命令和數(shù)據(jù),進(jìn)行各種操作和顯示,這樣就大大降低了單片機(jī)的控制難度,因此這里單片機(jī)只需向LCD模塊傳送正確的命令和數(shù)據(jù)即可。設(shè)計(jì)中選用的LCD模塊為LM6029,關(guān)于該模塊的詳細(xì)操作命令可以參考其使用手冊,下面就LCD顯示的幾個(gè)關(guān)鍵子程序作一介紹。
A/LCD初始化函數(shù)Initialize():該函數(shù)主要完成LCD模塊上電之后的基本初始化操作,為正常使用做準(zhǔn)備。該函數(shù)的定義如下:voidInitialize(){_CS1=0;_RES=0;Delay(1000);_RES=1;LcdCommand(0xa0);LcdCommand(0xc8);LcdCommand(0xa2);LcdCommand(0x2f);
LcdCommand(0x81);LcdCommand(0x29);LcdCommand(0x40);
LcdCommand(0xaf);}
B/LCD寫命令函數(shù):該命令把一個(gè)命令字節(jié)寫入LCD模塊,命令的執(zhí)行由模塊內(nèi)部的控制器完成。該函數(shù)的定義如下:
voidLcdCommand(ucharCom)
{
_CS_KEY=1;
_RS=0;
LcdDataPort=Com;
_nop_();_nop_();_nop_();
_WR=0;
_nop_();_nop_();_nop_();
_WR=1;
}
C/LCD寫數(shù)據(jù)函數(shù):該函數(shù)負(fù)責(zé)把顯示數(shù)據(jù)寫入LCD的顯示緩存,并由模塊內(nèi)部的控制器控制顯示。該函數(shù)的定義如下:
voidLcdDataWrite(ucharData)
{
_RS=1;
LcdDataPort=Data;
_nop_();_nop_();_nop_();
_WR=0;
_nop_();_nop_();_nop_();
_WR=1;
}
D/設(shè)置LCD顯示位置的函數(shù):用于顯示位置設(shè)置的函數(shù)有兩個(gè),函數(shù)SetPage(ucharPage)用來設(shè)置顯示位置的Y軸坐標(biāo),函數(shù)SetColumn(ucharColumn)用來設(shè)置X軸的坐標(biāo)。這兩個(gè)函數(shù)的定義如下:
voidSetPage(ucharPage) //設(shè)置頁地址函數(shù)
{
Page=Page&0x0f;
Page=Page|0xb0;
LcdCommand(Page);
}voidSetColumn(ucharColumn) //設(shè)置列地址函數(shù){uchartemp;temp=Column;Column=Column&0x0f;Column=Column|0x00;LcdCommand(Column);temp=temp>>4;Column=temp&0x0f;Column=Column|0x10;LcdCommand(Column);}
E/顯示子函數(shù):在此次設(shè)計(jì)中需要顯示數(shù)字、符號及不同規(guī)格的中文字符,根據(jù)這些顯示需要編寫了顯示8×16點(diǎn)陣的函數(shù)DisplayPic(ucharPage,ucharColumn,uchar*PicKu,bitFlag)、顯示16×16漢字點(diǎn)陣的函數(shù)Displaywz(ucharPage,ucharColumn,uchar*PicKu,bitFlag)及顯示24×24漢字點(diǎn)陣的函數(shù)Display24(ucharPage,ucharColumn,uchar*PicKu)。數(shù)字和符號使用DisplayPic函數(shù)顯示,使用時(shí)需給出顯示的地址坐標(biāo)Page和Column,待顯示的點(diǎn)陣字符存放的指針PicKu、位標(biāo)志FLAG用來設(shè)置是否實(shí)現(xiàn)反色顯示。16×16的漢字點(diǎn)陣顯示與8×16的點(diǎn)陣顯示原理相同,也可以通過FLAG標(biāo)志實(shí)現(xiàn)反色顯示。24×24的漢字點(diǎn)陣顯示無反色顯示功能。這幾個(gè)函數(shù)的定義如下://顯示8×16點(diǎn)陣的函數(shù),可實(shí)現(xiàn)反色顯示voidDisplayPic(ucharPage,ucharColumn,uchar*PicKu,bitFlag){uchari,j;
for(j=0;j<2;j++){SetPage(Page+j);
SetColumn(Column);for(i=0;i<8;i++){if(Flag==1) //反色顯示
LcdDataWrite(~PicKu[i*2+j]);else //正常顯示
LcdDataWrite(PicKu[i*2+j]);}}}//顯示16×16漢字點(diǎn)陣的函數(shù)voidDisplaywz(ucharPage,ucharColumn,uchar*PicKu,bitFlag){uchari,j;for(j=0;j<2;j++){SetPage(Page+j);SetColumn(Column);for(i=0;i<16;i++){if(Flag==1)//反色顯示
LcdDataWrite(~PicKu[i*2+j]);elseLcdDataWrite(PicKu[i*2+j]);}}}//顯示24×24漢字點(diǎn)陣的函數(shù)voidDisplay24(ucharPage,ucharColumn,uchar*PicKu){uchari,j;for(j=0;j<3;j++){SetPage(Page+j);SetColumn(Column);for(i=0;i<24;i++){LcdDataWrite(PicKu[i*3+j]);}}}
F/LCD清屏函數(shù):該函數(shù)用來清除CLD屏上以前顯示的所有內(nèi)容。其定義如下:
voidClearScr()
{
uchari,j;
for(i=0;i<8;i++)
{
SetColumn(0);
SetPage(i);
for(j=0;j<128;j++)
{LcdDataWrite(0x00);}
}
}2.5.3DS1302操作程序設(shè)計(jì)對于DS1302的操作主要分為兩方面,一個(gè)為讀操作,一個(gè)為寫操作,其中讀操作主要為獲取時(shí)鐘芯片的計(jì)時(shí)值,寫操作主要是為了進(jìn)行日期時(shí)間的調(diào)整。函數(shù)的定義如下:
//寫時(shí)鐘芯片函數(shù)
voidWr_DS1302(ucharaddress,ucharwbyte)
{
uchartemp;
uchari;
temp=address;
_SCLK=0;
_nop_();
_nop_();
_nop_();
_nop_();_nRST=1;_nop_();_nop_();
_nop_();_nop_();for(i=0;i<8;i++){if((temp>>i)&0x01)_D_IO=1;else_D_IO=0;_nop_();
_nop_();_nop_();_nop_();
_SCLK=1;_nop_();_nop_();_nop_();_nop_();_nop_();_SCLK=0;
//temp=address;}_nop_();_nop_();_nop_();
_nop_();temp=wbyte;
for(i=0;i<8;i++){if((temp>>i)&0x01)_D_IO=1;else_D_IO=0;_nop_();_nop_();_nop_();_nop_();_SCLK=1;_nop_();_nop_();_nop_();
_nop_();_SCLK=0;//temp=wbyte;}_nop_();_nop_();_nop_();_nop_();_nRST=0;}//讀時(shí)鐘芯片函數(shù)ucharRd_DS1302(ucharaddress){uchartemp;uchari;
temp=address+0x01;_SCLK=0;_nop_();_nop_();_nop_();_nop_();_nRST=1;_nop_();_nop_();_nop_();
_nop_();for(i=0;i<8;i++)
{if((temp>>i)&0x01)_D_IO=1;else_D_IO=0;_nop_();
_nop_();_nop_();_nop_();_SCLK=1;_nop_();
_nop_();_nop_();_nop_();_SCLK=0;//temp=address;}_nop_();_nop_();_nop_();_nop_();for(i=0;i<7;i++){temp=temp>>1;if(_D_IO==1)temp=temp+0x80;
_nop_();_nop_();_nop_();_nop_();_SCLK=1;_nop_();_nop_();
_nop_();_nop_();_SCLK=0;_nop_();_nop_();_nop_();_nop_();}temp=temp>>1;
if(_D_IO==1)temp=temp+0x80;
_nop_();_nop_();_nRST=0;
_nop_();
_nop_();
_nop_();
_nop_();
return(temp);
}2.5.4AT24C02操作程序設(shè)計(jì)串行E2PROM芯片的主要功能是存儲運(yùn)行時(shí)段的設(shè)定值及運(yùn)行溫度的設(shè)定值,對其進(jìn)行的操作主要分為讀和寫。根據(jù)所采用的器件及每次讀/寫的字節(jié)數(shù)不同,串行E2PROM器件的操作子函數(shù)也較多,這里采用的器件為AT24C02。該器件具有器件地址又具有字節(jié)地址,因此這里主要考慮對它的讀/寫操作。
I2C總線操作函數(shù)具體見程序清單。2.5.5TLC549操作程序設(shè)計(jì)
A/D轉(zhuǎn)換器TLC549的操作指啟動(dòng)下一次的A/D轉(zhuǎn)換,讀取前一次的轉(zhuǎn)換結(jié)果,其定義如下:
ucharAD_Con(void)
{
uchartemp;
uchari;
_AD_nCS=0;
_nop_();
_nop_();
_nop_();
_nop_();
for(i=0;i<8;i++)
{temp=temp<<1;if(_AD_DATA==1)temp=temp+0x01;_AD_CLK=1;_nop_();_nop_();
_nop_();_AD_CLK=0;_nop_();_nop_();
_nop_();}
_nop_();_nop_();_nop_();_AD_nCS=1;for(i=0;i<20;i++)
{_nop_();}return(temp);}2.5.6整體程序設(shè)計(jì)方案整體程序的結(jié)構(gòu)框圖如圖2-23所示,可以看出主程序的基本結(jié)構(gòu)為一個(gè)循環(huán)程序結(jié)構(gòu)。系統(tǒng)上電后,系統(tǒng)先進(jìn)行初始化處理,在初始化處理程序中設(shè)置各相關(guān)接口的邏輯狀態(tài),從而初始化LCD模塊。循環(huán)程序主體為鍵盤驅(qū)動(dòng)下的分支處理程序,在這些分支處理程序中主鍵1和主鍵2的處理程序最為重要。當(dāng)主鍵1按下時(shí),系統(tǒng)進(jìn)入日期和時(shí)間設(shè)置程序,在該程序里可以通過鍵盤和LCD顯示設(shè)置正確的日期和當(dāng)前時(shí)間,該時(shí)間作為系統(tǒng)運(yùn)行的參考時(shí)鐘。當(dāng)主鍵2按下時(shí)系統(tǒng)進(jìn)入運(yùn)行溫度和運(yùn)行時(shí)間段設(shè)置程序,在該程序內(nèi)完成熱水器運(yùn)行時(shí)的溫度設(shè)定和運(yùn)行時(shí)間段設(shè)置。運(yùn)行時(shí)間段可以設(shè)置四個(gè),有效的運(yùn)行時(shí)間段應(yīng)該是起始時(shí)間小于終止時(shí)間,采用24小時(shí)/天制。上面兩個(gè)處理過程涉及到鍵盤、LCD模塊、DS1302和AT24C02的操作,界面相對較復(fù)雜,是程序設(shè)計(jì)的難點(diǎn)。在主循環(huán)里按下主鍵3和主鍵4,分別對應(yīng)啟動(dòng)熱水器和停止熱水器的操作,其實(shí)這兩個(gè)鍵按下只是用來設(shè)置相應(yīng)的運(yùn)行標(biāo)志,具體的運(yùn)行控制操作并不在此處進(jìn)行。主鍵5、6的功能被定義為LCD背光的開啟或關(guān)閉。在鍵盤的分支處理程序之后所進(jìn)行的操作為主界面LCD顯示,用來顯示當(dāng)前的日期、星期、時(shí)間和熱水器的溫度。加熱器和水泵的運(yùn)行處理程序是程序設(shè)計(jì)的重點(diǎn)和難點(diǎn),加熱器和水泵是否運(yùn)行取決于多種條件,程序設(shè)計(jì)過程中必須理清這些關(guān)系,這樣才能設(shè)計(jì)出功能完善的程序。關(guān)于各部分程序模塊的設(shè)計(jì)這里不再贅述,有興趣的讀者可以詳細(xì)閱讀程序清單。圖2-23主程序結(jié)構(gòu)框圖2.6程序清單
//
//文件名:dgl.h
//功能:在該文件中主要定義了控制器的端口、存儲結(jié)構(gòu)及顯示的點(diǎn)陣數(shù)據(jù)等
//作者:hadaqu
//日期:2009-02-10
//
#defineucharunsignedchar
#defineuintunsignedint
#defineLcdDataPortP0
sbit_WR=P2^1;
sbit_RD=P2^0;sbit_RS=P2^2;sbit_RES=P2^3;sbit_CS1=P2^4;sbit_BLA=P2^5;sbit_CS_KEY=P2^6;sbit_FMQ=P2^7;///*24C02端口定義*/sbit_SDA=P1^6; /*模擬I2C數(shù)據(jù)傳送位*/sbit_SCL=P1^5; /*模擬I2C時(shí)鐘控制位*//*AD端口定義*/sbit_AD_CLK=P3^0;sbit_AD_nCS=P3^1;sbit_AD_DATA=P3^4;/*指示燈定義*/sbit_LED1=P3^5;sbit_LED2=P3^6;sbit_LED3=P3^7;/*加熱器與水泵端口定義*/sbit_HEATER=P1^0;sbit_PUMP=P1^1;/*DS1302時(shí)鐘芯片端口定義*/sbit_SCLK=P1^2;sbit_D_IO=P1^3;sbit_nRST=P1^4;/*水位檢測端口定義*/sbit_WATER=P1^7;/*狀態(tài)標(biāo)志*/bit_ack;//定義時(shí)間存儲結(jié)構(gòu)structtime_str{ucharSecond;ucharMinute;ucharHour;ucharDay;ucharDate;ucharMonth;ucharYear;};structtime_strTime_new,Time_old;//DS1302端口地址定義#defineSec_Address0x80 //秒單元地址#defineMin_Address0x82 //分單元地址#defineHour_Address0x84 //時(shí)單元地址#defineDate_Address0x86 //日期單元地址#defineMonth_Address0x88 //月份單元地址#defineDay_Address0x8a //星期單元地址#defineYear_Address0x8c //年份單元地址#defineControl_Address0x8e //控制單元地址#defineTrickle_Address0x90 //涓流充電控制單元地址#defineClockb_Address0xbe //時(shí)鐘單元猝發(fā)讀控制單元地址#defineRam_Address0xc0 //RAM單元首地址#defineRamb_Address0xfe //RAM單元猝發(fā)讀控制單元地址/////////////////////////////////////////////////////////////////////////////////////////////////////////24C02存儲器空間的分配與使用///////////////////////////////////////////////////////////////////////////////////////////////////////#defineTemp_Address0x00 //設(shè)定溫度單元地址//運(yùn)行時(shí)間段——參數(shù)存儲單元#defineSett1_Address0x08//運(yùn)行時(shí)間段——參數(shù)存儲單元#defineSett2_Address0x10//運(yùn)行時(shí)間段——參數(shù)存儲單元#defineSett3_Address0x18//運(yùn)行時(shí)間段——參數(shù)存儲單元#defineSett4_Address0x20//定義開關(guān)狀態(tài)#defineON0#defineOFF1/////////////////////////////////////////////////////////////////////////////////////顯示用數(shù)碼及符號字模,8×16點(diǎn)陣////////////////////////////////////////////////////////////////////////////////////*"0",0*/unsignedcharcodeMSZ0[]={0x00,0x00,0xE0,0x0F,0xF0,0x1F,0x18,0x30,
0x08,0x20,0x18,0x30,0xF0,0x1F,0xE0,0x0F};/*"1",1*/unsignedcharcodeMSZ1[]={0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00};/*"2",2*/unsignedcharcodeMSZ2[]={0x00,0x00,0x70,0x30,
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 1632.1-2024塑料使用毛細(xì)管黏度計(jì)測定聚合物稀溶液黏度第1部分:通則
- 二零二五年度建筑工程質(zhì)量檢測與施工質(zhì)量控制規(guī)范合同3篇
- 2025年度跨境電商物流配送服務(wù)合同范本9篇
- 2024版影院室內(nèi)裝修設(shè)計(jì)合同書
- 二零二五年度綠色環(huán)保產(chǎn)業(yè)合作框架協(xié)議書范本3篇
- 2025年抵債合同房屋買賣協(xié)議3篇
- 2025年度智能停車場2噸不銹鋼帶打印功能電子地磅秤租賃合同6篇
- 2024版租賃商鋪合同書
- 2024標(biāo)準(zhǔn)型料場地租賃合同模板一
- 二零二五年房產(chǎn)租賃保證金繳納及退還協(xié)議6篇
- 林區(qū)防火專用道路技術(shù)規(guī)范
- 2023社會責(zé)任報(bào)告培訓(xùn)講稿
- 2023核電廠常規(guī)島及輔助配套設(shè)施建設(shè)施工技術(shù)規(guī)范 第8部分 保溫及油漆
- 2025年蛇年春聯(lián)帶橫批-蛇年對聯(lián)大全新春對聯(lián)集錦
- 表B. 0 .11工程款支付報(bào)審表
- 警務(wù)航空無人機(jī)考試題庫及答案
- 空氣自動(dòng)站儀器運(yùn)營維護(hù)項(xiàng)目操作說明以及簡單故障處理
- 新生兒窒息復(fù)蘇正壓通氣課件
- 法律顧問投標(biāo)書
- 班主任培訓(xùn)簡報(bào)4篇(一)
- 成都市數(shù)學(xué)八年級上冊期末試卷含答案
評論
0/150
提交評論