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

下載本文檔

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

文檔簡介

1、<p><b>  1 緒論</b></p><p>  1.1 本課題的研究背景</p><p>  太陽能是地球上取之不盡、用之不竭的最寶貴能源。它在防止和改善大氣污染方面,加強對太陽能的研究和利用, 特別是重點發(fā)展太陽能熱水器有著重大的意義和廣闊的前景。太陽能熱水器是一種將太陽輻射能轉變?yōu)闊崮? 把水逐漸加熱的熱交換裝置, 它是太陽能熱利用的基礎元

2、件。太陽能的開發(fā)利用, 已越來越引起世界人們的注意。由于石油和能源的緊缺, 促使太陽能熱水器有很大的發(fā)展。日本、法國、澳大利亞等國, 大部分家用熱水來自太陽能熱水器[1]。目前市場上太陽能熱水器的控制系統(tǒng)大部分都存在著或多或少的缺點:功能單一、操作復雜、控制不方便等。隨著人們生活水平的提高和電子技術的發(fā)展,這樣的太陽能熱水器控制系統(tǒng)越來越不適應人們的生活需求,開發(fā)一種控制方便,操作靈活的太陽能熱水器的控制系統(tǒng),已經(jīng)成為當務之急[2]。&

3、lt;/p><p>  太陽能熱水器單片機控制系統(tǒng)就是一種以單片機為控制系統(tǒng)核心的系統(tǒng),不但其機器性能顯著提高,還增加了難以實現(xiàn)的功能,同時也提高了控制的精確度,硬件與軟件相互配合實現(xiàn)太陽能熱水器工作的智能化和自動化[3]。</p><p>  單片機具有集成度高、運算速度快、體積小、運行可靠、價格低廉等特點,因此在過程控制、數(shù)據(jù)采集、機電一體化、智能化儀表、家用設備以及網(wǎng)絡技術等方面得到廣泛

4、應用[4]?,F(xiàn)今太陽能熱水器的控制系統(tǒng)大多都有著功能不全面、操作性復雜、控制不方便等問題,很多控制器只具有溫度和水位顯示功能,不具有溫度控制功能,即使熱水器具有輔助加熱功能,也可能由于加熱時間不能控制而產(chǎn)生過燒,從而浪費電能。本課題設計的太陽能熱水器控制系統(tǒng)以AT89S52單片機為檢測控制中心單元,不僅實現(xiàn)了時間、溫度和水位三種參數(shù)顯示功能,而且具有時間設定、溫度設定與控制功能??刂葡到y(tǒng)可以根據(jù)天氣情況利用輔助加熱裝置使蓄水箱內的水溫達

5、到預先設定的溫度,從而達到24小時供應熱水的目的。該控制器和以往顯示儀相比具有性價比高、溫度控制與顯示精度高、使用方便和性能穩(wěn)定等優(yōu)點,提高了我國太陽能應用領域控制水平,具有可觀的經(jīng)濟效益和社會效益[5]。</p><p>  1.2 太陽能熱水器的發(fā)展歷史和現(xiàn)狀</p><p>  1.2.1 太陽能熱水器的發(fā)展歷史</p><p>  太陽能熱水器是利用太陽

6、能集熱器將太陽輻射能轉變?yōu)闊崮?,并用來提高水溫的,是目前實際應用最多、技術最成熟的太陽能熱利用的一種裝置。它不僅可為家庭和機關、旅社、醫(yī)院等提供洗澡、洗衣、炊事等所需熱水(100℃以下),同時還可用于空調、干燥、農業(yè)種植、水產(chǎn)養(yǎng)殖、海水淡化等。太陽能熱水器的使用已有近百年的歷史,最早的太陽能熱水器工業(yè)出現(xiàn)在18世紀的美國加州,最原始的太陽能熱水器僅是一只漆黑的金屬圓桶。隨著科學技術的進步,太陽能熱水器也隨之不斷改進,由集熱和貯熱合為一體

7、逐步改進為集熱和貯熱部分分開,采用先進的太陽能集熱器,先進的保溫材料和冬季防凍技術及其他輔助裝置等?,F(xiàn)如今生產(chǎn)的先進的太陽能熱水器已實現(xiàn)了全年運行,大大提高了太陽能熱水器的熱效率和利用效率。目前,太陽能熱水器是可再生能源技術領域商業(yè)化程度最高,推廣應用最普遍的技術之一。以色列在政府的支持下,有85%的住宅都安裝了太陽能熱水器。美國有130多萬個游泳池都裝上了太陽能集熱器,成為環(huán)保型的太陽能游泳池。近年來,太陽能熱水器在我國迅猛發(fā)展,從2

8、0世紀70年代后期就開始了開發(fā)家用太陽能熱水器。到20世紀90年代,隨著科技進步,環(huán)境意識增強和人</p><p>  1.2.2 太陽能熱水器的發(fā)展現(xiàn)狀</p><p>  目前國內的太陽能熱水器主要是采用的緊湊式自然循環(huán)系統(tǒng),這種系統(tǒng)的特點是制造簡單、價格低廉。但如果從太陽能熱水器使用的安全、質量、方便以及操作性等方面來看,分離式強制循環(huán)系統(tǒng)更能滿足人們的要求。而采用分離式強制循環(huán)系

