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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  基于單片機的太陽能熱水器水溫水位監(jiān)測系統(tǒng)</p><p>  摘要:該太陽能熱水器水溫水位控制主要由AT89S52單片機控制,DS18B20溫度傳感器,LCD1602液晶,時鐘芯片1302和報警系統(tǒng)組成。該系統(tǒng)能夠實時顯示當前時間和日期,以及秒表功能,測量水箱內實時溫度,并以液晶顯示屏的形式告知使用者。同時還能對水位進行實時監(jiān)控,水位不足或者已滿都可以讓使用者得知,當水位已滿時就會報警,提醒

2、使用者及時關閉加水閥門。</p><p>  關鍵詞:AT89S52單片機 溫度控制 水位控制</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硬件設計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 單片機及其外圍電路10</p><p>  3.5 水位控制系統(tǒng)的設計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 軟件設計15</b></p><p>  4.1 溫度顯示部分............................................... 16</p><p>  4.2 關于DS18B20的編程.........................................17</p

11、><p>  4.3 初始化結構.................................................18</p><p><b>  5 系統(tǒng)調試19</b></p><p><b>  6 總結20</b></p><p><b>  致謝20</b

12、></p><p><b>  參考文獻21</b></p><p><b>  附錄22</b></p><p><b>  1引言</b></p><p>  單片機的應用技術是一項新型的工程技術,特別是隨大規(guī)模集成電路的產(chǎn)生而飛速發(fā)展。目前,單片機以其體積小、重

13、量輕、抗干擾能力強、對環(huán)境要求不高??煽啃愿?、性能價格比高、開發(fā)較為容易,在工業(yè)控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、智能化儀器儀表、設備自動化等諸多領域極為廣泛的應用,都可見到單片機的蹤影。</p><p>  目前市場上太陽能熱水器的控制系統(tǒng)大部分都存在著或多或少的缺點:成本較高,操作復雜,控制不方便等。本設計中采用美國DALLAS半導體公司出產(chǎn)智能溫度傳感器DS18B20作為檢測元件,測溫范圍為-55~125攝氏度,最大

14、分辨率可達0.0625攝氏度,可以直接讀出被測溫度值,而且采用三線制與單片機相連,減少了外部的硬件電路,具有低成本和好使用的特點。本設計的水位傳感器電路,省去了傳統(tǒng)的A/D轉換器,操作簡單,控制方便。</p><p>  我們在日常的太陽能熱水器的使用中,很少能預測出當時水溫的高低,還有在給太陽能熱水器補給水源時,其水位具體什么時候能夠加滿也未能知曉,這就大大浪費了水資源,也給日程生活添加了不必要的開支,我在課程

15、設計中基于單片機89S52能夠準確的告知使用者熱水器的即時溫度,還能通過報警的模式告知使用者熱水器儲蓄罐已滿,從而達到了節(jié)約水源,方便大眾的目的。同時,也能告知使用者當時的日期和時間。</p><p>  此次課程設計中設計了一個簡易的測量太陽能熱水器水溫,水位的裝置,并能通過報警的形式告知使用者水位已滿請關閉,我相信經(jīng)過進一步的加工,一定會很好的運用到我們日常的生活中。</p><p>

16、<b>  2方案比較</b></p><p>  2.1溫度傳感器的選擇</p><p><b>  2.1.1方案一</b></p><p>  熱敏電阻是溫度傳感器的一種,它由半導體陶瓷組成。熱敏電阻(NTC)不同于普通的電阻,它具有負的電阻溫度特性,即當溫度升高時,其電阻值減小。熱敏電阻的阻值~溫度特性曲線是一條指

17、數(shù)曲線,非線性較大,因此在使用時要進行線性化處理。線性化處理雖然能夠改善熱敏電阻的特性曲線,但是比較復雜。為此,在要求不高的一般應用中,常做出在一定的溫度范圍內溫度與阻值成線性關系的假定,從而簡化計算。使用熱敏電阻是為了感知溫度,給熱敏電阻通以恒定的電流,電阻兩端就可測到一個電壓,然后通過公式下面的公式可求得溫度:T=T0-KVT。T為被測溫度;T0為與熱敏電阻特性有關的溫度參數(shù);K為與熱敏電阻特性有關的系數(shù);VT為熱敏電阻兩端的電壓。

