基于單片機的太陽能熱水器課程設計報告_第1頁
基于單片機的太陽能熱水器課程設計報告_第2頁
基于單片機的太陽能熱水器課程設計報告_第3頁
基于單片機的太陽能熱水器課程設計報告_第4頁
基于單片機的太陽能熱水器課程設計報告_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

-.zPAGE1摘要隨著人們生活水平的不斷提高,全球人口和經(jīng)濟規(guī)模的不斷增長,單片機控制無疑是人們追求的目標之一,它所給人帶來的方便也是不可否認的,其中,能源使用帶來的環(huán)境問題及其誘因逐漸為人們所認識,“低碳經(jīng)濟〞這一概念開場進入人們的視野。太陽能具有儲量的“無限性〞、存在的普遍性,并且?guī)缀醪划a(chǎn)生任何污染。鑒于此,人們在大力的開展太陽能產(chǎn)業(yè)。太陽能熱水器順應時代開展的要求,滿足人們對環(huán)保綠色產(chǎn)品的需求。在人類文明程度日益提高的今天,它是現(xiàn)代文明社會的最正確選擇。本文提出了一種新型的太陽能熱水器控制系統(tǒng)設計方案。本設計采用MSC-51系列單片機AT89S52作為中央處理器,采用DS1302實時時鐘,12864點陣式液晶顯示屏等模塊,完成時間溫度水位的顯示,以及時間和溫度的設定等功能。關鍵字:太陽能熱水器;單片機;實時時鐘;液晶顯示屏-.z目錄TOC\o"1-3"\h\u128861智能儀器儀表的簡介1326571.1智能儀器儀表簡介1146771.2智能儀器儀表的作用179021.3本課題的背景和意義141512系統(tǒng)設計簡介317912.1方案論證3287022.2總體設計46512.2.1太陽能熱水器的組成與工作原理4326002.2.2系統(tǒng)總體流程圖5216003太陽能熱水器控制系統(tǒng)的硬件設計317293.1主控芯片模塊6139433.1.1主控芯片模塊電路6173193.1.2主控芯片簡介7134363.2實時時鐘模塊278423.2.1實時時鐘模塊電路9265813.2.2實時時鐘簡介10323443.3溫度傳感器模塊1123753.3.1溫度傳感器模塊電路1130783.3.2溫度傳感器簡介12113503.4液晶顯示模塊14225703.4.1液晶顯示模塊電路14233153.4.2液晶顯示屏簡介15310013.5鍵盤輸入模塊17156104設計語言及軟件介紹1984294.1匯編語言介紹1925644.2wave6000軟件介紹19258215系統(tǒng)軟件設計20212855.1概述2021135.2系統(tǒng)程序設計模塊20132525.3初始化程序21124535.4按鍵檢測及處理程序22235415.5讀取溫度的程序24214085.6控制源程序2585695.7調(diào)試及仿真2929777結論3330163參考文獻34-.z1智能儀器儀表的簡介1.1智能儀器儀表簡介儀器儀表〔英文:instrumentation〕儀器儀表是用以檢出、測量、觀察、計算各種物理量、物質(zhì)成分、物性參數(shù)等的器具或設備。真空檢漏儀、壓力表、測長儀、顯微鏡、乘法器等均屬于儀器儀表。廣義來說,儀器儀表也可具有自動控制、報警、信號傳遞和數(shù)據(jù)處理等功能,例如用于工業(yè)生產(chǎn)過程自動控制中的氣動調(diào)節(jié)儀表,和電動調(diào)節(jié)儀表,以及集散型儀表控制系統(tǒng)也皆屬于儀器儀表。1.2智能儀器儀表的作用隨著全球人口和經(jīng)濟規(guī)模的不斷增長,能源使用帶來的環(huán)境問題及其誘因逐漸為人們所認識,“低碳經(jīng)濟〞這一概念開場進入人們的視野。人們在大力的開展太陽能產(chǎn)業(yè)。能源問題將更為突出:①從長遠來看,全球已探明的石油儲量只能用到2020年,天然氣也只能延續(xù)到2040年左右,即使儲量豐富的煤炭資源也只能維持二三百年。②環(huán)境污染③溫室效應引起全球氣候變化。因此,人類在解決上述能源問題,實現(xiàn)可持續(xù)開展,只能依靠科技進步,大規(guī)模地開發(fā)利用可再生干凈能源。太陽能具有:①儲量的“無限性〞太陽每秒鐘放射的能量大約是1.6×10的23次方kW,一年內(nèi)到達地球外表的太陽能總量折合標準煤共約1.892×10的13次方千億t。②太陽能對于地球上絕大多數(shù)地區(qū)具有存在的普遍性,可就地取用。在世界*圍內(nèi),太陽能熱水器技術已很成熟,并已形成行業(yè),正在以優(yōu)良的性能不斷地沖擊電熱水器市場和燃氣熱水器市場。2000年太陽能熱水器取代47000套家用電熱水器;2000年日本太陽能熱水器的擁有量將翻一番;以色列更是明文規(guī)定,所有新建房屋必須配備太陽能熱水器。目前,我國是世界上太陽能熱水器生產(chǎn)量和銷售量最大的國家。然而,目前市場上太陽能熱水器的控制系統(tǒng)大多存在功能單一、操作復雜、控制不方便等問題,很多控制器具有溫度和水位顯示功能,卻不具有溫度控制功能,致使熱水器陰天的時候不能方便使用。即使熱水器具有輔助加熱功能,也可能由于加熱時間不能控制而產(chǎn)生過燒,從而浪費電能。1.3本課題的背景和意義資源是社會經(jīng)濟開展的物質(zhì)根底,經(jīng)濟愈開展,對資源的依賴性愈強。許多資源〔如煤、石油、天然氣等〕是不可再生的,而且在利用過程中給人類生存環(huán)境帶來極大污染,人類繁衍生息的物質(zhì)和環(huán)境根底受到嚴峻挑戰(zhàn)。加強清潔、可再生資源的開發(fā)利用,已引起全世界的普遍重視。太陽能作為一種取之不盡、用之不竭的可再生資源,有節(jié)能、環(huán)保、平安和永續(xù)利用等優(yōu)點,理應成為開發(fā)利用的首選。其中太陽能熱水器作為家庭生活用品,其開發(fā)利用在我國已走過了二十多年的歷程,生產(chǎn)技術成熟,具有明顯優(yōu)點:〔一〕從節(jié)能環(huán)保的角度講,使用太陽能熱水器不會對環(huán)境造成污染,同時為國家節(jié)約了大量能源,社會效益明顯,是國家重點推廣工程,使用前景廣闊?!捕程柲軣崴鞯氖褂脡勖^長,使用太陽能熱水器經(jīng)濟實惠。假設使用合理,其壽命可達15年甚至更長。據(jù)測算,使用1平方米太陽能熱水器,相當于每年節(jié)約310度電。太陽能熱水器的費用只有燃氣熱水器的七分之一,電熱水器的六分之一。購置太陽能熱水器一次性投資3000元左右,使用5至6年就可實現(xiàn)與其熱水器的支出比照平衡。按照裝置壽命15年計算,其經(jīng)濟效益是十清楚顯的?!踩程柲軣崴骷療嵝Ч?,集熱時間更長。只要陽光能照射到的地方,就可以使用太陽能熱水器,即使在高寒地區(qū)一年四季也可以正常使用。在我國**、**、**等地,太陽能熱水器的研發(fā)和生產(chǎn)已形成規(guī)模,應用太陽能熱水器的場所也由家居使用擴展到醫(yī)院、學校、賓館、飯店、游泳池、洗浴場所等。2系統(tǒng)設計簡介2.1方案論證〔1〕方案一在單片機學習課程中,就遇到過一種方案,稱其為方案一。它通過三極管的導通截止特性來判斷液位的位置,并且可以通過按鍵切換檢測壓力。但是在過程中只能檢測三點,雖然可以擴展,但是占了太多的I/O口,容易造成資源的浪費。而且僅顯示單元就占用了12個I/O口,同樣屬于資源浪費。在電機電路設計方面,方案一采用的三極管的導通截止來控制點擊的正轉(zhuǎn)與反轉(zhuǎn),雖然設計簡單,但是過多的使用三極管以及二極管類的元器件,也會使本錢升高。而且,既然是太陽能熱水器的自動控制裝置,則必不可少的就是溫度的檢測,而方案一中卻忽略了這點,造成了最大的殘缺。〔2〕方案二方案二主要解決了方案一中資源浪費及過于使用分立元件的缺陷。在液位檢測方面,通過利用兩片CD4051芯片,它相當于一個單刀八擲開關,當INH制止端為低電平即“0〞時,開關接通哪一通道由輸入的3位地址碼ABC來決定。這樣就簡單的解決了16個點檢測的問題,并且在最大程度上減少了I/O口的使用。僅使用了8個I/O口即可控制16個點的檢測,如果是方案一,則需要使用16個I/O口。而且在方案二中,使用目前比擬流行51系列單片機AT89S52。AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52在眾多嵌入式控制應用系統(tǒng)中的優(yōu)勢明顯。在方案二中還解決了方案一種不能檢測溫度缺點,使用了先進的DS18B20芯片,DS18B20數(shù)字溫度傳感器是Dallas公司生產(chǎn)的1-Wire,即單總線器件,具有線路簡單、體積小的特點。因此用他組成一個測溫系統(tǒng),具有線路簡單,在1根通信線可以掛很多這樣的數(shù)字溫度傳感器,十分方便。〔3〕方案選擇通過上述兩個方案的比擬,便能發(fā)現(xiàn)方案二設計的電路比方案一的電路有極大的優(yōu)勢,性能全面,使用方便,而且簡單、穩(wěn)定。應選擇方案二。2.2總體設計2.2.1太陽能熱水器的組成與工作原理1-集熱器2-下降水管3-循環(huán)水管4-補給水箱5-上升水管6-自來水管7-熱水出水管圖2.1熱水器的組成熱水器主要由集熱器、循環(huán)管道和水箱等組成,圖中為典型的熱水器裝置圖。圖中集熱器1按最正確傾角放置,下降水管2的一端與循環(huán)水箱3的下部相連,另一端與集熱器1的下集管接通。上升水管5與循環(huán)水箱3上部相連,另一端與集熱器1的上集管相接。補給水箱4供應循環(huán)水箱3所需的冷水。集熱器吸收太陽輻射后,集熱器內(nèi)溫度上升,水溫也隨之升高。水溫升高后,水的比重減輕,便經(jīng)上升水管進入循環(huán)水箱上部。而循環(huán)水箱下部的冷水比重較大,就由水箱下流到集熱器下方,在集熱器內(nèi)受熱后又上升。這樣不斷對流循環(huán),水溫逐漸提高,直到集熱器吸收的熱量與散失的熱量相平衡時,水溫不再升高。這種熱水利用循環(huán)加熱的原理,因此又稱循環(huán)熱水器。集熱器是一種利用溫室效應,將太陽能輻射轉(zhuǎn)換為熱能的裝置,該裝置與一般熱水交換器不一樣,熱交換器通常只是液體到液體,或是液體到氣體的熱交換過程,而平板行集熱器時直接將太陽輻射傳給液體或氣體,是一個復雜的傳熱過程。平板型集熱器構造形式很多,世界上已實用的集熱器就有直管式、瓦楞式、扁管式、鋁翼式等二十多種。2.2.2系統(tǒng)總體流程圖開場初始化掃描鍵盤,是否有按鍵開場初始化掃描鍵盤,是否有按鍵N調(diào)用鍵盤處理子程序Y讀取水位信息和水箱溫度調(diào)用顯示子程序顯示水溫時間圖2.2系統(tǒng)總體流程圖3太陽能熱水器控制系統(tǒng)的硬件設計3.1主控芯片模塊3.1.1主控芯片模塊電路單片機系統(tǒng)由AT89S52和一定功能的外圍電路組成,包括為單片機提供復位電壓的復位電路,提供系統(tǒng)頻率的晶振。這局部電路主要負責程序的存儲和運行。對外接電容的值雖然沒有嚴格的要求,但電容的大小會影響振蕩器頻率的上下、諧振器的穩(wěn)定性、起振的快速性和溫度的穩(wěn)定性。晶體可在1.2MHz~12MHz之間任選,電容C1和C2的典型值在20pF~100pF之間選擇,但在60pF~70pF時振蕩器具有較高的頻率穩(wěn)定性。典型值通常選擇為30pF左右,但本電路采用30pF。AT89S52的復位是由外部的復位電路來實現(xiàn)的。復位電路通常采用上電自動復位和按鈕復位兩種方式。本設計中所用到的是上電按鈕復位,如圖3.1所示。圖3.1單片機系統(tǒng)3.1.2主控芯片簡介AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用ATMEL公司高密度非易失性存儲器技術制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應用系統(tǒng)提供高靈活、有效的解決方案。AT89S52具有以下標準功能:8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計數(shù)器,一個6向量2級中斷構造,全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU停頓工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結,單片機一切工作停頓,直到下一個中斷或硬件復位為止。8位微控制器8K字節(jié)在系統(tǒng)可編程FlashAT89S52。圖3.2為AT89S52的引腳圖圖3.2AT89S52的引腳圖AT89S52引腳功能說明如下:VCC:電源電壓GND:地P0口:P0口是一個8位漏極開路的雙向I/O口,也即地址/數(shù)據(jù)總線復用口。作為輸出口,每位能驅(qū)動8個TTL邏輯電平。對P0端口寫“1〞時,引腳用作高阻抗輸入。當外部程序和數(shù)據(jù)存儲器時,P0口也被作為低8位地址/數(shù)據(jù)復用。在這種模式下,P0內(nèi)部上拉電阻被激活。在flash編程時,P0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。P1口:P1口是一個具有內(nèi)部上拉電阻的8位雙向I/O口,P1輸出緩沖器能驅(qū)動〔吸收或輸出電流〕4個TTL邏輯門電平。對P1端口寫“1〞時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流〔TTL〕。此外,P1.0和P1.2分別作定時器/計數(shù)器2的外部計數(shù)輸入〔P1.0/T2〕和時器/計數(shù)器2的觸發(fā)輸入〔P1.1/T2E*〕,具體如表3-1所示。在flash編程和校驗P1口接收低8位地址字節(jié)。端口引腳第二功能P1.0T2〔定時器/計數(shù)器T2的外部計數(shù)輸入〕,時鐘輸出P1.1T2E*〔定時器/計數(shù)器T2的捕捉/重載觸發(fā)信號和方向控制〕P1.5MOSI〔在系統(tǒng)編程用〕P1.6MISO〔在系統(tǒng)編程用〕P1.7SCK〔在系統(tǒng)編程用〕表3-1P1口第二功能P2口:P2口是一個具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動4個TTL邏輯電平。對P2端口寫“1〞時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流〔IIL〕。在外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器〔例如執(zhí)行MOV*DPTR〕時,P2口送出高八位地址。在這種應用中,P2口使用很強的內(nèi)部上拉發(fā)送1。在使用8位地址〔如MOV*RI〕外部數(shù)據(jù)存儲器時,P2口輸出P2鎖存器的內(nèi)容。在flash編程和校驗時,P2口也接收高8位地址字節(jié)和一些控制信號。端口引腳第二功能端口引腳第二功能P3.0R*D(串行輸入口)P3.4TO(定時/計數(shù)器0)P3.1T*D(串行輸出口)P3.5T1(定時/計數(shù)器1)P3.2INTO(外中斷0)P3.6WR(外部數(shù)據(jù)存儲器寫選通)P3.3INT1(外中斷1)P3.7RD(外部數(shù)據(jù)存儲器讀選通)表3-2P3口的第二功能此外,P3口還接收一些用于FLASH閃存編程和程序校驗的控制信號。RST——復位輸入。當振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將是單片機復位。WDT溢出將使該引腳輸出高電平,設置SFRAU*R的DISRTO位〔地址8EH〕可翻開或關閉該功能。DISRTO位缺省為RESET輸出高電平翻開狀態(tài)。ALE/PROG——當外部程序存儲器或數(shù)據(jù)存儲器時,ALE〔地址鎖存允許〕輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。如有必要,可通過對特殊功能存放器〔SFR〕區(qū)中的8EH單元的D0位置位,可制止ALE操作。該位置位后,只有一條MOV*和MOVC指令才能將ALE激活。此外,該引腳會被微弱拉高,單片機執(zhí)行外部程序時,應設置ALE制止位無效。PSEN——程序儲存允許〔PSEN〕輸出是外部程序存儲器的讀選通信號,當AT89C52由外部程序存儲器取指令〔或數(shù)據(jù)〕時,每個機器周期兩次PSEN有效,即輸出兩個脈沖,在此期間,當外部數(shù)據(jù)存儲器,將有兩次有效的PSEN信號。EA/VPP——外部允許,欲使CPU僅外部程序存儲器〔地址為0000H-FFFFH〕,EA端必須保持低電平〔接地〕。需注意的是:如果加密位LB1被編程,復位時內(nèi)部會鎖存EA端狀態(tài)。如EA端為高電平〔接Vcc端〕,CPU則執(zhí)行內(nèi)部程序存儲器的指令。FLASH存儲器編程時,該引腳加上+12V的編程允許電源Vpp,當然這必須是該器件是使用12V編程電壓Vpp。*TAL1:振蕩器反相放大器及內(nèi)部時鐘發(fā)生器的輸入端。*TAL2:振蕩器反相放大器的輸出端。3.2實時時鐘模塊3.2.1實時時鐘模塊電路從古代的滴漏更鼓到近代的機械鐘,從電子表到目前的數(shù)字時鐘,為了準確的測量和記錄時間,人們一直在努力改良計時工具。鐘表的數(shù)字化,大力推動了計時的準確性和可靠性。在單片機構成的裝置中,實時時鐘是必不可少的部件。目前常用的實時時鐘,很多采用單片機的中斷效勞來實現(xiàn),這種方式一方面需要采用計數(shù)器,占用硬件資源,另一方面需要設置中斷、查詢等,同樣消耗單片機的資源,而且*些測控系統(tǒng)可能不允許;有的則使用并行接口的時鐘芯片,如MC146818、DS12887等,它們雖然能滿足單片機系統(tǒng)對實時時鐘的要求,但是這些芯片與單片機接口復雜,占用地址、數(shù)據(jù)總線多,芯片體積大,占用空間多,給其它設計帶來諸多不便。本設計選取串行接口時鐘芯片DS1302與單片機同步通信構成數(shù)字時鐘電路,如圖3.3。其簡單的三線接口能為單片機節(jié)省大量資源,DS1302的后背電源及對后背電源進展涓細電流充電的能力保證電路斷電后仍能保存時間和數(shù)據(jù)信息等。這些優(yōu)點解決了目前常用的實時時鐘所無法解決的問題。該時鐘電路強大的功能和優(yōu)越的性能,在很多領域的應用中,尤其是*些自動化控制、長時間無人看守的測控系統(tǒng)等對時鐘準確性和可靠性有較高要求的場合,具有很高的使用價值。圖3.3DS1302與單片機接口電路3.2.2實時時鐘簡介DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘芯片,它可以對年、月、日、周日、時、分、秒進展計時,且具有閏年補償功能,工作電壓寬達2.5~5.5V。時鐘可工作在24小時格式或12小時〔AM/PM〕格式。DS1302與單片機的接口使用同步串行通信,僅用3條線與之相連接??刹捎靡淮蝹魉鸵粋€字節(jié)或突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM存放器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進展細電流充電的能力。DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當Vcc2小于Vcc1時,DS1302由Vcc1供電。*1和*2是振蕩源,外接32.768kHz晶振。RST是復位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位存放器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進展操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc>2.0V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細說明。SCLK為時鐘輸入端。控制字節(jié)的最高有效位〔位7〕必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位〔位0〕如為0表示要進展寫操作,為1表示進展讀操作,控制字節(jié)總是從最低位開場輸出。DS1302的復位引腳:通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送.RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位存放器;其次,RST提供了終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進展操作。如果在傳送過程中置RST為低電平,則會終止此次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc≥2.5V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。在控制指令字輸入后的下一個SCLK時鐘的上升沿時數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開場。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位至高位7。DS1302共有12個存放器,其中有7個存放器與日歷、時鐘相關,存放的數(shù)據(jù)位為BCD碼形式。其日歷、時間存放器及其控制字見表3-3。存放器名命令字取值*圍各位內(nèi)容寫操作讀操作76543210秒存放器80H81H00--59CH10SECSEC分存放器82H83H00--59010MINMIN時存放器84H85H01-12或00-2312/24010HRHR日存放器86H87H01-28,29,30,310010DATEDATE月存放器88H89H01--1200010MMONTH周存放器8AH8BH01--0700000DAY年存放器8CH8DH00--9910YEARYEAR表3-3DS1302的日歷、時鐘存放器及其控制字此外,DS1302還有年份存放器、控制存放器、充電存放器、時鐘突發(fā)存放器及與RAM相關的存放器等。時鐘突發(fā)存放器可一次性順序讀寫除充電存放器外的所有存放器的內(nèi)容。DS1302與RAM相關的存放器分為兩類,一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H--FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;再一類為突發(fā)方式下的RAM存放器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH〔寫〕、FFH〔讀〕。3.3溫度傳感器模塊3.3.1溫度傳感器模塊電路基于DS18B20多點溫度測量系統(tǒng)以AT89C51為中心器件,以KEIL為系統(tǒng)開發(fā)平臺,用C語言進展程序設計,以PROTEUS作為仿真軟件設計而成的。DS18B20是智能溫度傳感器,它的輸入/輸出采用數(shù)字量,以單總線技術,接收主機發(fā)送的命令,根據(jù)DS18B20內(nèi)部的協(xié)議進展相應的處理,將轉(zhuǎn)換的溫度以串口發(fā)送給主機。主機按照通信協(xié)議用一個IO口模擬DS18B20的時序,發(fā)送命令〔初始化命令、ROM命令、功能命令〕給DS18B20,并讀取溫度值,在內(nèi)部進展相應的數(shù)值處理,用圖形液晶模塊顯示各點的溫度。在系統(tǒng)啟動之時,可以通過4×4鍵盤設置各點溫度的上限值,當*點溫度超過設置值時,報警器開場報警,從而實現(xiàn)了對各點溫度的實時監(jiān)控。每個DS18B20有自己的序列號,因此本系統(tǒng)可以在一根總線上掛接了4個DS18B20,通過CRC校驗,對各個DS18B20的ROM進展尋址,地址符合的DS18B20才作出響應,接收主機的命令,向主機發(fā)送轉(zhuǎn)換的溫度。采用這種DS18B20尋址技術,使系統(tǒng)硬件電路更加簡單,圖3.4所示。圖3.4系統(tǒng)硬件電路3.3.2溫度傳感器簡介DS18B20數(shù)字溫度計是DALLAS公司生產(chǎn)的1-Wire,即單總線器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統(tǒng),具有線路簡單,在一根通信線,可以掛很多這樣的數(shù)字溫度計,十分方便。DS18B20產(chǎn)品的特點:只要求一個端口即可實現(xiàn)通信。在DS18B20中的每個器件上都有獨一無二的序列號。實際應用中不需要外部任何元器件即可實現(xiàn)測溫。測量溫度*圍在-55.C到+125.C之間。數(shù)字溫度計的分辨率用戶可以從9位到12位選擇。內(nèi)部有溫度上、下限告警設置。其引腳功能描述見表3-4。序號名稱引腳功能描述1GND地信號2DQ數(shù)字輸入輸出引腳,開漏單總線接口引腳,當使用寄生電源時,可向電源提供電源3VDD可選擇的VDD引腳,當工作于寄生電源時,該引腳必須接地表3-4DS18B20詳細引腳功能描述64位ROM存儲器件獨一無二的序列號。暫存器包含兩字節(jié)〔0和1字節(jié)〕的溫度存放器,用于存儲溫度傳感器的數(shù)字輸出。暫存器還提供一字節(jié)的上線警報觸發(fā)〔TH〕和下線警報觸發(fā)〔TL〕存放器〔2和3字節(jié)〕,和一字節(jié)的配置存放器〔4字節(jié)〕,使用者可以通過配置存放器來設置溫度轉(zhuǎn)換的精度。暫存器的5、6和7字節(jié)器件內(nèi)部保存使用。第八字節(jié)含有循環(huán)冗余碼〔CRC〕。DS18B20加電后,處在空閑狀態(tài)。要啟動溫度測量和模擬到數(shù)字的轉(zhuǎn)換,處理器須向其發(fā)出ConvertT[44h]命令;轉(zhuǎn)換完后,DS18B20回到空閑狀態(tài)。溫度數(shù)據(jù)是以帶符號位的16-bit補碼存儲在溫度存放器中的。符號位說明溫度是正值還是負值,正值時S=0,負值時S=1。DS18B20必須嚴格遵守這一命令序列,如果喪失任何一步或序列混亂,DS18B20都不會響應主機〔除了SearchROM和AlarmSearch這兩個命令,在這兩個命令后,主機都必須返回到第一步〕。a.初始化:DS18B20所有的數(shù)據(jù)交換都由一個初始化序列開場。由主機發(fā)出的復位脈沖和跟在其后的由DS18B20發(fā)出的應答脈沖構成。當DS18B20發(fā)出響應主機的應答脈沖時,即向主機說明它已處在總線上并且準備工作。b.ROM命令:ROM命令通過每個器件64-bit的ROM碼,使主機指定*一特定器件〔如果有多個器件掛在總線上〕與之進展通信。DS18B20的ROM如表3-5所示,每個ROM命令都是8bit長。指令協(xié)議功能讀ROM33H讀DS18B20中的編碼(即64位地址)符合ROM55H發(fā)出此命令后,接著發(fā)出64位ROM編碼,單總線上與該編碼相對應的DS18B20,使之作出響應,為下一步對該DS18B20的讀寫作準備搜索ROM0F0H用于確定掛接在同一總線上DS18B20的個數(shù)和識別64位ROM地址,為操作各器件作好準備跳過ROM0CCH忽略64位ROM地址,直接向DS18B20V溫度轉(zhuǎn)換命令,適用于單個DS18B20工作告警搜索命令0ECH執(zhí)行后,只有溫度超過廟宇值上限或下限的片子才做出響應溫度轉(zhuǎn)換44H啟動DS18B20進展溫度轉(zhuǎn)換,轉(zhuǎn)換時間最長為500ms(典型為200ms),結果豐入內(nèi)部9字節(jié)RAM中讀暫存器BEH讀內(nèi)部RAM中9字節(jié)的內(nèi)容寫暫存器4EH發(fā)出向內(nèi)部RAM的第3、4字節(jié)寫上、下溫度數(shù)據(jù)命令,緊該溫度命令之后,傳達兩字節(jié)的數(shù)據(jù)復制暫存器48H將RAM中第3、4字內(nèi)容復制到E2PROM中重調(diào)E2PROM0B8H將E2PROM中內(nèi)容恢復到RAM中的第3、4字節(jié)讀供電方式0B4H讀DS18B20的供電模式,寄生供電時DS18B20發(fā)送“0〞,外部供電時DS18B20發(fā)送“1〞表3-5ROM命令3.4液晶顯示模塊3.4.1液晶顯示模塊電路液晶顯示模塊以其微功耗、體積小、顯示內(nèi)容豐富、模塊化、接口電路簡單等諸多優(yōu)點得到廣泛應用。液晶顯示模塊分字符型和點陣型兩種,前者只能顯示常用的字符,點陣型液晶顯示模塊除顯示字符外還能顯示各種圖形和漢字。如圖3.5所示,為液晶顯示屏與單片機的連接電路圖。3.5液晶顯示屏與單片機的連接電路3.4.2液晶顯示屏簡介12864是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊;其顯示分辨率為128×64,內(nèi)置8192個16*16點漢字,和128個16*8點ASCII字符集。該模塊靈活的接口方式和簡單、方便的操作指令,可構成全中文人機交互圖形界面??梢燥@示8×4行16×16點陣的漢字??赏瓿蓤D形顯示。電壓低功耗是其又一顯著特點。由該模塊構成的液晶顯示方案與同類型的圖形點陣液晶顯示模塊相比,不管硬件電路構造或顯示程序都要簡潔得多,且該模塊的價格也略低于一樣點陣的圖形液晶模塊。圖3.6LCD構造尺寸根本特性:低電源電壓〔VDD:+3.0--+5.5V〕顯示分辨率:128×64點內(nèi)置漢字字庫,提供8192個16×16點陣漢字(簡繁體可選)內(nèi)置128個16×8點陣字符2MHZ時鐘頻率顯示方式:STN、半透、正顯驅(qū)動方式:1/32DUTY,1/5BIAS視角方向:6點背光方式:側(cè)部高亮白色LED,功耗僅為普通LED的1/5—1/10通訊方式:串行、并口可選內(nèi)置DC-DC轉(zhuǎn)換電路,無需外加負壓無需片選信號,簡化軟件設計工作溫度:0℃-+55℃,存儲溫度:-20℃-+60℃控制器接口信號說明:如表3-6,3-7RSR/W功能說明LLMPU寫指令到指令暫存器〔IR〕LH讀出忙標志〔BF〕及地址記數(shù)器〔AC〕的狀態(tài)HLMPU寫入數(shù)據(jù)到數(shù)據(jù)暫存器〔DR〕HHMPU從數(shù)據(jù)暫存器〔DR〕中讀出數(shù)據(jù)表3-6RS和R/W的配合選擇決定控制界面的4種模式E狀態(tài)執(zhí)行動作結果高——>低I/O緩沖——>DR配合/W進展寫數(shù)據(jù)或指令高DR——>I/O緩沖配合R進展讀數(shù)據(jù)或指令低/低——>高無動作表3-7E信號忙標志:BF。BF標志提供內(nèi)部工作情況.BF=1表示模塊在進展內(nèi)部操作,此時模塊不承受外部指令和數(shù)據(jù).BF=0時,模塊為準備狀態(tài),隨時可承受外部指令和數(shù)據(jù)。利用STATUSRD指令,可以將BF讀到DB7總線,從而檢驗模塊之工作狀態(tài)。字型產(chǎn)生ROM〔CGROM〕:字型產(chǎn)生ROM〔CGROM〕提供8192個此觸發(fā)器是用于模塊屏幕顯示開和關的控制。DFF=1為開顯示〔DISPLAYON),DDRAM的內(nèi)容就顯示在屏幕上,DFF=0為關顯示〔DISPLAYOFF)。DFF的狀態(tài)是指令DISPLAYON/OFF和RST信號控制的。顯示數(shù)據(jù)RAM〔DDRAM〕:模塊內(nèi)部顯示數(shù)據(jù)RAM提供64×2個位元組的空間,最多可控制4行16字〔64個字〕的中文字型顯示,當寫入顯示數(shù)據(jù)RAM時,可分別顯示CGROM與CGRAM的字型;此模塊可顯示三種字型,分別是半角英數(shù)字型(16*8)、CGRAM字型及CGROM的中文字型,三種字型的選擇,由在DDRAM中寫入的編碼選擇,在0000H—0006H的編碼中〔其代碼分別是0000、0002、0004、0006共4個〕將選擇CGRAM的自定義字型,02H—7FH的編碼中將選擇半角英數(shù)字的字型,至于A1以上的編碼將自動的結合下一個位元組,組成兩個位元組的編碼形成中文字型的編碼BIG5〔A140—D75F〕,GB〔A1A0-F7FFH〕。字型產(chǎn)生RAM(CGRAM):字型產(chǎn)生RAM提供圖象定義(造字)功能,可以提供四組16×16點的自定義圖象空間,使用者可以將內(nèi)部字型沒有提供的圖象字型自行定義到CGRAM中,便可和CGROM中的定義一樣地通過DDRAM顯示在屏幕中。地址計數(shù)器AC:地址計數(shù)器是用來貯存DDRAM/CGRAM之一的地址,它可由設定指令暫存器來改變,之后只要讀取或是寫入DDRAM/CGRAM的值時,地址計數(shù)器的值就會自動加一,當RS為“0〞時而R/W為“1〞時,地址計數(shù)器的值會被讀取到DB6——DB0中。光標/閃爍控制電路:此模塊提供硬體光標及閃爍控制電路,由地址計數(shù)器的值來指定DDRAM中的光標或閃爍位置。3.5鍵盤輸入模塊一般具有人機對話的單片機系統(tǒng)少不了會有鍵盤。本設計采用三個按鍵,最正確的接口方案是獨立式接法,即每一個I/O口上只接一個按鍵,按鍵的另一端接地。獨立式鍵盤的實現(xiàn)方法是利用單片機I/O口讀取口的電平上下來判斷是否有鍵按下。我們將按鍵的一端接地,另一端接一個I/O口,程序開場時將此I/O口置于高電平,平時無按鍵按下時I/O口保護高電平。當有鍵按下時,此I/O口與地短路迫使I/O口為低電平。按鍵釋放后,與單片機連接的上拉電阻使I/O口仍然保持高電平。本設計所要做的就是在程序中查詢此I/O口的電平狀態(tài)就可以了解是否有按鍵動作了。值得注意的是,本設計在用單片機對鍵盤處理的時候涉及到了一個重要的過程,那就是鍵盤的去抖動。這里說的抖動是機械的抖動,是當鍵盤在未按到按下的臨界區(qū)產(chǎn)生的電平不穩(wěn)定正?,F(xiàn)象,并不是我們在按鍵時通過注意可以防止的。這種抖動一般在10~200毫秒之間,這種不穩(wěn)定電平的抖動時間對于人來說太快了,而對于時鐘是微秒級的單片機而言則是漫長的。為了提高系統(tǒng)的穩(wěn)定性,必須去除或避開它。此處我采用軟件去抖動,實現(xiàn)方法是先查詢按鍵當有低電平出現(xiàn)時立即延時10~200毫秒以避開抖動,延時完畢再讀一次I/O口的值。按鍵分工,從左至右依次為1、2、3號按鍵,一號鍵模式鍵,二號三號鍵為加減鍵。圖3.7鍵盤接口電路-.z4設計語言及軟件介紹4.1匯編語言介紹匯編語言是一種功能很強的程序設計語言,也是利用計算機所有硬件特性并能直接控制硬件的語言。匯編語言〞作為一門語言,對應于高級語言的編譯器,需要一個“匯編器〞來把匯編語言原文件匯編成機器可執(zhí)行的代碼。4.2wave6000軟件介紹這個軟件是**偉福公司的單片機開發(fā)軟件,一般就是用在C51單片機。不需要購置仿真器,使用軟件模擬器就可以了,使用很方便的。也支持KEILC,但最好不要在WAVE內(nèi)使用C,如果想用C編寫,還是用KEILC方便。WAVE6000編譯軟件,采用中文界面。用戶源程序大小不受限制,有豐富的窗口顯示方式,能夠多方位、動態(tài)地展示程序的執(zhí)行過程。其工程管理功能強大,可使單片機程序化大為小,化繁為簡,便于管理。另外,其書簽、斷點管理功能以及外設管理功能等為51單片機的仿真帶來極大的便利。5系統(tǒng)軟件設計5.1概述單片機開發(fā)中除必要的硬件外,同樣離不開軟件,本系統(tǒng)的軟件編程設計是在Keil軟件環(huán)境中完成的。我們寫的C語言、匯編語言源程序要變?yōu)镃PU可以執(zhí)行的機器碼有兩種方法,一種是手工匯編,另一種是機器匯編,目前已極少使用手工匯編的方法了。機器匯編是通過匯編軟件將源程序變?yōu)闄C器碼,用于MCS-51單片機的匯編軟件有早期的A51,隨著單片機開發(fā)技術的不斷開展,從普遍使用匯編語言到逐漸使用高級語言開發(fā),單片機的開發(fā)軟件也在不斷開展,Keil軟件是目前最流行開發(fā)51系列單片機的軟件,這從近年來各仿真機廠商紛紛宣布全面支持Keil即可看出。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境〔uVision〕將這些部份組合在一起。掌握這一軟件的使用對于使用51系列單片機的愛好者來說是十分必要的,如果使用C語言編程,則Keil幾乎就是不二之選。即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強大的軟件仿真調(diào)試工具也會令人事半功倍。KeilC51是美國KeilSoftware公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、構造性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。