9、統(tǒng)時一般都要采用承壓儲水箱,這樣就對熱水器的連接部位的強度以及密封性有了一定的要求。平板型集熱器一般是金屬制成的,集熱器與儲水箱之間的連接采用的是金屬連接,因此可以承受較高的水壓,密封性能也較好。而真空管熱水器的集熱管與儲水箱之間的連接一般是用塑料或橡膠來密封,因此在承壓及密封方面效果差。另外,如果對太陽能熱水器的水質要求較高,那么通常是采用雙循環(huán)系統(tǒng),即集熱器加熱的是導熱工質,再通過導熱工質把熱量傳遞給水,避免了水在循環(huán)過程中被二次污

10、染,保證了水質。在平板型太陽能集熱器中,傳熱介質可以在集熱器與貯水箱內的換熱器之間無障礙地流動,通過換熱器去加熱貯水箱內的水,完成系統(tǒng)的雙循環(huán),這一點也是平板太陽能熱水器明顯的優(yōu)勢之處[7]。</p><p>  根據(jù)我國所處的地理環(huán)境,太陽能熱水器平均每平方米每年可節(jié)約的能源折合100-150公斤標準煤。由此可見,在如今資源短缺,環(huán)境惡化的現(xiàn)實中,太陽能熱水器的推廣和應用,將在節(jié)約常規(guī)能源,減少環(huán)境污染和人類社

11、會可持續(xù)發(fā)展方面起到不可忽視的重要作用,具有極大的發(fā)展前途[8]。</p><p>  在全球能源形勢緊張、氣候變暖嚴重威脅經(jīng)濟發(fā)展,世界能源的日益緊缺、油價的不斷攀升和居民生活水平的高和洗浴舒適度要求提高的今天,世界各國都在尋求新的能源替代戰(zhàn)略,以求得可持續(xù)發(fā)展和在日后的發(fā)展中獲取優(yōu)勢地位。太陽能以其清潔、源源不斷、安全等顯著優(yōu)勢,成為關注重點。在太陽能產(chǎn)業(yè)的發(fā)展中,太陽能熱水器的熱利用轉換技術無疑是最為成熟的

12、[9]。今后,太陽能熱水器將會向更節(jié)能、更高效、更環(huán)保等方向發(fā)展。</p><p>  1.3 本課題的研究目的和意義</p><p>  當今計算機技術在飛速發(fā)展,微機應用日益普及深入,微機在通信自動化、工業(yè)自動控制、電子測量、信息管理和信息系統(tǒng)等方面得到廣泛的應用。嵌入式計算機系統(tǒng)是以應用為中心,以計算機技術為基礎,軟、硬件可裁剪,適應應用系統(tǒng)對功能、可靠性、成本、體積、功效等嚴格要

13、求的專業(yè)計算機系統(tǒng)。其最初應用是基于單片機的。單片機小巧靈活,成本低,易于產(chǎn)品化。它面向控制,能針對性的解決從簡單到復雜的各種控制任務[10]。</p><p>  太陽能熱水器使用方便,節(jié)能,無污染,普及推廣迅速。它是人們日常生活中不可或缺的家用設備,提高居民的生活質量起了不可替代的作用。隨著科學技術的發(fā)展,人們對太陽能熱水器的控制功能的要求也越來越高。目前市場上太陽能熱水器的控制系統(tǒng)大部分都存在著或多或少的缺

14、點:功能單一、操作復雜、控制不方便等。隨著人們生活水平的提高和電子技術的發(fā)展,這樣的太陽能熱水器控制系統(tǒng)越來越不適應人們的生活需求,開發(fā)一種控制方便,操作靈活的太陽能熱水器的控制系統(tǒng),已經(jīng)成為當務之急[11]。本文設計了一種以單片機AT89S52為核心的太陽能熱水器控制器,本設計具有很強的實用性,用成本低廉的器件以單片機技術對太陽能熱水器的溫度、水位和時間的顯示和控制,并且本設計電路簡單、實用性強、性價比高、控制靈活、顯示直觀醒目,可廣

15、泛應用與家用太陽能熱水器。</p><p><b>  2 總體方案</b></p><p><b>  2.1 設計要求</b></p><p>  本設計以AT89S52單片機為太陽能熱水器控制系統(tǒng)的核心,分為單片機時鐘電路、單片機復位電路、溫度檢測電路、水位檢測電路、實時時鐘電路、鍵盤電路、顯示電路、報警電路等模

16、塊。本系統(tǒng)處于監(jiān)控狀態(tài)時,具有以下功能:1、利用數(shù)碼管顯示溫度和時間;2、利用發(fā)光二極管顯示水位;3、當水位較低時自動上水,水滿時自動停止;4、當溫度低于下限溫度時自動加熱,溫度達到上限溫度時自動停止加熱;5、通過按鍵實現(xiàn)手動加熱、手動加水、時間顯示以及設置時間、上限溫度和下限溫度;6、清晨自動上水。</p><p><b>  2.2 總體設計</b></p><p&

17、gt;  本設計控制系統(tǒng)中水溫利用溫度傳感器DS18B20讀入溫度數(shù)據(jù),在數(shù)碼管上顯示兩位數(shù)據(jù)。水位采用三個電極,一個是電源負極,當電極接觸到水后,由于水的導電性,使得兩外兩根導線也是低電平,從而使三極管導通,P3.6和P3.7是低電平,當兩根導線不接觸水的時候,輸出是高電平。通過P3.6 和P3.7引腳電平高低情況來控制發(fā)光二極管點亮的數(shù)目,從而來指示當前的水位。當水位比較低的時候,紅燈亮,水位在中間的時候,紅燈和黃燈亮,當水位高的時