18、</p><p>  根據(jù)這一公式,測得熱敏電阻兩端的電壓,了解到參數(shù)T0和K,則可以計算出熱敏電阻的環(huán)境溫度,也就是被測的溫度,這樣就把電阻隨溫度的變化轉化為電壓隨溫度變化。這種設計還需要用到A/D轉換電路,而且在測量的過程中,由于環(huán)境的影響會帶來較大的誤差。</p><p><b>  2.1.2方案二</b></p><p>  采用溫度

19、傳感器DS18B20,它是美國Dallas半導體公司生產(chǎn)的數(shù)字化溫度傳感器DS18B20,它與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。全部傳感元件及轉化電路集成在形如一只三極管的集成電路內。我們可以采用DS18B20采集溫度,然后在顯示電路上顯示。</p><p>  該設計外圍電路簡單,只需要通過DS18B20進行采集溫度,一個液晶顯示電路,軟件設計部分只需要采集溫度,對溫度進行

20、轉化,再用顯示電路將其顯示出來。我們可以知道,環(huán)境對DS18B20影響不大,同時DS18B20的測量精度穩(wěn)定并可用軟件設置、接線簡單,大大的節(jié)省了單片機的數(shù)據(jù)串口。</p><p>  2.1.3 方案比較</p><p>  本設計主要是從溫度傳感器的選擇考慮。傳統(tǒng)的測溫元件有熱電偶和熱電阻,而它們測出的一般都是電壓,再轉換成對應的溫度,需要較多的外部硬件支持,電路及軟件調試比較復雜,制

21、作難度高,成本也相對較高。從以上兩種方案中,可以看出采用方案二所設計的電路比較簡單,采用溫度傳感器DS18B20作為檢測元器件,測溫范圍-55℃~125℃,分辨率最大可達0.0625℃。DS18B20可以直接讀出被測溫度值。采用3線制與單片機相連,減少了外部硬件電路,具有低成本和易使用的特點。</p><p>  2.2 水位采集系統(tǒng)的選擇</p><p><b>  2.2.1

22、 方案一</b></p><p>  該水位采集系統(tǒng)是將采集的信號進過A/D轉換器傳送到單片機中如圖1。</p><p>  I為恒流源,該電流流過一個電阻產(chǎn)生的壓降為IR。當K1,K2……K8均打開時,V0=8IR,現(xiàn)取IR=1V,則V0=8V。當水位上升到Kn處時,浮子推動磁體M移動至干簧管Kn處,Kn接通。經(jīng)過OP緩沖輸出的電壓V0=(n-1)V。輸出端經(jīng)ADC0809轉

23、換器后直接輸入到單片機中。當水位到達最高位置時單片機將控制電磁閥停止向水箱加水,并在液晶上顯示“水已滿”字樣。</p><p><b>  圖1</b></p><p><b>  2.2.2 方案二</b></p><p>  用5根不銹鋼針分別置于水箱內5種不同高度的位置,當某個鋼針不接觸水面時,其輸出為高電平;當其與

24、水面接觸時則輸出為低電平。它們輸出的信號接六反向器CD4069,經(jīng)過CD4069反向并經(jīng)74LS244驅動后分別接入89C52單片機的P3.0-P3.4腳。單片機對這些引腳進行判斷之后,在液晶上顯示對應的值。顯示分為5檔,每檔為滿水位的20%。(如圖2)</p><p><b>  圖2</b></p><p>  2.2.3 方案比較</p><

25、p>  方案2比方案1設計原理簡單,硬件要求少,成本較低,方案2省去了方案1中A/D轉換器,操作比較方便,方案1在軟件設計中也比方案2來得更加簡潔明了。因此水位采集系統(tǒng)選擇采用方案2。</p><p><b>  3硬件設計</b></p><p>  3.1 溫度傳感器DS18B20</p><p>  3.1.1 DS18B20的主要

26、特性:</p><p> ?。?)電壓范圍較寬,電壓范圍:3.0~5.5V。</p><p>  (2)單線接口方式,DS18B20在與單片機連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。</p><p> ?。?)DS18B20支持多點組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的三條線上,實現(xiàn)組網(wǎng)多點測溫。</p><p>

27、; ?。?)測溫范圍-55℃~+125℃,在-10~+85℃時精度為±0.5℃,精度較高。</p><p> ?。?)可編程的分辨率為9~12位,對應的可分辨的溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實現(xiàn)高精度測溫。</p><p>  (6)在9位分辨率時最多能在93.75ms內把溫度轉換為數(shù)字,12位分辨率時最多在750ms內把溫度值轉換為數(shù)字,速度更

