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

下載本文檔

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

文檔簡介

1、<p><b>  摘 要</b></p><p>  在當(dāng)代繁忙的工作與生活中,時(shí)間與我們每一個(gè)人都有非常親密的關(guān)系,每個(gè)人都收到時(shí)間的影響,為了更好的利用我們自己的時(shí)間,我們必須對(duì)時(shí)間有一個(gè)度量,因此產(chǎn)生了鐘表。隨著社會(huì)、科技的發(fā)展,人類得知時(shí)間,從觀太陽、擺鐘到現(xiàn)在電子鐘,不斷研究、創(chuàng)新。為了在觀測(cè)時(shí)間的同時(shí)能夠了解其他與人類密切相關(guān)的信息,比如溫度、星期、日期等,電子萬年歷

2、誕生了,它集時(shí)間、日期、星期和于一身,具有讀取方便、顯示直觀、功能多樣、電路簡潔等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。隨著人們生活水平的提高和生活節(jié)奏的加快,對(duì)時(shí)間的要求越來越高,精準(zhǔn)數(shù)字計(jì)時(shí)的消費(fèi)需求也是越來越多。</p><p>  該電子萬年歷主要采用AT89S52單片機(jī)作為主控核心,由DS1302時(shí)鐘芯片提供時(shí)鐘、LCD動(dòng)態(tài)掃描顯示屏顯示,AT89S52單片機(jī)具有功耗小,片內(nèi)ROM全

3、都采用FlashROM:能以3V的超低電壓工作,同時(shí)也與MCS-51系列單片機(jī)完全兼容,該芯片內(nèi)部存儲(chǔ)器為8KB ROM存儲(chǔ)空間,同時(shí)具有89C51的功能,且具有在線編程可擦除技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或程序的新增功能需要燒入程序時(shí),不需要對(duì)芯片進(jìn)行多次插拔,所以不會(huì)對(duì)芯片造成損壞。DS1302時(shí)鐘芯片是美國DALLAS公司推出的具有涓流電流充電功能的低功耗實(shí)時(shí)時(shí)鐘芯片,它可以對(duì)年、月、日等進(jìn)行計(jì)時(shí),還有閏年補(bǔ)償?shù)裙?/p>

4、能,而且使用壽命長,誤差小,數(shù)字顯示是采用的LCD液晶顯示,可以同時(shí)顯示各種需要的信息。此外,該電子萬年歷還具有時(shí)間校準(zhǔn)等功能。</p><p><b>  目 錄</b></p><p><b>  目 錄2</b></p><p><b>  1 緒 論3</b></p>&

5、lt;p>  1.1 選題背景3</p><p>  1.2 選題目的3</p><p>  1.3 設(shè)計(jì)意義3</p><p>  2 設(shè)計(jì)要求與方案論證4</p><p>  2.1 設(shè)計(jì)要求4</p><p>  2.2 系統(tǒng)基本方案選擇和論證4</p><p>  2

6、.2.1 單片機(jī)芯片的選擇和方案論證4</p><p>  2.2.2 顯示模塊選擇方案和論證5</p><p>  2.2.3 時(shí)鐘芯片的選擇方案和論證5</p><p>  2.2.4 溫度傳感器的選擇方案與論證5</p><p>  2.3 最終方案確定5</p><p>  3 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)

7、6</p><p>  3.1 系統(tǒng)硬件概述6</p><p>  3.1.1 系統(tǒng)設(shè)計(jì)框圖6</p><p>  3.1.2 系統(tǒng)硬件需求介紹6</p><p>  3.2 系統(tǒng)硬件各模塊作用7</p><p>  3.2.1 控制系統(tǒng)的設(shè)計(jì)7</p><p>  3.2.2時(shí)鐘電路

8、模塊的設(shè)計(jì)7</p><p>  3.2.3 溫度采集模塊設(shè)計(jì)9</p><p>  3.2.4 鬧鐘(蜂鳴器電路模塊)10</p><p>  3.2.5 按鍵部分11</p><p>  3.2.6 液晶顯示模塊概述11</p><p>  4.1系統(tǒng)硬件概述12</p><p>

9、;  4.2程序流程框圖12</p><p>  5.1軟件測(cè)試14</p><p>  5.2測(cè)試結(jié)論14</p><p>  6 設(shè)計(jì)總結(jié)與心得體會(huì)15</p><p><b>  7參考文摘16</b></p><p><b>  8附錄17</b><

10、/p><p><b>  1.源程序17</b></p><p>  2.系統(tǒng)電路圖27</p><p><b>  1 緒 論</b></p><p><b>  1.1 選題背景</b></p><p>  在社會(huì)迅速發(fā)展的今天,單片機(jī)的的運(yùn)用已經(jīng)滲

11、透到我們生活的每個(gè)角落,也似乎很難找到哪個(gè)領(lǐng)域沒有單片機(jī)的足跡。智能儀表、醫(yī)療器械,導(dǎo)彈的導(dǎo)航裝置,智能監(jiān)控、通訊與數(shù)據(jù)傳輸,工業(yè)自動(dòng)化過程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能 IC 卡,汽車的安全保障系統(tǒng),動(dòng)控制領(lǐng)域的機(jī)器人,數(shù)碼像機(jī)、電視機(jī)、全自動(dòng)洗衣機(jī)的控制,電話機(jī)以及程控玩具、電子寵物等等,這些都離不開單片機(jī)。</p><p>  所以,單片機(jī)的學(xué)習(xí)、開發(fā)與應(yīng)用將對(duì)于現(xiàn)代社會(huì)的發(fā)展,經(jīng)濟(jì)的繁榮,和提高

12、滿足人類日益增長的物質(zhì)文化需求有著至關(guān)重要的作用。也成就了一批又一智能化控制的工程師和科學(xué)家??萍荚桨l(fā)達(dá),智能化的東西就越多。學(xué)習(xí)單片機(jī)是社會(huì)發(fā)展的必然需求,也是我們現(xiàn)代高級(jí)技工所必須要掌握的技能。</p><p><b>  1.2 選題目的</b></p><p>  隨著人們生活水平的提高和生活節(jié)奏的加快,對(duì)時(shí)間的要求越來越高,精準(zhǔn)數(shù)字計(jì)時(shí)的消費(fèi)需求也是越來越

