版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 畢業(yè)設(shè)計(jì)論文</b></p><p> 題 目 多功能數(shù)字時(shí)鐘 </p><p> 系 別: </p><p> 專(zhuān) 業(yè): </p><p> 年
2、 級(jí): </p><p> 學(xué)生姓名: </p><p> 同組成員: </p><p> 指導(dǎo)教師: </p
3、><p> 完成日期: </p><p><b> 摘要 </b></p><p> 本設(shè)計(jì)是設(shè)計(jì)一個(gè)單片機(jī)控制的多功能時(shí)鐘系統(tǒng)。</p><p> 本設(shè)計(jì)的多功能時(shí)鐘系統(tǒng)采用AT89S52單片機(jī)為中心器件,利用其定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,結(jié)合液晶顯
4、示電路、時(shí)鐘芯片DS1302電路、電源電路以及按鍵電路來(lái)設(shè)計(jì)計(jì)時(shí)器。將軟、硬件有機(jī)地結(jié)合起來(lái),使得系統(tǒng)能夠?qū)崿F(xiàn)液晶顯示,顯示時(shí)間有年、月、日、時(shí)、分、秒以及星期,還可以設(shè)置鬧鐘和整點(diǎn)報(bào)時(shí)以及斷電保護(hù)功能可謂功能強(qiáng)大。其中軟件系統(tǒng)采用單片機(jī)匯編語(yǔ)言編寫(xiě)程序,包括顯示程序,鬧鐘數(shù)程序,中斷,延時(shí)程序,按鍵消抖程序等,并在keil中調(diào)試運(yùn)行,硬件系統(tǒng)利用PROTEUS強(qiáng)大的功能來(lái)實(shí)現(xiàn),簡(jiǎn)單且易于觀察,在仿真中就可以觀察到實(shí)際的工作狀態(tài)。<
5、;/p><p> 關(guān)鍵詞 : 時(shí)鐘芯片DS1302、單片機(jī)匯編語(yǔ)言、液晶顯示電路、AT89S52芯片</p><p><b> 目錄</b></p><p> 1 前言.......................................................................
6、.........................................4</p><p> 2系統(tǒng)總體方案設(shè)計(jì)及硬件設(shè)計(jì)..............................................................4</p><p> 2.1 系統(tǒng)總體方案設(shè)計(jì)...........................................
7、........................... ...... ....5</p><p> 2.2 硬件電路設(shè)計(jì)與分析................................................................... ...... ...5</p><p> 2.2.1振蕩器和時(shí)鐘電路工作原理.........................
8、...................................6</p><p> 2.2.2時(shí)鐘芯片數(shù)據(jù)采集設(shè)計(jì)與分析........................................................6</p><p> 2.2.3液晶顯示電路....................................................
9、......... ......................6</p><p> 2.2.4輸出控制電路............................................................. ......................7</p><p> 2.2.5復(fù)位電路....................................
10、........................................................7</p><p> 2.2.6電源電路和總電路布局.....................................................................7</p><p> 3 軟件設(shè)置及調(diào)試.......................
11、...................................... ............ .......... ....8</p><p> 3.1軟件總體方案設(shè)計(jì)............................................................. ......................8</p><p> 3.2按鍵模塊設(shè)計(jì).
12、............................................................ ...................... .......11</p><p> 3.2.1按鍵1的說(shuō)明............................................................. ......................12</p&
13、gt;<p> 3.2.2按鍵2的說(shuō)明............................................................. ......................13</p><p> 3.2.3其他按鍵的說(shuō)明............................................................. ..........
14、........13</p><p> 3.2.4報(bào)時(shí)功能的說(shuō)明............................................................. ..................13</p><p> 3.2.5鬧鐘功能的說(shuō)明..........................................................
15、... ..................14</p><p> 3.2.6加1、移位功能的說(shuō)明............................................................. .......14</p><p> 3.3 時(shí)鐘模塊設(shè)計(jì)......................................................
16、....... ...................... ......14</p><p> 3.4 液晶顯示模塊設(shè)計(jì)............................................................. .....................14</p><p> 4 設(shè)計(jì)總結(jié)................................
17、............................. ...................... ...................14</p><p> 5程序清單............................................................. ...................... .....................14</p>
18、<p> 6 參考文獻(xiàn)............................................................. ...........................................18</p><p><b> 1 前言</b></p><p> 在當(dāng)代繁忙的工作與生活中,時(shí)間與我們每一個(gè)人都有著
19、非常密切的關(guān)系,都受到時(shí)間的影響。為了更好的利用自己的時(shí)間,我們必須對(duì)時(shí)間有一定度量,因此產(chǎn)生了萬(wàn)年歷和鐘表。電子時(shí)鐘的發(fā)展是非常迅速的,從剛開(kāi)始純粹的日歷發(fā)展到現(xiàn)在的年月日及分秒,即使現(xiàn)在的電子時(shí)鐘千奇百怪,但是它們都只是完成一種功能-----計(jì)時(shí)功能。雖然現(xiàn)在市場(chǎng)上已有現(xiàn)成的電子鐘集成電路芯片出售,價(jià)格便宜、使用也方便,但是人們對(duì)電子產(chǎn)品的應(yīng)用要求越來(lái)越高,數(shù)字鐘不但可以顯示當(dāng)前的時(shí)間,而且可以顯示日期、農(nóng)歷 、以及星期等,給人們的
20、生活帶來(lái)了方便。另外數(shù)字鐘還具鬧鐘的功能,且鬧鐘鈴聲可自選,使一款電子鐘具備了多媒體的色彩。</p><p> 本設(shè)計(jì)在設(shè)計(jì)過(guò)程中認(rèn)真分析了各種軟件的使用利弊,擯棄了許多陳雜不合適的方法,在設(shè)計(jì)軟件使用上選擇了以往學(xué)過(guò)的keil、Proteus和單片機(jī)程序燒寫(xiě)軟件。整個(gè)設(shè)計(jì)過(guò)程將理論與實(shí)踐相結(jié)合,突出了實(shí)戰(zhàn)性。</p><p> 2、系統(tǒng)總體方案設(shè)計(jì)及硬件設(shè)計(jì)</p>&
21、lt;p> 2.1 系統(tǒng)總體方案設(shè)計(jì)</p><p> 電路原理設(shè)計(jì)是基于小系統(tǒng)板包括電源電路、復(fù)位電路、按鍵電路、DS1302時(shí)鐘電路、液晶顯示驅(qū)動(dòng)電路、輸出控制電路。電源部分是用電池來(lái)提供的3v-5v,晶體振蕩器采用的是12MHz的石英晶體振蕩器。</p><p> 整個(gè)系統(tǒng)用單片機(jī)為中央控制器,由單片機(jī)執(zhí)行采集時(shí)鐘芯片的時(shí)間信號(hào)并通過(guò)顯示模塊來(lái)輸出信號(hào)及相關(guān)的控制功能。時(shí)
22、鐘芯片產(chǎn)生時(shí)鐘信號(hào),利用單片機(jī)的I/O口傳給單片機(jī);并通過(guò)I/O口實(shí)現(xiàn)LCD的顯示。系統(tǒng)設(shè)有4個(gè)獨(dú)立式按鍵可以對(duì)時(shí)間星期年月日進(jìn)行調(diào)整,還可以設(shè)置鬧鐘。具體如圖1所示:</p><p><b> 圖1系統(tǒng)整體框圖</b></p><p><b> 2.2硬件設(shè)計(jì)</b></p><p> 2.2.1振蕩器和時(shí)鐘電路工
23、作原理</p><p> AT89S2單片機(jī)內(nèi)部有一個(gè)高增益反相放大器,用于構(gòu)成振蕩器,但要形成時(shí)鐘,外部還需附加電路。XTAL1引腳為反相放大器和時(shí)鐘發(fā)生電路的輸入端,XTAL2引腳為反相放大器的輸出端。片內(nèi)時(shí)鐘發(fā)生器實(shí)質(zhì)是個(gè)2分頻的觸發(fā)其輸入來(lái)自振蕩器的fosc,輸出為2相時(shí)鐘信號(hào),即節(jié)拍信號(hào)P1、P2,器頻率為fosc\2。2個(gè)節(jié)拍為1個(gè)狀態(tài)時(shí)鐘S。狀態(tài)時(shí)鐘再3分頻后為ALE信號(hào),其頻率為fosc\6,狀
24、態(tài)時(shí)鐘6分頻后為機(jī)器周期信號(hào),器頻率為fosc\12。特殊功能寄存器PCON的PD位可以控制振蕩器的工作,當(dāng)PD=0時(shí),振蕩器停止工作,單片機(jī)進(jìn)入低功耗工作狀態(tài),復(fù)位后,PD=0,振蕩器正常工作。</p><p> 2.2.2時(shí)鐘芯片數(shù)據(jù)采集設(shè)計(jì)與分析</p><p> (1)DS1302是一種可編程的實(shí)時(shí)時(shí)鐘芯片,具有計(jì)算2100年前的時(shí)間的能力,包括時(shí)鐘/日歷寄存器和31字節(jié)(8位
25、)的數(shù)據(jù)暫存寄存器,數(shù)據(jù)通信權(quán)通過(guò)一條串行輸出口。時(shí)鐘/日歷提供包括秒、分、時(shí)、日期、月份和年份信息。閏年可自行調(diào)整,以串行方式向單片機(jī)傳送單字節(jié)或多字節(jié)的秒、分、時(shí)、日、月、年等實(shí)時(shí)時(shí)間數(shù)據(jù);只通過(guò)三根線進(jìn)行數(shù)據(jù)的控制和傳遞:RST、I/O、SCLK;其在電路的功能是還具有在出現(xiàn)主電源斷電時(shí)備用電源可繼續(xù)保持時(shí)鐘的連續(xù)運(yùn)行。</p><p><b> 圖2 時(shí)鐘引腳圖</b></p
26、><p> (2)DS1302芯片內(nèi)部寄存器讀寫(xiě)地址及位定義格式如表1:</p><p> 表1 DS1302芯片內(nèi)部寄存器讀寫(xiě)地址及位定義</p><p> 如果單片機(jī)要對(duì)DS1302內(nèi)部寄存器進(jìn)行讀寫(xiě)操作,必須先將與寄存器對(duì)應(yīng)的位操作地址傳送給DS1302,然后再進(jìn)行讀寫(xiě)數(shù)據(jù)的操作。控制寄存器是用來(lái)決定能否對(duì)DS1302進(jìn)行讀寫(xiě)操作,當(dāng)控制字的最高位WP=0
27、時(shí),允許進(jìn)行讀寫(xiě)操作;當(dāng)WP=1時(shí),禁止讀寫(xiě)操作。所以單片機(jī)對(duì)DS1302進(jìn)行讀寫(xiě)操作時(shí),必須先將控制字00H寫(xiě)入到DS1302的控制寄存器中。</p><p> 2.2.3 液晶顯示電路</p><p> LCD顯示器能顯示數(shù)碼管不能顯示的其他字符、文字和圖形,是十分重要的顯示終端,LCD1602是字符點(diǎn)陣液晶顯示模塊。利用LCD1602,所用的時(shí)間年、月、日、星期可同時(shí)可見(jiàn),一目了
28、然,采用雙行顯示,讓電子鐘能夠更直觀的顯示。其實(shí)圖如圖3、引腳功能如表2:</p><p> 圖3 液晶顯示器實(shí)圖</p><p> 表2 lcd液晶顯示器引腳功能</p><p> 2.2.4 輸出控制電路</p><p> 在P2.0端口接一個(gè)蜂鳴器,用于整點(diǎn)報(bào)時(shí)和響鬧鈴。</p><p><b&
29、gt; 2.2.5復(fù)位電路</b></p><p> 本次設(shè)計(jì)采用按鍵電平復(fù)位,按鍵電平復(fù)位相當(dāng)于按復(fù)位鍵后,復(fù)位端通過(guò)電阻與Vcc電源接通;</p><p> 2.2.6 電源電路和總電路布局</p><p> 因?yàn)樵撾娐匪桦妷簽?-5v,可直接用電池供應(yīng)或也可以用直流電源供應(yīng),但需經(jīng)過(guò)變壓才行。下圖圖4為整個(gè)設(shè)計(jì)的總體布局圖。</p
30、><p> 圖4 硬件電路設(shè)計(jì)總布局圖</p><p><b> 3 軟件設(shè)計(jì)及調(diào)試</b></p><p> 3.1軟件總體設(shè)計(jì)方案</p><p> A 軟件設(shè)計(jì)目標(biāo): </p><p> 軟件部分總體上是模塊化的設(shè)計(jì)思想,通過(guò)子程序調(diào)用設(shè)計(jì)方式 ,將所有的模塊綜合到一起,使程序可讀
31、性較高。</p><p><b> B 總體架構(gòu)說(shuō)明</b></p><p> 該時(shí)鐘程序設(shè)計(jì)思路如下:</p><p> ?。?)、在程序頭將設(shè)計(jì)中的一些固定空間進(jìn)行分配并注釋。</p><p> ?。?)、初始化程序,如設(shè)定時(shí)鐘初始顯示“2010年3月20日,星期四,11:59 ”以便一開(kāi)始就能進(jìn)入整點(diǎn)報(bào)時(shí)狀態(tài)
32、,顯示該功能;設(shè)定使用定時(shí)器1;將一些未到時(shí)鐘設(shè)計(jì)功能的功能端口關(guān)閉等。</p><p> ?。?)開(kāi)始主程序進(jìn)行程序掃描,先掃描拆字子程序,將分配好的時(shí)分秒等高地位的數(shù)字調(diào)入到顯示子程序中?!?gt;顯示子程序通過(guò)分配的空間對(duì)應(yīng)口將拆字子程序的內(nèi)容在液晶顯示器上顯示相應(yīng)的時(shí)分秒,再調(diào)用走時(shí)程序使時(shí)鐘進(jìn)行讀秒等工作。——>進(jìn)入按鍵掃描,判斷按鍵是否有變動(dòng),若有就根據(jù)設(shè)計(jì)程序?qū)ο鄳?yīng)的按鍵按入次數(shù)而進(jìn)行實(shí)現(xiàn)相
33、應(yīng)的功能。如進(jìn)入時(shí)間調(diào)整、鬧鐘設(shè)置、鬧鐘開(kāi)啟與否等。——>進(jìn)入鬧鐘的判斷,在時(shí)分上與設(shè)置的鬧鈴時(shí)間吻合的話就做相對(duì)應(yīng)的判斷,再依據(jù)是否有開(kāi)啟鬧鐘而進(jìn)行響鈴與否,如果有響鈴則設(shè)置其一直響鈴知道有人為按取消按鍵取消鬧鈴?!?gt;進(jìn)入整點(diǎn)報(bào)時(shí)掃描,判斷是否在時(shí)分上都進(jìn)入了整點(diǎn),如果是就報(bào)時(shí),然后就退出整點(diǎn)報(bào)時(shí),等到下一個(gè)整點(diǎn)的到來(lái)?!?gt;最后返回主程序頭重新依次掃描。顯示過(guò)程設(shè)有消隱,按鍵設(shè)有去斗。</p>&l
34、t;p> ?。?)子程序部分。在主程序的調(diào)用下依據(jù)不同的子程序工能而編寫(xiě)子程序,有多級(jí)嵌套。這些子程序包括拆字子程序、延時(shí)子程序、走時(shí)間子程序、整點(diǎn)報(bào)時(shí)子程序、按鍵處理子程序、調(diào)時(shí)間子程序、鬧鐘設(shè)置子程序、鬧鐘子程序、鬧鐘開(kāi)啟子程序。主流程圖如圖5所示。</p><p><b> 圖5 主程序流程圖</b></p><p> ?。?)I/O口分配表</p
35、><p> 表3 I/O口分配表</p><p><b> ?。?)子程序詳解表</b></p><p> 表4 子程序詳解表</p><p><b> 3.2按鍵模塊設(shè)計(jì)</b></p><p> 設(shè)計(jì)系統(tǒng)中的按鍵模塊僅占用四個(gè)I/O口,從89s52芯片p1.0、p
36、1.1、p1.2、p1.3四個(gè)引腳接入進(jìn)行控制。當(dāng)沒(méi)有按鍵按下時(shí),均為高電平,有按鍵按下時(shí)相應(yīng)I/O口為低電平,但并沒(méi)有立即執(zhí)行相應(yīng)的程序,延時(shí)5ms后若再為低電平,等I/O口恢復(fù)高電平,即按鍵松開(kāi)時(shí),才執(zhí)行相應(yīng)的程序,此時(shí)按鍵才起作用。這樣該按鍵模塊具有去抖動(dòng),且按鍵按下一次僅作用一次,起到精確判斷的作用。其設(shè)計(jì)流程圖和設(shè)計(jì)具體的按鍵操作說(shuō)明如下:</p><p> 圖6 按鍵程序流程圖</p>
37、<p> 3.2.1 按鍵1的說(shuō)明</p><p> 按鍵1有四種功能,分別為下面4個(gè)子程序:</p><p> 子程序0的功能為:進(jìn)入設(shè)置當(dāng)前時(shí)間狀態(tài),且令keycode=2;</p><p> 子程序1的功能為:進(jìn)入設(shè)置鬧鐘時(shí)間狀態(tài),且令keycode=3;</p><p> 子程序2的功能為:把所設(shè)置的時(shí)間作為
38、當(dāng)前時(shí)間,且令keycode=0;</p><p> 子程序3的功能為:把所設(shè)置的時(shí)間作為鬧鐘時(shí)間,且令keycode=0;</p><p> 每次按下按鍵1,按鍵1程序根據(jù)的KeyCode內(nèi)容轉(zhuǎn)入各對(duì)應(yīng)的子程序中(因?yàn)楫?dāng)KeyCode值不同時(shí),經(jīng)過(guò)計(jì)算得到dptr的值不同,然后經(jīng)過(guò)jmp @a+dptr指令就可跳轉(zhuǎn)到不同的子程序中,具體程序說(shuō)明),從而實(shí)現(xiàn)不同的功能。</p&g
39、t;<p> 從各按鍵的功能可知,每次按下按鍵1,都會(huì)改變KeyCode內(nèi)容,使按鍵1的功能發(fā)生改變。</p><p> 3.2.2 按鍵2的說(shuō)明 </p><p> 按鍵2有兩種不同的功能:對(duì)應(yīng)于設(shè)置狀態(tài)為加1;對(duì)應(yīng)于非設(shè)置狀態(tài)為切換屏幕。所以按鍵2程序開(kāi)頭就先判斷鬧鐘是否處于設(shè)置狀態(tài)。</p><p> 由按鍵1的功能流程圖可知:當(dāng)鬧
40、鐘處于非設(shè)置狀態(tài)時(shí),keycode等于0或1;處于設(shè)置狀態(tài)時(shí),keycode等于2或3;所以可用如下語(yǔ)段判斷鬧鐘是否處于設(shè)置狀態(tài):</p><p> 當(dāng)鬧鐘處于設(shè)置狀態(tài),keycode值大于2,c等于0</p><p> 當(dāng)鬧鐘處于非設(shè)置狀態(tài),keycode值小于2,c等于1</p><p> 圖7 按鍵2程序流程圖</p><p>
41、 3.2.3 其他按鍵的說(shuō)明:</p><p> 剩下3、4按鍵都于按鍵2類(lèi)似,先判斷是否處于設(shè)置狀態(tài),然后轉(zhuǎn)入不同的語(yǔ)句,不再說(shuō)明。</p><p> 3.2.4 報(bào)時(shí)功能的說(shuō)明:</p><p> 當(dāng)報(bào)時(shí)功能開(kāi)啟,即bs=0時(shí),LCD上會(huì)出現(xiàn)相應(yīng)的標(biāo)示符號(hào)。</p><p> 此時(shí),主程序?qū)呙鑪hengshi子程序。&
42、lt;/p><p> zhengshi子程序能判斷當(dāng)前時(shí)間是否為整點(diǎn),若為整點(diǎn)將使cxbs=0,且把hour由BCD碼化為二進(jìn)制存儲(chǔ)在字節(jié)shengshu(為報(bào)時(shí)聲數(shù),將在baoshi子程序中使用)中,之后主程序?qū)呙鑒aoshi子程序,即開(kāi)始報(bào)時(shí)。</p><p> chuzhi=0, 由baoshi子程序可知,鬧鐘從0秒開(kāi)始報(bào)時(shí),當(dāng)報(bào)時(shí)完畢將自動(dòng)令cxbs=1。</p>
43、<p> 3.2.5 鬧鐘功能的說(shuō)明:</p><p> 當(dāng)鬧鐘功能開(kāi)啟,即bj=0時(shí),LCD上會(huì)出現(xiàn)相應(yīng)的標(biāo)示符號(hào)此時(shí),主程序?qū)呙鑪hengshi子程序。zhengshi子程序?qū)Ξ?dāng)前時(shí)間和鬧鐘時(shí)間進(jìn)行比較,當(dāng)它們的分、時(shí)全相等時(shí)開(kāi)啟中斷sub1,否則關(guān)閉中斷sub1。這樣就可實(shí)現(xiàn)鬧鐘鬧鈴一分鐘后自動(dòng)停止鳴叫的要求。</p><p> 3.2.6 加1、移位功能的說(shuō)
44、明:</p><p> 將年份前兩位與年(year)、月(month)、星期(week)、日(day)、時(shí)(hour)、分(min)、秒(sec)拆字后分別存儲(chǔ)在DspBuf-2、DspBuf-1、DspBuf+0、DspBuf+1、DspBuf+2、DspBuf+3等13個(gè)字節(jié)中。而把它們的每一為在LCD上的顯示位置地址放在如下表中:</p><p> tab4:db 80h,81h
45、,82h,83h,85h,86h,88h,89h,8eh,0c2h,0c3h,0c5h,0c6h,0c8h,0c9h;!當(dāng)前時(shí)間各編輯位在LCD上的位置表。</p><p> 然后執(zhí)行mov r1,#DspBuf+12; inc @r1就可實(shí)現(xiàn)對(duì)秒個(gè)位加1。</p><p> 執(zhí)行:dec r1和子程序www就可實(shí)現(xiàn)移位功能.</p><p><b&
46、gt; 3.3時(shí)鐘模塊設(shè)計(jì)</b></p><p> 單片機(jī)要先從DS1302芯片中讀取時(shí)鐘數(shù)據(jù),然后通過(guò)LCD顯示出來(lái)。在讀取DS1302的時(shí)間和日期之前,先要對(duì)DS1302進(jìn)行賦初始時(shí)間并開(kāi)啟時(shí)鐘。時(shí)鐘被啟動(dòng)后若未接收到新的賦時(shí)間指令,其內(nèi)部的時(shí)鐘將一直不停的運(yùn)行,以保證時(shí)間的實(shí)時(shí)性和準(zhǔn)確性;期間單片機(jī)可隨時(shí)讀取DS1302內(nèi)部時(shí)間和日期寄存器中的數(shù)值。</p><p>
47、; 3.4液晶顯示模塊設(shè)計(jì)</p><p> 本設(shè)計(jì)液晶時(shí)鐘顯示系統(tǒng)設(shè)計(jì)上由液晶顯示器顯示、時(shí)鐘芯片DS1302提供時(shí)間,可為使用者提供完整的時(shí)間信息。由于LED數(shù)碼管只能顯示數(shù)字而無(wú)法顯示其他中英文字符,并對(duì)成本及功能考慮,因此從設(shè)計(jì)的成本及功能的角度考慮,采用LCD一1602顯示模塊,它可以顯示年、月、日、星期等中文字目。LCD一1602驅(qū)動(dòng)電路簡(jiǎn)單,可以由單片機(jī)直接輸出命令驅(qū)動(dòng)。</p>
48、<p><b> 4 設(shè)計(jì)總結(jié)</b></p><p> 在長(zhǎng)達(dá)一個(gè)多月的設(shè)計(jì)制作中讓我學(xué)到了軟件與硬件的結(jié)合設(shè)計(jì)的許多知識(shí),同時(shí)在出現(xiàn)的多種軟件與硬件的問(wèn)題上使我學(xué)會(huì)了如何去分析問(wèn)題的所在,并結(jié)合所學(xué)知識(shí)去一一解決。</p><p> 在處理液晶顯示的知識(shí)漏洞上,我重新翻閱了以往所學(xué)的課本,在復(fù)習(xí)中學(xué)會(huì)了很多。</p><p>
49、; 在硬件與軟件結(jié)合的故障問(wèn)題加強(qiáng)了我的耐心和細(xì)心的鍛煉。雖然所選擇的設(shè)計(jì)課題只是一個(gè)小系統(tǒng),但是只要有足夠的知識(shí)我們便可以把它變成一個(gè)大的系統(tǒng),讓它運(yùn)用在現(xiàn)實(shí)的社會(huì)生活中。在一個(gè)月的時(shí)間努力下最后完成了我們的課題設(shè)計(jì),使我們有一種成就感。</p><p> 5 附錄:部分模塊程序代碼及設(shè)計(jì)實(shí)物圖和仿真電路圖</p><p><b> 5.1 主程序代碼</b>
50、</p><p><b> mainloop:</b></p><p> jb IsSheZhi, SheZhi ;判斷是否處于設(shè)置狀態(tài),處于設(shè)置狀態(tài)則跳轉(zhuǎn)</p><p> lcall get1302 ;調(diào)讀時(shí)間子程序</p><p> lcall chaizi</p><
51、p> lcall display ;調(diào)顯示子程序,顯示當(dāng)前時(shí)間與溫度</p><p> SheZhi:jb BJ,xq ;判斷鬧鐘功能是否開(kāi)啟,未開(kāi)啟則跳轉(zhuǎn)</p><p> lcall bijiao ;調(diào)比較子程序,比較當(dāng)前時(shí)間與鬧鐘時(shí)間</p><p> xq: lcall anjian
52、 ;按鍵掃描</p><p> jb bs,bs_1</p><p> lcall zhengshi ;判斷當(dāng)前時(shí)間是否是整時(shí),即能否報(bào)時(shí)</p><p> bs_1: jb cxbs,cx_1</p><p> lcall baoshi ;執(zhí)行報(bào)時(shí)功能</p><p>
53、; cx_1: sjmp mainloop</p><p> 5.2 初始化DS1302程序代碼</p><p> set1302:mov a,#8eh ;寫(xiě)DS1302控制寄存器地址</p><p> mov b,#00h ;允許寫(xiě)操作,將WP位設(shè)置為低電平</p><p>
54、 lcall clockwr</p><p> mov a,#8ch ;寫(xiě)年初值</p><p> mov b,year </p><p> lcall clockwr</p><p> mov a,#88h ;寫(xiě)月初值</p><p> mov b,
55、month </p><p> lcall clockwr </p><p> mov a,#8ah ;寫(xiě)星期初值</p><p> mov b,week</p><p> lcall clockwr</p><p> mov a,#86h
56、 ;寫(xiě)日期初值</p><p> mov b,day </p><p> lcall clockwr</p><p> mov a,#84h ;寫(xiě)時(shí)初值</p><p> mov b,hour </p><p> lcall clockwr</p><p>
57、 mov a,#82h ;寫(xiě)分初值</p><p> mov b,min </p><p> lcall clockwr</p><p> mov a,#80h ;寫(xiě)秒初值</p><p> mov b,sec </p><p> lcal
58、l clockwr</p><p><b> ret</b></p><p> 5.3 讀時(shí)間子程序代碼</p><p> get1302:mov a,#81h ;讀秒</p><p> lcall clockrd</p><p><b>
59、 mov sec,a</b></p><p> mov a,#83h ;讀分</p><p> lcall clockrd</p><p><b> mov min,a</b></p><p> mov a,#85h ;讀時(shí)&
60、lt;/p><p> lcall clockrd</p><p> mov hour,a</p><p> mov a,#87h ;讀日</p><p> lcall clockrd</p><p><b> mov day,a</b></p>
61、;<p> mov a,#8bh ;讀星期</p><p> lcall clockrd</p><p> mov week,a</p><p> mov a,#89h ;讀月</p><p> lcall clockrd</p>
62、<p> mov month,a</p><p> mov a,#8dh ;讀年</p><p> lcall clockrd</p><p> mov year,a</p><p><b> ret</b></p><p> 5.4延
63、時(shí)子程序代碼</p><p> delay: mov r7,a ;設(shè)置a為自定義變量,可省去其他延時(shí)程序的編寫(xiě)</p><p> d2: mov r6,#250 ;設(shè)置1ms延時(shí)</p><p><b> d1: nop</b></p><p><b> nop</b>&l
64、t;/p><p> djnz r6,d1</p><p> djnz r7,d2</p><p><b> ret</b></p><p><b> 5.5實(shí)物圖</b></p><p><b> 5.6 仿真電路圖</b></p>
65、<p><b> 5.7 程序清單</b></p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;; 初始化 ;;;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
66、;;;;</p><p> P_Lcd equ P0 ;液晶lcd數(shù)據(jù)總線</p><p> pq equ p1 ;按鍵接口</p><p> pf bit p2.0 ;蜂鳴器接口</p><p> led bit p2.1 ;led燈指示
67、接口</p><p> lcdrs bit p2.5 ;lcdrs=1選擇數(shù)據(jù)寄存器,lcdrs=0選擇指令寄存器</p><p> lcdrw bit p2.6 ;lcdrw=1進(jìn)行讀操作,lcdrw=0進(jìn)行寫(xiě)操作</p><p> lcde bit p2.7 ;lcdep由1-->0 時(shí),液晶模塊執(zhí)行
68、命令</p><p> sclk bit p3.5 ;時(shí)鐘芯片時(shí)鐘線引腳</p><p> io bit p3.6 ;時(shí)鐘芯片數(shù)據(jù)傳輸線引腳</p><p> rst bit p3.7 ;時(shí)鐘芯片復(fù)位線引腳</p><p> IsSheZhi bit 30h
69、 ;設(shè)置狀態(tài)標(biāo)示位</p><p> BJ bit 31h ;比較標(biāo)示位</p><p> QH bit 32h ;切換標(biāo)示位</p><p> bs bit 33h ;報(bào)時(shí)功能標(biāo)示位</p><p> cxbs bit 34h ;執(zhí)
70、行報(bào)時(shí)標(biāo)志位</p><p> sec equ 50h</p><p> min equ 51h</p><p> hour equ 52h</p><p> day equ 53h</p><p> week equ 54h</p><p> month equ 55h</p
71、><p> year equ 56h</p><p> KeyCode equ 57h ;按鍵1功能子程序序號(hào)存儲(chǔ)地址</p><p> jiepai equ 58h ;存放報(bào)時(shí)聲音的節(jié)拍常數(shù)</p><p> chuzhi equ 59h ;報(bào)時(shí)開(kāi)始秒時(shí)間常數(shù)</p>&
72、lt;p> shengshu equ 5ah ;存放報(bào)時(shí)聲數(shù)</p><p> DspBuf equ 60h ;當(dāng)前時(shí)間拆字后存儲(chǔ)首地址</p><p> dspba equ 70h ;鬧鐘時(shí)間首地址</p><p><b> org 0h</b></p><
73、p><b> ljmp main</b></p><p><b> org 00bh</b></p><p><b> ljmp sub1</b></p><p><b> org 01bh</b></p><p><b> lj
74、mp sub2</b></p><p><b> org 30h</b></p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;; 主程序 ;;;;;;;;;;;;</p><p> ;;;;
75、;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p><b> main:</b></p><p> clr IsSheZhi</p><p><b> clr QH</b></p><p><b> setb BJ</b><
76、;/p><p><b> setb bs</b></p><p><b> setb cxbs</b></p><p> mov KeyCode,#00h</p><p> mov sp ,#30h</p><p> mov year,#10h
77、;為當(dāng)前時(shí)間付初值</p><p> mov month,#03h</p><p> mov week,#4h</p><p> mov day,#20h</p><p> mov hour,#11h</p><p> mov min,#59h</p><p> mov sec,#0
78、0h</p><p> mov DspBuf-1,#0h</p><p> mov DspBuf-2,#02h</p><p> mov jiepai,#80h ;設(shè)置節(jié)拍常數(shù)</p><p> mov chuzhi,#00h ;設(shè)置1秒時(shí)開(kāi)始報(bào)時(shí)</p><p> mov
79、 dspba+0,#00h ;為鬧鐘時(shí)間賦初值</p><p> mov dspba+1,#09h</p><p> mov dspba+2,#0h</p><p> mov dspba+3,#0h</p><p> mov TH0,#0ffh</p><p> mov TL0,#0ffh&l
80、t;/p><p> mov TH1,#0ffh</p><p> mov TL1,#0ffh</p><p> mov IE,#8aH</p><p> mov TMOD,#11h</p><p><b> setb pf</b></p><p> acall lc
81、d_init ;調(diào)LCM的初始化程序</p><p> lcall word ;把自創(chuàng)字符寫(xiě)入CGRAM的子程序</p><p> lcall set1302 ;DS1302初始化</p><p><b> mainloop:</b></p><p>
82、 jb IsSheZhi, SheZhi ;判斷是否處于設(shè)置狀態(tài),處于設(shè)置狀態(tài)則跳轉(zhuǎn)</p><p> lcall get1302 ;調(diào)讀時(shí)間子程序</p><p> lcall chaizi</p><p> lcall display ;調(diào)顯示子程序,顯示當(dāng)前時(shí)間與溫度</p><p&g
83、t; SheZhi:jb BJ,xq ;判斷鬧鐘功能是否開(kāi)啟,未開(kāi)啟則跳轉(zhuǎn)</p><p> lcall bijiao ;調(diào)比較子程序,比較當(dāng)前時(shí)間與鬧鐘時(shí)間</p><p> xq: lcall anjian ;按鍵掃描</p><p> jb bs,bs_1</p&
84、gt;<p> lcall zhengshi ;判斷當(dāng)前時(shí)間是否是整時(shí),即能否報(bào)時(shí)</p><p> bs_1: jb cxbs,cx_1</p><p> lcall baoshi ;執(zhí)行報(bào)時(shí)功能</p><p> cx_1: sjmp mainloop</p><p>
85、 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;; 液晶顯示初始化設(shè)定 ;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p><b&g
86、t; lcd_init:</b></p><p> mov a,#01h ;清除LCD的顯示內(nèi)容(清屏)</p><p> acall LcdWrCmd</p><p> mov a,#10 ;10ms延時(shí)</p><p> acall delay</p><p>
87、 mov a,#38h ;顯示模式設(shè)置(使用8位數(shù)據(jù),顯示兩行,使用5*7的字型)</p><p> acall LcdWrCmd</p><p><b> mov a,#10</b></p><p> acall delay</p><p> mov a,#0ch ;
88、顯示開(kāi)及光標(biāo)設(shè)置(顯示器開(kāi),光標(biāo)關(guān),字符不閃爍)</p><p> acall LcdWrCmd</p><p><b> mov a,#10</b></p><p> acall delay</p><p> mov a,#06h ;顯示光標(biāo)移動(dòng)設(shè)置(字符不動(dòng),光標(biāo)自動(dòng)右移)</p>
89、<p> acall LcdWrCmd</p><p><b> mov a,#10</b></p><p> acall delay</p><p><b> ret</b></p><p> ;?;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
90、;;;</p><p> ;;;;;;;; LCM命令嵌入 ;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p><b> LcdWrCmd:</b></p><p><b> clr
91、LCDRW</b></p><p><b> clrLCDRS</b></p><p> movP_Lcd, A</p><p><b> mov a,#6</b></p><p> acall delay</p><p><b> set
92、bLcdE</b></p><p><b> clrLcdE</b></p><p><b> ret</b></p><p> ;?;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;; LCM數(shù)據(jù)
93、輸入 ;;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> LcdWrDat:setbLCDRS</p><p><b> clrLCDRW</b></p><p> movP_Lcd, A</
94、p><p><b> mov a,#6</b></p><p> acall delay</p><p><b> setbLcdE</b></p><p><b> clrLcdE</b></p><p><b> ret</
95、b></p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;;; 延時(shí)子程序 ;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
96、;;</p><p> delay: mov r7,a ;設(shè)置a為自定義變量,可省去其他延時(shí)程序的編寫(xiě)</p><p> d2:mov r6,#250 ;設(shè)置1ms延時(shí)</p><p><b> d1:nop</b></p><p><b> nop</b>&
97、lt;/p><p> djnz r6,d1</p><p> djnz r7,d2</p><p><b> ret</b></p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;; d
98、s1302初始化程序set1302 ;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> set1302:mov a,#8eh ;寫(xiě)ds1302控制寄存器地址</p><p> mov b,#00h ;允許寫(xiě)操
99、作,將WP位設(shè)置為低電平</p><p> lcall clockwr</p><p> mov a,#8ch ;寫(xiě)年初值</p><p> mov b,year</p><p> lcall clockwr</p><p> mov a,#88h ;寫(xiě)月初值</
100、p><p> mov b,month</p><p> lcall clockwr</p><p> mov a,#8ah ;寫(xiě)星期初值</p><p> mov b,week</p><p> lcall clockwr</p><p> mov a,#86h
101、 ;寫(xiě)日期初值</p><p><b> mov b,day</b></p><p> lcall clockwr</p><p> mov a,#84h ;寫(xiě)時(shí)初值</p><p> mov b,hour</p><p> lcall clockwr&
102、lt;/p><p> mov a,#82h ;寫(xiě)分初值</p><p><b> mov b,min</b></p><p> lcall clockwr</p><p> mov a,#80h ;寫(xiě)秒初值</p><p><b> mov
103、b,sec</b></p><p> lcall clockwr</p><p><b> ret</b></p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;;; 讀時(shí)間子程序get1302
104、 ;;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> get1302:mov a,#81h ;讀秒</p><p> lcall clockrd</p><p><b> mov sec,
105、a</b></p><p> mov a,#83h ;讀分</p><p> lcall clockrd</p><p><b> mov min,a</b></p><p> mov a,#85h ;讀時(shí)</p><p> lcall
106、 clockrd</p><p> mov hour,a</p><p> mov a,#87h ;讀日</p><p> lcall clockrd</p><p><b> mov day,a</b></p><p> mov a,#8bh ;
107、讀星期</p><p> lcall clockrd</p><p> mov week,a</p><p> mov a,#89h ;讀月</p><p> lcall clockrd</p><p> mov month,a</p><p> mov a,#8
108、dh ;讀年</p><p> lcall clockrd</p><p> mov year,a</p><p><b> ret</b></p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>
109、; ;;;;;;; ds1302讀子程序 ;;;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> clockrd:clr rst ;rst先設(shè)置低電平,再設(shè)置高電平,起到去亂碼作用。</p><p> clr s
110、clk ;sclk置為低電平</p><p> setb rst ;rst置為高電平,選通DS1302</p><p> mov r7,#8 ;串行移位傳送次數(shù)</p><p> rds1:rrc a</p><p> mov io,c ;輸出一位寄存器讀
111、地址</p><p> setb sclk ;發(fā)串行脈沖</p><p><b> nop</b></p><p><b> nop</b></p><p> clr sclk ;sclk置為低電平</p><p> djnz
112、r7,rds1</p><p> nop ;延時(shí),防后面串行讀數(shù)據(jù)丟失</p><p><b> nop</b></p><p> setb io ;8位地址輸出完畢,IO設(shè)置為輸入端口</p><p><b> mov r7,#8</b>
113、</p><p> rds2: mov c,io ;讀入一位數(shù)據(jù)</p><p><b> rrc a</b></p><p> setb sclk ;發(fā)串行脈沖</p><p><b> nop</b></p><p>&l
114、t;b> nop</b></p><p><b> clr sclk</b></p><p> djnz r7,rds2</p><p><b> clr rst</b></p><p><b> setb sclk</b></p>&
115、lt;p><b> ret</b></p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;; ds1302寫(xiě)數(shù)據(jù)子程序 ;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;
116、;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> clockwr:push acc ;設(shè)置堆棧,入棧</p><p><b> push b</b></p><p><b> clr rst</b></p><p><b> clr s
117、clk</b></p><p> setb rst ;選通DS1302</p><p><b> mov r7,#8</b></p><p> wrs1: rrc a</p><p> mov io,c ;輸出一位寄存器寫(xiě)地址</p><
118、p> clr sclk ;發(fā)串行輸出脈沖</p><p><b> setb sclk</b></p><p> djnz r7,wrs1</p><p><b> nop</b></p><p> mov a,b ;將待寫(xiě)入數(shù)據(jù)送A<
119、/p><p><b> mov r7,#8</b></p><p> wrs2: rrc a</p><p> mov io,c ;經(jīng)IO輸出一位數(shù)據(jù)</p><p><b> clr sclk</b></p><p><b> set
120、b sclk</b></p><p> djnz r7,wrs2</p><p> pop b ;出棧</p><p><b> pop acc</b></p><p><b> ret</b></p><p> ;;;;;;;
121、;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> ;;;;;;; 顯示設(shè)置—— 分配時(shí)間顯示空間 ;;;;;;;;;</p><p> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p> chaizi: mov a,year
122、 ;拆年</p><p> mov r0,#60h</p><p> acall hex2bcd</p><p> mov a,month ;拆月</p><p> mov r0,#62h</p><p> acall hex2bcd</p><p> mov a,day
123、 ;拆日期</p><p> mov r0,#64h</p><p> lcall hex2bcd</p><p> mov a,week;</p><p><b> mov 66h,a</b></p><p> mov a,hour ;拆時(shí)</p>&l
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于at89s52的多功能設(shè)計(jì)時(shí)鐘設(shè)計(jì)0畢業(yè)論文
- 基于at89s52的多功能設(shè)計(jì)時(shí)鐘畢業(yè)設(shè)計(jì)
- 基于at89s52的多功能數(shù)字鐘畢業(yè)論文
- 基于at89s52智能風(fēng)扇設(shè)計(jì)畢業(yè)論文
- 基于at89s52的籃球計(jì)時(shí)計(jì)分器畢業(yè)論文
- 基于at89s52的廣告燈設(shè)計(jì)畢業(yè)論文
- 基于at89s52單片機(jī)的多功能數(shù)字電子鐘設(shè)計(jì)畢業(yè)論文
- 基于at89s52數(shù)字鬧鐘設(shè)計(jì)研究畢業(yè)論文
- 基于at89s52的電子時(shí)鐘和計(jì)算器設(shè)計(jì)畢業(yè)論文
- 基于at89s52的溫度測(cè)量系統(tǒng)設(shè)計(jì)畢業(yè)論文
- 基于at89s52單片機(jī)數(shù)字時(shí)鐘的實(shí)現(xiàn)畢業(yè)論文
- 基于at89s52測(cè)溫系統(tǒng)畢業(yè)論文
- 基于at89s52單片機(jī)數(shù)碼管時(shí)鐘畢業(yè)論文
- 基于at89s52數(shù)字電子鐘設(shè)計(jì)畢業(yè)論文
- 基于at89s52單片機(jī)的數(shù)字倒計(jì)時(shí)器設(shè)計(jì)畢業(yè)論文
- 基于at89s52和hd7279a的多功能電子鐘畢業(yè)論文
- 基于at89s52溫度控制器設(shè)計(jì)畢業(yè)論文
- 基于at89s52的簡(jiǎn)易計(jì)算器設(shè)計(jì)畢業(yè)論文
- 基于at89s52的汽車(chē)智能剎車(chē)系統(tǒng)設(shè)計(jì)畢業(yè)論文
- 基于at89s52的數(shù)字電壓表設(shè)計(jì)畢業(yè)論文
評(píng)論
0/150
提交評(píng)論