28、快。</p><p>  (7)測量結果直接輸出數(shù)字溫度信號,以"一線總線"串行傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力。</p><p> ?。?)負壓特性:電源極性接反時,芯片不會燒毀,但不能正常工作。</p><p>  3.1.2 DS18B20的外形</p><p>  DS18B20的外形

29、及管腳排列圖如下圖2所示。 </p><p>  圖3 DS18B20外形及引腳排列圖</p><p>  1.GND 地信號</p><p>  2.DQ 數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。當被用著在寄生電源下,也可以向器件提供電源。</p><p>  3.VDD 可選擇的VDD引腳。當工作于寄生電源時,此引腳必須接地。&

30、lt;/p><p>  3.1.3 DS18B20主要的數(shù)據(jù)部件</p><p>  DS18B20有2個主要的數(shù)據(jù)部件: </p><p>  (1)光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗

31、余校驗碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。</p><p>  (2)DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉化為例:用16位符號擴展的二進制補碼讀數(shù)形式提供,以0.0625℃/LSB形式表達,其中S為符號位。DS18B20內部結構主要由四部分組成:64位光刻ROM,溫度傳感器,溫度報警觸發(fā)

32、器TH和TL,配置寄存器。</p><p>  3.1.4 DS18B20電源供電方式電路圖</p><p> ?。?)DS18B20寄生電源供電方式電路</p><p>  DS18B20寄生電源供電電路,如圖5所示,要想讓DS18B20進行精確的溫度轉換,I/O線必須保證在溫度轉換期間提供足夠的能量,由于每個DS18B20在溫度轉換期間工作電流達到1mA,當幾

33、個溫度傳感器掛在同一根I/O線上進行多點測溫時,靠上拉電阻是無法提供足夠的能量,會造成無法轉換溫度或溫度誤差極大。因此,圖6電路只適用于單一溫度傳感器測溫,也不宜采用電池供電,并且電源電壓必須是穩(wěn)壓5V。當電源電壓下降時,會使測量的誤差變大。</p><p>  圖5 DS18B20寄生電源供電電路 圖6 DS18B20外部供電單點測溫電路</p><p> ?。?)DS18B20

34、的外部電源供電方式</p><p>  DS18B20外部供電單點測溫電路,如圖7所示,DS18B20外部供電多點測溫電路如圖6所示。此時I/O線不需要強上拉電壓,同時在總線上可以掛接多個DS18B20傳感器,組成多點測溫系統(tǒng)。但要注意在外部供電的方式下,DS18B20的GND引腳不能懸空,否則讀取的溫度總是85℃。</p><p>  圖6 DS18B20外部供電多點測溫電路

35、 </p><p>  比較上述兩種供電方式后認為外部電源供電方式對電源要求比電源供電方式優(yōu)越些且穩(wěn)定性好,故在此設計中采用如圖6的外部電源供電方式供電電路。 </p><p><b>  3.2 顯示電路 </b></p><p>  由DS1602液晶顯示屏組成,其特點是比較直觀便于觀察(如圖7)。</p><p>

36、;<b>  圖7</b></p><p>  3.3 蜂鳴器電路 </p><p>  蜂鳴器俗稱喇叭(如圖8),是廣泛應用于各種電子產(chǎn)品的一種元器件,它用于提示、報警、音樂等許多應用場合。</p><p>  蜂鳴器通常工作電流比較大,電路上的TTL電平基本上驅動不了蜂鳴器,需要增加一個電流放大的電路才可以。蜂鳴器由振蕩器、磁鐵、振動膜片以

37、及外殼等組成,接通電源后,振蕩器產(chǎn)生音頻信號,電流通過電磁線圈使電磁線圈產(chǎn)生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。</p><p>  當P3.7端輸出高電平時,三極管截止,沒有電流流過線圈,蜂鳴器不發(fā)聲,當P3.7端為低電平時,三極管導通,這樣蜂鳴器中就有電流流過,就會發(fā)出聲音.因此,可通過程序來控制蜂鳴器的聲音大小。</p><p><b>  圖8

