畢業(yè)設計---電子數(shù)字時鐘_第1頁
已閱讀1頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  畢 業(yè) 設 計 (論 文)</p><p>  機械與電氣工程 系(院)電氣自動化技術(shù)專業(yè) </p><p>  畢業(yè)設計(論文)題目 多功能數(shù)字電子鐘 </p><p>  學生姓名 </p><p>  班 級

2、 </p><p>  學 號 </p><p>  指導教師 </p><p>  完成日期 2011 年 6 月 7 日</p><p>  畢業(yè)設計(論

3、文)任務書</p><p><b>  摘 要</b></p><p>  數(shù)字鐘是一種用數(shù)字電路技術(shù)實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更長的使用壽命,已得到廣泛的使用。數(shù)字鐘從原理上講是一種典型的數(shù)字電路,其中包括了組合邏輯和時序電路。</p><p>  我設計的多功能數(shù)字時鐘系統(tǒng)是由中

4、央控制器、時鐘系統(tǒng)、報警系統(tǒng)、溫度檢測器、顯示器及鍵盤部分組成??刂破鞑捎脝纹瑱CAT89C51,溫度檢測部分采用DS18B20溫度傳感器,時鐘系統(tǒng)用時鐘芯片DS1302,用LCD液晶1602A作為顯示器。單片機通過時鐘芯片DS1302獲取時間數(shù)據(jù),對數(shù)據(jù)處理后顯示時間;溫度傳感器DS18B20采集溫度信號送給單片機處理,單片機再把時間數(shù)據(jù)和溫度數(shù)據(jù)送液晶顯示器1602顯示;本系統(tǒng)共設置4個功能按鍵,其中一個為整機復位按鍵,另外三個用于時

5、鐘的各種操作。</p><p>  關(guān)鍵詞:單片機AT89C51 LCD1602液晶顯示器 DS18B20 DS1302</p><p><b>  Abstract</b></p><p>  A digital clock is a kind of digital circuit technology implementation,

6、minutes and seconds timing device, and the mechanical clock compared with higher accuracy and intuitive, and without a mechanical device, having a longer service life, has been widely used. A digital clock from principle

7、 speaking is a kind of typical digital circuits, including combination logic and sequential circuits.</p><p>  This multi-functional digital clock system is composed of a central controller, clock system, al

8、arm system, temperature detectors, monitor and keyboard parts. Controller using SCM AT89C51, temperature detection part is DS18B20 temperature sensor, clock system with clock chip DS1302, with the 1602A as a liquid cryst

9、al display LCD. Microcontroller through the clock chip DS1302-time data acquisition, data processing right after the show time; temperature sensor DS18B20 collecting temperature signal</p><p>  Key words:AT8

10、9C51;LCD1602 Display;DS18B20;DS1302</p><p><b>  目 錄</b></p><p><b>  摘 要I</b></p><p>  AbstractII</p><p><b>  第一章 概述1</b></p&g

11、t;<p>  第二章 設計方案論證2</p><p>  第三章 電路硬件設計及分析5</p><p>  3.1 時鐘電路5</p><p>  3.2 復位電路5</p><p>  3.3 DS1302時鐘電路6</p><p>  3.4 DS18B20溫度計電路8</p&

12、gt;<p>  3.5 鍵盤電路9</p><p>  3.6 顯示電路9</p><p>  3.7 按鍵提示電路10</p><p>  第四章 軟件設計11</p><p>  4.1 主函數(shù)流程圖11</p><p>  4.2 DS18B20溫度計程序流程12</

13、p><p>  4.3 按鍵程序流程圖13</p><p>  4.4 定時器T0中斷服務程序流程圖14</p><p>  4.5 電路圖15</p><p>  4.6 Proteus仿真效果圖16</p><p><b>  參考文獻17</b></p><p

14、><b>  致 謝18</b></p><p>  附錄1 主程序清單19</p><p><b>  第一章 概述</b></p><p>  時鐘,自從它發(fā)明的那天起,就成為人類的朋友,但隨著時間的推移,人們對它的功能又提出了新的要求,怎樣讓時鐘更好的為人民服務,怎樣讓我們的老朋友煥發(fā)青春呢?這就要求人們

15、不斷設計出新型時鐘。本方案設計的多功能電子鐘除了傳統(tǒng)的顯示時間功能之外還可以測試溫度、電網(wǎng)頻率、電壓、并提供了過壓報警、非接觸止鬧等功能。其中溫度采用AD590溫度傳感器電路測得,非接觸止鬧則采用紅外控制技術(shù)實現(xiàn)。</p><p>  20世紀末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品

