版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于51單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)</p><p><b> 摘 要</b></p><p> 電子萬(wàn)年歷是一種非常廣泛日常計(jì)時(shí)工具,對(duì)現(xiàn)代社會(huì)越來(lái)越流行。它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長(zhǎng),誤差小。對(duì)于數(shù)字電子萬(wàn)年歷采用直觀的數(shù)字顯示,可以同時(shí)顯示年、月、日、周日、時(shí)、分、秒
2、和溫度等信息,還具有時(shí)間校準(zhǔn)等功能。該電路采用AT89C52單片機(jī)作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。</p><p> 萬(wàn)年歷的設(shè)計(jì)過(guò)程在硬件與軟件方面進(jìn)行同步設(shè)計(jì)。硬件部分主要由AT89C52單片機(jī),LED顯示電路,以及調(diào)時(shí)按鍵電路等組成。為了能更輕松的控制這三片顯示器,本人使用了3片74HC164來(lái)驅(qū)動(dòng)。74HC164 是 8 位邊沿觸發(fā)式移位寄存器,串行輸入數(shù)據(jù),然后并行輸
3、出。軟件方面主要包括日歷程序、時(shí)間調(diào)整程序,公歷轉(zhuǎn)陰歷程序,顯示程序等。程序采用C語(yǔ)言語(yǔ)言編寫,以便更簡(jiǎn)單地實(shí)現(xiàn)調(diào)整時(shí)間及陰歷顯示功能。所有程序編寫完成后,在keil uvision4軟件中進(jìn)行調(diào)試好后,在Proteus軟件中進(jìn)行仿真。</p><p> 關(guān)鍵詞: DS1302; DS18B20; 動(dòng)態(tài)掃描; 單片機(jī) </p><p> Electronic calendar desi
4、gn based on 51 MCU</p><p><b> Abstract</b></p><p> Electronic calendar day time is a very wide range of tools, increasingly popular in modern society. It can be timed to the year,
5、month, day, Sunday, when, minutes and seconds, also has a leap year compensation and other functions, and the DS1302's long life, small error. For the digital electronic calendar using visual digital display, can dis
6、play year, month, day, Sunday, when, minutes and seconds, and temperature and other information, is also a time-calibration functions. The circuit uses AT8</p><p> The design process of the calendar synchro
7、nization in the hardware and software design. Hardware mainly by the AT89C52 microcontroller, LED display circuit, and when the key circuits etc.. In order to the three display control more relaxed, I used 3 pieces of 74
8、HC164 to drive. 74HC164 is a 8 bit edge-triggered shift register, serial input data, and then the parallel output. The software includes calendar program, time to adjust the procedure, turn the lunar calendar program, di
9、splay program. Usi</p><p> Key words: DS1302; DS18B20; Dynamic scanning; MCU</p><p><b> 目 錄</b></p><p><b> 摘 要I</b></p><p> A
10、bstractII</p><p><b> 目 錄1</b></p><p><b> 1 緒論3</b></p><p><b> 1.1 概述3</b></p><p> 1.2 研究目的4</p><p> 2 系統(tǒng)
11、的硬件設(shè)計(jì)與實(shí)現(xiàn)5</p><p> 2.1 電路設(shè)計(jì)框圖5</p><p> 2.2 系統(tǒng)硬件概述5</p><p> 2.3 主要單元電路的設(shè)計(jì)6</p><p> 2.3.1 單片機(jī)主控制模塊的設(shè)計(jì)6</p><p> 2.3.2 時(shí)鐘電路模塊的設(shè)計(jì)6</p><
12、;p> 2.3.3 電路原理及說(shuō)明7</p><p> 2.3.4 顯示模塊的設(shè)計(jì)11</p><p> 3 系統(tǒng)開發(fā)軟件13</p><p> 3.1 Proteus 仿真軟件13</p><p> 3.1.1 Proteus 仿真軟件的特點(diǎn)13</p><p> 3.1.2
13、Proteus ISIS 原理圖設(shè)計(jì)13</p><p> 3.2 Keil C5115</p><p> 3.3 Proteus 與Keil的聯(lián)調(diào)18</p><p> 4 系統(tǒng)的軟件設(shè)計(jì)20</p><p> 4.1 程序流程框圖20</p><p> 4.2 程序的設(shè)計(jì)21<
14、/p><p> 4.2.1 主電路設(shè)計(jì)21</p><p> 4.2.2 鍵盤子程序設(shè)計(jì)22</p><p> 4.2.3 日歷時(shí)鐘子程序設(shè)計(jì)25</p><p> 4.2.4 顯示子程序設(shè)計(jì)26</p><p> 4.2.5 部分程序代碼27</p><p><
15、b> 5 總結(jié)33</b></p><p><b> 參考文獻(xiàn)34</b></p><p><b> 致 謝35</b></p><p> 附錄1 外文參考文獻(xiàn)(譯文)36</p><p> 附錄2 外文參考文獻(xiàn)(原文)39</p><
16、;p><b> 1 緒論</b></p><p><b> 1.1 概述</b></p><p> 在日新月異的21世紀(jì)里,家用電子產(chǎn)品得到了迅速發(fā)展。許多家電設(shè)備都趨于人性化、智能化,這些電器設(shè)備大部分都含有CPU控制器或者是單片機(jī)。單片機(jī)以其高可靠性、高性價(jià)比、低電壓、低功耗等一系列優(yōu)點(diǎn),近幾年得到迅猛發(fā)展和大范圍推廣,廣泛應(yīng)
17、用于工業(yè)控制系統(tǒng)、通訊設(shè)備、日常消費(fèi)類產(chǎn)品和玩具等。并且已經(jīng)深入到工業(yè)生產(chǎn)的各個(gè)環(huán)節(jié)以及人民生活的各個(gè)方面,如車間流水線控制、自動(dòng)化系統(tǒng)等、智能型家用電器(冰箱、空調(diào)、彩電)等。用單片機(jī)來(lái)控制的小型家電產(chǎn)品具有便攜實(shí)用,操作簡(jiǎn)單的特點(diǎn)。</p><p> 時(shí)鐘,自從它發(fā)明的那天起,就成為人類的朋友,但隨著時(shí)間的推移,科學(xué)技術(shù)的不斷發(fā)展,人們對(duì)時(shí)間計(jì)量的精度要求越來(lái)越高,應(yīng)用越來(lái)越廣。怎樣讓時(shí)鐘更好的為人民服務(wù),
18、怎樣讓我們的老朋友煥發(fā)青春呢?這就要求人們不斷設(shè)計(jì)出新型時(shí)鐘。</p><p> 現(xiàn)今,高精度的計(jì)時(shí)工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘,石英表,石英鐘都采用了石英技術(shù),因此走時(shí)精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)校,數(shù)字式電子鐘用集成電路計(jì)時(shí)時(shí),譯碼代替機(jī)械式傳動(dòng),用LED顯示器代替顯示器代替指針顯示進(jìn)而顯示時(shí)間,減小了計(jì)時(shí)誤差,這種表具有時(shí),分,秒顯示時(shí)間的功能,還可以進(jìn)行時(shí)和分的校對(duì),片選的靈
19、活性好。</p><p> 時(shí)鐘電路在計(jì)算機(jī)系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的基礎(chǔ)。在一個(gè)單片機(jī)應(yīng)用系統(tǒng)中,時(shí)鐘有兩方面的含義:一是指為保障系統(tǒng)正常工作的基準(zhǔn)振蕩定時(shí)信號(hào),主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機(jī)系統(tǒng)工作的快慢;二是指系統(tǒng)的標(biāo)準(zhǔn)定時(shí)時(shí)鐘,即定時(shí)時(shí)間,它通常有兩種實(shí)現(xiàn)方法:一是用軟件實(shí)現(xiàn),即用單片機(jī)內(nèi)部的可編程定時(shí)/計(jì)數(shù)器來(lái)實(shí)現(xiàn),但誤差很大,主要用在對(duì)時(shí)間精度要求不高的場(chǎng)合
20、;二是用專門的時(shí)鐘芯片實(shí)現(xiàn),在對(duì)時(shí)間精度要求很高的情況下,通常采用這種方法,典型的時(shí)鐘芯片有:DS1302,DS12887,X1203等都可以滿足高精度的要求。</p><p> 本文設(shè)計(jì)的日歷和時(shí)鐘的顯示廣泛用于小型智能家用電子產(chǎn)品,如電子鐘。利用單片機(jī)進(jìn)行控制,實(shí)時(shí)時(shí)鐘芯片DS1302進(jìn)行記時(shí),外加掉電存儲(chǔ)電路和顯示電路,可實(shí)現(xiàn)時(shí)間的調(diào)整和顯示。電子鐘既可廣泛應(yīng)用于家庭,也可應(yīng)用于銀行、郵電、賓館、醫(yī)院、學(xué)
21、校、企業(yè)、商店等相關(guān)行業(yè)的大廳,以及單位會(huì)議室、門衛(wèi)等場(chǎng)所。因而,此設(shè)計(jì)具有相當(dāng)重要的現(xiàn)實(shí)意義和實(shí)用價(jià)值。</p><p> 時(shí)間,對(duì)人們來(lái)說(shuō)是非常寶貴的,準(zhǔn)確的掌握時(shí)間和分配時(shí)間對(duì)人們來(lái)說(shuō)至關(guān)重要。因此自從時(shí)鐘發(fā)明的那刻起,就成為人類的好朋友。隨著時(shí)間的流逝,科學(xué)技術(shù)的不斷發(fā)展和提高,人們對(duì)時(shí)間計(jì)量的精度要求越來(lái)越高,應(yīng)用越來(lái)越廣。怎樣讓時(shí)鐘更好、更方便、更精確的顯示時(shí)間,這就要求人們不斷設(shè)計(jì)研發(fā)出新型的時(shí)鐘
22、。</p><p> 高精度的計(jì)時(shí)工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘,石英表,石英鐘都采用了石英技術(shù),因此走時(shí)精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)校[1]。數(shù)字式電子鐘用集成電路計(jì)時(shí)時(shí),譯碼代替機(jī)械式傳動(dòng),用LED顯示器代替指針進(jìn)而顯示時(shí)間,減小了計(jì)時(shí)誤差,這種表具有時(shí),分,秒顯示時(shí)間的功能,還可以進(jìn)行時(shí)和分的校對(duì),片選的靈活性好。</p><p> 時(shí)鐘電路在計(jì)算機(jī)系統(tǒng)
23、中起著非常重要的作用,是保證系統(tǒng)正常工作的基礎(chǔ)。在單片機(jī)的應(yīng)用系統(tǒng)中,時(shí)鐘有兩個(gè)方面的含義:一是指為保障系統(tǒng)正常工作的基準(zhǔn)振蕩定時(shí)信號(hào),主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機(jī)系統(tǒng)工作的快慢;二是指系統(tǒng)的標(biāo)準(zhǔn)定時(shí)時(shí)鐘,即定時(shí)時(shí)間,它通常有兩種實(shí)現(xiàn)方法:一是用軟件實(shí)現(xiàn),即用單片機(jī)內(nèi)部的可編程定時(shí)器/計(jì)數(shù)器來(lái)實(shí)現(xiàn);二是用專門的時(shí)鐘芯片實(shí)現(xiàn)[2]。</p><p> 由于51系列單片機(jī)的內(nèi)部具有定時(shí)器/計(jì)
24、數(shù)器的功能,因此采用51系列單片機(jī)里的AT89S51和LED數(shù)碼管為核心,加以必要的電路,來(lái)構(gòu)成了一個(gè)單片機(jī)電子時(shí)鐘。</p><p><b> 1.2 研究目的</b></p><p> 通過(guò)利用MCS-51單片機(jī)內(nèi)部的定時(shí)器/計(jì)數(shù)器功能、中斷系統(tǒng)功能、以及外圍的按鍵和LED顯示器等部件,設(shè)計(jì)一個(gè)基于單片機(jī)的萬(wàn)年歷。設(shè)計(jì)的萬(wàn)年歷通過(guò)數(shù)碼管顯示,并能通過(guò)按鍵對(duì)時(shí)
25、間進(jìn)行設(shè)置。</p><p> 2 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)</p><p> 2.1 電路設(shè)計(jì)框圖</p><p> 圖2.1 電路設(shè)計(jì)框圖</p><p> 2.2 系統(tǒng)硬件概述</p><p> 本電路是由AT89C52單片機(jī)為控制核心,具有在線編程功能,低功耗,能在3V超低壓工作;時(shí)鐘電路由DS13
26、02提供,它是一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31*8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器??僧a(chǎn)生年、月、日、周日、時(shí)、分、秒,具有使用壽命長(zhǎng),精度高和低功耗等特點(diǎn),同時(shí)具有掉電自動(dòng)保存功能;溫度的采集由DS18B20構(gòu)成;
27、顯示部份由21個(gè)數(shù)碼管,74ls138、74ls47譯碼器構(gòu)成。使用動(dòng)態(tài)掃描顯示方式對(duì)數(shù)字的顯示。AT89C52是一種低功耗、高性能CMOS 8位微控制器,使用 ATMEL 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。并具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,256字節(jié)RAM,32 位I/O 口線,看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘
28、電路。另外,A</p><p> 2.3 主要單元電路的設(shè)計(jì)</p><p> 2.3.1 單片機(jī)主控制模塊的設(shè)計(jì)</p><p> AT89C52單片機(jī)為40引腳雙列直插芯片,有四個(gè)I/O口P0,P1,P2,P3, MCS-51單片機(jī)共有4個(gè)8位的I/O口(P0、P1、P2、P3),每一條I/O線都能獨(dú)立地作輸出或輸入。</p><p
29、> 單片機(jī)的最小系統(tǒng)如下圖所示,18引腳和19引腳接時(shí)鐘電路,XTAL1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出.第9引腳為復(fù)位輸入端,接上電容,電阻及開關(guān)后夠上電復(fù)位電路,20引腳為接地端,40引腳為電源端. 如圖2.2所示</p><p> 圖2.2 主控制系統(tǒng) </p><p>
30、 2.3.2 時(shí)鐘電路模塊的設(shè)計(jì)</p><p> 圖2.3示出DS1302的引腳排列,其中Vcc1為后備電源,Vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768KHz晶振。RST是復(fù)位/片
31、選線,通過(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ò)程中RSTS置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電動(dòng)行時(shí),在Vcc大于等于2.5V之前,RST必須保持低電平。中有在SCLK 為低電平時(shí),才能將R
32、ST置為高電平,I/O為串行數(shù)據(jù)輸入端(雙向)。SCLK始終是輸入端。</p><p> 圖2.3 DS1302的引腳圖</p><p> 2.3.3 電路原理及說(shuō)明</p><p> (1) 時(shí)鐘芯片DS1302的工作原理:</p><p> DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端
33、置“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至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時(shí),該位為1;該位為0則表示進(jìn)行的是寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的。表6為DS1302的日歷、時(shí)間寄存器內(nèi)容:“CH”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為
34、1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開始運(yùn)行?!癢P”</p><p> 是寫保護(hù)位,在任何的對(duì)時(shí)鐘和RAM的寫操作之前,WP必須為0。當(dāng)“WP”為1時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作。</p><p> (2) DS1302的控制字節(jié)</p><p> DS1302的控制字節(jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能
35、把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。</p><p> (3) 數(shù)據(jù)輸入輸出(I/O)</p><p> 在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊
36、跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。</p><p> (4) DS1302的寄存器</p><p> DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字見表2-1。</p><p> 表2-1 DS1302的日歷、時(shí)間寄存器&
37、lt;/p><p> 此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時(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
38、的31個(gè)字節(jié),命令控制字為FEH(寫)、FFH(讀)。 </p><p> 低功耗時(shí)鐘芯片DS1302可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),且具有閏年補(bǔ)償?shù)榷喾N功能。DS1302用于數(shù)據(jù)記錄,特別是對(duì)某些具有特殊意義的數(shù)據(jù)點(diǎn)的記錄上,能實(shí)現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄。這種記錄對(duì)長(zhǎng)時(shí)間的連續(xù)測(cè)控系統(tǒng)結(jié)果的分析以及對(duì)異常數(shù)據(jù)出現(xiàn)的原因的查找有重要意義。</p><p> 采用DS130
39、2作為記錄測(cè)控系統(tǒng)中的數(shù)據(jù)記錄,其軟硬件設(shè)計(jì)簡(jiǎn)單,時(shí)間記錄準(zhǔn)確,既避免了連續(xù)記錄的大工作量,又避免了定時(shí)記錄的盲目性,給連續(xù)長(zhǎng)時(shí)間的測(cè)量、控制系統(tǒng)的正常運(yùn)行及檢查都來(lái)了很大的方便,可廣泛應(yīng)用于長(zhǎng)時(shí)間連續(xù)的測(cè)控系統(tǒng)中。在測(cè)量控制系統(tǒng)中,特別是長(zhǎng)時(shí)間無(wú)人職守的測(cè)控系統(tǒng)中,經(jīng)常需要記錄某些具有特殊意義的數(shù)據(jù)及其出現(xiàn)的時(shí)間。記錄及分析這些特殊意義的數(shù)據(jù),對(duì)測(cè)控系統(tǒng)的性能分析及正常運(yùn)行具有重要的意義。傳統(tǒng)的數(shù)據(jù)記錄方式是隔時(shí)采樣或定時(shí)采樣,沒有具
40、體的時(shí)間記錄,因此只能記錄數(shù)據(jù)而無(wú)法準(zhǔn)確記錄其出現(xiàn)的時(shí)間;若采用單片機(jī)計(jì)時(shí),一方面需要采用計(jì)數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費(fèi)單片機(jī)的資源,而且某些測(cè)控系統(tǒng)可能不允許。而在系統(tǒng)中采用DS1302則能很好地解決這個(gè)問題。</p><p> DS1302的性能特性</p><p> ·實(shí)時(shí)時(shí)鐘,可對(duì)秒、分、時(shí)、日、周、月以及帶閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù);<
41、/p><p> ·用于高速數(shù)據(jù)暫存的31×8位RAM;</p><p> ·最少引腳的串行I/O;</p><p> ·2.5~5.5V 電壓工作范圍;</p><p> ·2.5V時(shí)耗電小于300nA;</p><p> ·用于時(shí)鐘或RAM數(shù)據(jù)讀/寫的
42、單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式;</p><p><b> ·簡(jiǎn)單的3線接口;</b></p><p> ·可選的慢速充電(至VCC1)的能力。</p><p> DS1302時(shí)鐘芯片包括實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)的靜態(tài)RAM。它經(jīng)過(guò)一個(gè)簡(jiǎn)單的串行接口與微處理器通信。實(shí)時(shí)時(shí)鐘/日歷提供秒、分、時(shí)、日、周、月和年等
43、信息。對(duì)于小于31天的月和月末的日期自動(dòng)進(jìn)行調(diào)整,還包括閏年校正的功能。時(shí)鐘的運(yùn)行可以采用24h或帶AM(上午)/PM(下午)的12h格式。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302有主電源/后備電源雙電源引腳:VCC1 在單電源與電池供電的系統(tǒng)中提供低電源,并提供低功率的電池備份;VCC2在雙電源系統(tǒng)中提供主電源,在這種運(yùn)用方式中,VCC1 連接到備份電源,以便在沒有主電源的
44、情況下能保存時(shí)間信息以及數(shù)據(jù)。DS1302由VCC1或VCC2中較大者供電。當(dāng)VCC2大于VCC1+0.2V時(shí),VCC2給DS1302供電;當(dāng)VCC2小于VCC1時(shí),DS1302由VCC1供電。</p><p> DS1302數(shù)據(jù)操作原理</p><p> DS1302在任何數(shù)據(jù)傳送時(shí)必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCLK的上升沿被輸入
45、。無(wú)論是讀周期還是寫周期,開始8位指定40個(gè)寄存器中哪個(gè)被訪問到。在開始8個(gè)時(shí)鐘周期,把命令字節(jié)裝入移位寄存器之后,另外的時(shí)鐘周期在讀操作時(shí)輸出數(shù)據(jù),在寫操作時(shí)寫入數(shù)據(jù)。時(shí)鐘脈沖的個(gè)數(shù)在單字節(jié)方式下為8加8,在多字節(jié)方式下為8加字節(jié)數(shù),最大可達(dá)248字節(jié)數(shù)。</p><p> 圖2.4 DS1302管腳圖</p><p> 如果在傳送過(guò)程中置RST為低電平,則會(huì)終止本次數(shù)據(jù)傳送,并且I
46、/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在VCC >=2.5V之前,RST腳必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。DS1302的管腳圖如圖2.4所示,表2-2為各引腳的功能。</p><p> 表2-2 DS1302引腳功能表</p><p> 2.3.4 顯示模塊的設(shè)計(jì)</p><p> LED顯示器由若干個(gè)發(fā)光二極管組成,當(dāng)發(fā)光
47、二極管導(dǎo)通時(shí),相應(yīng)的一個(gè)筆畫或一個(gè)點(diǎn)就發(fā)光。控制相應(yīng)的管導(dǎo)通,就能顯示出對(duì)應(yīng)字符。各段LED顯示器需要由驅(qū)動(dòng)電路驅(qū)動(dòng)。在七段LED顯示器中,通常將各段發(fā)光二極管的陰極或陽(yáng)極連在一起作為公共端。將各段發(fā)光二極管連在一起的叫共陽(yáng)極顯示器,用低電平驅(qū)動(dòng);將陰極連在一起的叫共陰極顯示器,用高電平驅(qū)動(dòng)。</p><p> 靜態(tài)顯示就是每一個(gè)顯示器各筆畫段都要獨(dú)占具有一個(gè)鎖存功能的輸出口線,CPU把要顯示的字形代碼送到輸出
48、口上,就可以使顯示器上顯示所需的數(shù)字或符號(hào),此后,即使CPU不在去訪問它,因?yàn)楦鞴P畫段借口具有鎖存功能,顯示的內(nèi)容也不會(huì)消失。</p><p> 動(dòng)態(tài)顯示是指顯示器顯示某一字符時(shí),相應(yīng)段的發(fā)光二極管恒定地導(dǎo)通或截止。靜態(tài)顯示有并行輸出和串行輸出兩種方式。在本系統(tǒng)中數(shù)碼管使用共陰極接法而且是用動(dòng)態(tài)顯示。</p><p> 圖2.5 LED動(dòng)態(tài)掃描顯示</p><p&g
49、t;<b> 圖2.6系統(tǒng)電路圖</b></p><p><b> 3 系統(tǒng)開發(fā)軟件</b></p><p> 在當(dāng)前的單片機(jī)開發(fā)行業(yè)中,仿真軟件Proteus和編程軟件Keil受到廣大的行業(yè)人員的青睞。用Proteus與Keil相結(jié)合的方式使得單片機(jī)實(shí)驗(yàn)更加方便。本章詳細(xì)的介紹了Proteus和Keil軟件的特點(diǎn)和使用方法,介紹了Pro
50、teus與Keil的聯(lián)合調(diào)試。</p><p> 3.1 Proteus 仿真軟件</p><p> 3.1.1 Proteus 仿真軟件的特點(diǎn)</p><p> Proteus是世界上著名的EDA仿真軟件,是由英國(guó)Labcenter electronics公司開發(fā)的,它可以對(duì)基于微控制器的設(shè)計(jì)連同所有的周圍電子器件一起仿真,用戶甚至可以實(shí)時(shí)采用諸如LED
51、/LCD、鍵盤、RS232終端等動(dòng)態(tài)外設(shè)模型來(lái)對(duì)設(shè)計(jì)進(jìn)行交互仿真。該軟件提供智能原理圖設(shè)計(jì)系統(tǒng)、SPICE模擬電路、數(shù)字電路及MCU器件混合仿真系統(tǒng)和PCB設(shè)計(jì)系統(tǒng)功能。其不僅可以仿真?zhèn)鹘y(tǒng)的電路分析實(shí)驗(yàn)、模擬電子線路實(shí)驗(yàn)、數(shù)字電路實(shí)驗(yàn)等,而且可以仿真嵌入式系統(tǒng)的實(shí)驗(yàn), Proteus軟件從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)。是目前世界上唯一將電路仿真軟件、PCB設(shè)計(jì)軟件
52、和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺(tái),其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯器。 </p><p> 3.1.2 Proteus ISIS 原理圖設(shè)計(jì)</p>&l
53、t;p> Proteus ISIS是英國(guó)Labcenter公司開發(fā)的電路分析與實(shí)物仿真軟件。它的工作界面是一種標(biāo)準(zhǔn)的Windows界面,如圖3.1所示。包括:標(biāo)題欄、主菜單、標(biāo)準(zhǔn)工具欄、繪圖工具欄、狀態(tài)欄、對(duì)象選擇按鈕、預(yù)覽對(duì)象方位控制按鈕、仿真進(jìn)程控制按鈕、預(yù)覽窗口、對(duì)象選擇器窗口、圖形編輯窗口。</p><p> Proteus ISIS 設(shè)計(jì)單片機(jī)電路的基本步驟:</p><p
54、> (1)新建設(shè)計(jì)文件夾或打開一個(gè)現(xiàn)有的設(shè)計(jì)文件。</p><p> 圖3.1 Proteus主界面</p><p> (2)通過(guò)關(guān)鍵字或分類檢索選擇元器件。</p><p> (3)將元器件放入設(shè)計(jì)窗口,如下圖3.2所示。</p><p> 圖3.2 Proteus設(shè)計(jì)窗口</p><p> (
55、4)添加其他模型,如電源、地線、信號(hào)源等,以及添加相關(guān)的虛擬儀器。</p><p> (5)編輯和連接電路。</p><p> (6)編寫單片機(jī)所需的源程序。</p><p> (7)加入源程序,并通過(guò)構(gòu)造,得到仿真程序或目標(biāo)程序。</p><p> (8)根據(jù)需要,設(shè)置對(duì)象的屬性,如將單片機(jī)的“Program File”屬性設(shè)置為上
56、述仿真調(diào)試程序或目標(biāo)程序。</p><p> (9)啟動(dòng)仿真功能,對(duì)電路進(jìn)行仿真操作,驗(yàn)證其功能。</p><p> 3.2 Keil C51</p><p> Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。Keil提供了包括C
57、編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過(guò)一個(gè)集成開發(fā)環(huán)境uVision將這些部分組合在一起。 </p><p> Keil C51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面,是目前功能最強(qiáng)大的單片機(jī)C語(yǔ)言集成開發(fā)環(huán)境。Keil C51生成的目標(biāo)代碼效率非常高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。 &
58、lt;/p><p> Keil開發(fā)單片機(jī)程序的步驟如下:</p><p><b> (1)工程的建立</b></p><p> 執(zhí)行菜單命令“工程(Project)\新建工程(New Project)”出現(xiàn)創(chuàng)建新工程對(duì)話框,起一個(gè)工程名,并在下拉列表中選擇單片機(jī)廠家和型號(hào),這里選擇Atmel公司的89C51,單擊“確定”按鈕。</p&g
59、t;<p> (2)工程屬性的設(shè)置</p><p> 根據(jù)不同的軟件配置和仿真調(diào)試情況,需要對(duì)工程屬性進(jìn)行設(shè)置:鼠標(biāo)右擊工程窗口下的“Target 1”,然后選擇“目標(biāo)屬性(Option for target 1)”,出現(xiàn)工程屬性對(duì)話框。該對(duì)話框有8個(gè)選項(xiàng)卡,大部分設(shè)置取默認(rèn)值即可。其中下列兩張選項(xiàng)卡需要進(jìn)行設(shè)置:</p><p> “輸出(Output)”選項(xiàng)卡設(shè)置如
60、圖3.3所示</p><p> 圖3.3 輸出屬性設(shè)置圖</p><p> 目標(biāo)文件夾默認(rèn)為工程文件所在的文件夾,一般不需修改。可以單擊“選擇obj文件”按鈕進(jìn)行查看和修改。</p><p> 勾選“生成HEX文件”則在構(gòu)造時(shí)會(huì)產(chǎn)生HEX格式的目標(biāo)文件。這是Intel公司提出的數(shù)據(jù)格式,所有數(shù)據(jù)使用16進(jìn)制數(shù)字表示。在Proteus ISIS中進(jìn)行單片機(jī)仿真
61、調(diào)試時(shí)需要用到這種格式文件;構(gòu)造實(shí)際的單片機(jī)應(yīng)用系統(tǒng)時(shí),也需要將這種格式的文件下載到單片機(jī)程序存儲(chǔ)器中。</p><p> “調(diào)試(Debug)”選項(xiàng)卡設(shè)置Keil提供兩類調(diào)試方法。一是在Keil中進(jìn)行軟件仿真調(diào)試,這時(shí)應(yīng)選“使用仿真器”。二是配合硬件仿真器或電路仿真軟件進(jìn)行程序和電路的聯(lián)合調(diào)試,這時(shí)要選“使用:Proteus VSM Simulator”選項(xiàng),提供的vdmagdi.exe,安裝后在此處的列表中
62、將會(huì)出現(xiàn)“Proteus VSM Simulator”選項(xiàng),供于ISIS進(jìn)行程序和電路的聯(lián)調(diào)使用。如果Keil和ISIS在同一臺(tái)計(jì)算機(jī)上運(yùn)行,則需單擊“設(shè)置”,填入運(yùn)行ISIS計(jì)算機(jī)的IP地址,端口號(hào)為8000。還要說(shuō)明的是,兩者聯(lián)調(diào)時(shí),要在ISIS中選擇“DEBUG”菜單下的“Use remote debug monitor”。</p><p> (3)源文件的建立和添加</p><p&g
63、t; Keil內(nèi)集成有一個(gè)文本編輯器,故可以在集成環(huán)境中直接進(jìn)行源程序的輸入。編輯器支持語(yǔ)法著色功能,即對(duì)添加到工程中的源程序,不同語(yǔ)法成分用不同顏色著色表示,例如,關(guān)鍵字用藍(lán)色表示,以便查看和發(fā)現(xiàn)錯(cuò)誤。但該文本編輯器對(duì)漢字的支持較差,故程序注釋最好使用英文或漢語(yǔ)拼音。</p><p> 執(zhí)行、菜單命令“文件(File)\新建(New)”,在源程序窗口會(huì)出現(xiàn)一個(gè)新的文件輸入窗口,可在該窗口里輸入源程序。輸入完
64、畢后,選擇“文件(File)\保存(Save)”,輸入文件名,把文件保存在工程目錄中。文件取名時(shí)必須加上擴(kuò)展名,匯編程序以.ASM或.A51為擴(kuò)展名保存,C程序以擴(kuò)展名.C保存。</p><p> 圖3.4 調(diào)試屬性的設(shè)置</p><p> 程序編寫完成以后,并不會(huì)自動(dòng)出現(xiàn)在工程窗口中,還需要同過(guò)以下的操作將其加入工程.鼠標(biāo)左鍵單擊“Source group 1”,在出現(xiàn)的快捷菜單中
65、選擇“增加文件到(ADD Files to Group“Source group 1”)”,出現(xiàn)添加文件的對(duì)話框,選擇相應(yīng)源程序即可。在工程中添加源文件也可以通過(guò)相應(yīng)的菜單操作完成:“工程(Project)\目標(biāo),組和文件(Targets Groups Files)?!?lt;/p><p> Keil 默認(rèn)加入文件格式為C語(yǔ)言源文件,因此在默認(rèn)情況下,“文件類型”下拉列表框中不顯示該文件夾下的匯編文件。要顯示匯編語(yǔ)
66、言源文件,需要單擊“文件類型”下拉列表框右側(cè)的下三角按鈕,彈出下拉列表,選擇“Asm Source file(*.a*;*.src)”,這時(shí)才會(huì)將文件夾下的“*.asm”文件顯示出來(lái)。鼠標(biāo)左鍵雙擊要加入的文件,或單擊要加入的文件后單擊“Add”按鈕,都可以將該文件加入到工程中。如圖3.4所示。</p><p> 回到主界面,加入的文件即出現(xiàn)在工程管理器“Source Group 1”上午下一級(jí)菜單中,雙擊該文件
67、名,將在右邊編輯窗口打開該文件,可以進(jìn)行第一步編輯。</p><p><b> (4)構(gòu)造目標(biāo)程序</b></p><p> 設(shè)置好工程并添加了源程序文件后,即單擊構(gòu)造目標(biāo)框上的相關(guān)構(gòu)造工具或按快捷鍵<F7>進(jìn)行目標(biāo)構(gòu)造,即對(duì)工程進(jìn)行匯編或編譯、連接,最終生成目標(biāo)文件*.HEX等相關(guān)文件。</p><p> 構(gòu)造過(guò)程中,有關(guān)信
68、息將出現(xiàn)在屏幕下方輸出窗口中的“Build(構(gòu)造)”頁(yè)中。如果程序中有語(yǔ)法錯(cuò)誤,這里會(huì)出現(xiàn)錯(cuò)誤報(bào)告;雙擊錯(cuò)誤報(bào)告行,可以定位到源程序中相關(guān)的出錯(cuò)行。對(duì)源程序反復(fù)修改后,最終構(gòu)造后輸出窗口中應(yīng)出現(xiàn)“0錯(cuò)誤”或“0Error”,表示程序已沒有語(yǔ)法錯(cuò)誤。構(gòu)造的目標(biāo)文件*.HEX被用于下載到單片機(jī)芯片中。這一過(guò)程中,在工程文件夾中還會(huì)生成其他一些文件,如*.LST列表文件、*.obj目標(biāo)文件\*.M51程序符號(hào)列表文件。</p>
69、<p> 在設(shè)計(jì)和調(diào)試狀態(tài)下均可以直接修改程序的源代碼,但是必須重新構(gòu)造工程或文件才能得到修改后的目標(biāo)程序.如對(duì)源程序做了修改,必須對(duì)工程重新進(jìn)行構(gòu)造,從而產(chǎn)生新的目標(biāo)文件,否則Keil 調(diào)試所使用的目標(biāo)文件仍然是上次構(gòu)造的。</p><p> 3.3 Proteus 與Keil的聯(lián)調(diào)</p><p> (1)下載并安裝Proteus 與Keil軟件。</p>
70、<p> (2)安裝完畢后,把Proteus 7 Professional\MODELS\目錄下的 VDM51.dll文件復(fù)制到 Keil\C51\BIN 文件夾下。 </p><p> (3)用記事本或者其它的編輯軟件,打開Keil 根目錄下的 TOOLS.INI 文件,在[C51] 欄目下加入 TDRV3=BIN\VDM51.DLL ("Proteus VSM Monitor-51
71、 Driver" ) ,其中“TDRV3” 中的 “3”要根據(jù)實(shí)際情況寫,不要和已有的TDRV重復(fù)即可。</p><p> (4)keil的設(shè)置。</p><p> 把"C:\Program Files\Labcenter Electronics\Proteus 6 Professional \SAMPLES"中的"8051 LCD Driver
72、”文件夾復(fù)制到新建的Proteus文件夾下。</p><p> 運(yùn)行keil程序,在"8051 LCD Driver"文件夾下建立一個(gè)新的名為8051 LCD Driver工程。單片機(jī)的型號(hào)可選擇AT89C52,把LCDDEMO 文件加到"Source Group 1"組里。</p><p> 點(diǎn)擊工具欄的"option for tar
73、get"按鈕,在出現(xiàn)的對(duì)話框里點(diǎn)擊"Debug",在右欄上部的下拉菜單里選中" Proteus VSM Monitor-51 Driver",還要點(diǎn)擊一下Use前面的小圓點(diǎn)。</p><p> 點(diǎn)擊"Setting"設(shè)置通信接口,在Host后面添上"127.0.0.1",如果想換一臺(tái)電腦,在這里添上另一臺(tái)電腦的IP地址即可
74、。在Port后面添上"8000"。點(diǎn)擊"OK"按鈕。最后把工程編譯一下再運(yùn)行。</p><p> (5)Proteus的設(shè)置。</p><p> 運(yùn)行Proteus的ISIS,進(jìn)入主界面后鼠標(biāo)左鍵點(diǎn)擊菜單"DEBUG",選中"use remote debugger monitor"。再用鼠標(biāo)左鍵點(diǎn)擊菜單&q
75、uot;File",點(diǎn)擊"Load Design",導(dǎo)入"8051 LCD Driver"文件夾下的LCDDEMO.design文件。要把keil的工程和Proteus的文件放到同一個(gè)目錄下,即Proteus的工程文件要和Keil工程的那個(gè)文件夾在同一層目錄下。</p><p><b> (6)調(diào)試并運(yùn)行。</b></p>&
76、lt;p> 打開keil,按Ctrl+F5進(jìn)入調(diào)試界面或者點(diǎn)擊工具欄的調(diào)試按鈕。如果不能進(jìn)入調(diào)試界面,可能設(shè)置有誤,按照上面的步驟再重新設(shè)置一下。進(jìn)入了調(diào)試界面,按F5或者點(diǎn)擊工具欄的調(diào)試按鈕,全速運(yùn)行,再看看ISIS,觀察其變化。連接成功以后,就可以開始調(diào)試程序了,調(diào)試成功后再點(diǎn)擊運(yùn)行按鈕運(yùn)行程序得到運(yùn)行效果。</p><p> 4 系統(tǒng)的軟件設(shè)計(jì)</p><p> 4.1
77、 程序流程框圖</p><p> 圖4.1 主程序流程圖</p><p> 主程序才用模塊化設(shè)計(jì),流程圖如圖4.1所示。</p><p> 從上面主程序看出,主程序的組成是通過(guò)分別調(diào)用各子程序組成總體系統(tǒng)功能,能很直觀的看出主程序所要完成的功能,首先是初始化各模塊,之后調(diào)用鍵盤完成時(shí)間的調(diào)整,調(diào)用日歷子程序完成日歷時(shí)鐘的初始化和時(shí)間數(shù)據(jù)的讀寫,調(diào)用顯示子程序
78、顯示數(shù)據(jù),最后又轉(zhuǎn)到鍵盤程序來(lái)回循環(huán)。</p><p> 初始化部分主要有初始化定時(shí)器部分和和一些寄存器、標(biāo)志位、初始化時(shí)間等。</p><p> 對(duì)定時(shí)器T0初始化時(shí),首先置初值,CPU開中斷,定時(shí)器T0開中斷,并且開始計(jì)數(shù),而對(duì)定時(shí)器T1初始化時(shí),首先置初值,定時(shí)器T1關(guān)中斷,并且停止計(jì)數(shù),只有收到命令時(shí)才能產(chǎn)生中斷。</p><p> 寄存器的初始化主要
79、是初始化執(zhí)行程序時(shí)用到的部分RAM空間,防止程序執(zhí)行時(shí)帶來(lái)混亂。</p><p> 標(biāo)志位初始化是對(duì)時(shí)間調(diào)整時(shí)判斷是調(diào)分還是調(diào)時(shí)等而專設(shè)的位標(biāo)志,初始化過(guò)程中標(biāo)志位全部置0,即開始時(shí)是處于顯示狀態(tài),而不是調(diào)整狀態(tài),這一點(diǎn)在程序中相當(dāng)明了。</p><p> 初始化時(shí)間是開機(jī)時(shí)顯示的時(shí)間,并通過(guò)調(diào)用日歷時(shí)鐘的寫程序來(lái)完成時(shí)間的置初值。</p><p> 4.2
80、 程序的設(shè)計(jì)</p><p> 4.2.1 主電路設(shè)計(jì)</p><p> 主電路的功能是完成年、月、日、星期、時(shí)、分、秒之間的轉(zhuǎn)換, 再送往LED顯示,并且接受鍵盤操作,對(duì)日期和時(shí)間進(jìn)行校正。</p><p> 電路原理圖如圖4.2所示,顯示部分用P0口做為輸出數(shù)據(jù)接到LED數(shù)碼管a到h,并接74ls244做為各段的驅(qū)動(dòng)(為了簡(jiǎn)化電路圖在此用了8個(gè)上拉電阻代
81、替74ls244)。用P3口的低3位接譯碼器的A0,A1,A2端,用P3.3,P3.4,P3.5分別接譯碼器的使能端,通過(guò)控制P3口來(lái)控制LED的動(dòng)態(tài)掃描。單片機(jī)的18和19引腳接12MHZ的晶振,并接兩個(gè)22PF的電容同時(shí)接地,單片機(jī)復(fù)位端接一極性電容并連接到電源處,在極性電容的負(fù)極接一10K的電阻,并連接至地做為放電用。本設(shè)計(jì)用到四個(gè)獨(dú)立式鍵盤分別接到P1口的低4位,用P1口的P1.4,P1.5,P1.6接日歷時(shí)鐘的使能端和時(shí)鐘端及
82、數(shù)據(jù)輸入輸出口,并在日歷時(shí)鐘上接一32.768KHZ的晶振,并接兩個(gè)22PF的電容終端和地相連,各芯片的電源部分分別接到有開關(guān)式電源產(chǎn)生的+5V電源上,芯片的接地端都接在公共地上,在這里接電源部分就不再一一詳述。</p><p> 設(shè)計(jì)采用動(dòng)態(tài)顯示,輪流掃描各個(gè)LED使之顯示相應(yīng)的數(shù)型碼,當(dāng)掃描頻率大于人眼所能識(shí)別的頻率時(shí)就看不到閃爍現(xiàn)象。動(dòng)態(tài)顯示的亮度不如靜態(tài)顯示,但靜態(tài)顯示占用的I/O口資源較多,往往用移位
83、寄存器74LS164等來(lái)擴(kuò)充其I/O口不足的情況,當(dāng)顯示位數(shù)較多時(shí),這樣勢(shì)必增加硬件開銷,增大成本,不利于開闊市場(chǎng)。本設(shè)計(jì)的突出之處在于硬件電路簡(jiǎn)單,大大減少了硬件開銷,這樣又勢(shì)必增加了軟件開發(fā)的難度,但降低了成本有利于市場(chǎng)的開闊。</p><p><b> 圖4.2電路原理圖</b></p><p> 4.2.2 鍵盤子程序設(shè)計(jì)</p><
84、p> 多功能鍵盤程序的設(shè)計(jì)是本設(shè)計(jì)的難點(diǎn),也是完成本設(shè)計(jì)的重點(diǎn),當(dāng)有鍵按下時(shí),調(diào)用10ms延時(shí)程序,再判斷是否有鍵按下無(wú)則返回,若有先調(diào)用顯示程</p><p> 序再判斷是否松開,否則再轉(zhuǎn)到顯示程序,這樣避免了在按鍵松開之前能正常顯示。其中K1鍵功能最多,通過(guò)判斷K1鍵按下的次數(shù)來(lái)判斷是調(diào)時(shí)間還是定時(shí),并對(duì)對(duì)應(yīng)的位置閃爍。本鍵盤深度為7級(jí),即連續(xù)按下K1鍵8次時(shí)則返回到原來(lái)界面。當(dāng)判斷鍵值為1時(shí)則為調(diào)
85、秒狀態(tài),對(duì)應(yīng)的秒低位閃爍,為2時(shí)為調(diào)分狀態(tài)并分閃爍,為3時(shí)為調(diào)時(shí)狀態(tài)并時(shí)閃爍,為4時(shí)為調(diào)日狀態(tài)并日閃爍,為5時(shí)為調(diào)月狀態(tài)并月閃爍,為6時(shí)為調(diào)年?duì)顟B(tài)并年閃爍,為7時(shí)為調(diào)星期狀態(tài)并星期閃爍。 K2為加1鍵,K3為減1鍵,K4為總返回鍵,即在調(diào)時(shí)見時(shí)不用只有按下K1鍵值為8才返回,而通過(guò)按下K4鍵即可返回。由于鍵盤流程圖非常復(fù)雜,在此只表示秒,如圖4.3所示,其余略。</p><p> 4.2.3 日歷時(shí)鐘子程序設(shè)
86、計(jì)</p><p> DS1302與CPU的連接需要三條線,即SCLK(7)、I/O(6)、RST(5)。日歷時(shí)鐘DS1302的讀寫需要初始化時(shí)序、讀時(shí)序、寫時(shí)序。所有時(shí)序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)啟動(dòng)寫時(shí)序開始,如果要求單總線器件回送是低位在先。讀寫都是16位數(shù)據(jù)高8位是地址低8位是數(shù)據(jù),在讀寫時(shí)要嚴(yán)格遵從其讀寫時(shí)序,否則讀寫將會(huì)失效。</p>
87、<p> 當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作。如果在傳送過(guò)程中RST置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc≥2.5V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平,這一點(diǎn)我們要一定注意。</p><p> 當(dāng)RST置為高電平時(shí),在串行時(shí)鐘的SCLK的上升沿,DS1302從I/O端口讀入一位數(shù)據(jù),
88、8個(gè)串行時(shí)鐘脈沖就可以讀入一字節(jié)的數(shù)據(jù)。在串行時(shí)鐘的下降沿,DS1302向I/O端口輸出一位數(shù)據(jù),8個(gè)串行時(shí)鐘脈沖就可以輸出一字節(jié)的數(shù)據(jù)。</p><p> 顯示子程序設(shè)計(jì)電子產(chǎn)品是否實(shí)用其中顯示占了很重要的地位,很多數(shù)人都渴求用視覺效果好,范圍廣,直觀明了,LED符合以上的要求,但相應(yīng)的硬件設(shè)計(jì)相對(duì)復(fù)雜。</p><p> 4.2.4 顯示子程序設(shè)計(jì)</p><
89、p> 本設(shè)計(jì)的顯示部分具有消隱和閃爍功能,當(dāng)時(shí)分秒等高位為0時(shí)顯示消隱, 此時(shí)在讀時(shí)間時(shí)更加明了,但低位不能顯示消隱。閃爍功能也是本設(shè)計(jì)的一個(gè)難點(diǎn),本設(shè)計(jì)采用8個(gè)位標(biāo)志位,其中一個(gè)標(biāo)志位通過(guò)用定時(shí)器0產(chǎn)生一個(gè)周期大約為每秒1.5次,使閃爍時(shí)效果達(dá)到最好。此時(shí)定時(shí)器采用定時(shí)中斷的工作方式,這樣可以充分利用CPU資源。另外7個(gè)標(biāo)志位是時(shí)分秒等的位標(biāo)志位,當(dāng)秒標(biāo)志位置1時(shí)即秒開閃爍,與用中斷產(chǎn)生的標(biāo)志位相結(jié)合,即在一個(gè)周期內(nèi)為0時(shí)此時(shí)
90、消隱為1時(shí)開顯示,這樣就使在調(diào)時(shí)間時(shí)對(duì)應(yīng)的位閃爍。</p><p> 4.2.5 部分程序代碼</p><p> #include<reg52.h></p><p> #include<intrins.h></p><p> #define uchar unsigned char </p>&l
91、t;p> #define uint unsigned int</p><p> sbit rw=P3^6;</p><p> sbit rs=P3^5;</p><p> sbit lcden=P3^4;</p><p> sbit s1=P3^0;</p><p> sbit s2=P3^1;<
92、;/p><p> sbit s3=P3^2;</p><p> sbit rd=P3^7;</p><p> sbit ce=P2^5;</p><p> sbit sclk=P2^6;</p><p> sbit io=P2^7;</p><p> sbit B1=B^0;</p
93、><p> sbit ACC7 = ACC^7;</p><p> uchar count,s1num;</p><p> char miao,shi,fen,k;</p><p> uchar code table[]=" 20 - - W: ";</p><p> uchar
94、code table1[]=" 00:00:00";</p><p> void delay(uint z)</p><p> {uint x,y;</p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);}</p><p&g
95、t; void write_com(uchar com)</p><p><b> {rs=0;</b></p><p><b> lcden=0;</b></p><p><b> P0=com;</b></p><p><b> delay(5);<
96、;/b></p><p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p> lcden=0;}</p><p> void write_date(uchar date)</p><p><b>
97、; {</b></p><p><b> rs=1;</b></p><p><b> lcden=0;</b></p><p><b> P0=date;</b></p><p><b> delay(5);</b></p&g
98、t;<p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p> lcden=0;}</p><p> void init()</p><p> {uchar num;</p><p><b
99、> rw=0;</b></p><p><b> lcden=0;</b></p><p> write_com(0x38);</p><p> write_com(0x0c);</p><p> write_com(0x06);</p><p> write_com
100、(0x01);</p><p> write_com(0x80);</p><p> for(num=0;num<16;num++)</p><p> {write_date(table[num]);</p><p> delay(5);}</p><p> write_com(0x80+0x40);&
101、lt;/p><p> for(num=0;num<12;num++)</p><p> {write_date(table1[num]);</p><p><b> delay(5);</b></p><p><b> }</b></p><p> TMOD=0x
102、01;</p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p><b>
103、TR0=1;</b></p><p><b> }</b></p><p> void write_sfm(uchar add,uchar date)</p><p><b> {</b></p><p> uchar shi,ge;</p><p>
104、shi=date/10;</p><p> ge=date%10;</p><p> write_com(0x80+0x40+add);</p><p> write_date(0x30+shi);</p><p> write_date(0x30+ge);</p><p><b> }</b
105、></p><p> void write_nyr(uchar add,uchar date)</p><p><b> {</b></p><p> uchar shi,ge;</p><p> shi=date/10;</p><p> ge=date%10;</p>
106、;<p> write_com(0x80+add);</p><p> write_date(0x30+shi);</p><p> write_date(0x30+ge);</p><p><b> }</b></p><p> uchar read1302(uchar com1)</p&
107、gt;<p><b> {</b></p><p> uchar shu,j,shu1;</p><p><b> ce=0;</b></p><p><b> ce=1;</b></p><p><b> B=com1;</b>&
108、lt;/p><p> for(shu=0;shu<8;shu++)</p><p><b> {</b></p><p><b> io=B1;</b></p><p><b> B=B>>1;</b></p><p><b&
109、gt; sclk=1;</b></p><p><b> sclk=0;</b></p><p><b> }</b></p><p><b> delay(5);</b></p><p> for(shu1=8; shu1>0; shu1--)&l
110、t;/p><p><b> {</b></p><p> ACC = ACC >>1; </p><p> ACC7 = io;</p><p><b> sclk = 1;</b></p><p><b> sclk
111、 = 0;</b></p><p><b> } </b></p><p> return(ACC); </p><p><b> } </b></p><p> void main()</p><p><b> {</b><
112、/p><p><b> init();</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> uint u,u1,u2;</p><p> u=read1302(0x81);</p
113、><p> miao=((u&0x70)>>4)*10 + (u&0x0F);</p><p> write_sfm(10,miao);</p><p> write_com(0x80+0x40+10);</p><p> u1 = read1302(0x83); //從分寄存器讀</p>&l
114、t;p> fen=((u1&0x70)>>4)*10 + (u1&0x0F); //將讀出數(shù)據(jù)轉(zhuǎn)化</p><p> write_sfm(7,fen);</p><p> write_com(0x80+0x40+7);</p><p> u2=read1302(0x85);</p><p> shi
115、=((u2&0x70)>>4)*10 + (u2&0x0F);</p><p> write_sfm(4,shi);</p><p> write_com(0x80+0x40+4);</p><p> u2=read1302(0x8d); </p><p> shi=((u2&0x70)>&
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于51單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)畢業(yè)論文
- 基于51單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)-畢業(yè)論文設(shè)計(jì)
- 畢業(yè)論文——基于51單片機(jī)的電子萬(wàn)年歷的設(shè)計(jì)
- 基于51單片機(jī)電子萬(wàn)年歷畢業(yè)論文
- 基于51單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)
- 基于51單片機(jī)的電子萬(wàn)年歷畢業(yè)設(shè)計(jì)論文
- 基于單片機(jī)的電子萬(wàn)年歷畢業(yè)論文
- 畢業(yè)論文(設(shè)計(jì))基于單片機(jī)的電子萬(wàn)年歷
- 51基于單片機(jī)的電子萬(wàn)年歷畢業(yè)設(shè)計(jì)
- 51單片機(jī)萬(wàn)年歷畢業(yè)設(shè)計(jì)論文
- 萬(wàn)年歷畢業(yè)論文---基于at89s52單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)
- 基于51單片機(jī)的電子萬(wàn)年歷的設(shè)計(jì)
- 基于51單片機(jī)電子萬(wàn)年歷
- 【畢業(yè)設(shè)計(jì)】基于51單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)
- 畢業(yè)論文范文——基于51單片機(jī)的電子萬(wàn)年歷的設(shè)計(jì)
- 基于單片機(jī)萬(wàn)年歷的設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)萬(wàn)年歷的設(shè)計(jì)畢業(yè)論文
- 基于51單片機(jī)的萬(wàn)年歷畢業(yè)設(shè)計(jì)
- 單片機(jī)電子萬(wàn)年歷畢業(yè)論文
- 單片機(jī)電子萬(wàn)年歷畢業(yè)論文
評(píng)論
0/150
提交評(píng)論