13、多。</p><p>  二十一世紀(jì)的今天,最具代表性的計(jì)時(shí)產(chǎn)品就是電子萬年歷,它是近代世界鐘表界的第三次革命。第一次是擺和擺輪游絲的發(fā)明,相對(duì)穩(wěn)定的機(jī)械振蕩頻率使鐘表的走時(shí)差從分級(jí)縮小到秒級(jí),代表性的產(chǎn)品就是帶有擺和擺輪游絲的機(jī)械表或鐘。第二次革命是石英晶體振蕩器的應(yīng)用,發(fā)明了走時(shí)精度更高的石英電子鐘表,使鐘表的走時(shí)月差從分級(jí)縮小到了秒級(jí)。第三次革命就是單片機(jī)數(shù)碼計(jì)時(shí)技術(shù)的應(yīng)用(電子萬年歷),使計(jì)時(shí)產(chǎn)品的走時(shí)日

14、差從分級(jí)縮小到了百萬分之一秒,從原有傳統(tǒng)指針計(jì)時(shí)的方式發(fā)展為人們?nèi)粘8鼮槭煜さ囊构鈹?shù)字顯示式,直觀明了,并增加了全自動(dòng)日期、星期、溫度以及其他日常附屬信息的顯示功能,他更符合消費(fèi)者的生活需求,因此,電子萬年歷的出現(xiàn)帶來了鐘表計(jì)時(shí)業(yè)跨越性的進(jìn)步。</p><p><b>  1.3 設(shè)計(jì)意義</b></p><p>  (1)在學(xué)習(xí)了《模擬數(shù)字技術(shù)和數(shù)字電子技術(shù)》和《單

15、片機(jī)原理》課程后,為了加深對(duì)理論知識(shí)的理解,學(xué)習(xí)理論知識(shí)在實(shí)際中的運(yùn)用,培養(yǎng)動(dòng)手能力和解決實(shí)際問題的經(jīng)驗(yàn)并接觸專用時(shí)鐘芯片DS1302,并會(huì)用DS1302芯片開發(fā)時(shí)鐘模塊,應(yīng)用到其他系統(tǒng)中去。熟悉protues 和 kiel軟件調(diào)試程序和仿真。</p><p>  (2)通過實(shí)驗(yàn)提高對(duì)單片機(jī)的認(rèn)識(shí)。</p><p> ?。?)通過實(shí)驗(yàn)提高焊接、布局、電路檢查能力。</p>

16、<p>  (4)通過實(shí)驗(yàn)提高軟件調(diào)試能力。</p><p>  (5)進(jìn)一步熟悉和掌握單片機(jī)的結(jié)構(gòu)及工作原理。</p><p>  (6)通過課程設(shè)計(jì),掌握以單片機(jī)核心的電路設(shè)計(jì)的基本方法和技術(shù),了解表關(guān)電路參數(shù)的計(jì)算方法。</p><p> ?。?)通過實(shí)際程序設(shè)計(jì)和調(diào)試,逐步掌握模塊化程序設(shè)計(jì)方法和調(diào)試技術(shù)。</p><p>

17、 ?。?)通過完成一個(gè)包括電路設(shè)計(jì)和程序開發(fā)的完整過程,使學(xué)生了解開發(fā)一單片機(jī)應(yīng)用系統(tǒng)的全過程,為今后從事相應(yīng)的工作打下堅(jiān)實(shí)的基礎(chǔ)。</p><p>  2 設(shè)計(jì)要求與方案論證</p><p><b>  2.1 設(shè)計(jì)要求</b></p><p>  (1)具有年、月、日、星期、時(shí)、分、秒等功能。</p><p> ?。?/p>

18、2)具有溫度顯示功能和溫度報(bào)警功能。</p><p>  (3)具備年、月、日、星期、時(shí)、分、秒校準(zhǔn)功能。</p><p>  2.2 系統(tǒng)基本方案選擇和論證</p><p>  2.2.1 單片機(jī)芯片的選擇和方案論證</p><p>  方案一:采用89C51芯片作為硬件核心,內(nèi)部具有4KB ROM存儲(chǔ)空間,能于3V的超低電壓工作,而且與M

19、CS-51系列單片機(jī)完全兼容,但是運(yùn)用于電路設(shè)計(jì)中時(shí)由于不具備ISP在線編程技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),對(duì)芯片的多次查吧會(huì)對(duì)芯片造成一定的損壞。</p><p>  方案二: 采用AT89C52片內(nèi)ROM全都采用FlashROM:能以3V的超低電壓工作,同時(shí)也與MCS-51系列單片機(jī)完全兼容,該芯片內(nèi)部存儲(chǔ)器為8KB ROM存儲(chǔ)空間,同時(shí)具有89C51的功能,且

20、具有在線編程可擦除技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或程序的新增功能需要燒入程序時(shí),不需要對(duì)芯片進(jìn)行多次插拔,所以不會(huì)對(duì)芯片造成損壞。</p><p>  綜上所述,所以采用AT89C52作為主控系統(tǒng)。</p><p>  2.2.2 顯示模塊選擇方案和論證</p><p>  方案一:采用LED數(shù)碼管動(dòng)態(tài)掃描,LED數(shù)碼管價(jià)格適中,對(duì)于顯示數(shù)字最合適,

21、而且采用動(dòng)態(tài)掃描法與單片機(jī)相連接時(shí),占用的單片機(jī)口線少,但所需要的數(shù)碼管數(shù)量太多,焊接困難極易出錯(cuò),所以不采用LED數(shù)碼管作為顯示。</p><p>  方案二:采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對(duì)于顯示文字比較合適,如果用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對(duì)較高,所以也不用此種作為顯示。</p><p>  方案三:采用LCD液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)