16、更新?lián)Q代的節(jié)奏也越來越快。數(shù)字鐘已成為人們?nèi)粘I钪校罕夭豢缮俚谋匦杵?,廣泛用于個人家庭以及車站、碼頭、劇場、辦公室等公共場所,給人們的生活、學習、工作、娛樂帶來極大的方便。由于數(shù)字集成電路技術(shù)的發(fā)展和采用了先進的石英技術(shù),使數(shù)字鐘具有走時準確、性能穩(wěn)定、集成電路有體積小、功耗小、功能多、攜帶方便等優(yōu)點,,因此在許多電子設備中被廣泛使用。</p><p>  電子鐘是人們?nèi)粘I钪谐S玫挠嫊r工具,而數(shù)字式電子鐘又

17、有其體積小、重量輕、走時準確、結(jié)構(gòu)簡單、耗電量少等優(yōu)點而在生活中被廣泛應用,因此本次設計就用數(shù)字集成電路和一些簡單的邏輯門電路來設計一個數(shù)字式電子鐘,使其完成時間及星期的顯示功能。</p><p>  本次設計以數(shù)字電子為主,分別對1S時鐘信號源、秒計時顯示、分計時顯示、小時計時顯示、整點報時及校時電路進行設計,然后將它們組合,來完成時、分、秒的顯示并且有整點報時和走時校準的功能。并通過本次設計加深對數(shù)字電子技術(shù)

18、的理解以及更熟練使用計數(shù)器、觸發(fā)器和各種邏輯門電路的能力。</p><p>  第二章 設計方案論證</p><p><b>  方案一 </b></p><p>  用主芯片為AT89C51的單片機控制實現(xiàn),使用單片機內(nèi)部的定時計數(shù)器實現(xiàn)時間的設定,使用按鍵進行時間的調(diào)整和定時,按鍵有蜂鳴器提示,溫度傳感器使用DALLAS公司生產(chǎn)的單總

19、線式數(shù)字溫度傳感器,它具有微型化、低功耗、高性能、抗干擾能力強、易配處理器等優(yōu)點,特別適用于構(gòu)成多點溫度測控系統(tǒng),可直接將溫度轉(zhuǎn)化成串行數(shù)字信號(提供9位二進制數(shù)字)給單片機處理,且在同一總線上可以掛接多個傳感器芯片。顯示時間和溫度使用數(shù)碼管顯示。方案1系統(tǒng)結(jié)構(gòu)框圖如圖1.1所示。</p><p>  圖1.1 方案1系統(tǒng)結(jié)構(gòu)框圖</p><p><b>  方案二 <

20、;/b></p><p>  用主芯片為AT89C51的單片機控制實現(xiàn),為了滿足單片機系統(tǒng)的實時控制的需求,采用實時鐘芯片DS1302,使用按鍵進行時間的調(diào)整和定時,按鍵蜂鳴器提示,溫度傳感器使用普通的溫度傳感器,由于溫度傳感器采集的數(shù)據(jù)為模擬量,又因為單片機AT89C51內(nèi)部沒有集成模數(shù)轉(zhuǎn)換器,需要在控制系統(tǒng)的外部使用A/D轉(zhuǎn)換裝置,另外系統(tǒng)還應該把采集來的數(shù)據(jù)進行信號處理,顯示溫度和時間使用LCD160

21、2顯示。方案2系統(tǒng)結(jié)構(gòu)框圖如圖1.2所示。</p><p>  圖1.2 方案2系統(tǒng)結(jié)構(gòu)框圖</p><p><b>  方案三 </b></p><p>  用主芯片為AT89C51的單片機控制實現(xiàn),為了滿足單片機系統(tǒng)的實時控制的需求,采用實時鐘芯片DS1302,使用按鍵進行時間的調(diào)整和定時,按鍵有蜂鳴器提示,溫度傳感器使用DALLAS

22、公司生產(chǎn)的單總線式數(shù)字溫度傳感器。顯示時間和溫度使用LCD1602顯示。方案3系統(tǒng)結(jié)構(gòu)框圖如圖1.3所示。</p><p>  圖1.3 方案3系統(tǒng)結(jié)構(gòu)框圖</p><p><b>  方案選擇 </b></p><p>  方案一直接使用單片機內(nèi)集成的定時器,產(chǎn)生定時節(jié)拍,編制軟件計數(shù)器,進行節(jié)拍技術(shù),理論上講,不但能夠完成秒表設計,還

23、能夠?qū)崿F(xiàn)分鐘、刻鐘、小時的實時計時功能,在此基礎(chǔ)上,如果加上足夠精確的誤差時間補償處理,甚至可以實現(xiàn)日、星期、月、年等日歷功能。但使用片內(nèi)定時器有以下幾個問題:</p><p><b>  1、時間補償</b></p><p>  片內(nèi)定時器采用中斷方式提供計時節(jié)拍,中斷的實質(zhì)是隨機程序切換,那么,中斷響應時間是不可精確預測的。這樣,必然會導致計時節(jié)拍的時間誤差,在計

