版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于單片機(jī)的太陽能熱水器水溫水位監(jiān)測系統(tǒng)</p><p> 摘要:該太陽能熱水器水溫水位控制主要由AT89S52單片機(jī)控制,DS18B20溫度傳感器,LCD1602液晶,時(shí)鐘芯片1302和報(bào)警系統(tǒng)組成。該系統(tǒng)能夠?qū)崟r(shí)顯示當(dāng)前時(shí)間和日期,以及秒表功能,測量水箱內(nèi)實(shí)時(shí)溫度,并以液晶顯示屏的形式告知使用者。同時(shí)還能對(duì)水位進(jìn)行實(shí)時(shí)監(jiān)控,水位不足或者已滿都可以讓使用者得知,當(dāng)水位已滿時(shí)就會(huì)報(bào)警,提醒
2、使用者及時(shí)關(guān)閉加水閥門。</p><p> 關(guān)鍵詞:AT89S52單片機(jī) 溫度控制 水位控制</p><p> The Control of Measurement System of Water Level and</p><p> Temperature of Solar Energy Heating</p><p> Abstr
3、act: the solar energy water heater mainly by water level control AT89S52 SCM control, the temperature sensor DS18B20, LCD1602 LCD, clock and alarm system chip 1302. The system can real-time display the current date and t
4、ime, and stopwatch function, measuring tank temperature, and real-time LCD inform the user. Also can real-time monitoring of water shortage, water or already full allow users, when the water is full already will alarm, r
5、emind users timely close water valve. Through the Protu</p><p> Keywords: AT89S52 SCM Temperature control Water level control</p><p><b> 目錄</b></p><p><b> 1引言
6、3</b></p><p><b> 2方案比較4</b></p><p> 2.1溫度傳感器的選擇4</p><p> 2.1.1方案一4</p><p> 2.1.2方案二4</p><p> 2.1.3 方案比較4</p><p>
7、 2.2 水位采集系統(tǒng)的選擇5</p><p> 2.2.1 方案一5</p><p> 2.2.2 方案二5</p><p> 2.2.3 方案比較7</p><p><b> 3硬件設(shè)計(jì)7</b></p><p> 3.1 溫度傳感器DS18B207</p>
8、<p> 3.1.1 DS18B20的主要特性:7</p><p> 3.1.2 DS18B20的外形7</p><p> 3.1.3 DS18B20主要的數(shù)據(jù)部件7</p><p> 3.1.4 DS18B20電源供電方式電路圖8</p><p> 3.2 顯示電路9</p><p>
9、; 3.3 蜂鳴器電路9</p><p> 3.4 單片機(jī)及其外圍電路10</p><p> 3.5 水位控制系統(tǒng)的設(shè)計(jì)12</p><p> 3.5.1 CD4069芯片資料12</p><p> 3.5.2 74LS244芯片資料12</p><p> 3.6 整體電路圖(如圖14)13&l
10、t;/p><p><b> 4 軟件設(shè)計(jì)15</b></p><p> 4.1 溫度顯示部分............................................... 16</p><p> 4.2 關(guān)于DS18B20的編程.........................................17</p
11、><p> 4.3 初始化結(jié)構(gòu).................................................18</p><p><b> 5 系統(tǒng)調(diào)試19</b></p><p><b> 6 總結(jié)20</b></p><p><b> 致謝20</b
12、></p><p><b> 參考文獻(xiàn)21</b></p><p><b> 附錄22</b></p><p><b> 1引言</b></p><p> 單片機(jī)的應(yīng)用技術(shù)是一項(xiàng)新型的工程技術(shù),特別是隨大規(guī)模集成電路的產(chǎn)生而飛速發(fā)展。目前,單片機(jī)以其體積小、重
13、量輕、抗干擾能力強(qiáng)、對(duì)環(huán)境要求不高??煽啃愿?、性能價(jià)格比高、開發(fā)較為容易,在工業(yè)控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、智能化儀器儀表、設(shè)備自動(dòng)化等諸多領(lǐng)域極為廣泛的應(yīng)用,都可見到單片機(jī)的蹤影。</p><p> 目前市場上太陽能熱水器的控制系統(tǒng)大部分都存在著或多或少的缺點(diǎn):成本較高,操作復(fù)雜,控制不方便等。本設(shè)計(jì)中采用美國DALLAS半導(dǎo)體公司出產(chǎn)智能溫度傳感器DS18B20作為檢測元件,測溫范圍為-55~125攝氏度,最大
14、分辨率可達(dá)0.0625攝氏度,可以直接讀出被測溫度值,而且采用三線制與單片機(jī)相連,減少了外部的硬件電路,具有低成本和好使用的特點(diǎn)。本設(shè)計(jì)的水位傳感器電路,省去了傳統(tǒng)的A/D轉(zhuǎn)換器,操作簡單,控制方便。</p><p> 我們?cè)谌粘5奶柲軣崴鞯氖褂弥?,很少能預(yù)測出當(dāng)時(shí)水溫的高低,還有在給太陽能熱水器補(bǔ)給水源時(shí),其水位具體什么時(shí)候能夠加滿也未能知曉,這就大大浪費(fèi)了水資源,也給日程生活添加了不必要的開支,我在課程
15、設(shè)計(jì)中基于單片機(jī)89S52能夠準(zhǔn)確的告知使用者熱水器的即時(shí)溫度,還能通過報(bào)警的模式告知使用者熱水器儲(chǔ)蓄罐已滿,從而達(dá)到了節(jié)約水源,方便大眾的目的。同時(shí),也能告知使用者當(dāng)時(shí)的日期和時(shí)間。</p><p> 此次課程設(shè)計(jì)中設(shè)計(jì)了一個(gè)簡易的測量太陽能熱水器水溫,水位的裝置,并能通過報(bào)警的形式告知使用者水位已滿請(qǐng)關(guān)閉,我相信經(jīng)過進(jìn)一步的加工,一定會(huì)很好的運(yùn)用到我們?nèi)粘5纳钪小?lt;/p><p>
16、<b> 2方案比較</b></p><p> 2.1溫度傳感器的選擇</p><p><b> 2.1.1方案一</b></p><p> 熱敏電阻是溫度傳感器的一種,它由半導(dǎo)體陶瓷組成。熱敏電阻(NTC)不同于普通的電阻,它具有負(fù)的電阻溫度特性,即當(dāng)溫度升高時(shí),其電阻值減小。熱敏電阻的阻值~溫度特性曲線是一條指
17、數(shù)曲線,非線性較大,因此在使用時(shí)要進(jìn)行線性化處理。線性化處理雖然能夠改善熱敏電阻的特性曲線,但是比較復(fù)雜。為此,在要求不高的一般應(yīng)用中,常做出在一定的溫度范圍內(nèi)溫度與阻值成線性關(guān)系的假定,從而簡化計(jì)算。使用熱敏電阻是為了感知溫度,給熱敏電阻通以恒定的電流,電阻兩端就可測到一個(gè)電壓,然后通過公式下面的公式可求得溫度:T=T0-KVT。T為被測溫度;T0為與熱敏電阻特性有關(guān)的溫度參數(shù);K為與熱敏電阻特性有關(guān)的系數(shù);VT為熱敏電阻兩端的電壓。
18、</p><p> 根據(jù)這一公式,測得熱敏電阻兩端的電壓,了解到參數(shù)T0和K,則可以計(jì)算出熱敏電阻的環(huán)境溫度,也就是被測的溫度,這樣就把電阻隨溫度的變化轉(zhuǎn)化為電壓隨溫度變化。這種設(shè)計(jì)還需要用到A/D轉(zhuǎn)換電路,而且在測量的過程中,由于環(huán)境的影響會(huì)帶來較大的誤差。</p><p><b> 2.1.2方案二</b></p><p> 采用溫度
19、傳感器DS18B20,它是美國Dallas半導(dǎo)體公司生產(chǎn)的數(shù)字化溫度傳感器DS18B20,它與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。全部傳感元件及轉(zhuǎn)化電路集成在形如一只三極管的集成電路內(nèi)。我們可以采用DS18B20采集溫度,然后在顯示電路上顯示。</p><p> 該設(shè)計(jì)外圍電路簡單,只需要通過DS18B20進(jìn)行采集溫度,一個(gè)液晶顯示電路,軟件設(shè)計(jì)部分只需要采集溫度,對(duì)溫度進(jìn)行
20、轉(zhuǎn)化,再用顯示電路將其顯示出來。我們可以知道,環(huán)境對(duì)DS18B20影響不大,同時(shí)DS18B20的測量精度穩(wěn)定并可用軟件設(shè)置、接線簡單,大大的節(jié)省了單片機(jī)的數(shù)據(jù)串口。</p><p> 2.1.3 方案比較</p><p> 本設(shè)計(jì)主要是從溫度傳感器的選擇考慮。傳統(tǒng)的測溫元件有熱電偶和熱電阻,而它們測出的一般都是電壓,再轉(zhuǎn)換成對(duì)應(yīng)的溫度,需要較多的外部硬件支持,電路及軟件調(diào)試比較復(fù)雜,制
21、作難度高,成本也相對(duì)較高。從以上兩種方案中,可以看出采用方案二所設(shè)計(jì)的電路比較簡單,采用溫度傳感器DS18B20作為檢測元器件,測溫范圍-55℃~125℃,分辨率最大可達(dá)0.0625℃。DS18B20可以直接讀出被測溫度值。采用3線制與單片機(jī)相連,減少了外部硬件電路,具有低成本和易使用的特點(diǎn)。</p><p> 2.2 水位采集系統(tǒng)的選擇</p><p><b> 2.2.1
22、 方案一</b></p><p> 該水位采集系統(tǒng)是將采集的信號(hào)進(jìn)過A/D轉(zhuǎn)換器傳送到單片機(jī)中如圖1。</p><p> I為恒流源,該電流流過一個(gè)電阻產(chǎn)生的壓降為IR。當(dāng)K1,K2……K8均打開時(shí),V0=8IR,現(xiàn)取IR=1V,則V0=8V。當(dāng)水位上升到Kn處時(shí),浮子推動(dòng)磁體M移動(dòng)至干簧管Kn處,Kn接通。經(jīng)過OP緩沖輸出的電壓V0=(n-1)V。輸出端經(jīng)ADC0809轉(zhuǎn)
23、換器后直接輸入到單片機(jī)中。當(dāng)水位到達(dá)最高位置時(shí)單片機(jī)將控制電磁閥停止向水箱加水,并在液晶上顯示“水已滿”字樣。</p><p><b> 圖1</b></p><p><b> 2.2.2 方案二</b></p><p> 用5根不銹鋼針分別置于水箱內(nèi)5種不同高度的位置,當(dāng)某個(gè)鋼針不接觸水面時(shí),其輸出為高電平;當(dāng)其與
24、水面接觸時(shí)則輸出為低電平。它們輸出的信號(hào)接六反向器CD4069,經(jīng)過CD4069反向并經(jīng)74LS244驅(qū)動(dòng)后分別接入89C52單片機(jī)的P3.0-P3.4腳。單片機(jī)對(duì)這些引腳進(jìn)行判斷之后,在液晶上顯示對(duì)應(yīng)的值。顯示分為5檔,每檔為滿水位的20%。(如圖2)</p><p><b> 圖2</b></p><p> 2.2.3 方案比較</p><
25、p> 方案2比方案1設(shè)計(jì)原理簡單,硬件要求少,成本較低,方案2省去了方案1中A/D轉(zhuǎn)換器,操作比較方便,方案1在軟件設(shè)計(jì)中也比方案2來得更加簡潔明了。因此水位采集系統(tǒng)選擇采用方案2。</p><p><b> 3硬件設(shè)計(jì)</b></p><p> 3.1 溫度傳感器DS18B20</p><p> 3.1.1 DS18B20的主要
26、特性:</p><p> (1)電壓范圍較寬,電壓范圍:3.0~5.5V。</p><p> ?。?)單線接口方式,DS18B20在與單片機(jī)連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。</p><p> ?。?)DS18B20支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三條線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測溫。</p><p>
27、; ?。?)測溫范圍-55℃~+125℃,在-10~+85℃時(shí)精度為±0.5℃,精度較高。</p><p> ?。?)可編程的分辨率為9~12位,對(duì)應(yīng)的可分辨的溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實(shí)現(xiàn)高精度測溫。</p><p> ?。?)在9位分辨率時(shí)最多能在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時(shí)最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更
28、快。</p><p> ?。?)測量結(jié)果直接輸出數(shù)字溫度信號(hào),以"一線總線"串行傳送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力。</p><p> ?。?)負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)燒毀,但不能正常工作。</p><p> 3.1.2 DS18B20的外形</p><p> DS18B20的外形
29、及管腳排列圖如下圖2所示。 </p><p> 圖3 DS18B20外形及引腳排列圖</p><p> 1.GND 地信號(hào)</p><p> 2.DQ 數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。當(dāng)被用著在寄生電源下,也可以向器件提供電源。</p><p> 3.VDD 可選擇的VDD引腳。當(dāng)工作于寄生電源時(shí),此引腳必須接地。&
30、lt;/p><p> 3.1.3 DS18B20主要的數(shù)據(jù)部件</p><p> DS18B20有2個(gè)主要的數(shù)據(jù)部件: </p><p> ?。?)光刻ROM中的64位序列號(hào)是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標(biāo)號(hào),接著的48位是該DS18B20自身的序列號(hào),最后8位是前面56位的循環(huán)冗
31、余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。</p><p> (2)DS18B20中的溫度傳感器可完成對(duì)溫度的測量,以12位轉(zhuǎn)化為例:用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號(hào)位。DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM,溫度傳感器,溫度報(bào)警觸發(fā)
32、器TH和TL,配置寄存器。</p><p> 3.1.4 DS18B20電源供電方式電路圖</p><p> ?。?)DS18B20寄生電源供電方式電路</p><p> DS18B20寄生電源供電電路,如圖5所示,要想讓DS18B20進(jìn)行精確的溫度轉(zhuǎn)換,I/O線必須保證在溫度轉(zhuǎn)換期間提供足夠的能量,由于每個(gè)DS18B20在溫度轉(zhuǎn)換期間工作電流達(dá)到1mA,當(dāng)幾
33、個(gè)溫度傳感器掛在同一根I/O線上進(jìn)行多點(diǎn)測溫時(shí),靠上拉電阻是無法提供足夠的能量,會(huì)造成無法轉(zhuǎn)換溫度或溫度誤差極大。因此,圖6電路只適用于單一溫度傳感器測溫,也不宜采用電池供電,并且電源電壓必須是穩(wěn)壓5V。當(dāng)電源電壓下降時(shí),會(huì)使測量的誤差變大。</p><p> 圖5 DS18B20寄生電源供電電路 圖6 DS18B20外部供電單點(diǎn)測溫電路</p><p> ?。?)DS18B20
34、的外部電源供電方式</p><p> DS18B20外部供電單點(diǎn)測溫電路,如圖7所示,DS18B20外部供電多點(diǎn)測溫電路如圖6所示。此時(shí)I/O線不需要強(qiáng)上拉電壓,同時(shí)在總線上可以掛接多個(gè)DS18B20傳感器,組成多點(diǎn)測溫系統(tǒng)。但要注意在外部供電的方式下,DS18B20的GND引腳不能懸空,否則讀取的溫度總是85℃。</p><p> 圖6 DS18B20外部供電多點(diǎn)測溫電路
35、 </p><p> 比較上述兩種供電方式后認(rèn)為外部電源供電方式對(duì)電源要求比電源供電方式優(yōu)越些且穩(wěn)定性好,故在此設(shè)計(jì)中采用如圖6的外部電源供電方式供電電路。 </p><p><b> 3.2 顯示電路 </b></p><p> 由DS1602液晶顯示屏組成,其特點(diǎn)是比較直觀便于觀察(如圖7)。</p><p>
36、;<b> 圖7</b></p><p> 3.3 蜂鳴器電路 </p><p> 蜂鳴器俗稱喇叭(如圖8),是廣泛應(yīng)用于各種電子產(chǎn)品的一種元器件,它用于提示、報(bào)警、音樂等許多應(yīng)用場合。</p><p> 蜂鳴器通常工作電流比較大,電路上的TTL電平基本上驅(qū)動(dòng)不了蜂鳴器,需要增加一個(gè)電流放大的電路才可以。蜂鳴器由振蕩器、磁鐵、振動(dòng)膜片以
37、及外殼等組成,接通電源后,振蕩器產(chǎn)生音頻信號(hào),電流通過電磁線圈使電磁線圈產(chǎn)生磁場,振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性地振動(dòng)發(fā)聲。</p><p> 當(dāng)P3.7端輸出高電平時(shí),三極管截止,沒有電流流過線圈,蜂鳴器不發(fā)聲,當(dāng)P3.7端為低電平時(shí),三極管導(dǎo)通,這樣蜂鳴器中就有電流流過,就會(huì)發(fā)出聲音.因此,可通過程序來控制蜂鳴器的聲音大小。</p><p><b> 圖8
38、蜂鳴器電路圖</b></p><p> 3.4 單片機(jī)及其外圍電路</p><p> 此次課程設(shè)計(jì)采用STC公司的單片機(jī)STC89S52作為系統(tǒng)的控制器。主要從以下特點(diǎn)考慮:</p><p> 1.STC89S52是一種低功耗,高性能CMOS工藝的8位單片機(jī),片內(nèi)含有8K的系統(tǒng)可編程Flash存儲(chǔ)器。使用STC公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工
39、業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)提供高靈活,是一個(gè)很有效的解決方案。 </p><p> 2.STC89S52具有的標(biāo)準(zhǔn)功能:8k Bytes Flash片內(nèi)程序存儲(chǔ)器,256 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,STC89S52可降至0KHZ靜態(tài)邏輯操作,支持2
40、種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)停止工作,直到一個(gè)中斷或硬件復(fù)位為止。</p><p> 3.STC89S52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)口,同時(shí)內(nèi)含8個(gè)中斷口,5個(gè)中斷優(yōu)先級(jí),3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2個(gè)讀寫口。AT89S52可以按照常規(guī)方法進(jìn)行
41、編程,也可以在線編程。其通用的微處理器和Flash存儲(chǔ)器結(jié)合在一起,可反復(fù)擦寫的Flash存儲(chǔ)器可有效地降低開發(fā)成本。</p><p> 在本設(shè)計(jì)中,XTAL1和XTAL2端外接石英晶體作為定時(shí)元件,內(nèi)部反向放大器自激振蕩,產(chǎn)生時(shí)鐘。所用石英晶體的振蕩頻率為12MHZ,電容C1,C2常為20pF~40pF內(nèi),從而形成了單片機(jī)的最小系統(tǒng)。如圖9所示。</p><p><b>
42、圖9 晶振電路</b></p><p> 設(shè)計(jì)中用的是上電復(fù)位,單片機(jī)上電過后,便自動(dòng)的進(jìn)入復(fù)位狀態(tài)。圖10是上電復(fù)位電路。當(dāng)采用的晶體頻率為12MHZ時(shí),可采取C=22 uf,R=1KΩ。</p><p> 圖10 上電復(fù)位電路</p><p> 3.5 水位控制系統(tǒng)的設(shè)計(jì)</p><p> 用5根不銹鋼針分別置于水箱內(nèi)
43、5種不同高度的位置,當(dāng)某個(gè)鋼針不接觸水面時(shí),其輸出為高電平;當(dāng)其與水面接觸時(shí)則輸出為低電平。它們輸出的信號(hào)接六反向器CD4069,經(jīng)過CD4069反向并經(jīng)74LS244驅(qū)動(dòng)后分別接入89C52單片機(jī)的P3.0-P3.5腳。單片機(jī)對(duì)這些引腳進(jìn)行判斷之后,在液晶上顯示對(duì)應(yīng)的值。顯示分為5檔,每檔為滿水位的20%。(如圖11)</p><p><b> 圖11</b></p>&l
44、t;p> 3.5.1 CD4069芯片資料</p><p> CD4069是由六個(gè)COS/MOS反相器電路組成,該器件通常用在不需要中功率TTL驅(qū)動(dòng)和邏輯電平轉(zhuǎn)換的電路中。(如圖12)</p><p><b> 圖12</b></p><p> 3.5.2 74LS244芯片資料</p><p> 74L
45、S244是三態(tài)八緩沖器。(如下頁圖13)</p><p><b> 引出端符號(hào):</b></p><p> 1A1~1A4,2A1~2A4輸入端</p><p> /1G, /2G三態(tài)允許端(低電平有效)</p><p> 1Y1~1Y4,2Y1~2Y4輸出端</p><p&
46、gt;<b> 圖13</b></p><p> 3.6 整體電路圖(如圖14)</p><p><b> 圖14</b></p><p><b> 4 軟件設(shè)計(jì)</b></p><p> 本設(shè)計(jì)的基本運(yùn)行步驟是:接通電源溫度傳感器開始工作,LCD1602顯示出溫度與
47、當(dāng)前的時(shí)間日期,當(dāng)向水箱中倒入水后,到達(dá)第一個(gè)鋼針時(shí)此時(shí)液晶屏上顯示01(5cm),到達(dá)第二個(gè)鋼針時(shí)液晶屏上顯示02(10cm),直至到達(dá)水箱的頂部,液晶屏幕上顯示“FULL”,并且蜂鳴器報(bào)警,提醒用戶水已滿,關(guān)閉水閥,從而完成了對(duì)水位的控制。根據(jù)運(yùn)行步驟和電路的功能設(shè)計(jì)出水溫水位程序流程圖如圖15所示。</p><p><b> 圖15</b></p><p>
48、 P3.0表示第一層水位監(jiān)測口</p><p> P3.1表示第二層水位監(jiān)測口</p><p> P3.2表示第三層水位監(jiān)測口</p><p> P3.3表示第四層水位監(jiān)測口</p><p> P3.4表示第五層水位監(jiān)測口</p><p> P2.4表示響鈴警報(bào)端口</p><p>
49、 通過判斷是否導(dǎo)電,來檢測水位所在,滿水后達(dá)到報(bào)警目的,并斷開注水連接,使蜂鳴器報(bào)警。</p><p> 4.1溫度顯示部分:</p><p><b> 圖 16</b></p><p> 在初始化之后,通過指令從系統(tǒng)中調(diào)取數(shù)據(jù),從DS18B20中的高8位和低8位溫度數(shù)值反饋到轉(zhuǎn)化模塊,轉(zhuǎn)換成可顯示的十進(jìn)制數(shù),送給1602液晶顯示器,分別
50、在1602指定位置顯示 實(shí)際溫度值的10位、個(gè)位和小數(shù)位反應(yīng)實(shí)時(shí)溫度。</p><p> 4.2 關(guān)于DS18B20的編程</p><p> 在對(duì)DS18B20進(jìn)行讀寫程序時(shí),必須嚴(yán)格保證讀寫時(shí)序,否則將無法讀取測得的溫度結(jié)果。根據(jù)DS18B20的通信協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過3個(gè)步驟:每一次讀寫之前都要對(duì)DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后
51、發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。再才能讀取溫度。</p><p> 表1 RAMR指令表</p><p> 表2 ROM指令表</p><p> 系統(tǒng)對(duì)DS18B20的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS18B20—>發(fā)ROM功能命令—>發(fā)存儲(chǔ)器操作命令—>處理數(shù)據(jù)。DS18B20的初始化序列圖,如圖18所示。
52、</p><p><b> 4.3 初始化結(jié)構(gòu)</b></p><p> 圖17 DS18B20的初始化序列圖</p><p><b> 5 系統(tǒng)調(diào)試</b></p><p> 本設(shè)計(jì)采用KeilC51編譯器進(jìn)行源程序編譯及仿真調(diào)試,同時(shí)用Protel進(jìn)行硬件電路板的設(shè)計(jì)制作。硬件電路制作
53、完畢,用萬用表檢測有無短路開路等現(xiàn)象,確定硬件電路沒有錯(cuò)誤時(shí),用proteus進(jìn)行仿真,運(yùn)行程序進(jìn)行調(diào)試。</p><p> 在焊接過程中,發(fā)現(xiàn)DS1302芯片發(fā)熱嚴(yán)重,但扔能正常顯示日期等,斷開開關(guān),通過萬用表測量,發(fā)現(xiàn)一腳和八腳短路,但是斷開3.6V電源后,扔持續(xù)發(fā)熱,通過測試,發(fā)現(xiàn)是芯片損壞,重新更換芯片后得到解決。</p><p> 由于初次使用DS18B20器件,在程序設(shè)計(jì)過
54、程中遇到很大難題,通過詢問老師和查閱網(wǎng)絡(luò),得到相關(guān)信息,在同學(xué)的共同學(xué)習(xí)下,更深的了解了該元件的使用方法和相關(guān)編程方式,并成功的運(yùn)用到電路中。</p><p> 在實(shí)現(xiàn)功能之后,又加入了部分小功能,如:秒表,定時(shí)等,充分利用液晶屏和各芯片功能,使整個(gè)作品變得更加豐富,以滿足不同使用者的不同需求,使用起來方便耐用,操作簡單,易于上手。</p><p><b> 6 總結(jié)<
55、/b></p><p> 經(jīng)過這么長時(shí)間來不懈的努力與奮斗,我終于在老師的指導(dǎo)下完成了我的設(shè)計(jì),本設(shè)計(jì)除了具有測量太陽能熱水器水溫水位的功能,還具有顯示日期,時(shí)間,星期等的附加功能。雖然它還有很多需要完善的地方,在這次作品設(shè)計(jì)的過程中學(xué)到了很多東西,使我明白了很多書本上的東西不通過具體的實(shí)踐是不能夠領(lǐng)會(huì)其中的精髓的,我們必須通過自己的親手實(shí)踐,去經(jīng)歷失敗了才能對(duì)所學(xué)知識(shí)達(dá)到真正的掌握。理論必須聯(lián)系實(shí)際,而
56、實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),我真正的懂得了這句話的真諦。在我以后的工作和生活中,我從此可以汲取很多經(jīng)驗(yàn),凡事都要自己去動(dòng)手,去實(shí)踐一下,遇到困難,永遠(yuǎn)不要喪失一顆勝利的心,有耐心,有信心,有細(xì)心,有恒心,有虛心,只有這樣,我才會(huì)在逆境中不斷前進(jìn),不斷充實(shí)自己!</p><p><b> 致謝</b></p><p> 在本次課程設(shè)計(jì)的過程中,特別感謝我的指導(dǎo)老師對(duì)我
57、的作品設(shè)計(jì)的幫助,不管是在選題階段,設(shè)計(jì)階段,還是制作階段,老師都對(duì)我進(jìn)行了指導(dǎo),從而使得本次課程設(shè)計(jì)能夠順利完成。最后我要感謝我的同學(xué)們,他們?cè)谖疫M(jìn)行電路圖的設(shè)計(jì)和焊接過程中給了我很多幫助,在制作的過程中,我感受到了同學(xué)們的建議都是一種寶貴的財(cái)產(chǎn)。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]趙文博,劉文濤.單片機(jī)語言C51程序設(shè)計(jì)[M]
58、北京:人民郵電出版社2006.</p><p> [2]胡乾斌.單片微型計(jì)算機(jī)原理與應(yīng)用[M](第二版).武漢:華中科技大學(xué)出版社.2005.</p><p> [3]Microchip Inc.PIC16/17 Microcontrollers Data Book.1995/1996.</p><p> [4]馬琨.幾種實(shí)用變壓器和穩(wěn)壓電源的制作。電氣時(shí)代.
59、1999(1).</p><p> [5]何立民.單片機(jī)應(yīng)用系統(tǒng)抗干擾技術(shù)[M].北京:北京航空航天大學(xué)出版社,2001.</p><p> [6]陳家勝.太陽能熱水器輔助電加熱控制器的研制.電子技術(shù),2000,27(10):31-36.</p><p><b> 附錄</b></p><p> #include
60、<reg52.h></p><p> #include<intrins.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit lcd_rs=P2^6; //液晶腳定義&
61、lt;/p><p> sbit lcd_re=P2^5;</p><p> sbit dq = P1^0;</p><p> sbit s1 =P2^3; //總控制端</p><p> sbit s2 =P2^2;//加一</p><p> sbit s3 =P2^1; //減一</p><
62、p> sbit s4 =P2^0; //秒表控制</p><p> sbit beep=P2^4;//鬧鐘控制</p><p> sbit one=P3^4; //水位定義</p><p> sbit two=P3^3;</p><p> sbit three=P3^2;</p><p> sbi
63、t four=P3^1;</p><p> sbit five=P3^0 ;</p><p> sbit s=P2^7; //水位測試切換開關(guān)</p><p> void lcd_writedata(uchar date);</p><p> void lcd_writecom(uchar com);</p><
64、p> void change(uchar add,uchar date,uchar row);</p><p> void change1(uchar add,uchar date,uchar row);</p><p> void delay_ds1820(int num);</p><p> uchar readonechar(); //讀一個(gè)字節(jié)
65、</p><p> void writeonechar(uchar dat); //寫一個(gè)字節(jié)</p><p> uchar code wendu[]="0123456789";</p><p> uint readtemp() ; //讀溫度</p><p> void displayw() ; //顯
66、示溫度</p><p> void key();</p><p> void guding();</p><p> void ds1302_inputbyte(uchar d); </p><p> uchar ds1302_outputbyte();</p><p> uchar read1302(ucha
67、r add);</p><p> void write1302(uchar add,uchar date);</p><p> void get_1302(uchar realtime[]);</p><p> void xianshi();</p><p> void miaobiao_init();</p><
68、p> void keys();</p><p> void set_alarm();</p><p> void read_alarm();</p><p> void alarm();</p><p> void alarm_sound();</p><p> void sheng_set();&l
69、t;/p><p> void read_sheng();</p><p> void sheng();</p><p> sbit ds1302_rst=P1^3; //ds1302腳定義</p><p> sbit ds1302_clk=P1^1;</p><p> sbit ds1302_io=P1^2;&l
70、t;/p><p> sbit acc0 = ACC^0;</p><p> sbit acc7 = ACC^7;</p><p> uchar num,s1num,s4num,flag,flag1,flag2,flag3,flag4; //定義變量</p><p> uchar shi,fen,miao,weimiao,t;<
71、/p><p> char time[7],time1[7];</p><p> uchar ashi,afen,amiao,anian,ayue,ari;</p><p> uchar code table[]=" StopWatch ";</p><p> uchar code table1[]="
72、00:00:00:00 ";</p><p> uchar code table2[]=" HAPPY BIRTHDAY ";</p><p> uchar code table3[]=" 1986-02-20 ";</p><p> uchar code table4[][3]={"Mon
73、","Tue","Wed","Thu","Fri","Sat","Sun"};</p><p> void write_xingqi(char xingqi);</p><p><b> //延時(shí)一毫秒</b></p>&
74、lt;p> void delay(uint z)</p><p><b> {</b></p><p><b> uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p>
75、<p><b> }</b></p><p> void lcd_init()//液晶初始化和命令數(shù)據(jù)操作</p><p><b> {</b></p><p> lcd_writecom(0x38);</p><p> lcd_writecom(0x0c);</p
76、><p> lcd_writecom(0x06);</p><p> lcd_writecom(0x01);</p><p> lcd_writecom(0x80);</p><p><b> } </b></p><p> void lcd_writecom(uchar com)<
77、;/p><p><b> {</b></p><p><b> lcd_rs=0;</b></p><p><b> lcd_re=0;</b></p><p><b> P0=com;</b></p><p><b>
78、; lcd_re=1;</b></p><p><b> delay(1);</b></p><p><b> lcd_re=0;</b></p><p><b> }</b></p><p> void lcd_writedata(uchar date)
79、</p><p><b> {</b></p><p><b> lcd_rs=1;</b></p><p><b> lcd_re=0;</b></p><p><b> P0=date;</b></p><p><
80、b> lcd_re=1;</b></p><p><b> delay(1);</b></p><p><b> lcd_re=0;</b></p><p><b> }</b></p><p> void change1(uchar add,uch
81、ar date,uchar row) //寫函數(shù)一</p><p><b> {</b></p><p> uchar shi,ge;</p><p> shi=date/10;</p><p> ge=date%10;</p><p> if(row==0)</p>
82、<p><b> {</b></p><p> lcd_writecom(0x80+add);</p><p> lcd_writedata(0x30+shi);</p><p> lcd_writedata(0x30+ge);</p><p><b> }</b>&
83、lt;/p><p> if(row==1)</p><p><b> {</b></p><p> lcd_writecom(0x80+0x40+add);</p><p> lcd_writedata(0x30+shi);</p><p> lcd_writedata(0x30+ge);
84、</p><p><b> }</b></p><p><b> }</b></p><p> void change(uchar add,uchar date,uchar row)//寫函數(shù)二 防止沖突。</p><p><b> {</b></p>&
85、lt;p> uchar shi,ge;</p><p> shi=date/10;</p><p> ge=date%10;</p><p> if(row==0)</p><p><b> {</b></p><p> lcd_writecom(0x80+add);</
86、p><p> lcd_writedata(0x30+shi);</p><p> lcd_writedata(0x30+ge);</p><p><b> }</b></p><p> if(row==1)</p><p><b> {</b></p&
87、gt;<p> lcd_writecom(0x80+0x40+add);</p><p> lcd_writedata(0x30+shi);</p><p> lcd_writedata(0x30+ge);</p><p><b> }</b></p><p><b> }</b
88、></p><p> void key()</p><p><b> {</b></p><p> if(flag3==1)</p><p><b> {</b></p><p><b> if(s1==0)</b></p>
89、<p><b> delay(5);</b></p><p><b> if(s1==0)</b></p><p><b> {</b></p><p> while(!s1);</p><p><b> flag3=0;</b>&l
90、t;/p><p> lcd_init();</p><p><b> guding();</b></p><p><b> }</b></p><p><b> if(s2==0)</b></p><p><b> {</b>
91、</p><p><b> delay(5);</b></p><p><b> if(s2==0)</b></p><p><b> {</b></p><p> while(!s2);</p><p><b> flag3=0;&
92、lt;/b></p><p> lcd_init();</p><p><b> guding();</b></p><p><b> }</b></p><p><b> }</b></p><p><b> if(s3==0
93、)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s2==3)</b></p><p><b> {</b></p><p>
94、 while(!s3);</p><p><b> flag3=0;</b></p><p> lcd_init();</p><p><b> guding();</b></p><p><b> }</b></p><p><b>
95、; }</b></p><p><b> if(s4==0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s4==0)</b></p>
96、<p><b> {</b></p><p> while(!s4);</p><p><b> flag3=0;</b></p><p> lcd_init();</p><p><b> guding();</b></p><p&
97、gt;<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> if(s4==0)</b></p><p><b> {</b></p><
98、;p><b> delay(5);</b></p><p><b> if(s4==0)</b></p><p><b> {</b></p><p><b> flag1=1;</b></p><p> while(!s4);</p
99、><p><b> s4num++;</b></p><p> if(s4num==1)</p><p><b> {</b></p><p> lcd_init();</p><p> miaobiao_init();</p><p> lc
100、d_writecom(0x80+0x40+4);</p><p> lcd_writedata(':');</p><p> lcd_writecom(0x80+0x40+7);</p><p> lcd_writedata(':');</p><p> lcd_writecom(0x80+0x40+1
101、0);</p><p> lcd_writedata(':');</p><p> lcd_writecom(0x80+2);</p><p> for(num=0;num<14;num++)</p><p><b> {</b></p><p> lcd_writ
102、edata(table[num]);</p><p><b> delay(6);</b></p><p><b> }</b></p><p><b> TR0=1;</b></p><p><b> }</b></p><
103、p> if(s4num==2)</p><p><b> {</b></p><p><b> TR0=0;</b></p><p><b> }</b></p><p> if(s4num==3)</p><p><b>
104、{</b></p><p> lcd_init();</p><p><b> guding();</b></p><p><b> s4num=0;</b></p><p> weimiao=0;</p><p><b> miao=0;&l
105、t;/b></p><p><b> fen=0;</b></p><p><b> shi=0;</b></p><p><b> flag1=0;</b></p><p><b> }</b></p><p>&l
106、t;b> }</b></p><p><b> }</b></p><p><b> if(s1==0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p>
107、<p><b> if(s1==0)</b></p><p><b> {</b></p><p><b> flag=1;</b></p><p><b> s1num++;</b></p><p> while(!s1);<
108、/p><p> switch(s1num)</p><p><b> {</b></p><p> case 1:lcd_writecom(0x80+0x40+7);</p><p> lcd_writecom(0x0f);</p><p><b> break;</b>
109、;</p><p> case 2:lcd_writecom(0x80+0x40+4); </p><p> lcd_writecom(0x0f);</p><p><b> break;</b></p><p> case 3:lcd_writecom(0x80+0x40+1);</p><
110、p> lcd_writecom(0x0f);</p><p><b> break;</b></p><p> case 4:lcd_writecom(0x80+3);</p><p> lcd_writecom(0x0f);</p><p><b> break;</b></
111、p><p> case 5:lcd_writecom(0x80+6);</p><p> lcd_writecom(0x0f);</p><p><b> break;</b></p><p> case 6:lcd_writecom(0x80+9);</p><p> lcd_writec
112、om(0x0f);</p><p><b> break;</b></p><p> case 7:lcd_writecom(0x80+12);</p><p> lcd_writecom(0x0f);</p><p><b> break; </b></p><p&g
113、t; case 8: s1num=0;</p><p> lcd_writecom(0x0c); </p><p> write1302(0x8e,0x00); //控制寫入</p><p> write1302(0x8c, time1[6]/10*16+time1[6]%10); //年</p><p> writ
114、e1302(0x88, time1[4]/10*16+time1[4]%10); //月</p><p> write1302(0x86, time1[3]/10*16+time1[3]%10); //日</p><p> write1302(0x8a, time1[5]/10*16+time1[5]%10); //星期</p><p> write130
115、2(0x84, time1[2]/10*16+time1[2]%10); //時(shí)</p><p> write1302(0x82, time1[1]/10*16+time1[1]%10); //分</p><p> write1302(0x80, time1[0]/10*16+time1[0]%10); //秒 </p><p> write1302(0
116、x8e,0x80); //禁止寫入</p><p><b> flag=0;</b></p><p> break; </p><p> } </p><p><b> }</b></p><p><b>
117、 }</b></p><p> if(s1num!=0)</p><p><b> {</b></p><p><b> if(s2==0)</b></p><p><b> {</b></p><p><b> del
118、ay(5);</b></p><p><b> if(s2==0)</b></p><p><b> {</b></p><p> while(!s2);</p><p> switch(s1num)</p><p><b> {</b&
119、gt;</p><p> case 1:time1[0]++;</p><p> if(time1[0]==60) //秒</p><p> time1[0]=0;</p><p> change(6,time1[0],1);</p><p> lcd_writecom(0x80+0x40+6);<
120、;/p><p><b> break;</b></p><p> case 2:time1[1]++;</p><p> if(time1[1]==60)</p><p> time1[1]=0; //分</p><p> change(3,time1[1],1);</p&
121、gt;<p> lcd_writecom(0x80+0x40+3);</p><p><b> break;</b></p><p> case 3:time1[2]++;</p><p> if(time1[2]==24)</p><p> time1[2]=0; //時(shí)</p
122、><p> change(0,time1[2],1);</p><p> lcd_writecom(0x80+0x40+0);</p><p><b> break;</b></p><p> case 4:time1[6]++;</p><p> if(time1[6]==100)<
123、/p><p> time1[6]=0; //年</p><p> change(2,time1[6],0);</p><p> lcd_writecom(0x80+2);</p><p><b> break;</b></p><p> case 5:time1[4]++;<
124、;/p><p> if(time1[4]==13)</p><p> time1[4]=1; //月</p><p> change(5,time1[4],0);</p><p> lcd_writecom(0x80+5);</p><p><b> break;</b><
125、/p><p> case 6:time1[3]++;</p><p> if(time1[3]==32)</p><p> time1[3]=1; //日</p><p> change(8,time1[3],0);</p><p> lcd_writecom(0x80+8);</p>
126、<p><b> break;</b></p><p> case 7:time1[5]++;</p><p> if(time1[5]==7)</p><p> time1[5]=0; //星期</p><p> write_xingqi(time1[5]);</p>&l
127、t;p> lcd_writecom(0x80+12);</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
128、<p><b> if(s3==0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s3==0)</b></p><p><b> {&l
129、t;/b></p><p> while(!s3);</p><p> switch(s1num)</p><p><b> {</b></p><p> case 1:time1[0]--;</p><p> if(time1[0]==-1) //秒</p>
130、<p> time1[0]=59;</p><p> change(6,time1[0],1);</p><p> lcd_writecom(0x80+0x40+6);</p><p><b> break;</b></p><p> case 2:time1[1]--;</p><
131、;p> if(time1[1]==-1)</p><p> time1[1]=59; //分</p><p> change(3,time1[1],1);</p><p> lcd_writecom(0x80+0x40+3);</p><p><b> break;</b></p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)自動(dòng)水位控制系統(tǒng)
- 單片機(jī)溫度控制系統(tǒng)
- 淺談水箱水位單片機(jī)控制系統(tǒng)
- 基于單片機(jī)的水位控制系統(tǒng)
- 單片機(jī)溫度控制論文單片機(jī)溫度控制系統(tǒng)論
- 單片機(jī)水位控制系統(tǒng)課程設(shè)計(jì)
- 基于單片機(jī)的水位控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的水位控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的水位控制系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的溫度控制系統(tǒng)
- 基于單片機(jī)的水溫水位控制系統(tǒng)
- 基于單片機(jī)水塔水位控制系統(tǒng)的設(shè)計(jì)
- 基于單片機(jī)水塔水位控制系統(tǒng)的設(shè)計(jì)
- 《單片機(jī)課程設(shè)計(jì)》---水塔水位控制系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)--水塔水位控制系統(tǒng)
- cangkao單片機(jī)溫度控制系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的溫度控制系統(tǒng)
- 單片機(jī)溫度控制系統(tǒng)設(shè)計(jì)摘要
- 單片機(jī)課程設(shè)計(jì)--水塔水位控制系統(tǒng)
- 基于單片機(jī)的水位控制系統(tǒng)設(shè)計(jì)4
評(píng)論
0/150
提交評(píng)論