18、候三個燈都亮。時間通過時鐘芯片DS1302讀取時鐘數(shù)據(jù),然后在四位數(shù)碼管上顯示時分??刂萍訜嵫b置和加水裝置分別由兩個繼電器控制,繼電器采用三極管驅動。</p><p>  本系統(tǒng)采用8個獨立式按鍵,按下S1鍵單片機復位;按下S5鍵可實現(xiàn)手動上水功能,水滿自動停止;按下S6鍵可實現(xiàn)手動加熱功能,溫度達到上限溫度值自動停止加熱;S2為溫度調整鍵,按一次可調整報警上限溫度值,按兩次可調整報警下限溫度值,按三次數(shù)碼管恢復

19、到正常溫度顯示;S8為時間調整鍵,按一次調整分,按兩次調整時,按三次確定和保存時間;S3、S4是溫度時間加一和減一操作鍵;按下S7鍵切換溫度和時間顯示。系統(tǒng)組成框圖如圖1所示。</p><p><b>  圖1 系統(tǒng)組成框圖</b></p><p><b>  3 軟件設計</b></p><p>  系統(tǒng)軟件的設計采用

20、模塊化的結構。太陽能熱水器控制系統(tǒng)程序主要由主程序、延時子程序、溫度讀取子程序、溫度顯示子程序、時間讀取和顯示子程序、掃描鍵盤子程序、報警子程序構成。</p><p>  3.1 主程序設計</p><p>  本控制系統(tǒng)的主程序是本設計的總控制程序,以AT89S52單片機為核心實現(xiàn)對太陽能熱水器水位和水溫的檢測與顯示。主程序首先完成系統(tǒng)初始化設置,然后根據(jù)存儲的鍵盤狀態(tài)和檢測的水溫、水

21、位等狀態(tài)信號進行相應的處理。系統(tǒng)正常運行時,首先讀取水溫和水位,然后顯示溫度和水位,系統(tǒng)會根據(jù)顯示的水溫值和水位值判斷是否要進行自動加熱和自動上水操作。當檢測到的實際水溫小于設置的下限溫度時,加熱指示燈亮,繼電器工作進行加熱,水溫到達上限溫度時停止加熱;當檢測到水位較低時,加水指示燈亮,繼電器工作進行加水,水位達到最高時停止加水;通過掃描按鍵來進行相對應的按鍵操作。主程序流程圖如圖2所示。</p><p><

22、;b>  圖2 主程序流程圖</b></p><p>  3.2 延時子程序設計</p><p>  延時子程序是用來實現(xiàn)數(shù)碼管顯示和掃描按鍵的延時,num值不同,延時的時間也不同,具體程序如下:</p><p>  void Delay(uint num)</p><p><b>  {</b>&l

23、t;/p><p>  while( --num );</p><p><b>  }</b></p><p>  3.3 溫度讀取子程序設計</p><p>  讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進行CRC校驗,校驗有錯時不進行溫度數(shù)據(jù)的改寫。當DS18B20接收到溫度轉換命令后,開始啟動轉換,轉換

24、完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高速暫存存儲器的第1、2字節(jié)。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后,數(shù)據(jù)格式以0.062 5 ℃/LSB形式表示。當符號位S=0時,表示測得的溫度值為正值,直接將二進制位轉換為十進制;當S=1時,表示測得的溫度值為負值,先將補碼變換為原碼,再計算十進制值。DS18B20溫度傳感器主要用于對溫度進行測量,數(shù)據(jù)可用16位符號擴展的二進制補碼讀數(shù)形式提供,并以0.06

25、25℃/LSB形式表示。</p><p>  DS18B20的操作協(xié)議是:初始化→發(fā)ROM功能指令→發(fā)存儲操作指令→處理數(shù)據(jù)。</p><p><b>  圖3 讀溫度流程圖</b></p><p>  3.4 溫度顯示子程序設計</p><p>  7段LED數(shù)碼管是利用7個LED(發(fā)光二極管)外加一個小數(shù)點的LED

26、組合而成的顯示設備,可以顯示0~9等10個數(shù)字和小數(shù)點,這類數(shù)碼管可以分為公陰極與共陽極兩種,共陽極就是把所有LED的陽極連接到共同的結點,而每個 LED的陰極分別為a,b,c,d,e,f,g及dp(小數(shù)點);共陰極就是把所有LED的陽極連接到共同的結點,而每個 LED的陽極分別為a,b,c,d,e,f,g及dp(小數(shù)點)。</p><p>  根據(jù)數(shù)碼管的驅動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。 靜態(tài)顯示驅

27、動:每個數(shù)碼管的每個段都由一個單片機的I/O端口進行驅動,或者使用如BCD碼的二~十進制譯碼器譯碼進行驅動。靜態(tài)驅動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用I/O端口多。動態(tài)顯示驅動:動態(tài)驅動是將所有數(shù)碼管的8個顯示筆劃“a,b,c,d,e,f,g,dp”的同名端連在一起,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對位選通控制,所以我們只要將需要顯示

28、的數(shù)碼管的選通控制打開,該位就顯示出字形[12]。</p><p>  本設計采用共陽型數(shù)碼管,燈的負極依次接到數(shù)碼管的a-f段,采用動態(tài)掃描電路,數(shù)碼管編碼說明,如1表所示。溫度顯示流程圖如圖4所示。</p><p><b>  表1 控制命令表</b></p><p>  圖4 顯示子程序流程圖</p><p>  