24、時時間較短的情況下,比如1~99s計時,可以采用一些軟件措施進行誤差補償,但當系統(tǒng)所需要的計時時間較長時,比如進行年、月、日的日歷計時,定時中斷誤差扥積累就會很大,無法滿足時間精度的要求。因此,在需要日歷、時鐘的場合,片內(nèi)定時器的作用有限。片內(nèi)定時器只適合于單片機短時間計時的要求。 </p><p><b>  2、時鐘維持</b></p><p>  使用片內(nèi)定時

25、器進行計時的時候,單片機始終要處于工作狀態(tài)。才能維持計時時間,一旦停機或進入待機狀態(tài),開機后,計時時間就需要重新設定。在單片機系統(tǒng)中,有時,需要維持一個時鐘,對控制工作進行時間標定。不管單片機系統(tǒng)開機、關(guān)機還是待機,系統(tǒng)時鐘要始終維持。</p><p>  為了滿足單片機系統(tǒng)的實時鐘需求,最可靠的方法是采用實時鐘芯片DS1302。溫度的數(shù)據(jù)采集如果是一般的溫度傳感器,需要對信號進行處理,另外還需要模數(shù)轉(zhuǎn)換裝置,如

26、果采用的是數(shù)字溫度傳感器18B20,可以直接將采集的信號轉(zhuǎn)化為數(shù)字信息供單片機控制,這樣不僅節(jié)約了成本,還提高了系統(tǒng)的可靠性和穩(wěn)定性。所以本設計采用的是方案三。</p><p>  第三章 電路硬件設計及分析</p><p><b>  3.1 時鐘電路</b></p><p>  系統(tǒng)的時鐘電路設計是采用的內(nèi)部方式,即利用芯片內(nèi)部的振蕩電路。

27、51單片機內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器。引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外晶體諧振器一起構(gòu)成一個自激振蕩器。外接晶體諧振器以及電容C1和C2構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中。對外接電容的值雖然沒有嚴格的要求,但電容的大小會影響震蕩器頻率的高低、震蕩器的穩(wěn)定性、起振的快速性和溫度的穩(wěn)定性。因此,此系統(tǒng)電路的晶體振蕩器的值為12MHz,電容應盡可能的選擇陶瓷電容,電

28、容值約為22μF。在焊接刷電路板時,晶體振蕩器和電容應盡可能安裝得與單片機芯片靠近,以減少寄生電容,更好地保證震蕩器穩(wěn)定和可靠地工作。時鐘電路如圖2.1所示。</p><p>  圖2.1 時鐘電路圖</p><p><b>  3.2 復位電路</b></p><p>  復位是由外部的復位電路來實現(xiàn)的。片內(nèi)復位電路是復位引腳RST通常采用

29、上電自動復位和按鍵手動復位兩種方式,此電路系統(tǒng)采用的是按鍵手動復位電路,高電平時復位,如圖所示。當時鐘頻率選用12MHz時,C取22μF,R約為1K。復位電路如圖2.2所示</p><p>  圖2.2 復位電路圖</p><p>  3.3 DS1302時鐘電路</p><p>  本設計中的采用的時鐘芯片是DS1302</p><p>

30、;  DS1302的結(jié)構(gòu)及工作原理</p><p>  DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是D

31、S1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進行涓細電流充電的能力。DS1302這些電路的接口簡單、價格低廉、使用方便,被廣泛地采用。</p><p>  時鐘電路DS1302是DALLAS公司的一種具有涓細電流充電能力的電路,主要特點是采用串行數(shù)據(jù)傳輸,可為掉電保護電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采用普通32.768kHz晶振。</p&

32、gt;<p><b>  引腳功能及結(jié)構(gòu)</b></p><p>  DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32

33、.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必須保持低電平。只

34、有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細說明。SCLK為時鐘輸入端。下圖2.3為DS1302的引腳功能圖2.3:</p><p>  圖2.3 DS1302封裝圖</p><p>  DS1302的控制字節(jié)</p><p>  DS1302的控制字如圖2.4所示。控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為

35、0,則不能把數(shù)據(jù)寫入DS1302中,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進行寫操作,為圖表示進行讀操作,控制字節(jié)總是從最低位開始輸出?!?lt;/p><p>  圖2.4DS1302的控制字</p><p>  DS1302的寄存器  </p><p>  DS1302有12個寄存器,

36、其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時間寄存器及其控制字見表1此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下

37、的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。 </p><p>  DS1302與單片機之間能簡單地采用同步串行的方式進行通信,僅需三根I/O線:復位(RST)、I/O數(shù)據(jù)線、串行時鐘(SCLK)。DS1302時鐘電路如圖2.5所示。</p><p>  圖2.5 DS1302時鐘電路圖 </p>

38、<p>  3.4 DS18B20溫度計電路</p><p>  DS18B20它具有3引腳TO-92小體積封裝形式,溫度測量范圍為-55℃~+125℃,可編程為9位~12位A/D轉(zhuǎn)換精度,測溫分辨率可達0.0625℃,被測溫度用符號擴展的16位數(shù)字量方式串行輸出,其工作電源既可在遠端引入,也可采用寄生電源方式產(chǎn)生,多個DS18B20可以并聯(lián)到3根或2根線上,CPU只需一根端口線就能與多個DS18