22、大,可顯示大量文字,圖形,顯示多樣,清晰可見。</p><p>  綜上所述,我們應(yīng)該選取LCD液晶顯示屏。</p><p>  2.2.3 時(shí)鐘芯片的選擇方案和論證</p><p>  方案一:直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供秒信號(hào),使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒技術(shù),采用此種方案雖然減小芯片的使用,節(jié)約成本,但是,實(shí)現(xiàn)的時(shí)間誤差較大,所以不采用此方案。&l

23、t;/p><p>  方案二:采用DS1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘,DS1302芯片是一種高性能的時(shí)鐘芯片,可自動(dòng)對(duì)秒、分、時(shí)、日、周、月、年以及閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù),而且精度高,位的RAM作為數(shù)據(jù)暫存區(qū),工作電壓2.5V-5.5V范圍內(nèi),2.5V時(shí)耗電小于300Ma。</p><p>  綜上所述,我們采用DS1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘。</p><p>  2.2.4 溫

24、度傳感器的選擇方案與論證</p><p>  方案一:使用熱敏電阻作為傳感器,用熱敏電阻與一個(gè)相應(yīng)阻值電阻相串聯(lián)分壓,利用熱敏電阻阻值隨溫度變化而變化的特性,采集這兩個(gè)電阻變化的分壓值,并進(jìn)行A/D轉(zhuǎn)換。。此設(shè)計(jì)方案需用A/D轉(zhuǎn)換電路,增加硬件成本而且熱敏電阻的感溫特性曲線并不是嚴(yán)格線性的,會(huì)產(chǎn)生較大的測(cè)量誤差。</p><p>  方案二:采用數(shù)字式溫度傳感器DS18B20,此類傳感器為

25、數(shù)字式傳感器而且僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,易于與單片機(jī)連接,可以去除A/D模塊,降低硬件成本,簡化系統(tǒng)電路。另外,數(shù)字式溫度傳感器還具有測(cè)量精度高、測(cè)量范圍廣等優(yōu)點(diǎn)。</p><p>  綜上所述,我們采用數(shù)字式溫度傳感器DS18B20。</p><p>  2.3 最終方案確定</p><p>  核心控制體:AT89C52單片機(jī)</p><

26、;p>  實(shí)時(shí)時(shí)鐘芯片:DS1302</p><p>  數(shù)字式溫度傳感器:DS18B20</p><p><b>  LCD液晶顯示屏</b></p><p>  總共設(shè)有四個(gè)按鍵,為節(jié)約資源考慮,每個(gè)按鍵都有多種功能。每個(gè)按鍵分別標(biāo)號(hào)為A,B,C,D.第一次按下B,C,D都沒有反應(yīng),首先按下A鍵可選擇指針位置,B,C鍵為加減鍵,D鍵為

27、鬧鐘設(shè)置鍵。B同時(shí)又是鬧鐘報(bào)警消除鍵。操作簡單,按鍵靈活。</p><p>  3 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)</p><p>  3.1 系統(tǒng)硬件概述</p><p>  本電路是由AT89S52單片機(jī)作為控制核心,具有在線編程功能,低功耗,能在3V超低壓工作;時(shí)鐘電路由DS1302提供,它是一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、時(shí)、分、秒等進(jìn)

28、行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V-5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)用于臨時(shí)存放數(shù)據(jù)的RAM寄存器??僧a(chǎn)生年、月、日、時(shí)、分、秒等,具有使用壽命長,精度高和低功耗等特點(diǎn),同時(shí)具有掉電自動(dòng)保存功能;溫度的采集由DS18B20構(gòu)成,顯示部分為LCD液晶顯示屏,能夠?qū)崿F(xiàn)字符與數(shù)字同時(shí)顯示的功能。</p><p>  3.

29、1.1 系統(tǒng)設(shè)計(jì)框圖</p><p>  圖2 系統(tǒng)組成框圖圖</p><p>  3.1.2 系統(tǒng)硬件需求介紹</p><p>  AT89C52單片機(jī)一片,DS1302實(shí)時(shí)時(shí)鐘芯片一個(gè),DS18B20數(shù)字式溫度傳感器一個(gè),+5V無源蜂鳴器二個(gè),12MHZ晶振一個(gè),多個(gè)按鍵和開關(guān),常用電容電阻,連接線,三極管,二極管若干,滑動(dòng)變阻器一個(gè),USB母口一個(gè)。</

30、p><p>  3.2 系統(tǒng)硬件各模塊作用</p><p>  3.2.1 控制系統(tǒng)的設(shè)計(jì)</p><p><b>  圖3 主控制系統(tǒng)</b></p><p>  圖3為單片機(jī)最小電路,其中晶振頻率可以根據(jù)自己需要進(jìn)行選擇,范圍在0-24MHZ,常用12MHZ。復(fù)位電路得電容一般用10UF,但并不唯一,只要RC所得時(shí)間大于

31、兩個(gè)機(jī)器周期即可。還有其P0內(nèi)部無上拉電阻,所以在執(zhí)行輸出功能時(shí),外部必須接上拉電阻(一般10K即可)。</p><p>  P0口有兩個(gè)作用,一個(gè)接上DS1302的AD0-AD7(雙向地址/數(shù)據(jù)復(fù)用總線),控制著DS1302的8位并行數(shù)據(jù)的地址和數(shù)據(jù)的傳輸,另接上液晶的DB0-DB7(數(shù)據(jù)總線)控制著向液晶發(fā)送8位并行數(shù)據(jù)。P1.7接上DS1302的單數(shù)據(jù)線,發(fā)送并接受數(shù)據(jù),地址的操作。P3.0到P3.3作為獨(dú)