29、3.5 時間讀取和顯示子程序設計</p><p>  DS1302內部主要包括實時時鐘、輸入移位寄存器、31字節(jié)靜態(tài)RAM、電源控制部分、命令控制邏輯、振蕩器和分頻器等部分。</p><p>  DS1302控制字:控制字的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6:如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1(A4~A0)

30、:指示操作單元的地址;位0(最低有效位):如為0,表示要進行寫操作,為1表示進行讀操作??刂谱挚偸菑淖畹臀婚_始輸出。在控制字指令輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個SCLK脈沖的下降沿,讀出DS1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。</p><p>  DS1302時序:CE輸入驅動高時啟動所有的數(shù)據(jù)傳輸。CE

31、輸入有兩個功能。首先,CE打開控制邏輯,允許訪問的移位寄存器的地址/命令序列。其次,CE提供了一個終止單字節(jié)或多字節(jié)數(shù)據(jù)傳輸方法。一個時鐘周期是由一個下降沿之后的上升沿序列。對于數(shù)據(jù)傳輸而言,數(shù)據(jù)必須在有效的時鐘的上升沿輸入,在時鐘的下降沿輸出。如果CE為低,所有的I/O引腳變?yōu)楦咦杩範顟B(tài),數(shù)據(jù)傳輸終止。對于數(shù)據(jù)輸入:開始的8個SCLK周期,輸入寫命令字節(jié),數(shù)據(jù)字節(jié)在后8個SCLK周期的上升沿輸入。數(shù)據(jù)輸入位0開始。對于數(shù)據(jù)輸出:開始的

32、8個SCLK周期,輸入一個讀命令字節(jié),數(shù)據(jù)字節(jié)在后8個SCLK周期的下降沿輸出。通過DS1302讀取時間值,然后在四位數(shù)碼管上依次顯示時的十位、個位,分的十位、個位。時間的讀取和顯示流程圖如圖5和圖6所示。</p><p>  圖5 DS1302讀取時間流程圖</p><p>  圖6 LED顯示時間流程圖</p><p>  3.6 掃描鍵盤子程序設計</

33、p><p>  按鍵是用來向系統(tǒng)提供操作人員命令的接口,所以準確無誤地辨認每個鍵的動作以及其所處的狀態(tài),是系統(tǒng)能否正常工作的關鍵。多數(shù)按鍵多采用機械彈性開關,一次高低電平的變化就是一次命令。但是按鍵的抖動是難以避免的,為了穩(wěn)定操作,我們要防止抖動的發(fā)生,就要消除抖動的影響,可以從硬件和軟件兩方面解決。</p><p>  1、硬件消除抖動。一般采用雙穩(wěn)態(tài)消抖電路。2、軟件消除按鍵抖動。如果按鍵

34、較多硬件電路將無法勝任,因此常采用軟件的方法進行消抖。在第一次檢測到有鍵按下時,執(zhí)行一段延時子程序后再按確認該鍵電平是否仍保持閉合狀態(tài),如果保持閉合狀態(tài)電平則確認為真正有鍵按下,從而消除了抖動的影響[13]。</p><p>  鍵盤一般有獨立式和矩陣式兩種,因為鍵盤較少所以用簡單的獨立式鍵盤,它的優(yōu)點是編程簡單,缺點是占用I/O口多,適用于鍵盤較少的電路。本設計中將鍵盤程序作為主程序的一部份,采用掃描方式讀取鍵

35、盤動作,根據(jù)讀取的值,鍵盤處理程序進行相應操作。鍵盤掃描子程序流程圖如圖7所示。</p><p>  圖7 鍵盤掃描子程序流程圖</p><p>  3.7 報警子程序設計</p><p>  系統(tǒng)正常運行時,當檢測到溫度低于下限溫度或水位較低時,報警電路工作,蜂鳴器響起,直到溫度高于下限溫度或水位不低時,蜂鳴器停止工作。當系統(tǒng)處于出錯狀態(tài)時,蜂鳴器也會報警。報警

36、工作流程圖如圖8所示。</p><p>  圖8 報警子程序流程圖</p><p><b>  4 仿真調試</b></p><p>  4.1 仿真軟件介紹</p><p>  本次設計是利用Proteus軟件來仿真的。Proteus軟件是英國Labcenter electronics公司出版的EDA工具軟件。它不

37、僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件[14]。它是目前最好的仿真單片機及外圍器件的工具。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調試到單片機與外圍電路協(xié)同仿真,一鍵切換到PCB設計,真正實現(xiàn)了從概念到產(chǎn)品的完整設計。Proteus軟件是目前世界上唯一將電路仿真軟件、PCB設計軟件和虛擬模型仿真軟件三合一的設計平臺,其處理器模型支持8051、HC11、PIC10/12/16/18/24

38、/30/DSPIC33、AVR、ARM、8086和MSP430等,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯器。</p><p>  Proteus軟件具有其它EDA工具軟件的功能。這些功能是:1、原理布圖 2、PCB自動或人工布線 3、SPICE電路仿真</p><p>  革命性的特點:1、互動的電路仿真。2、仿真處理器及外圍電路。<