39、B20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。以上特點使DS18B20非常適用于遠距離多點溫度檢測系統(tǒng)。電路圖如圖2.4所示。</p><p>  圖2.6 DS18B20溫度計電路</p><p><b>  3.5 鍵盤電路</b></p><p>  鍵盤接口是單片機應用系統(tǒng)中最常用的接口之一,鍵盤的類型很多,常用

40、的有獨立式鍵盤和矩陣式鍵盤,因為本設計需要的鍵盤比較少,所以采用獨立式鍵盤。 在鍵盤的應用中,需要解決鍵盤消抖的問題,一般使用的是軟件消抖的方法。鍵盤的電路圖如圖2.5所示。</p><p>  圖2.6 鍵盤電路圖</p><p><b>  3.6 顯示電路</b></p><p>  顯示器是單片機常用的功能單元之一,顯示器的主要功能

41、是為單片機系統(tǒng)使用者提供必要的單片機工作信息,或者提供工作狀態(tài)的提示信息,顯示器的工作是由單片機通過顯示接口驅(qū)動的。本設計采用的是LCD1602顯示電路圖如圖2.6所示。</p><p>  圖2.7 LCD1602顯示電路圖</p><p>  3.7 按鍵提示電路</p><p>  本設計具有按鍵蜂鳴器響的功能,使得按鍵可靠工作。按鍵提示電路如圖2.7所示

42、。 </p><p>  圖2.7 按鍵提示電路如圖 </p><p><b>  第四章 軟件設計</b></p><p>  4.1 主函數(shù)流程圖</p><p>  主函數(shù)流程圖如圖3.1所示。</p><p>  圖3.1 主函數(shù)流

43、程圖</p><p>  4.2 DS18B20溫度計程序流程</p><p>  DS1820溫度計程序流程圖如圖3.2所示。</p><p>  圖3.2 DS1820溫度計程序流程圖</p><p>  4.3 按鍵程序流程圖</p><p>  按鍵程序流程圖如圖3.3所示。</p>&l

44、t;p>  圖3.3 按鍵程序流程圖 </p><p>  4.4 定時器T0中斷服務程序流程圖</p><p>  定時器T0中斷服務程序流程圖如圖3.4所示。</p><p>  圖3.4 定時器T0中斷服務程序流程圖</p><p><b>  4.5 電路圖</b></p><

45、;p>  4.6 Proteus仿真效果圖</p><p>  帶時鐘顯示的溫度計Proteus仿真效果圖如圖4.1所示。</p><p>  圖4.1 帶時鐘顯示的溫度計Proteus仿真效果圖</p><p><b>  參考文獻</b></p><p>  [1] 陳梓城《實用電子電路設計與調(diào)試》中國電

46、力出版社2006</p><p>  [2] 曹薇《單片機原理及應用》 中國實力水電出版社 2004.8</p><p>  [3] 高吉祥《全國大學生電子設計大賽培訓教程》電子工業(yè)出版社2007.5</p><p>  [4] DS1302 DATASHEET www.datasheet5.com</p><p>  [5] DS1

47、8B20 DATASHEET www.datasheet5.com</p><p>  [6] 郭天祥,《新概念51單片機C語言教程——入門、提高、開發(fā)、拓展全攻略》;北京:電子工業(yè)出版社;2009</p><p>  [7] 宋戈、黃鶴松、員玉良、蔣海峰,《51單片機應用開發(fā)范例大全》;北京:人民郵電出版社;2010</p><p>  [8] 閻石,《數(shù)字

48、電子技術(shù)基礎(chǔ)(第四版)》;北京:高等教育出版社;1998</p><p>  [9] 鄒顯圣,《基于AT89C51單片機數(shù)字時鐘的研究》,機電產(chǎn)品開發(fā)與創(chuàng)新;2009,(5)</p><p>  [10] 劉伏文、王春華,《MCS-51單片機存儲器結(jié)構(gòu)詳解》;電子制作;2007,(10).</p><p>  [11] 盧旭錦,《基于Keil C的AT24C0

49、2串行E~2PROM的編程》;現(xiàn)代電子技術(shù);2007,(8)</p><p><b>  致 謝</b></p><p>  這款多功能計數(shù)器采用了現(xiàn)在廣泛使用的單片機技術(shù)為核心,軟硬件結(jié)合,使硬件部分大為簡化,提高了系統(tǒng)穩(wěn)定性,并采用大屏幕液晶顯示、紅外遙控裝置和電壓報警裝置使人機交互簡便易行,較為有效地完成了題目的要求。</p><p>

50、  本次畢業(yè)設計得到xx老師的大力支持,他提出了許多的意見和建議,他的指導是我受益匪淺,在此表示衷心的感謝。</p><p>  由于本人能力有限,在設計中難免會出現(xiàn)錯誤與不足,希望各位老師及讀者給予批評指正并提出寶貴意見。</p><p><b>  附錄1 主程序清單</b></p><p>  #include<reg51.h>