32、立按鍵口。P2.4口為液晶的數(shù)據(jù)/命令選擇端,1為數(shù)據(jù),二為命令,P2.5口控制液晶讀/寫選擇端,1為讀命令,0為寫操作,P2.6口控制液晶使能信號(hào)。對(duì)DS1302:P2.0口控制DS1302的片選信號(hào)的輸入(CS),P2.1口控制地址選通輸入(AS),P2.2口為讀寫輸入(R/W),P2.3控制著數(shù)據(jù)選通或讀輸入(DS)。P3.2(外部中斷0)接reset管腳,當(dāng)鬧鐘時(shí)間到時(shí)便由此觸發(fā)外部中斷0,進(jìn)入到外部中斷0程序中。P1.0和P1

33、.1口分別控制著蜂鳴器的報(bào)警,當(dāng)溫度、時(shí)間到達(dá)限定值時(shí)會(huì)發(fā)出高低電平脈沖,以至發(fā)出報(bào)警聲音。</p><p>  3.2.2時(shí)鐘電路模塊的設(shè)計(jì)</p><p>  圖4示出DS1302的引腳排列,其中VCC1為后備電源,VCC2為主電源,在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行,DS1302由VCC1或VCC2兩者中的較大者供電,當(dāng)VCC2大于VCC1+0.2V時(shí),VCC2給DS130

34、2供電,當(dāng)VCC2小于VCC1時(shí)候VCC1供電。X1和X2是振蕩源,外接32.768KHz晶振,RST是復(fù)位片選線,通過把RST輸入驅(qū)動(dòng)置高電平來啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段,當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作,如果在傳送過程中RST置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)?/p>

35、高阻態(tài),上電運(yùn)行時(shí),在VCC大于等于2.5V之前,RST必須保持低電平,中有在SCLK為低電平時(shí),才能將RST置為高電平,I/O為串行數(shù)據(jù)輸入端,SCLK始終是輸入端。</p><p>  時(shí)鐘電路芯片DS1302引腳圖如圖4所示:</p><p>  圖4 DS1302的引腳圖 </p><p><b>  工作原理如下:</b></

36、p><p>  (1) 時(shí)鐘芯片DS1302的工作原理:</p><p>  DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時(shí)序如下圖4所示。圖5為DS1302的控制字,此控制字的位7必須置1,若為0則不能把對(duì)DS1302進(jìn)行讀寫數(shù)據(jù)。對(duì)于位6,若對(duì)程序進(jìn)行讀/寫時(shí)RAM=1,對(duì)時(shí)間進(jìn)行讀/寫時(shí),CK=0。位1至

37、位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時(shí),該位為1;該位為0則表示進(jìn)行的是寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的。表6為DS1302的日歷、時(shí)間寄存器內(nèi)容:“CH”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開始運(yùn)行。“WP”</p><p>  是寫保護(hù)位,在任何的對(duì)時(shí)鐘和RAM的寫操作之前,WP必須為0。當(dāng)“WP”為1時(shí),寫保護(hù)位防止對(duì)任一

38、寄存器的寫操作。</p><p>  (2) DS1302的控制字節(jié)</p><p>  DS1302的控制字如表1所示。控制字節(jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出<

39、;/p><p>  表1 DS1302的控制字格式</p><p>  RAM RD</p><p>  1 A4 A3 A2 A1 A0 </p><p>  / CK

40、 /WR</p><p>  (3) 數(shù)據(jù)輸入輸出(I/O)</p><p>  在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。如圖5所示:</p><p>

41、;  圖5 DS1302讀/寫時(shí)序圖</p><p>  (4) DS1302的寄存器</p><p>  DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字見表2。</p><p>  表2 DS1302的日歷、時(shí)間寄存器</p><p>  此外,DS1302 還有年份

42、寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫)、FFH(讀)。 </p&g

43、t;<p>  3.2.3 溫度采集模塊設(shè)計(jì)</p><p>  如圖6所示。采用數(shù)字式溫度傳感器DS18B20,它是數(shù)字式溫度傳感器,具有測(cè)量精度高,電路連接簡單特點(diǎn),此類傳感器僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,使用P0.7與DS18B20的I/O口連接加一個(gè)上拉電阻,Vcc接電源,Vss接地。</p><p>  當(dāng)系統(tǒng)在正常顯示狀態(tài)下需要進(jìn)行調(diào)整時(shí),按一下切換鍵進(jìn)入按鍵處理

44、中斷程序,并且此時(shí)默認(rèn)的是調(diào)整年,在液晶顯示器上顯示N,此時(shí)按加或減按鈕可以進(jìn)行加減調(diào)整,若再按一下切換鍵,則跳到月上顯示Y,同樣可以調(diào)整加減,同樣的道理,進(jìn)入日(R)、時(shí)(S)、分(F)、秒(M)的調(diào)整,最后再按一下切換鍵時(shí)退出中斷程序,星期系統(tǒng)自動(dòng)的調(diào)整過來。</p><p>  圖6 溫度傳感器部分</p><p>  3.2.4 鬧鐘(蜂鳴器電路模塊)</p><

45、;p>  鬧鐘模塊的接線如圖7所示,蜂鳴器用CS9013三極管驅(qū)動(dòng),蜂鳴器用5V的無源蜂鳴器,并接一個(gè)發(fā)光二極管作為指示燈,同時(shí)在發(fā)光二極管前串接個(gè)限流電阻,數(shù)據(jù)端口分別接P1.0,P1.1(由單片機(jī)的P1.0,P1.1直接輸出驅(qū)動(dòng))。</p><p><b>  圖7 蜂鳴器部分</b></p><p>  3.2.5 按鍵部分</p><

46、p>  按鍵部分如圖8所示,本設(shè)計(jì)總的用了四個(gè)按扭開關(guān)作為鍵盤,其中一個(gè)是鬧鐘復(fù)位鍵,另三個(gè)中的其中兩個(gè)是調(diào)整時(shí)間增加、減少的鍵,第三個(gè)是切換年、月、日及時(shí)、分的顯示狀態(tài)并在所切換的顯示狀態(tài)下配合加減兩個(gè)鍵調(diào)整時(shí)間。</p><p><b>  圖8 按鍵部分</b></p><p>  3.2.6 液晶顯示模塊概述</p><p>  