KeilC51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到KeilC51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能表達高級語言的優(yōu)勢。5.2系統(tǒng)程序設計模塊本課題設計的太陽能熱水器控制系統(tǒng)的軟件程序設計主要由〔1〕初始化程序,〔2〕掃描按鍵程序,〔3〕按鍵處理子程序,〔4〕讀取水位信息、水箱溫度和時間程序,〔6〕調(diào)用顯示子程序,六個局部組成。系統(tǒng)總體流程圖如圖5.1所示。開場開場初始化掃描鍵盤,是否有按鍵N調(diào)用鍵盤處理子程序Y讀取水位信息和水箱溫度調(diào)用顯示子程序顯示水溫時間圖5.1系統(tǒng)總體流程圖5.3初始化程序太陽能熱水器控制系統(tǒng)在接通電源后,首先要對系統(tǒng)進展初始化。初始化的過程包括啟動DS1302,啟動12864,對12864進展清屏。初始化流程圖如下:初始化開場初始化開場啟動DS1302啟動12864清屏圖5.2系統(tǒng)初始化流程圖voidstart(void)//初始化函數(shù){unsignedchari;set_time(0*8e,0*00);//取消寫保護set_time(0*80,0*00);//啟動時鐘set_time(0*84,0*00);//設置24小時模式set_time(0*90,0*a5);//時鐘時鐘充電模式set_time(0*8e,0*80);//啟動寫保護RES1=0;RES1=1;dis_write_cmd(0*af);//啟動12864clean();//清屏5.4按鍵檢測及處理程序在太陽能熱水器初始化完成之后,系統(tǒng)便會進入鍵盤掃描狀態(tài),此狀態(tài)下,主控芯片AT89S52會不斷掃描是否有鍵按下,即等待用戶輸入。在檢測到有鍵按下后,根據(jù)按下的次數(shù)〔按一下設置“分〞,按兩下設置“時〞,三下設置“星期〞,以此類推〕,在運用“加〞“減〞分別設置。按鍵檢測及處理流程圖如下圖:〔以按下“一下〞為例〕開場掃描開場掃描是否有鍵按下否是一下〔設置分〕是否為“+〞鍵是“分〞加1否“分〞減1圖5.3按鍵檢測及處理程序流程圖按鍵檢測及處理程序清單如下:while(1)//總循環(huán){while(state_button==0)//狀態(tài)0循環(huán){…//無鍵按下的處理程序…}while(state_button!=0)//狀態(tài)非0循環(huán){set_time(0*80,0*80);//啟動時鐘set_time(0*8e,0*00);//啟動保護位if(state_button==1)//狀態(tài)1設置分{if(time_jia==1)//判斷按鈕加是否按下過{minute0++;//分操作下面所有的加減同理if(minute0>9)//minute0最大為9,minute1最大為5{minute1++;minute0=0;if(minute1>5){minute1=0;}}time_jia=0;//按鍵清零表示已經(jīng)執(zhí)行完}if(time_jian==1){minute0--;if(minute0<0){minute1--;minute0=9;if(minute1<0){minute1=5;}}time_jian=0;}}5.5讀取溫度的程序本設計采用while循環(huán),在沒有鍵按下時,跳出while循環(huán),進展下邊的語句,即讀取溫度,并將其顯示在12864上。在讀取的過程中,要注意溫度的正負。讀取溫度的流程圖如圖3.4所示:復位復位讀取溫度數(shù)據(jù)判斷正負正轉(zhuǎn)為十進制負取反后,轉(zhuǎn)十進制圖5.4讀取溫度流程圖讀取溫度程序清單:wendu_reset();//溫度復位wendu_write(0*cc);//跳過ROM搜索命令wendu_write(0*44);//啟動一次轉(zhuǎn)換wendu_reset();//復位wendu_write(0*cc);//跳過ROM搜索命令wendu_write(0*be);//發(fā)送讀命令a=wendu_read();//讀高字節(jié)8位b=wendu_read();//讀低字節(jié)8位pn=b&0*80;//判斷溫度正負if(pn==0)//如果溫度為正{t=((b*256)+a)/16;//直接轉(zhuǎn)化為十進制數(shù)}if(pn==0*80)//如果溫度為負{a=~a;//將數(shù)據(jù)取反b=~b;c=a+1;//低位加1if(c==0*00)//當?shù)臀粸?55時,加1后為0,這時需進位{b++;}//向高位進1t=((b*256)+c)/16;//再進展轉(zhuǎn)換十進制5.6控制源程序*include"at89*51.h"*include"intrins.h"sbitRES1=P2^0;//12864復位sbitA0=P2^1;//命令數(shù)據(jù)選擇sbitRW=P2^2;//讀寫選擇sbitE=P2^3;//使能信號sbitB0=P0^0;//狀態(tài)按鈕sbitB1=P0^1;//執(zhí)行加按鈕sbitB2=P0^2;//執(zhí)行減按鈕sbitDQ=P3^0;//溫度線sbitIO=P3^3;//DS1302IO口設置sbitSCLK=P3^2;//時鐘線設置sbitCE=P3^1;//復位/片選腳設置unsignedcharstate_button,time_jia,time_jian;//按鈕參數(shù)voiddelay(unsignedinti)//延遲程序{while(i--);//12MHz下跳轉(zhuǎn)到延遲函數(shù)需2微妙,while循環(huán)一次4.5微秒。}/*DS18B20*/voidwendu_reset(void)//DS18B20復位程序{unsignedcharr=0;DQ=1;//致高電平,為下面復位時總線下拉準備delay(8);DQ=0;//總線下拉,開場復位delay(90);//復位延遲,不得小于480微秒DQ=1;//總線拉高,復位過程完畢delay(14);//延遲一段時間,等待回應r=DQ;//假設回應為低電平,則復位成功,為高電平則失敗delay(20);//延遲一段時間完畢return(r);//可以根據(jù)需要返回復位結果}voidwendu_write(unsignedchardate)//寫字節(jié)程序{unsignedchari=0;for(i=8;i>0;i--){DQ=0;//總線拉低DQ=date&0*01;//發(fā)送最低位字節(jié)到DS18B20delay(7);//延遲30微秒左右,等DS18B20采樣DQ=1;//將總線拉高date>>=1;//寫入數(shù)據(jù)右移一位}}signedintwendu_read(void)//讀溫度字節(jié)程序{unsignedchari=0,t=0,pn=0;//t為暫存變量for(i=8;i>0;i--){DQ=0;//總線為低電平準備讀操作,然后在1微秒內(nèi)釋放總線,以便讓DS18B20將數(shù)據(jù)反響t>>=1;//將變量右移一位,剛好可以抵消讀所需的延遲時間DQ=1;//總線拉為高電平后,執(zhí)行下面代碼if(DQ==1)//如果總線反響為高電平{t|=0*80;//則將變量最高位置1}//如果反響為0,則變量最高位為0delay(4);//延遲一頓時間,然后開場下次循環(huán)}return(t);//反響讀取的字節(jié)}/*DS1302*/voidtime_write(unsignedchartime_wd)//寫溫度函數(shù){unsignedchari,j;//設置循環(huán)變量for(i=0;i<8;i++)//連續(xù)寫8bit{j=time_wd&0*01;//取寫入數(shù)據(jù)最低位IO=0;//先設置數(shù)據(jù)為0SCLK=0;//拉低時鐘信號if(j==1)//判斷待發(fā)送的數(shù)據(jù)位是0或1{IO=1;//待發(fā)送數(shù)據(jù)位是1就發(fā)送1}time_wd=time_wd>>1;//待發(fā)送的數(shù)據(jù)右移1位SCLK=1;//拉高時鐘信號}SCLK=0;//寫完一個字節(jié),拉低時鐘信號}unsignedchartime_read()//讀時間函數(shù){unsignedchartime_rd;//設置返回變量unsignedchari;//設置循環(huán)變量IO=1;//設置數(shù)據(jù)口方向為輸入for(i=0;i<8;i++)//連續(xù)讀取8bit{SCLK=0;//拉低時鐘信號time_rd=time_rd>>1;//接收存放器右移1位if(IO==1)//判斷信號是1還是0{time_rd=time_rd|0*80;//把接收到的數(shù)據(jù)放到接收存放器的最高位}SCLK=1;//拉高時鐘信號}SCLK=0;//拉低時鐘信號return(time_rd);//返回讀取到的數(shù)據(jù)}unsignedcharget_time(unsignedcharord)//讀取時間函數(shù){unsignedchardd=0;//設置返回變量SCLK=0;//拉低時鐘信號〔只有在時鐘信號為低時才可拉高CE〕CE=0;//拉低CE〔只有在CE為高電平時才可對DS1302進展操作〕CE=1;//啟動寫數(shù)據(jù)操作time_write(ord);//寫入命令dd=time_read();//讀取時間CE=0;//拉低CEreturn(dd);//返回讀取到的時間}voidset_time(unsignedcharord,unsignedchardd)//寫時間函數(shù){SCLK=0;//和讀時間函數(shù)一樣CE=0;CE=1;time_write(ord);//寫入命令time_write(dd);//寫入時間數(shù)據(jù)CE=0;}voidstart(void)//初始化函數(shù){unsignedchari;set_time(0*8e,0*00);//取消寫保護set_time(0*80,0*00);//啟動時鐘set_time(0*84,0*00);//設置24小時模式set_time(0*90,0*a5);//時鐘時鐘充電模式set_time(0*8e,0*80);//啟動寫保護RES1=0;RES1=1;dis_write_cmd(0*af);//啟動12864clean();//清屏jianjie();//關鍵函數(shù),不可刪除for(i=1;i<20;i++){delay(10000);}clean();tu*iang();//寫入初始圖像}/*溫度*/wendu_reset();//溫度復位wendu_write(0*cc);//跳過ROM搜索命令wendu_write(0*44);//啟動一次轉(zhuǎn)換wendu_reset();//復位wendu_write(0*cc);//跳過ROM搜索命令wendu_write(0*be);//發(fā)送讀命令a=wendu_read();//讀高字節(jié)8位b=wendu_read();//讀低字節(jié)8位pn=b&0*80;//判斷溫度正負if(pn==0)//如果溫度為正{t=((b*256)+a)/16;//直接轉(zhuǎn)化為十進制數(shù)}if(pn==0*80)//如果溫度為負{a=~a;//將數(shù)據(jù)取反b=~b;c=a+1;//低位加1if(c==0*00)//當?shù)臀粸?55時,加1后為0,這時需進位{b++;//向高位進1}t=((b*256)+c)/16;//再進展轉(zhuǎn)換十進制}wendu_display(t,pn);//將溫度寫入到12864中5.7調(diào)試及仿真系統(tǒng)的硬件電路設計與軟件程序設計都完成之后,首先,在硬件電路的仿真環(huán)境Proteus中,將經(jīng)過編輯、編譯、匯編、連接幾步生成的.HE*文件加載到單片機AT89S52中,然后對系統(tǒng)進展整體調(diào)試。以下是調(diào)試過程中遇到的主要問題及相應的解決方法:1、問題描述:在控制系統(tǒng)中,涉及到了電加熱模塊,即當室外光強缺乏〔陰天、下雨〕時,對水箱的水進展電加熱是很必要的,然而仿真中無法顯示出是否在執(zhí)行加熱過程。解決方法:用一個等來仿真加熱過程,燈亮時表示加熱,圖中的三極

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論