51、;</p><p>  #include"DS18B20_3.H"</p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  uchar a,miao,shi,fen,ri,yue,nian,week,flag,k

52、ey1n,temp;</p><p>  #define yh 0x80 //LCD第一行的初始位置,因為LCD1602字符地址首位D7恒定為1(100000000=80)</p><p>  #define er 0x80+0x40 //LCD第二行初始位置(因為第二行第一個字符位置地址是0x40)</p><p>  sbit rs=P2^0;</p>

53、;<p>  sbit en=P2^2;</p><p>  sbit rw=P2^1; //如果硬件上rw接地,就不用寫這句和后面的rw=0了</p><p>  sbit led=P2^6; //LCD背光開關(guān)</p><p>  sbit IO=P1^1;</p><p>  sbit SCLK=P1^0;</p&g

54、t;<p>  sbit RST=P1^2;</p><p>  sbit ACC0=ACC^0;</p><p>  sbit ACC7=ACC^7;</p><p>  sbit key1=P1^5; //設置鍵</p><p>  sbit key2=P1^6; //加鍵</p><p>  s

55、bit key3=P1^7; //減鍵</p><p>  sbit buzzer=P1^3;//蜂鳴器,通過三極管9012驅(qū)動,端口低電平響</p><p>  uchar code tab1[]={"20 - - "}; //年顯示的固定字符</p><p>  uchar code tab2[]={" : : &q

56、uot;};//時間顯示的固定字符</p><p>  void delay(uint xms)//延時函數(shù),有參函數(shù)</p><p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=xms;x>0;x--)</p>

57、<p>  for(y=110;y>0;y--);</p><p><b>  }</b></p><p>  write_1602com(uchar com)//****液晶寫入指令函數(shù)****</p><p><b>  {</b></p><p>  rs=0;//數(shù)據(jù)/指令

58、選擇置為指令</p><p>  rw=0; //讀寫選擇置為寫</p><p>  P0=com;//送入數(shù)據(jù)</p><p><b>  delay(1);</b></p><p>  en=1;//拉高使能端,為制造有效的下降沿做準備</p><p><b>  delay(1);

59、</b></p><p>  en=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令</p><p><b>  }</b></p><p>  write_1602dat(uchar dat)//***液晶寫入數(shù)據(jù)函數(shù)****</p><p><b>  {</b></p>

60、<p>  rs=1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù)</p><p>  rw=0; //讀寫選擇置為寫</p><p>  P0=dat;//送入數(shù)據(jù)</p><p><b>  delay(1);</b></p><p>  en=1; //en置高電平,為制造下降沿做準備</p><p&

61、gt;<b>  delay(1);</b></p><p>  en=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令</p><p><b>  }</b></p><p>  lcd_init()//***液晶初始化函數(shù)****</p><p><b>  {</b>&l

62、t;/p><p>  write_1602com(0x38);//設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數(shù)據(jù)</p><p>  write_1602com(0x0c);//開顯示不顯示光標</p><p>  write_1602com(0x06);//整屏不移動,光標自動右移</p><p>  write_1602com(

63、0x01);//清顯示</p><p>  write_1602com(yh+1);//日歷顯示固定符號從第一行第1個位置之后開始顯示</p><p>  for(a=0;a<14;a++)</p><p><b>  {</b></p><p>  write_1602dat(tab1[a]);//向液晶屏寫日歷

64、顯示的固定符號部分</p><p>  //delay(3);</p><p><b>  }</b></p><p>  write_1602com(er+2);//時間顯示固定符號寫入位置,從第2個位置后開始顯示</p><p>  for(a=0;a<8;a++)</p><p>&l

65、t;b>  {</b></p><p>  write_1602dat(tab2[a]);//寫顯示時間固定符號,兩個冒號</p><p>  //delay(3);</p><p><b>  }</b></p><p><b>  }</b></p><p&

66、gt;  void write_byte(uchar dat)//寫一個字節(jié)</p><p><b>  {</b></p><p><b>  ACC=dat;</b></p><p><b>  RST=1;</b></p><p>  for(a=8;a>0;a--

67、)</p><p><b>  {</b></p><p><b>  IO=ACC0;</b></p><p><b>  SCLK=0;</b></p><p><b>  SCLK=1;</b></p><p>  ACC=A

68、CC>>1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  uchar read_byte()//讀一個字節(jié)</p><p><b>  {</b></p><p><b>  

69、RST=1;</b></p><p>  for(a=8;a>0;a--)</p><p><b>  {</b></p><p><b>  ACC7=IO;</b></p><p><b>  SCLK=1;</b></p><p>

70、;<b>  SCLK=0;</b></p><p>  ACC=ACC>>1;</p><p><b>  }</b></p><p>  return (ACC);</p><p><b>  }</b></p><p>  void w