38、蜂鳴器電路圖</b></p><p>  3.4 單片機及其外圍電路</p><p>  此次課程設計采用STC公司的單片機STC89S52作為系統(tǒng)的控制器。主要從以下特點考慮:</p><p>  1.STC89S52是一種低功耗,高性能CMOS工藝的8位單片機,片內含有8K的系統(tǒng)可編程Flash存儲器。使用STC公司高密度非易失性存儲器技術制造,與工

39、業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)提供高靈活,是一個很有效的解決方案。 </p><p>  2.STC89S52具有的標準功能:8k Bytes Flash片內程序存儲器,256 bytes的隨機存取數(shù)據(jù)存儲器(RAM),全雙工串行口,片內晶振及時鐘電路。另外,STC89S52可降至0KHZ靜態(tài)邏輯操作,支持2

40、種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機停止工作,直到一個中斷或硬件復位為止。</p><p>  3.STC89S52有40個引腳,32個外部雙向輸入/輸出(I/O)口,同時內含8個中斷口,5個中斷優(yōu)先級,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,2個讀寫口。AT89S52可以按照常規(guī)方法進行

41、編程,也可以在線編程。其通用的微處理器和Flash存儲器結合在一起,可反復擦寫的Flash存儲器可有效地降低開發(fā)成本。</p><p>  在本設計中,XTAL1和XTAL2端外接石英晶體作為定時元件,內部反向放大器自激振蕩,產(chǎn)生時鐘。所用石英晶體的振蕩頻率為12MHZ,電容C1,C2常為20pF~40pF內,從而形成了單片機的最小系統(tǒng)。如圖9所示。</p><p><b>  

42、圖9 晶振電路</b></p><p>  設計中用的是上電復位,單片機上電過后,便自動的進入復位狀態(tài)。圖10是上電復位電路。當采用的晶體頻率為12MHZ時,可采取C=22 uf,R=1KΩ。</p><p>  圖10 上電復位電路</p><p>  3.5 水位控制系統(tǒng)的設計</p><p>  用5根不銹鋼針分別置于水箱內

43、5種不同高度的位置,當某個鋼針不接觸水面時,其輸出為高電平;當其與水面接觸時則輸出為低電平。它們輸出的信號接六反向器CD4069,經(jīng)過CD4069反向并經(jīng)74LS244驅動后分別接入89C52單片機的P3.0-P3.5腳。單片機對這些引腳進行判斷之后,在液晶上顯示對應的值。顯示分為5檔,每檔為滿水位的20%。(如圖11)</p><p><b>  圖11</b></p>&l

44、t;p>  3.5.1 CD4069芯片資料</p><p>  CD4069是由六個COS/MOS反相器電路組成,該器件通常用在不需要中功率TTL驅動和邏輯電平轉換的電路中。(如圖12)</p><p><b>  圖12</b></p><p>  3.5.2 74LS244芯片資料</p><p>  74L

45、S244是三態(tài)八緩沖器。(如下頁圖13)</p><p><b>  引出端符號:</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 軟件設計</b></p><p>  本設計的基本運行步驟是:接通電源溫度傳感器開始工作,LCD1602顯示出溫度與