39、/p><p>  Proteus提供了豐富的資源:1、可提供仿真元器件資源,仿真數(shù)字和模擬、交流和直流等數(shù)千種元器件,有30多個元器件。2、可提供仿真儀表資源。3、除了現(xiàn)實存在的儀器外,它還提供了一個圖形顯示功能,可以將線路上變化的信號,以圖形的方式實時地顯示出來,其作用與示波器相似[15]。</p><p>  4.2 系統(tǒng)仿真結果</p><p>  在Prote

40、us繪制好原理圖后,調入已經(jīng)編譯好的目標代碼文件:*.HEX,可以在Proteus的原理圖中看到模擬的實物運行狀態(tài)和過程。打開Proteus軟件,在元器件庫中選擇AT89S52單片機,DS18B20,DS1302等元器件,連線結束后,點擊單片機下載程序。點擊開始按鈕,系統(tǒng)上電進入初始化狀態(tài),進入工作狀態(tài),太陽能熱水器控制器在2位LED數(shù)碼管上顯示當前的水溫值,通過發(fā)光二極管點亮的數(shù)目來表示當前的水位值,利用按鍵來執(zhí)行加水、加熱、顯示時間

41、、調整溫度、調整時間等相關操作。仿真圖如圖9所示:</p><p><b>  圖9 仿真圖</b></p><p><b>  結 論</b></p><p>  本次畢業(yè)設計,我做的課題是“太陽能熱水器控制器——軟件設計”。</p><p>  本設計利用AT89S52單片機作為系統(tǒng)核心實現(xiàn)了

42、溫度、水位和時間三種參數(shù)的實時顯示,加水加熱自動和手動控制,溫度預置等功能。采用C語言編寫程序,軟件部分由主程序、延時子程序、溫度讀取子程序、溫度顯示子程序、時間讀取和顯示子程序、掃描鍵盤子程序、報警子程序構成。</p><p>  本設計軟件設計是用C語言來編寫的,與其他語言比起來,有優(yōu)勢也弊端,結構式語言的顯著特點是代碼及數(shù)據(jù)的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清

43、晰,便于使用、維護以及調試。C語言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便的調用,并具有多種循環(huán)、條件語句控制程序流向,從而使程序完全結構化。C語言的缺點主要表現(xiàn)在數(shù)據(jù)的封裝性上,這一點使得C在數(shù)據(jù)的安全性上有很大缺陷,C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數(shù)組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。在軟件編寫好后,發(fā)現(xiàn)始終不能通過編譯,經(jīng)過老師的幫助,發(fā)現(xiàn)了諸多的問題,最后將錯誤

44、改正后,通過編譯,并實現(xiàn)仿真。</p><p>  本設計已基本實現(xiàn)了任務書所要求的的功能,但鑒于自身水平有限等原因,設計中可能會不足和有待改進之處,望各位專家老師批評指正。</p><p><b>  致 謝</b></p><p>  彈指一揮間,大學四年已經(jīng)接近了尾聲。當自己懷著忐忑不安的心情完成畢業(yè)設計的時候,意味著大學生活即將結束,

45、自己也從當年一個懵懂的孩子變成了一個成熟的青年。本次設計是我大學生涯上的最后一次答卷,在完成畢業(yè)設計的整個過程中,我得到了許多同學和老師的幫助,尤其是我的指導老師紀劍祥,他在我畢業(yè)設計完成的過程中給予了很多的教誨、幫助和鼓勵。</p><p>  首先,我要感謝我的導師**,從選題到開題報告,到外文翻譯,到中期檢查表,再到畢業(yè)論文初稿和終稿,一遍又一遍地指出每稿中的具體問題,嚴格把關,循循善誘。其次,我還要感謝同

46、組的蔡江同學和給予我?guī)椭耐瑢W,沒有他們的幫助和提供資料,沒有他們的鼓勵與支持,我是不可能順利地完成本次設計的。最后,我要感謝培養(yǎng)我長大含辛茹苦的父母,謝謝您們!</p><p>  最后,能夠成功地完成本次設計,我非常地開心!借此機會,再次向在本次畢業(yè)設計中給予我關心和幫助的老師和同學表達我誠摯的謝意。</p><p><b>  參 考 文 獻</b></p

47、><p>  1 楊宜德,劉茂州.太陽能熱水器發(fā)展的前景廣闊[J].河南科技,1989.10</p><p>  2 劉福才,劉豐,劉立偉.AVR單片機在太陽能熱水器智能控制中的應用[J].中國儀器儀表,2000.6 </p><p>  3 孔星朗.單片機原理及其在家用電器中的應用.海洋出版社</p><p>  4 李軍.檢測技術及儀

48、表.北京:中國輕工業(yè)出版社,2002.4</p><p>  5 張景文,王震宏,高為浪,李桂花.基于單片機的太陽能熱水器智能控制系統(tǒng)[J].西華大學學報(自然科學版),2008.5</p><p>  6 趙大偉.太陽能熱水器[J].新農業(yè),2002.7 </p><p>  7 別玉,胡明輔,王艷青.平板型太陽熱水器的現(xiàn)狀及發(fā)展趨勢[C].化學與化工技術,

49、科技學術論文集.北京:原子能出版社,2005 </p><p>  8 胡潤青.蓬勃發(fā)展的太陽能熱水器產(chǎn)業(yè).可再生能源</p><p>  9 張忠.太陽能熱水器的類型[J].農村新技術,2008.2</p><p>  10 王幸之,鐘愛琴,王雷,王閃.AT89S系列單片機原理與接口技術[M].北京:航空航天大學出版社,2004.5</p>