71、rite_1302(uchar add,uchar dat)//向1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù)</p><p><b>  {</b></p><p><b>  RST=0;</b></p><p><b>  SCLK=0;</b></p><p><b&g

72、t;  RST=1;</b></p><p>  write_byte(add);</p><p>  write_byte(dat);</p><p><b>  SCLK=1;</b></p><p><b>  RST=0;</b></p><p><

73、b>  }</b></p><p>  uchar read_1302(uchar add)//從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來源地址</p><p><b>  {</b></p><p>  uchar temp;</p><p><b>  RST=0;</b></

74、p><p><b>  SCLK=0;</b></p><p><b>  RST=1;</b></p><p>  write_byte(add);</p><p>  temp=read_byte();</p><p><b>  SCLK=1;</b>

75、</p><p><b>  RST=0;</b></p><p>  return(temp);</p><p><b>  }</b></p><p>  uchar BCD_Decimal(uchar bcd)//BCD碼轉(zhuǎn)十進制函數(shù),輸入BCD,返回十進制</p><p&

76、gt;<b>  {</b></p><p>  uchar Decimal;</p><p>  Decimal=bcd>>4;</p><p>  return(Decimal=Decimal*10+(bcd&=0x0F));</p><p><b>  }</b></

77、p><p>  void ds1302_init() //1302芯片初始化子函數(shù)(2010-01-07,12:00:00,week4)</p><p><b>  {</b></p><p><b>  RST=0;</b></p><p><b>  SCLK=0;</b>&l

78、t;/p><p>  write_1302(0x8e,0x00); //允許寫,禁止寫保護 </p><p>  write_1302(0x8e,0x80); //打開寫保護</p><p><b>  }</b></p><p>  void write_temp(uchar add,uchar dat)//向LCD寫溫度

