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