50、<p>  11 袁小平,陳躍.一種智能型太陽能熱水器控制器的研制.江蘇煤炭</p><p>  12 范延濱,王正彥.太陽能熱水器控制器中測量模型.電子測量技術,2004.3</p><p>  13 唐德禮,鮑連升.太陽能熱水器水溫水位控制器.十堰職業(yè)技術學院學報,2002.15(4)</p><p>  14 宋光漢,方之棋.電氣實驗技術與測量.北京

51、:中國計量出版社</p><p>  15 施文康.檢測技術.北京:機械工業(yè)出版社,2002.1(189-207)</p><p><b>  附錄A:系統(tǒng)原理圖</b></p><p><b>  附錄B:程序清單</b></p><p>  #include <AT89X52.h>&

52、lt;/p><p>  #include "DS18B20.h" </p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char //宏定義</p><p>  #define SET P1_0

53、//定義溫度調整鍵</p><p>  #define DEC P1_1 //定義減少鍵</p><p>  #define ADD P1_2 //定義增加鍵</p><p>  #define JIAS P1_6 //定義加水鍵</p><p> 

54、 #define JIAR P1_7 //定義加熱鍵</p><p>  #define BEEP P3_4 //定義蜂鳴器</p><p>  #define S1 P3_7 //定義低水位</p><p>  #define S2 P3_6

55、 //定義高水位</p><p>  #define LED1 P1_3 //定義綠燈</p><p>  #define LED2 P1_4 //定義黃燈</p><p>  #define LED3 P1_5 //定義紅燈</p><p>  #

56、define JDQ1 P3_0 //定義加水繼電器</p><p>  #define JDQ2 P3_1 //定義加熱繼電器</p><p>  bit shanshuo_st; //閃爍間隔標志</p><p>  bit beep_st;

57、 //蜂鳴器間隔標志</p><p>  char flag=0;</p><p>  sbit D1=P0^6; //位選</p><p>  sbit D2=P0^4;</p><p>  sbit D3=P0^2;</p><p>  sbit D4=P0^0;</p>

58、<p>  sbit IO=P0^3; //數(shù)據(jù)口</p><p>  sbit CLK=P0^1; //控制數(shù)據(jù)時鐘</p><p>  sbit RST=P0^5; //使能端、復位端</p><p>  sbit s1=P0^7; //定義溫度時間切換鍵</

59、p><p>  sbit s2=P3^5; //定義時間調整鍵</p><p>  char knum=0,snum,fnum;</p><p>  /***********寫時分秒地址************/</p><p>  #define write_shi 0x84</p><

60、;p>  #define write_fen 0x82</p><p>  #define write_miao 0x80</p><p>  /***********讀時分秒地址************/</p><p>  #define read_shi 0x85</p><p>  #define read_fen 0x8

61、3</p><p>  #define read_miao 0x81</p><p>  char shi,fen,miao; //讀出數(shù)據(jù)存儲變量</p><p>  uchar d[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0};//不帶小數(shù)點</p><p>  

62、uchar dd[]={0x38,0xfb,0x42,0xb2,0xf1,0xb4,0x34,0xfa,0x30,0xb0};//帶小數(shù)點</p><p>  uchar x=0; //計數(shù)器</p><p>  signed char m; //溫度值全局變量</p><p> 

63、 uchar n; //溫度值全局變量</p><p>  uchar set_st=0; //狀態(tài)標志</p><p>  signed char shangxian=38; //上限報警溫度,默認值為38</p><p>  signed char xiaxia

64、n=5; //下限報警溫度,默認值為05</p><p>  Uchar code LEDData[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0};</p><p>  /*****延時子程序*****/</p><p>  void Delay(uint num)</p>

65、<p><b>  {</b></p><p>  while( --num );</p><p><b>  }</b></p><p>  /*****初始化定時器0*****/</p><p>  void InitTimer(void)</p><p>