79、數(shù)據(jù),并指定顯示位置</p><p><b>  {</b></p><p>  uchar gw,sw;</p><p>  gw=dat%10;//取得個位數(shù)字</p><p>  sw=dat/10;//取得十位數(shù)字</p><p>  write_1602com(er+add);//er是

80、頭文件規(guī)定的值0x80+0x40</p><p>  write_1602dat(0x30+sw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼</p><p>  write_1602dat(0x30+gw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼</p><p>  write_1602dat(0xdf);//顯示溫度的小圓圈符號,0xdf是液晶屏字符

81、庫的該符號地址碼</p><p>  write_1602dat(0x43);//顯示"C"符號,0x43是液晶屏字符庫里大寫C的地址碼</p><p><b>  }</b></p><p>  void write_sfm(uchar add,uchar dat)//向LCD寫時分秒,有顯示位置加、現(xiàn)示數(shù)據(jù),兩個參

82、數(shù)</p><p><b>  {</b></p><p>  uchar gw,sw;</p><p>  gw=dat%10;//取得個位數(shù)字</p><p>  sw=dat/10;//取得十位數(shù)字</p><p>  write_1602com(er+add);//er是頭文件規(guī)定的值0x

83、80+0x40</p><p>  write_1602dat(0x30+sw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼</p><p>  write_1602dat(0x30+gw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼</p><p><b>  }</b></p><p>  void writ

84、e_nyr(uchar add,uchar dat)//向LCD寫年月日,有顯示位置加數(shù)、顯示數(shù)據(jù),兩個參數(shù)</p><p><b>  {</b></p><p>  uchar gw,sw;</p><p>  gw=dat%10;//取得個位數(shù)字</p><p>  sw=dat/10;//取得十位數(shù)字</p

85、><p>  write_1602com(yh+add);//設定顯示位置為第一個位置+add</p><p>  write_1602dat(0x30+sw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼</p><p>  write_1602dat(0x30+gw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼</p><p><

86、b>  }</b></p><p>  void write_week(uchar week)//寫星期函數(shù)</p><p><b>  {</b></p><p>  write_1602com(yh+0x0c);//星期字符的顯示位置</p><p>  switch(week)</p>

87、<p><b>  {</b></p><p>  case 1:write_1602dat('M');//星期數(shù)為1時,顯示</p><p>  write_1602dat('O');</p><p>  write_1602dat('N');</p><p&g

88、t;<b>  break;</b></p><p>  case 2:write_1602dat('T');//星期數(shù)據(jù)為2時顯示</p><p>  write_1602dat('U');</p><p>  write_1602dat('E');</p><p>&l

89、t;b>  break;</b></p><p>  case 3:write_1602dat('W');//星期數(shù)據(jù)為3時顯示</p><p>  write_1602dat('E');</p><p>  write_1602dat('D');</p><p><b&

90、gt;  break;</b></p><p>  case 4:write_1602dat('T');//星期數(shù)據(jù)為4是顯示</p><p>  write_1602dat('H');</p><p>  write_1602dat('U');</p><p><b> 

91、 break;</b></p><p>  case 5:write_1602dat('F');//星期數(shù)據(jù)為5時顯示</p><p>  write_1602dat('R');</p><p>  write_1602dat('I');</p><p><b>  bre

92、ak;</b></p><p>  case 6:write_1602dat('S');//星期數(shù)據(jù)為6時顯示</p><p>  write_1602dat('T');</p><p>  write_1602dat('A');</p><p><b>  break;&

93、lt;/b></p><p>  case 7:write_1602dat('S');//星期數(shù)據(jù)為7時顯示</p><p>  write_1602dat('U');</p><p>  write_1602dat('N');</p><p><b>  break;</

94、b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //****************鍵盤掃描有關(guān)函數(shù)**********************</p><p>  void keyscan()</p><p>

95、<b>  {</b></p><p>  if(key1==0)//---------------key1為功能鍵(設置鍵)--------------------</p><p><b>  {</b></p><p>  delay(9);//延時,用于消抖動</p><p>  if(key

96、1==0)//延時后再次確認按鍵按下</p><p><b>  {</b></p><p>  buzzer=0;//蜂鳴器短響一次</p><p>  delay(20);</p><p><b>  buzzer=1;</b></p><p>  while(!key1

97、);</p><p><b>  key1n++;</b></p><p>  if(key1n==9)</p><p>  key1n=1;//設置按鍵共有秒、分、時、星期、日、月、年、返回,8個功能循環(huán)</p><p>  switch(key1n)</p><p><b>  {&

98、lt;/b></p><p>  case 1: TR0=0;//關(guān)閉定時器</p><p><b>  //TR1=0;</b></p><p>  write_1602com(er+0x09);//設置按鍵按動一次,秒位置顯示光標</p><p>  write_1602com(0x0f);//設置光標為閃爍&

99、lt;/p><p>  temp=(miao)/10*16+(miao)%10;//秒數(shù)據(jù)寫入DS1302</p><p>  write_1302(0x8e,0x00);</p><p>  write_1302(0x80,0x80|temp);//miao</p><p>  write_1302(0x8e,0x80);</p>

100、<p><b>  break;</b></p><p>  case 2: write_1602com(er+6);//按2次fen位置顯示光標</p><p>  //write_1602com(0x0f);</p><p><b>  break;</b></p><p>  c

101、ase 3: write_1602com(er+3);//按動3次,shi</p><p>  //write_1602com(0x0f);</p><p><b>  break;</b></p><p>  case 4: write_1602com(yh+0x0e);//按動4次,week</p><p>  //

102、write_1602com(0x0f);</p><p><b>  break;</b></p><p>  case 5: write_1602com(yh+0x0a);//按動5次,ri</p><p>  //write_1602com(0x0f);</p><p><b>  break;</b

103、></p><p>  case 6: write_1602com(yh+0x07);//按動6次,yue</p><p>  //write_1602com(0x0f);</p><p><b>  break;</b></p><p>  case 7: write_1602com(yh+0x04);//按動7

104、次,nian</p><p>  //write_1602com(0x0f);</p><p><b>  break;</b></p><p><b>  case 8:</b></p><p>  write_1602com(0x0c);//按動到第8次,設置光標不閃爍</p>&

105、lt;p>  TR0=1;//打開定時器</p><p>  temp=(miao)/10*16+(miao)%10;</p><p>  write_1302(0x8e,0x00);</p><p>  write_1302(0x80,0x00|temp);//miao數(shù)據(jù)寫入DS1302</p><p>  write_1302(0

106、x8e,0x80);</p><p>  break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key1n!=0)//

107、當key1按下以下。再按以下鍵才有效(按鍵次數(shù)不等于零)</p><p><b>  {</b></p><p>  if(key2==0) //上調(diào)鍵</p><p><b>  {</b></p><p>  delay(10);</p><p>  if(key2==

108、0)</p><p><b>  {</b></p><p>  buzzer=0;//蜂鳴器短響一次</p><p>  delay(20);</p><p><b>  buzzer=1;</b></p><p>  while(!key2);</p>&l

109、t;p>  switch(key1n)</p><p><b>  {</b></p><p>  case 1:miao++;//設置鍵按動1次,調(diào)秒</p><p>  if(miao==60)</p><p>  miao=0;//秒超過59,再加1,就歸零</p><p>  wri

110、te_sfm(0x08,miao);//令LCD在正確位置顯示"加"設定好的秒數(shù)</p><p>  temp=(miao)/10*16+(miao)%10;//十進制轉(zhuǎn)換成DS1302要求的DCB碼</p><p>  write_1302(0x8e,0x00); //允許寫,禁止寫保護 </p><p>  write_1302(0x80,t

111、emp);</p><p>  //向DS1302內(nèi)寫秒寄存器80H寫入調(diào)整后的秒數(shù)據(jù)BCD碼</p><p>  write_1302(0x8e,0x80); //打開寫保護</p><p>  write_1602com(er+0x09);</p><p>  //因為設置液晶的模式是寫入數(shù)據(jù)后,光標自動右移,所以要指定返回</p&

112、gt;<p>  //write_1602com(0x0b);</p><p><b>  break;</b></p><p>  case 2:fen++;</p><p>  if(fen==60)</p><p><b>  fen=0;</b></p><

113、p>  write_sfm(0x05,fen);//令LCD在正確位置顯示"加"設定好的分數(shù)據(jù)</p><p>  temp=(fen)/10*16+(fen)%10;//十進制轉(zhuǎn)換成DS1302要求的DCB碼</p><p>  write_1302(0x8e,0x00);//允許寫,禁止寫保護 </p><p>  write_1302

114、(0x82,temp);</p><p>  //向DS1302內(nèi)寫分寄存器82H寫入調(diào)整后的分數(shù)據(jù)BCD碼</p><p>  write_1302(0x8e,0x80);//打開寫保護</p><p>  write_1602com(er+6);</p><p>  //因為設置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,在這里是寫回原來的位置

115、</p><p><b>  break;</b></p><p>  case 3:shi++;</p><p>  if(shi==24)</p><p><b>  shi=0;</b></p><p>  write_sfm(2,shi);//令LCD在正確的位置顯示

116、"加"設定好的小時數(shù)據(jù)</p><p>  temp=(shi)/10*16+(shi)%10;//十進制轉(zhuǎn)換成DS1302要求的DCB碼</p><p>  write_1302(0x8e,0x00);//允許寫,禁止寫保護 </p><p>  write_1302(0x84,temp);</p><p>  //DS

117、1302內(nèi)寫小時寄存器84H寫入調(diào)整后的小時數(shù)據(jù)BCD碼</p><p>  write_1302(0x8e,0x80);//打開寫保護</p><p>  write_1602com(er+3);</p><p>  //設置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標回位</p><p><b>  break;</

118、b></p><p>  case 4:week++;</p><p>  if(week==8)</p><p><b>  week=1;</b></p><p>  write_1602com(yh+0x0C);//指定'加'后的周數(shù)據(jù)顯示位置</p><p>  wr

119、ite_week(week);//指定周數(shù)據(jù)顯示內(nèi)容</p><p>  temp=(week)/10*16+(week)%10;//十進制轉(zhuǎn)換成DS1302要求的DCB碼</p><p>  write_1302(0x8e,0x00);//允許寫,禁止寫保護 </p><p>  write_1302(0x8a,temp);</p><p>

120、;  //向DS1302內(nèi)寫周寄存器8aH寫入調(diào)整后的周數(shù)據(jù)BCD碼</p><p>  write_1302(0x8e,0x80);//打開寫保護</p><p>  write_1602com(yh+0x0e);</p><p>  //因為設置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標回位</p><p><b>  

121、break;</b></p><p>  case 5:ri++;</p><p>  if(ri==32)</p><p><b>  ri=1;</b></p><p>  write_nyr(9,ri);//令LCD在正確的位置顯示"加"設定好的日期數(shù)據(jù)</p><

122、;p>  temp=(ri)/10*16+(ri)%10;//十進制轉(zhuǎn)換成DS1302要求的DCB碼</p><p>  write_1302(0x8e,0x00);//允許寫,禁止寫保護</p><p>  write_1302(0x86,temp);</p><p>  //向DS1302內(nèi)寫日期寄存器86H寫入調(diào)整后的日期數(shù)據(jù)BCD碼</p>

123、<p>  write_1302(0x8e,0x80);//打開寫保護</p><p>  write_1602com(yh+10);</p><p>  //因為設置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標回位</p><p><b>  break;</b></p><p>  case 6:

124、yue++;</p><p>  if(yue==13)</p><p><b>  yue=1;</b></p><p>  write_nyr(6,yue);//令LCD在正確的位置顯示"加"設定好的月份數(shù)據(jù)</p><p>  temp=(yue)/10*16+(yue)%10;//十進制轉(zhuǎn)換成

125、DS1302要求的DCB碼</p><p>  write_1302(0x8e,0x00);//允許寫,禁止寫保護</p><p>  write_1302(0x88,temp);</p><p>  //向DS1302內(nèi)寫月份寄存器88H寫入調(diào)整后的月份數(shù)據(jù)BCD碼</p><p>  write_1302(0x8e,0x80);//打開寫

126、保護</p><p>  write_1602com(yh+7);</p><p>  //因為設置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標回位</p><p><b>  break;</b></p><p>  case 7:nian++;</p><p>  if(nian==10

127、0)</p><p><b>  nian=0;</b></p><p>  write_nyr(3,nian);//令LCD在正確的位置顯示"加"設定好的年份數(shù)據(jù)</p><p>  temp=(nian)/10*16+(nian)%10;//十進制轉(zhuǎn)換成DS1302要求的DCB碼</p><p>

溫馨提示

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

評論

0/150

提交評論