47、液晶顯示模塊如圖9所示,字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,本設(shè)計(jì)采用16列*2行的字符型LCD1602帶背光的液晶顯示屏。</p><p><b>  圖9 液晶顯示部分</b></p><p><b>  4系統(tǒng)的軟件實(shí)現(xiàn)</b></p><p><b>  4.1系統(tǒng)硬件概述

48、</b></p><p>  軟件設(shè)計(jì)是本設(shè)計(jì)的關(guān)鍵,軟件程序編寫的好壞直接影響著系統(tǒng)運(yùn)行情況的良好。因本程序涉及的模塊較多,所以程序編寫也采用模塊化設(shè)計(jì),C語言具有編寫靈活、移植方便、便于模塊化設(shè)計(jì)的特點(diǎn),所以本系統(tǒng)的軟件采用C51編寫。</p><p><b>  4.2程序流程框圖</b></p><p><b> 

49、 圖6 主程序流程圖</b></p><p>  圖7 時(shí)間調(diào)整程序流程圖</p><p><b>  5系統(tǒng)測(cè)試</b></p><p><b>  5.1軟件測(cè)試</b></p><p>  電子成年歷是多功能的數(shù)字型,可以看當(dāng)前日期和時(shí)間,還有溫度的儀器。電子成年歷功能很多,所以對(duì)

50、于它的程序也較為復(fù)雜,所以在編寫程序和調(diào)試時(shí)出現(xiàn)了相對(duì)較多的問題。最后經(jīng)過多次的模塊子程序的修改,一步一步的完成,最終解決了軟件。在軟件的調(diào)試過程中主要遇到的問題如下:</p><p>  加入溫度的程序后,進(jìn)行修改時(shí)間、日期時(shí)相應(yīng)的LCD1602相應(yīng)位沒有按要求閃動(dòng)。</p><p>  解決:由于DS18B20是串行通信數(shù)據(jù),只用一個(gè)口線傳輸,在處理采集的模擬信號(hào)時(shí)需要一定的時(shí)間,當(dāng)把

51、萬年歷的程序相接入時(shí),會(huì)對(duì)延時(shí)有很大的影響。所以在調(diào)用溫度子程序時(shí),先關(guān)閉定時(shí)器中斷允許,在溫度子程序反回時(shí)再打開定時(shí)器中斷允許。最終解決了此問題。</p><p><b>  5.2測(cè)試結(jié)論</b></p><p>  經(jīng)過測(cè)試,本文設(shè)計(jì)的電子萬年歷具備顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點(diǎn),符合電子計(jì)時(shí)器的發(fā)展趨勢(shì)。經(jīng)過多次的反復(fù)測(cè)試與分析,可以對(duì)電路的

52、原理及功能更加熟悉,同時(shí)提高了設(shè)計(jì)能力與及對(duì)電路的分析能力.同時(shí)在軟件的編程方面得到更到的提高,對(duì)編程能力得到加強(qiáng).同時(shí)對(duì)所學(xué)的知識(shí)得到很大的提高與鞏固。</p><p>  6 設(shè)計(jì)總結(jié)與心得體會(huì)</p><p>  本系統(tǒng)以AT89C51為核心部件,使用串行時(shí)鐘芯片DS1302,實(shí)現(xiàn)時(shí)間和鬧鐘的功能設(shè)置。通過鍵盤和液晶顯示屏可方便地校對(duì)時(shí)鐘和設(shè)置鬧鐘時(shí)間,本系統(tǒng)基本完成了實(shí)用電子鐘的功

53、能,盡量做到了硬件電路簡單穩(wěn)定,減少電磁干擾和其他環(huán)境干擾。在該系統(tǒng)設(shè)計(jì),調(diào)試完成之后,對(duì)最后的成功進(jìn)行分析,同時(shí)結(jié)合在調(diào)試過程中出現(xiàn)的錯(cuò)誤進(jìn)行綜合分析,總結(jié)在實(shí)際系統(tǒng)設(shè)計(jì)和調(diào)試過程中的寶貴經(jīng)驗(yàn)。</p><p>  在系統(tǒng)硬件設(shè)計(jì)之前,要結(jié)合當(dāng)前系統(tǒng)的發(fā)展趨勢(shì)和現(xiàn)狀對(duì)系統(tǒng)功能進(jìn)行定位,使系統(tǒng)在實(shí)際應(yīng)用中具有競爭力。該系統(tǒng)最大的特點(diǎn)就是界面友好,走時(shí)準(zhǔn)確,和現(xiàn)在使用LED顯示數(shù)據(jù)的萬年歷相比,體積更小,可以作為轎

54、車車載顯示裝置,系統(tǒng)采用液晶顯示器,可以使系統(tǒng)應(yīng)用到更加現(xiàn)代化的地方系統(tǒng)具有溫度檢測(cè)功能,可以作為工業(yè)溫度檢測(cè)裝置,系統(tǒng)的按鍵輸入功能,可以讀取決策,我們可以通過按鍵發(fā)送指令,控制工業(yè)現(xiàn)場(chǎng)機(jī)器的動(dòng)作,實(shí)現(xiàn)遠(yuǎn)程控制。</p><p>  可見,該系統(tǒng)本身不僅具有很大的靈活性,友好的界面,方便的可擴(kuò)展性,同時(shí),在其基礎(chǔ)上的系統(tǒng)市場(chǎng)需求也很客觀,工業(yè)控制的很多場(chǎng)合對(duì)時(shí)間要求比較嚴(yán)格,在實(shí)際系統(tǒng)中,系統(tǒng)各裝置按照預(yù)定的時(shí)