66、<b>  { </b></p><p><b>  TMOD=0x1;</b></p><p><b>  TH0=0x4c;</b></p><p>  TL0=0x00; //50ms(晶振11.0592M)</p><p> 

67、 EA=1; //全局中斷開關</p><p><b>  TR0=1;</b></p><p>  ET0=1; //開啟定時器0</p><p><b>  }</b></p><p>  /*****

68、讀取溫度*****/</p><p>  void check_wendu(void)</p><p><b>  {</b></p><p>  uint a,b,c;</p><p>  c=ReadTemperature()-5; //獲取溫度值并減去DS18B20的溫漂誤差</p>&

69、lt;p>  a=c/100; //計算得到十位數(shù)字</p><p>  b=c/10-a*10; //計算得到個位數(shù)字</p><p>  m=c/10; //計算得到整數(shù)位</p><p>  if(m<0){m=0;n=0;}

70、 //設置溫度顯示上限</p><p>  if(m>99){m=99;n=9;} //設置溫度顯示上限 </p><p><b>  }</b></p><p>  /*****顯示開機初始化等待畫面*****/</p><p>  Disp_init() &l

71、t;/p><p><b>  {</b></p><p>  P2 = 0xf7; //顯示-</p><p><b>  D1 = 0;</b></p><p>  Delay(200);</p><p><b>  D2=0;&

72、lt;/b></p><p>  Delay(200); </p><p><b>  D3=0;</b></p><p>  Delay(200);</p><p><b>  D4=0;</b></p><p>  Delay(200);</p>

73、<p>  D1=1; //關閉顯示</p><p><b>  D2=1;</b></p><p><b>  D3=1;</b></p><p><b>  D4=1;</b></p><p><b>  }

74、</b></p><p>  /*****顯示溫度子程序*****/</p><p>  Disp_Temperature() //顯示溫度</p><p><b>  {</b></p><p>  P2 =LEDData[m%10]; //顯示個位</

75、p><p><b>  D1 = 1;</b></p><p><b>  D2 = 1;</b></p><p><b>  D3 = 0;</b></p><p><b>  D4 = 1;</b></p><p>  Delay(

76、300);</p><p>  P2 =LEDData[m/10]; //顯示十位</p><p><b>  D1 = 1;</b></p><p><b>  D2 = 1;</b></p><p><b>  D3 = 1;</b></p>

77、<p><b>  D4 = 0;</b></p><p>  Delay(300);</p><p>  D1= 1; //關閉顯示</p><p><b>  D2= 1;</b></p><p><b>  D3= 1;<

78、;/b></p><p><b>  D4= 1;</b></p><p><b>  }</b></p><p>  /*****顯示報警溫度子程序*****/</p><p>  Disp_alarm(uchar baojing)</p><p><b>

79、  {</b></p><p>  P2 =0x3c; //顯示C</p><p><b>  D1 = 0;</b></p><p><b>  D2 = 1;</b></p><p><b>  D3 = 1;</b><

80、;/p><p><b>  D4 = 1;</b></p><p>  Delay(200);</p><p>  P2 =LEDData[baojing%10]; //顯示個位</p><p><b>  D1 = 1;</b></p><p><b>  D

81、2 = 0;</b></p><p><b>  D3 = 1;</b></p><p><b>  D4 = 1;</b></p><p>  Delay(200);</p><p>  P2 =LEDData[baojing/10]; //顯示十位</p>&

82、lt;p><b>  D1 = 1;</b></p><p><b>  D2 = 1;</b></p><p><b>  D3 = 0;</b></p><p><b>  D4 = 1;</b></p><p>  Delay(200);<

83、;/p><p>  if(set_st==1)P2 =0x61;</p><p>  else if(set_st==2)P2 =0x3d; //上限H、下限L標示</p><p><b>  D1 = 1;</b></p><p><b>  D2 = 1;</b></p><

84、p><b>  D3 = 1;</b></p><p><b>  D4 = 0;</b></p><p>  Delay(200);</p><p>  D1 = 1; //關閉顯示</p><p><b>  D2 = 1;</b

85、></p><p><b>  D3 = 1;</b></p><p><b>  D4 = 1;</b></p><p><b>  }</b></p><p>  /*****報警子程序*****/</p><p>  void Alarm()

86、</p><p><b>  {</b></p><p>  if(x>=10){beep_st=~beep_st;x=0;}</p><p>  if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1)||(flag==1&&

87、beep_st==1))BEEP=1;</p><p>  else BEEP=0;</p><p>  if(flag==2){</p><p>  if(beep_st==1){BEEP=1;LED1=0;LED2=0;LED3=0;}</p><p>  else {BEEP=0;LED1=1;LED2=1;LED3=1;}</

88、p><p><b>  }</b></p><p>  if(m<xiaxian) JDQ2=0;</p><p>  if(m>=shangxian) JDQ2=1;</p><p><b>  }</b></p><p>  /*****DS1302讀數(shù)據(jù)****

89、*/</p><p>  uchar read_1302(uchar add)//讀函數(shù)</p><p><b>  {</b></p><p>  uchar i,date;</p><p>  RST=0; //禁止讀寫數(shù)據(jù)</p><p>  for(i=0;i

90、<8;i++)</p><p><b>  {</b></p><p><b>  RST=1;</b></p><p><b>  CLK=0;</b></p><p>  IO=add&0x01;</p><p><b>  

91、add>>=1;</b></p><p><b>  CLK=1;</b></p><p><b>  }</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>

92、;<b>  if(IO)</b></p><p>  date=date|0x80;</p><p><b>  else</b></p><p>  date=date|0x00;</p><p><b>  CLK=1;</b></p><p>

93、<b>  date>>=1;</b></p><p><b>  CLK=0;</b></p><p><b>  }</b></p><p><b>  RST=0;</b></p><p>  date=date/16*10+date%1

94、6; //進制轉換 16轉10進制</p><p>  IO=0; //數(shù)據(jù)讀完后,IO口必須為0,不然小時一直顯示</p><p>  return date;</p><p><b>  } </b></p><p>  /*****DS1302寫數(shù)據(jù)**

95、***/</p><p>  void write_1302(uchar add,uchar dat) //寫函數(shù)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  RST=0; //禁止讀寫數(shù)據(jù)</

96、p><p>  CLK=0; </p><p>  for(i=0;i<8;i++) //寫地址</p><p><b>  {</b></p><p>  RST=1; //允許讀寫數(shù)據(jù)</p><p><b>  CLK=0;</

97、b></p><p>  IO=add&0x01; </p><p><b>  add>>=1;</b></p><p><b>  CLK=1;</b></p><p><b>  }</b></p><p>  for(

98、i=0;i<8;i++) //寫數(shù)據(jù)</p><p><b>  {</b></p><p>  RST=1; //允許讀寫數(shù)據(jù)</p><p><b>  CLK=0;</b></p><p>  IO=dat&0x01; </p&g

99、t;<p><b>  dat>>=1;</b></p><p><b>  CLK=1;</b></p><p><b>  }</b></p><p><b>  RST=0;</b></p><p><b>  }

