2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩43頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論