55、間動(dòng)作,本系統(tǒng)可以很好的滿足這些系統(tǒng)的要求。</p><p>  通過本次課程設(shè)計(jì)讓我很好的理解了電子萬年歷的組成部分和工作原理,也更加的激發(fā)了我學(xué)習(xí)單片機(jī)的興趣,使我明白了只有自己親自動(dòng)手才能真正地深刻理解并掌握課本上的理論知識(shí),把理論付諸于實(shí)踐才能牢牢的把課本上的知識(shí)變成自己的。本次課程設(shè)計(jì)也使我認(rèn)識(shí)到了認(rèn)真、仔細(xì)的態(tài)度在現(xiàn)在的學(xué)習(xí)和以后的工作中是多么的重要,“細(xì)節(jié)決定成敗”,因此,從現(xiàn)在開始就要逐步培養(yǎng)自己

56、的認(rèn)真負(fù)責(zé)的心態(tài),并養(yǎng)成注重細(xì)節(jié)的良好習(xí)慣。</p><p><b>  7參考文摘 </b></p><p>  [1] 馮博琴,吳寧主編.微機(jī)原理與接口技術(shù)[M].第2版.北京:清華大學(xué)出版社,2007</p><p>  [2] 康華光主編.模擬電子技術(shù)基礎(chǔ).第5版[M].武漢:高等教育出版社,2005</p><p&

57、gt;  [3] 李群芳,張士軍,黃建主編.單片微型計(jì)算機(jī)[M].第3版.北京:電子工業(yè)出版社,2008</p><p>  [4] 馬忠梅主編.單片機(jī)C語言應(yīng)用程序設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,1997</p><p>  [5] 公茂法,馬寶甫,孫晨等.單片機(jī)人機(jī)接口實(shí)例集[M].北京:北京航空航天大學(xué)出版社,1997</p><p>  [6] 胡

58、漢才編.單片機(jī)原理及其接口技術(shù)[M].清華大學(xué)出版社,2001.</p><p>  [7] 馬淑華,高原.電子設(shè)計(jì)自動(dòng)化[M].北京:北京郵電大學(xué)出版社,2006:95-131.</p><p>  [9]單片機(jī)數(shù)據(jù)通信技術(shù)從入門到精通[M].西安:西安電子科技大學(xué)出版社,2002:75-90</p><p><b>  8附錄</b><

59、;/p><p><b>  1.源程序</b></p><p>  #include <reg52.H> //調(diào)用外函數(shù)//</p><p>  #include <ctype.h></p><p>  #include <string.h></p><p&

60、gt;  #include <stdlib.h></p><p>  #include <stdio.h></p><p>  #include <math.h></p><p>  #include<intrins.h> //包含_nop_()函數(shù)定義的頭文件</p><p>  #defi

61、ne uchar unsigned char</p><p>  #define uint unsigned int</p><p>  uchar LCD_DSY_BUF1[16]={0};</p><p>  uchar LCD_DSY_BUF2[16]={0};</p><p>  uchar LCD_DSY_BUF3[16],

62、LCD_DSY_BUF4[16];</p><p>  //uchar DS18B20_ERROR=0;//傳感器狀態(tài)標(biāo)志</p><p>  //char Current_Temp_Display_Buffer[6]={" "};//當(dāng)前溫度顯示緩存</p><p>  uchar Display_Digit[]={0,0,0,0};//各溫度

63、待顯示的數(shù)位</p><p>  #define RAM 0xC0 //片內(nèi)RAM地址</p><p>  //DS1302引腳定義</p><p>  sbit RST=P1^5;</p><p>  sbit IO=P1^7; </p><p>  sbit SCLK=P1^6; <

64、/p><p>  sbit p2_3=P2^3;</p><p>  sbit p2_4=P2^4 ; </p><p>  sbit p2_5=P2^5 ;</p><p>  sbit p2_6=P2^6;</p><p>  sbit ALARM_OPEN=P0^7;

65、</p><p>  sbit p0_0=P0^0;</p><p><b>  //按鍵定義</b></p><p>  #define KEY_SET() p2_3==0</p><p>  #define KEY_UP() p2_4==0</p><p>  #define KEY_D

66、OWN() p2_5==0</p><p>  #define BUZZER_0() p2_6==0</p><p>  #define DI_1() p0_0=1;</p><p>  #define DI_0() p0_0=0;</p><p>  //DS1302端口數(shù)據(jù)讀寫(方向)</p>

67、<p>  #define DATA_IO_RD() IO=1</p><p>  //DS1302控制引腳操作定義</p><p>  #define WR_IO_0() IO=0</p><p>  #define WR_IO_1() IO=1 </p><p>  #define SCLK_1() SCLK=1</p

68、><p>  #define SCLK_0() SCLK=0</p><p>  #define RST_1() RST=1</p><p>  #define RST_0() RST=0</p><p>  //LCD數(shù)據(jù)端口定義</p><p>  #define LCD_Data P3 </p

69、><p>  sbit BF=P3^7;</p><p>  sbit RS=P1^4;</p><p>  sbit RW=P1^3;</p><p>  sbit EN=P1^2;</p><p>  //LCD控制引腳操作定義 </p><p>  #define RS_

70、1()RS=1</p><p>  #define RS_0()RS=0</p><p>  #define RW_1()RW=1</p><p>  #define RW_0()RW=0</p><p>  #define EN_1()EN=1</p><p>  #define EN_0()EN=0&l

71、t;/p><p>  //0,1,2,3,4,5,6分別對(duì)應(yīng)周日,周一至周六</p><p>  //uchar *WEEK[] = {"MON","TUS","WEN","THU","FRI","SAT","SUN"};</p><p

72、>  //所讀取/設(shè)置的日期時(shí)間秒,分,時(shí),日,月,周,年</p><p>  uchar DateTime[]={35,10,8,30,5,3,12}; </p><p>  uchar AlarmClock[]={10,8}; </p><p>  sbit DS=P1^0; //define interface</p>

73、<p>  uint temp; // variable of temperature</p><p>  uchar flag1; // sign of the result positive or negative</p><p>  void delay(uint count) //delay</p>