100、</b></p><p>  void init_1302() //初始化函數(shù) 設置時間</p><p><b>  {</b></p><p>  write_1302(0x8e,0x00);//保護取消,可以進行讀寫操作</p><p>  write_1302(write_

101、miao,0x56);</p><p>  write_1302(write_fen,0x49);</p><p>  write_1302(write_shi,0x14);</p><p>  write_1302(0x8e,0x80);//保護啟動,不能進行讀寫操作</p><p><b>  }</b>

102、</p><p>  void display(uchar shi,uchar fen,uchar miao) //顯示函數(shù)</p><p><b>  {</b></p><p>  if(knum==0)</p><p><b>  {</b></p><p>&

103、lt;b>  snum=30;</b></p><p><b>  fnum=30;</b></p><p><b>  }</b></p><p>  if(knum==1)</p><p><b>  {</b></p><p>&

104、lt;b>  fnum++;</b></p><p><b>  snum=30;</b></p><p><b>  }</b></p><p>  if(knum==2)</p><p><b>  {</b></p><p>&l

105、t;b>  snum++;</b></p><p><b>  fnum=30;</b></p><p><b>  }</b></p><p>  if(snum>=30)</p><p><b>  {</b></p><p>

106、;<b>  D1 = 1;</b></p><p><b>  D2 = 1;</b></p><p><b>  D3 = 1;</b></p><p>  D4 = 0; //位選</p><p>  P2=d[shi

107、/10];//段選</p><p>  Delay(200);</p><p>  P2=0XFF;//消隱</p><p>  if(miao%2==0)//小數(shù)點閃爍</p><p><b>  {</b></p><p><b>  D1

108、 = 1;</b></p><p><b>  D2 = 1;</b></p><p><b>  D3 = 0;</b></p><p><b>  D4 = 1;</b></p><p>  P2=dd[shi%10];</p><p>

109、  Delay(200);</p><p>  P2=0XFF;//消隱</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  D

110、1 = 1;</b></p><p><b>  D2 = 1;</b></p><p><b>  D3 = 0;</b></p><p><b>  D4 = 1;</b></p><p>  P2=d[shi%10];</p><p>

111、  Delay(200);</p><p>  P2=0XFF;//消隱</p><p><b>  }</b></p><p>  if(snum==60)</p><p><b>  snum=0;</b></p><p><b>  }<

112、;/b></p><p>  if(fnum>=30)</p><p><b>  {</b></p><p><b>  D1 = 1;</b></p><p><b>  D2 = 0;</b></p><p><b>  D3

113、 = 1;</b></p><p><b>  D4 = 1;</b></p><p>  P2=d[fen/10];</p><p>  Delay(200);</p><p>  P2=0XFF; //消隱</p><p><b>  D1 = 0;&

114、lt;/b></p><p><b>  D2 = 1;</b></p><p><b>  D3 = 1;</b></p><p><b>  D4 = 1;</b></p><p>  P2=d[fen%10];</p><p>  Delay

115、(200);</p><p>  P2=0XFF; //消隱</p><p>  if(fnum==60)</p><p><b>  fnum=0;</b></p><p><b>  }</b></p><p><b>  } </b>

116、;</p><p>  void read_sf()</p><p><b>  {</b></p><p>  shi=read_1302(read_shi);</p><p>  fen=read_1302(read_fen);</p><p>  miao=read_1302(read_mi

117、ao);</p><p>  display(shi,fen,miao);</p><p><b>  }</b></p><p>  /*****鍵盤掃描子程序*****/</p><p>  void keyscan() //按鍵掃描函數(shù)</p><p>

118、  { </p><p>  if(JIAS==0) //選擇按鍵按下</p><p><b>  { </b></p><p>  Delay(2000); //消抖 </p><

119、;p>  do{}while(JIAS==0);</p><p><b>  JDQ1=0;</b></p><p>  if(S1==0&&S2==0) {LED1=0;LED2=0;LED3=0;flag=0;JDQ1=1;} </p><p><b>  }</b></p><

120、;p>  if(JIAR==0) //選擇按鍵按下</p><p><b>  { </b></p><p>  Delay(2000); //消抖 </p><p>  do{}while(JIAR==0);</p>

121、<p><b>  JDQ2=0;</b></p><p>  if(m>=shangxian) JDQ2=1;</p><p><b>  }</b></p><p><b>  if(s1==0)</b></p><p>  { Delay(2000);

122、</p><p><b>  if(s1==0)</b></p><p><b>  {</b></p><p>  while(!s1)</p><p>  read_sf(); //顯示時間</p><p><b>

123、;  knum++;</b></p><p>  if(knum==1) </p><p><b>  { </b></p><p>  Disp_Temperature(); //顯示溫度</p><p><b>  }</b></p><

124、p><b>  }</b></p><p>  if(s2==0) //選擇按鍵按下</p><p><b>  {</b></p><p>  Delay(2000);</p><p><b>  if(s2==0)</b></p

125、><p><b>  {</b></p><p>  while(!s2)</p><p>  display(shi,fen,miao); //加上這句,按鍵按下就不會閃</p><p><b>  knum++;</b></p><p>  if(knum==1)

126、 //分閃爍</p><p><b>  {</b></p><p>  write_1302(0x8e,0x00);//保護取消</p><p>  write_1302(write_miao,0x80);</p><p><b>  }</b></p><p&g

溫馨提示

  • 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

提交評論