47、當前的時間日期,當向水箱中倒入水后,到達第一個鋼針時此時液晶屏上顯示01(5cm),到達第二個鋼針時液晶屏上顯示02(10cm),直至到達水箱的頂部,液晶屏幕上顯示“FULL”,并且蜂鳴器報警,提醒用戶水已滿,關閉水閥,從而完成了對水位的控制。根據(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表示響鈴警報端口</p><p> 

49、 通過判斷是否導電,來檢測水位所在,滿水后達到報警目的,并斷開注水連接,使蜂鳴器報警。</p><p>  4.1溫度顯示部分:</p><p><b>  圖 16</b></p><p>  在初始化之后,通過指令從系統(tǒng)中調取數(shù)據(jù),從DS18B20中的高8位和低8位溫度數(shù)值反饋到轉化模塊,轉換成可顯示的十進制數(shù),送給1602液晶顯示器,分別

50、在1602指定位置顯示 實際溫度值的10位、個位和小數(shù)位反應實時溫度。</p><p>  4.2 關于DS18B20的編程</p><p>  在對DS18B20進行讀寫程序時,必須嚴格保證讀寫時序,否則將無法讀取測得的溫度結果。根據(jù)DS18B20的通信協(xié)議,主機控制DS18B20完成溫度轉換必須經(jīng)過3個步驟:每一次讀寫之前都要對DS18B20進行復位,復位成功后發(fā)送一條ROM指令,最后

51、發(fā)送RAM指令,這樣才能對DS18B20進行預定的操作。再才能讀取溫度。</p><p>  表1 RAMR指令表</p><p>  表2 ROM指令表</p><p>  系統(tǒng)對DS18B20的各種操作按協(xié)議進行。操作協(xié)議為:初始化DS18B20—>發(fā)ROM功能命令—>發(fā)存儲器操作命令—>處理數(shù)據(jù)。DS18B20的初始化序列圖,如圖18所示。

52、</p><p><b>  4.3 初始化結構</b></p><p>  圖17 DS18B20的初始化序列圖</p><p><b>  5 系統(tǒng)調試</b></p><p>  本設計采用KeilC51編譯器進行源程序編譯及仿真調試,同時用Protel進行硬件電路板的設計制作。硬件電路制作

53、完畢,用萬用表檢測有無短路開路等現(xiàn)象,確定硬件電路沒有錯誤時,用proteus進行仿真,運行程序進行調試。</p><p>  在焊接過程中,發(fā)現(xiàn)DS1302芯片發(fā)熱嚴重,但扔能正常顯示日期等,斷開開關,通過萬用表測量,發(fā)現(xiàn)一腳和八腳短路,但是斷開3.6V電源后,扔持續(xù)發(fā)熱,通過測試,發(fā)現(xiàn)是芯片損壞,重新更換芯片后得到解決。</p><p>  由于初次使用DS18B20器件,在程序設計過

54、程中遇到很大難題,通過詢問老師和查閱網(wǎng)絡,得到相關信息,在同學的共同學習下,更深的了解了該元件的使用方法和相關編程方式,并成功的運用到電路中。</p><p>  在實現(xiàn)功能之后,又加入了部分小功能,如:秒表,定時等,充分利用液晶屏和各芯片功能,使整個作品變得更加豐富,以滿足不同使用者的不同需求,使用起來方便耐用,操作簡單,易于上手。</p><p><b>  6 總結<

55、/b></p><p>  經(jīng)過這么長時間來不懈的努力與奮斗,我終于在老師的指導下完成了我的設計,本設計除了具有測量太陽能熱水器水溫水位的功能,還具有顯示日期,時間,星期等的附加功能。雖然它還有很多需要完善的地方,在這次作品設計的過程中學到了很多東西,使我明白了很多書本上的東西不通過具體的實踐是不能夠領會其中的精髓的,我們必須通過自己的親手實踐,去經(jīng)歷失敗了才能對所學知識達到真正的掌握。理論必須聯(lián)系實際,而

56、實踐是檢驗真理的唯一標準,我真正的懂得了這句話的真諦。在我以后的工作和生活中,我從此可以汲取很多經(jīng)驗,凡事都要自己去動手,去實踐一下,遇到困難,永遠不要喪失一顆勝利的心,有耐心,有信心,有細心,有恒心,有虛心,只有這樣,我才會在逆境中不斷前進,不斷充實自己!</p><p><b>  致謝</b></p><p>  在本次課程設計的過程中,特別感謝我的指導老師對我

57、的作品設計的幫助,不管是在選題階段,設計階段,還是制作階段,老師都對我進行了指導,從而使得本次課程設計能夠順利完成。最后我要感謝我的同學們,他們在我進行電路圖的設計和焊接過程中給了我很多幫助,在制作的過程中,我感受到了同學們的建議都是一種寶貴的財產(chǎn)。</p><p><b>  參考文獻</b></p><p>  [1]趙文博,劉文濤.單片機語言C51程序設計[M]

58、北京:人民郵電出版社2006.</p><p>  [2]胡乾斌.單片微型計算機原理與應用[M](第二版).武漢:華中科技大學出版社.2005.</p><p>  [3]Microchip Inc.PIC16/17 Microcontrollers Data Book.1995/1996.</p><p>  [4]馬琨.幾種實用變壓器和穩(wěn)壓電源的制作。電氣時代.

59、1999(1).</p><p>  [5]何立民.單片機應用系統(tǒng)抗干擾技術[M].北京:北京航空航天大學出版社,2001.</p><p>  [6]陳家勝.太陽能熱水器輔助電加熱控制器的研制.電子技術,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; //水位測試切換開關</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(); //讀一個字節(jié)

65、</p><p>  void writeonechar(uchar dat); //寫一個字節(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>  //延時一毫秒</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); //時</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; //時</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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論