74、<p>  { uint i;</p><p>  while(count)</p><p><b>  { i=200;</b></p><p>  while(i>0)</p><p><b>  i--;</b></p><p><b> 

75、 count--;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void Init_Com(void)</p><p>  { TMOD = 0x20;</p><p>  PCON = 0x0

76、0;</p><p>  SCON = 0x50;</p><p>  TH1 = 0xFd;</p><p>  TL1 = 0xFd;</p><p><b>  TR1 = 1;</b></p><p><b>  }</b></p><p> 

77、 void DS_Reset(void) //DS18B20初始化</p><p>  { uint i;</p><p><b>  DS=0;</b></p><p><b>  i=103;</b></p><p>  while(i>0)i--;</p>&

78、lt;p><b>  DS=1;</b></p><p><b>  i=4;</b></p><p>  while(i>0)i--;</p><p><b>  }</b></p><p>  bit Tmp_R_bit(void) //讀一位<

79、;/p><p><b>  {</b></p><p><b>  uint i;</b></p><p><b>  bit dat;</b></p><p>  DS=0;i++; </p><p>  DS=1;i++;i++;<

80、;/p><p><b>  dat=DS;</b></p><p>  i=8;while(i>0)i--;</p><p>  return (dat);</p><p><b>  }</b></p><p>  uchar Tmp_read(void) //讀一字

81、節(jié)</p><p>  { uchar i,j,dat;</p><p><b>  dat=0;</b></p><p>  for(i=1;i<=8;i++)</p><p>  {j=Tmp_readbit();</p><p>  dat=(j<<7)|(dat>&

82、gt;1); //讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個(gè)字節(jié)在DAT里</p><p>  }return(dat);</p><p><b>  }</b></p><p>  void Tmp_W_byte(uchar dat) //寫一字節(jié)</p><p><b>  {</b><

83、;/p><p><b>  uint i;</b></p><p><b>  uchar j;</b></p><p>  bit testb;</p><p>  for(j=1;j<=8;j++)</p><p>  { testb=dat&0x01;<

84、/p><p>  dat=dat>>1;</p><p>  if(testb) //write 1</p><p><b>  { DS=0;</b></p><p><b>  i++;i++;</b></p><p><b>  DS=1;&l

85、t;/b></p><p>  i=8;while(i>0)i--;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  DS=0; &

86、lt;/p><p>  i=8;while(i>0)i--;</p><p><b>  DS=1;</b></p><p><b>  i++;i++;</b></p><p><b>  }</b></p><p><b>  }<

87、/b></p><p><b>  }</b></p><p>  void Tmp_change(void) //</p><p><b>  {</b></p><p>  dsreset();</p><p><b>  delay(1);</b

88、></p><p>  Tmp_W_byte(0xcc); // address all drivers on bus</p><p>  Tmp_W_byte(0x44); // initiates a single temperature conversion</p><p><b>  }</b></p><

89、;p>  void tmp() //溫度轉(zhuǎn)換</p><p><b>  {</b></p><p>  uchar a,b;</p><p>  const uchar df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};//溫度小數(shù)對(duì)照表</p><

90、p>  uchar CurrentT=0; /當(dāng)前讀取溫度的整數(shù)部分</p><p>  uchar ng=0;</p><p>  DS_Reset();</p><p><b>  delay(1);</b></p><p>  Tmp_W_byte(0xcc);</p><p>  T

91、mp_W_byte(0xbe);</p><p>  a=Tmp_read();</p><p>  b=Tmp_read();</p><p>  Display_Digit[0]=df_Table[a&0x0f];//查表法得到溫度小數(shù)部分</p><p>  CurrentT=(a>>4)|(b<<4);

92、//獲取溫度整數(shù)部分</p><p>  Display_Digit[3]= CurrentT/100; //將整數(shù)部分分解為3位待顯示數(shù)字</p><p>  Display_Digit[2]= CurrentT%100/10;</p><p>  Display_Digit[1]= CurrentT%10;</p><p><b&

93、gt;  }</b></p><p>  Void Read_ROM() </p><p><b>  {</b></p><p>  uchar sn1,sn2;</p><p>  dsreset();</p><p><b>  delay(1);&l

94、t;/b></p><p>  Tmp_W_byte(0x33);</p><p>  sn1=Tmp_read(); sn2=Tmp_read();</p><p><b>  }</b></p><p>  void delay10ms() </p><p><

95、b>  {</b></p><p>  uchar a,b;</p><p>  for(a=10;a>0;a--);for(b=60;b>0;b--);</p><p><b>  }</b></p><p>  void delay_ms(uint t)/*延時(shí)ms*/

