版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 摘 要</b></p><p> 在當(dāng)代繁忙的工作與生活中,時(shí)間與我們每一個(gè)人都有非常親密的關(guān)系,每個(gè)人都收到時(shí)間的影響,為了更好的利用我們自己的時(shí)間,我們必須對(duì)時(shí)間有一個(gè)度量,因此產(chǎn)生了鐘表。隨著社會(huì)、科技的發(fā)展,人類得知時(shí)間,從觀太陽(yáng)、擺鐘到現(xiàn)在電子鐘,不斷研究、創(chuàng)新。為了在觀測(cè)時(shí)間的同時(shí)能夠了解其他與人類密切相關(guān)的信息,比如溫度、星期、日期等,電子萬(wàn)年歷
2、誕生了,它集時(shí)間、日期、星期和于一身,具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。隨著人們生活水平的提高和生活節(jié)奏的加快,對(duì)時(shí)間的要求越來(lái)越高,精準(zhǔn)數(shù)字計(jì)時(shí)的消費(fèi)需求也是越來(lái)越多。</p><p> 該電子萬(wàn)年歷主要采用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í)鐘芯片是美國(guó)DALLAS公司推出的具有涓流電流充電功能的低功耗實(shí)時(shí)時(shí)鐘芯片,它可以對(duì)年、月、日等進(jìn)行計(jì)時(shí),還有閏年補(bǔ)償?shù)裙?/p>
4、能,而且使用壽命長(zhǎng),誤差小,數(shù)字顯示是采用的LCD液晶顯示,可以同時(shí)顯示各種需要的信息。此外,該電子萬(wàn)年歷還具有時(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)域沒(méi)有單片機(jī)的足跡。智能儀表、醫(yī)療器械,導(dǎo)彈的導(dǎo)航裝置,智能監(jiān)控、通訊與數(shù)據(jù)傳輸,工業(yè)自動(dòng)化過(guò)程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能 IC 卡,汽車的安全保障系統(tǒng),動(dòng)控制領(lǐng)域的機(jī)器人,數(shù)碼像機(jī)、電視機(jī)、全自動(dòng)洗衣機(jī)的控制,電話機(jī)以及程控玩具、電子寵物等等,這些都離不開(kāi)單片機(jī)。</p><p> 所以,單片機(jī)的學(xué)習(xí)、開(kāi)發(fā)與應(yīng)用將對(duì)于現(xiàn)代社會(huì)的發(fā)展,經(jīng)濟(jì)的繁榮,和提高
12、滿足人類日益增長(zhǎng)的物質(zhì)文化需求有著至關(guān)重要的作用。也成就了一批又一智能化控制的工程師和科學(xué)家。科技越發(fā)達(dá),智能化的東西就越多。學(xué)習(xí)單片機(jī)是社會(huì)發(fā)展的必然需求,也是我們現(xiàn)代高級(jí)技工所必須要掌握的技能。</p><p><b> 1.2 選題目的</b></p><p> 隨著人們生活水平的提高和生活節(jié)奏的加快,對(duì)時(shí)間的要求越來(lái)越高,精準(zhǔn)數(shù)字計(jì)時(shí)的消費(fèi)需求也是越來(lái)越
13、多。</p><p> 二十一世紀(jì)的今天,最具代表性的計(jì)時(shí)產(chǎn)品就是電子萬(wà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)用(電子萬(wàn)年歷),使計(jì)時(shí)產(chǎn)品的走時(shí)日
14、差從分級(jí)縮小到了百萬(wàn)分之一秒,從原有傳統(tǒng)指針計(jì)時(shí)的方式發(fā)展為人們?nèi)粘8鼮槭煜さ囊构鈹?shù)字顯示式,直觀明了,并增加了全自動(dòng)日期、星期、溫度以及其他日常附屬信息的顯示功能,他更符合消費(fèi)者的生活需求,因此,電子萬(wàn)年歷的出現(xiàn)帶來(lái)了鐘表計(jì)時(shí)業(yè)跨越性的進(jìn)步。</p><p><b> 1.3 設(shè)計(jì)意義</b></p><p> ?。?)在學(xué)習(xí)了《模擬數(shù)字技術(shù)和數(shù)字電子技術(shù)》和《單
15、片機(jī)原理》課程后,為了加深對(duì)理論知識(shí)的理解,學(xué)習(xí)理論知識(shí)在實(shí)際中的運(yùn)用,培養(yǎng)動(dòng)手能力和解決實(shí)際問(wèn)題的經(jīng)驗(yàn)并接觸專用時(shí)鐘芯片DS1302,并會(huì)用DS1302芯片開(kāi)發(fā)時(shí)鐘模塊,應(yīng)用到其他系統(tǒng)中去。熟悉protues 和 kiel軟件調(diào)試程序和仿真。</p><p> (2)通過(guò)實(shí)驗(yàn)提高對(duì)單片機(jī)的認(rèn)識(shí)。</p><p> (3)通過(guò)實(shí)驗(yàn)提高焊接、布局、電路檢查能力。</p>
16、<p> ?。?)通過(guò)實(shí)驗(yàn)提高軟件調(diào)試能力。</p><p> ?。?)進(jìn)一步熟悉和掌握單片機(jī)的結(jié)構(gòu)及工作原理。</p><p> (6)通過(guò)課程設(shè)計(jì),掌握以單片機(jī)核心的電路設(shè)計(jì)的基本方法和技術(shù),了解表關(guān)電路參數(shù)的計(jì)算方法。</p><p> ?。?)通過(guò)實(shí)際程序設(shè)計(jì)和調(diào)試,逐步掌握模塊化程序設(shè)計(jì)方法和調(diào)試技術(shù)。</p><p>
17、 ?。?)通過(guò)完成一個(gè)包括電路設(shè)計(jì)和程序開(kāi)發(fā)的完整過(guò)程,使學(xué)生了解開(kāi)發(fā)一單片機(jī)應(yīng)用系統(tǒng)的全過(guò)程,為今后從事相應(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、大,可顯示大量文字,圖形,顯示多樣,清晰可見(jiàn)。</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模塊,降低硬件成本,簡(jiǎn)化系統(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都沒(méi)有反應(yīng),首先按下A鍵可選擇指針位置,B,C鍵為加減鍵,D鍵為
27、鬧鐘設(shè)置鍵。B同時(shí)又是鬧鐘報(bào)警消除鍵。操作簡(jiǎn)單,按鍵靈活。</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寄存器。可產(chǎn)生年、月、日、時(shí)、分、秒等,具有使用壽命長(zhǎng),精度高和低功耗等特點(diǎn),同時(shí)具有掉電自動(dòng)保存功能;溫度的采集由DS18B20構(gòu)成,顯示部分為L(zhǎng)CD液晶顯示屏,能夠?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無(wú)源蜂鳴器二個(gè),12MHZ晶振一個(gè),多個(gè)按鍵和開(kāi)關(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)部無(wú)上拉電阻,所以在執(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ù)位片選線,通過(guò)把RST輸入驅(qū)動(dòng)置高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段,當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作,如果在傳送過(guò)程中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é)總是從最低位開(kāi)始輸入/輸出的。表6為DS1302的日歷、時(shí)間寄存器內(nèi)容:“CH”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開(kāi)始運(yùn)行?!癢P”</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é)總是從最低位開(kāi)始輸出<
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開(kāi)始。同樣,在緊跟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í)間寄存器及其控制字見(jiàn)表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è)量精度高,電路連接簡(jiǎn)單特點(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)整過(guò)來(lái)。</p><p> 圖6 溫度傳感器部分</p><p> 3.2.4 鬧鐘(蜂鳴器電路模塊)</p><
45、;p> 鬧鐘模塊的接線如圖7所示,蜂鳴器用CS9013三極管驅(qū)動(dòng),蜂鳴器用5V的無(wú)源蜂鳴器,并接一個(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è)按扭開(kāi)關(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語(yǔ)言具有編寫靈活、移植方便、便于模塊化設(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ì)較多的問(wèn)題。最后經(jīng)過(guò)多次的模塊子程序的修改,一步一步的完成,最終解決了軟件。在軟件的調(diào)試過(guò)程中主要遇到的問(wèn)題如下:</p><p> 加入溫度的程序后,進(jìn)行修改時(shí)間、日期時(shí)相應(yīng)的LCD1602相應(yīng)位沒(méi)有按要求閃動(dòng)。</p><p> 解決:由于DS18B20是串行通信數(shù)據(jù),只用一個(gè)口線傳輸,在處理采集的模擬信號(hào)時(shí)需要一定的時(shí)間,當(dāng)把
51、萬(wàn)年歷的程序相接入時(shí),會(huì)對(duì)延時(shí)有很大的影響。所以在調(diào)用溫度子程序時(shí),先關(guān)閉定時(shí)器中斷允許,在溫度子程序反回時(shí)再打開(kāi)定時(shí)器中斷允許。最終解決了此問(wèn)題。</p><p><b> 5.2測(cè)試結(jié)論</b></p><p> 經(jīng)過(guò)測(cè)試,本文設(shè)計(jì)的電子萬(wàn)年歷具備顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子計(jì)時(shí)器的發(fā)展趨勢(shì)。經(jīng)過(guò)多次的反復(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è)置。通過(guò)鍵盤和液晶顯示屏可方便地校對(duì)時(shí)鐘和設(shè)置鬧鐘時(shí)間,本系統(tǒng)基本完成了實(shí)用電子鐘的功
53、能,盡量做到了硬件電路簡(jiǎn)單穩(wěn)定,減少電磁干擾和其他環(huán)境干擾。在該系統(tǒng)設(shè)計(jì),調(diào)試完成之后,對(duì)最后的成功進(jìn)行分析,同時(shí)結(jié)合在調(diào)試過(guò)程中出現(xiàn)的錯(cuò)誤進(jìn)行綜合分析,總結(jié)在實(shí)際系統(tǒng)設(shè)計(jì)和調(diào)試過(guò)程中的寶貴經(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)用中具有競(jìng)爭(zhēng)力。該系統(tǒng)最大的特點(diǎn)就是界面友好,走時(shí)準(zhǔn)確,和現(xiàn)在使用LED顯示數(shù)據(jù)的萬(wàn)年歷相比,體積更小,可以作為轎
54、車車載顯示裝置,系統(tǒng)采用液晶顯示器,可以使系統(tǒng)應(yīng)用到更加現(xiàn)代化的地方系統(tǒng)具有溫度檢測(cè)功能,可以作為工業(yè)溫度檢測(cè)裝置,系統(tǒng)的按鍵輸入功能,可以讀取決策,我們可以通過(guò)按鍵發(fā)送指令,控制工業(yè)現(xiàn)場(chǎng)機(jī)器的動(dòng)作,實(shí)現(xiàn)遠(yuǎn)程控制。</p><p> 可見(jiàn),該系統(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> 通過(guò)本次課程設(shè)計(jì)讓我很好的理解了電子萬(wàn)年歷的組成部分和工作原理,也更加的激發(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)在開(kāi)始就要逐步培養(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ǔ)言應(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() /*鬧鐘開(kāi)始*/</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() //超過(guò)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子萬(wàn)年歷課程設(shè)計(jì) (2)
- 課程設(shè)計(jì)報(bào)告--電子萬(wàn)年歷
- proteus課程設(shè)計(jì)--電子萬(wàn)年歷
- 電子萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- c語(yǔ)音電子萬(wàn)年歷課程設(shè)計(jì)
- 多功能電子萬(wàn)年歷課程設(shè)計(jì)
- java萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- 數(shù)字萬(wàn)年歷課程設(shè)計(jì)
- java課程設(shè)計(jì)--萬(wàn)年歷
- 萬(wàn)年歷課程設(shè)計(jì)論文
- 課程設(shè)計(jì)-萬(wàn)年歷系統(tǒng)
- 萬(wàn)年歷課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論