96、 </p><p><b>  {</b></p><p><b>  uint i,j;</b></p><p>  while(t--)</p><p>  for(i=0;i<100;i++)</p><p>  for(j=0;j<33;j++);<

97、;/p><p><b>  }</b></p><p>  void delay_5us(uint t)/*延時(shí)us*/</p><p><b>  {</b></p><p>  while(t--)</p><p><b>  _nop_();</b>&

98、lt;/p><p><b>  } </b></p><p>  void Write_Byte_TO_DS1302(uchar dat) /* 向DS1302寫入一字節(jié)*/</p><p>  { uchar i;</p><p>  for(i=0; i<8; i++)</p><p>

99、  { IO=(bit)(dat&0x01);</p><p><b>  SCLK_0();</b></p><p>  _nop_();_nop_();_nop_(); </p><p>  SCLK_1(); </p><p><b>  dat>>=1;&

100、lt;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  uchar Get_Byte_FROM_DS1302() /*從DS1302讀出一字節(jié)*/ </p><p><b>  { </b></p>

101、<p>  uchar i,dat = 0x00;</p><p>  for(i=0; i<8; i++)</p><p>  { dat>>=1;</p><p>  DATA_IO_RD();</p><p>  SCLK_1();_nop_();</p><p><b&g

102、t;  SCLK_0();</b></p><p><b>  if(IO)</b></p><p>  dat|= 0x80;</p><p><b>  }</b></p><p>  return dat /16 *10 +dat%16 ;</p><p&g

103、t;<b>  }</b></p><p>  void Write_Data(uchar addr, uchar dat)/*從DS1302指定位置寫數(shù)據(jù)*/ </p><p>  { uchar temp;</p><p>  temp = (((dat/10)<<4)|(dat%10));</p><

104、p><b>  RST_0();</b></p><p><b>  SCLK_0();</b></p><p>  _nop_(); _nop_(); _nop_();</p><p><b>  RST_1();</b></p><p>  Write_Byte_

105、TO_DS1302(addr);</p><p>  Write_Byte_TO_DS1302(temp);</p><p><b>  RST_0();</b></p><p><b>  }</b></p><p>  uchar Read_Data(uchar addr)/*從dS1302指定

106、位置讀數(shù)據(jù)*/</p><p>  { uchar dat;</p><p><b>  RST_0();</b></p><p><b>  SCLK_0();</b></p><p>  _nop_(); _nop_(); _nop_();</p><p><

107、;b>  RST_1();</b></p><p>  Write_Byte_TO_DS1302(addr);</p><p>  DATA_IO_RD();</p><p>  dat = Get_Byte_FROM_DS1302();</p><p><b>  RST_0();</b></p

108、><p>  return dat;</p><p><b>  }</b></p><p>  void GetDateTime() /*讀取當(dāng)前日期*/</p><p><b>  {</b></p><p>  uchar i,addr = 0x81;</p>

109、<p>  for(i =0; i<7; i++)//依次讀取秒,分,時(shí),日,月,周,年</p><p><b>  {</b></p><p>  DateTime[i] =Read_Data( addr); //_nop_();_nop_();_nop_();</p><p>  addr += 2;</p

110、><p><b>  }</b></p><p><b>  }</b></p><p>  void SetDateTime() /*設(shè)置日期時(shí)間*/</p><p><b>  {</b></p><p><b>  uchar i;<

111、/b></p><p>  Write_Data(0x8E,0x00); //解除寫保護(hù),地址0x8E,0x00解除,0x80保護(hù)</p><p>  for(i =1; i<7; i++)//依次讀取秒,分,時(shí),日,月,周,年</p><p><b>  {</b></p><p>  Wri

112、te_Data((0x80 + 2*i),DateTime[i]);</p><p><b>  }</b></p><p>  Write_Data(0x8E,0x80);</p><p><b>  } </b></p><p>  void SetDateTime1() </p>

113、<p>  { uchar i;</p><p>  Write_Data(0x8E,0x00); //解除寫保護(hù),地址0x8E,0x00解除,0x80保護(hù)</p><p>  for(i =0; i<7; i++)//依次讀取秒,分,時(shí),日,月,周,年</p><p><b>  {</b></p&g

114、t;<p>  Write_Data((0x80 + 2*i),DateTime[i]);</p><p><b>  }</b></p><p>  Write_Data(0x8E,0x80);</p><p><b>  }</b></p><p>  void Write_RAM

115、_Clock()/* 向RAM中寫數(shù)據(jù)(可以寫入用戶定義的鬧鐘數(shù)據(jù))*/</p><p>  { uchar i;</p><p>  Write_Data(0x8E,0x00); //解除寫保護(hù),地址0x8E,0x00解除,0x80保護(hù)</p><p>  for( i=0; i<2; i++)</p><p>  Writ

116、e_Data( RAM+2*i, AlarmClock[i]);</p><p>  Write_Data(0x8E,0x80);</p><p><b>  }</b></p><p>  void Read_RAM_Clock()/* 向RAM中讀數(shù)據(jù) */</p><p><b>  {</b>

117、;</p><p><b>  uchar i;</b></p><p>  for( i=0; i<2; i++) //讀取RAM地址 1,3~31</p><p>  AlarmClock[i] = Read_Data( RAM+1+2*i);</p><p><b>  } </b>

118、;</p><p>  uchar Clock_On() /*鬧鐘開始*/</p><p><b>  {</b></p><p>  if ((DateTime[2]== AlarmClock[1])&& ( DateTime[1]== AlarmClock[0] ) )//比較時(shí)</p><p>

119、  return 1;</p><p>  else return 0;</p><p><b>  }</b></p><p>  uchar Clock_Close() //超過5分鐘,鬧鐘自動(dòng)關(guān)閉</p><p><b>  {</b></p><p>  if(

120、AlarmClock[0]> 54)</p><p><b>  {</b></p><p>  if((DateTime[1]+60 -AlarmClock[0])>1)return 1;</p><p>  else return 0;</p><p><b>  }else </b>

121、;</p><p><b>  {</b></p><p>  if( (DateTime[1]- AlarmClock[0]) >1)</p><p>  return 1;</p><p>  else return 0;</p><p><b>  }</b&g

122、t;</p><p><b>  }</b></p><p>  uchar LCD_BUSY_WAIT()/*LCD忙等待*/</p><p><b>  {</b></p><p>  uchar reslt;</p><p><b>  RS_0();<

123、;/b></p><p>  RW_1(); //狀態(tài)/命令寄存器</p><p><b>  EN_1();</b></p><p>  delay_5us(5);</p><p><b>  reslt=BF;</b></p><p><b>  EN

124、_0();</b></p><p>  return reslt; </p><p><b>  }</b></p><p>  void Write_LCD_Command(uchar cmd)/* 寫LCD命令寄存器*/</p><p><b>  { </b></p>

125、;<p>  while(LCD_BUSY_WAIT());</p><p>  RS_0();RW_0(); </p><p>  LCD_Data = cmd;</p><p>  delay_5us(1);</p><p><b>  EN_1();</b></p><p> 

126、 delay_5us(5);</p><p><b>  EN_0();</b></p><p><b>  }</b></p><p>  void Write_LCD_Data(uchar dat)/*寫LCD數(shù)據(jù)寄存器*/</p><p><b>  {</b></

127、p><p>  while(LCD_BUSY_WAIT());</p><p>  RS_1();RW_0();</p><p>  delay_5us(1);</p><p>  LCD_Data = dat;</p><p><b>  EN_1();</b></p><p&g

溫馨提示

  • 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)論