版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于at89s51控制的數(shù)字時鐘摘要本系統(tǒng)采用msc-51系列單片機以at89s51為中心器件來設(shè)計多功能數(shù)字時鐘。文中詳細介紹了51單片機應(yīng)用中的數(shù)據(jù)轉(zhuǎn)換顯示,數(shù)碼管顯示原理,動態(tài)掃描顯示原理,單片機的定時中斷原理。該時鐘系統(tǒng)能實現(xiàn)時鐘日歷的功能:能進行時、分、秒的顯示;也具有日歷計算、顯示和時鐘,日歷的校準、定時時間的設(shè)定,實現(xiàn)秒表,整點報時等功能。1.引言1.1 設(shè)計的意義近年來隨著科技的飛速發(fā)展,單片機的應(yīng)用正在不斷地走向深入,同時帶動傳統(tǒng)控制檢測日新月異更新.在實時檢測和自動控制的單片機應(yīng)用系統(tǒng)中,單片機往往是作為一個核心部件來使用,僅單片機方面知識是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu),以
2、及針對具體應(yīng)用對象特點的軟件結(jié)合,加以完善.本文通過用對一個能實現(xiàn)定時,日歷顯示功能的時間系統(tǒng)的設(shè)計學習,詳細介紹了51單片機應(yīng)用中的數(shù)據(jù)轉(zhuǎn)換顯示,數(shù)碼管顯示原理,動態(tài)掃描顯示原理,單片機的定時中斷原理、從而達到學習,了解單片機相關(guān)指令在各方面的應(yīng)用。1.2 設(shè)計所要做的工作系統(tǒng)at89s51、led數(shù)碼管、按鍵、發(fā)光二極管,電容,電阻,蜂鳴器,晶震等部分構(gòu)成,能實現(xiàn)的功能有:時間顯示、日期顯示、定時、整點報時、秒表、報警。左鍵:切換功能顯示,按一下顯示日期,再按一下顯示定時時間,再按一下顯示秒表。中鍵:進行位置選擇,按一下則選擇最右邊兩位,再按一下則選擇中間兩位,再按一下則選擇左邊兩位,再按
3、一下則選擇下一功能左邊兩位,如此循環(huán)。當選擇某個數(shù)的時候,按左鍵加一,秒的時候則直接清0。當有選擇某個數(shù)的時候或顯示日期、定時時間的時候按右鍵則返回顯示時間。右鍵:定時時間到時會放音樂,按右鍵時就停止播放。右上角按鍵和指示燈:顯示是否有定時功能,亮時則有定時功能,按一下按鍵則燈滅取消定時功能,再按下開啟定時功能。當顯示秒表的時候:按中間鍵進行開始計時和暫停,按右鍵清0。按左鍵時回到顯示時間。2.硬件電路原理分析2.1.電路原理分析 時鐘電路驅(qū)動電路顯示電路復(fù)位電路aaat89s51定時音樂播放鍵盤電 路 圖2-1總體方案方框圖圖2-2電路原理圖電路中單片機的p1口送數(shù)據(jù),p2口送地進行選擇某位
4、數(shù)碼管。用74ls245進行驅(qū)動,p3.0接蜂鳴器,p3.2,p3.3,p3.4,p3.5接按鍵,0.1uf電容起抗干擾作用。2.1.1電路顯示原理23456電路原理圖見圖2。由兩個四位的數(shù)碼管組成時、分、秒、年、月、日的顯示。p1口的8條數(shù)據(jù)線p1.0 至p1.7 分別與第一片74ls245譯碼的a0-a7口相接,p2口的 p2.0至p2.7分別與第二片74ls245 a0-a7相接。這樣通過p0 口送出一個存儲單元的高位、低位代碼,通過p2口送出掃描選通代碼地址,就會將要顯示的數(shù)據(jù)在數(shù)碼管中顯示出來。從p1口輸出的代碼是段選碼,從p2口輸出的就是位選碼。這是掃描顯示原理。2.1.2內(nèi)部震蕩
5、電路1:圖2-3晶體震蕩電路at89s51中有一個構(gòu)成內(nèi)部震蕩器的高增益反向放大器,引腳xtal1和xtal2分別是放大器的輸入端和輸出端,這個放大器與作為反饋元件的石英晶體構(gòu)成自激震蕩電路。外接石英晶體及電容c1,c2接在放大器的反饋回路中構(gòu)成并聯(lián)震蕩電路。2.1.3鍵盤消抖原理1310鍵盤是人與微機打交道的主要設(shè)備,按鍵的讀取容易引起誤動作??刹捎密浖ザ秳拥姆椒ㄌ幚恚浖挠|點在閉合和斷開的時候會產(chǎn)生抖動,這時觸點的邏輯電平是不穩(wěn)定的,如不采取妥善處理的話,將引起按鍵命令錯誤或重復(fù)執(zhí)行,在這里采用軟件延時的方法來避開抖動。2.1.4復(fù)位電路原理【2】9復(fù)位電路的基本功能是:系統(tǒng)上電時提供
6、復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。為可靠起見,電源穩(wěn)定后還要經(jīng)一定的延時才撤銷復(fù)位信號,以防電源開關(guān)或電源插頭分-合過程中引起的抖動而影響復(fù)位。下圖所示的rc復(fù)位電路可以實現(xiàn)上述基本功能,sm為手動復(fù)位開關(guān)。圖2-4復(fù)位電路圖2.2四位數(shù)碼管原理圖4810圖2-5 數(shù)碼管管腳圖2.3 at89s51的管腳說明2: 圖2-6 at89s51管腳圖vcc 電源電壓.gnd 接地.rst 復(fù)位輸入.當rst變?yōu)楦唠娖讲⒈3?個機器周期時,將使單片機復(fù)位.wdt溢出將使該引腳輸出高電平,設(shè)置sfr auxr的disrto位(地址8eh)可打開或關(guān)閉該功能.diskrto位缺省為reset輸出
7、高電平打開狀態(tài).xtal1 反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入.xtal2 來自反向振蕩放大器的輸出.p0口 一組8位漏極開路型雙向i/o口.也即地址/數(shù)據(jù)總線復(fù)用口.作為輸出口用時,每位能驅(qū)動8個ttl邏輯門電路,對端口寫1可作為高阻抗輸入端用.在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻.在flash編程時,p0口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時,要求外接上拉電阻.p1口 一個帶內(nèi)部上拉電阻的8位雙向i/o口,p1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個ttl邏輯門電路.對端口寫1,通過內(nèi)部的上拉電
8、阻把端口拉到高電平,此時可作輸入口.作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(iil).flash編程和程序校驗期間,p1接收低8位地址. p2口 一個帶內(nèi)部上拉電阻的8位雙向i/o口.p1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個ttl邏輯門電路.對端口寫1,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口.作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(iil).在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器時,p2口送出高8位地址數(shù)據(jù).在訪問8位地址的外部數(shù)據(jù)存儲器時,p2口線上的內(nèi)容在整個訪問期間不改變.flash編程
9、和程序校驗期間,p2亦接收低8位地址.p3口 一個帶內(nèi)部上拉電阻的8位雙向i/o口.p3的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個ttl邏輯門電路.對p3口寫1時,它們被內(nèi)部的上拉電阻把拉到高電并可作輸入端口.作輸入端口使用時,被外部拉低的p3口將用上拉電阻輸出電流(iil).p3口除了作為一般的i/o口線外,更重要的用途是它的第二功能,如下圖所示.p3口還接收一些用于flash閃速存儲器編程和程序校驗期間的控制信號.psen/ 程序儲存允許輸出是外部程序存儲器的讀先通信號,當at89s51由外部程序存儲器取指令(或數(shù)據(jù))時,每個機器周期兩次psen/有效,即輸出兩個脈沖.當訪問外部數(shù)據(jù)存儲器,
10、沒有兩次有效的psen/信號.ea/vpp 外部訪問允許.欲使cpu僅訪問外部程序存儲器,ea端必須保持低電平,需注意的是:如果加密位lb1被編程,復(fù)位時內(nèi)部會鎖存ea端狀態(tài).flash存儲器編程時,該引腳加上+12v的編程電壓vpp.3.數(shù)字時鐘各個功能實現(xiàn)的設(shè)計思路3.1數(shù)據(jù)與代碼轉(zhuǎn)換148由前述可知,從p2口輸出位選碼,從p1口輸出段選碼,led就會顯示出數(shù)字來。但p1口的輸出的數(shù)據(jù)是要bcd碼,各存儲單元存儲的是二進制數(shù),也就是和要顯示出的字符表達的含義是不一致的??梢姡瑢⒁@示的存儲單元的數(shù)據(jù)直接送到p1口去驅(qū)動led數(shù)碼管顯示是不能正確表達的,必須在系統(tǒng)內(nèi)部將要顯示的數(shù)據(jù)經(jīng)過bcd
11、碼行轉(zhuǎn)換后,將各個單元數(shù)據(jù)的段選代碼送入p1口,給74ls245譯碼后去驅(qū)動數(shù)碼管顯示。具體轉(zhuǎn)換過程如下:我們先將要顯示的數(shù)據(jù)裝入數(shù)據(jù)指針累加器a中,再將a中的數(shù)據(jù)轉(zhuǎn)換成高低兩位,再放回a中,然后將通過movc a,a+dptr查表將a中的值輸出。如:有一個單元存儲了45這樣一位數(shù),則需轉(zhuǎn)換成高低兩位放在兩個地址中,然后通過查表取得5, p1口送出數(shù)據(jù), p2口送出地址。延時1毫秒后同樣的道理將高位4送出。高位4,低位5先后送入譯碼器中,譯碼后45字就在led中顯示出來。3.2計時功能的實現(xiàn)與中斷服務(wù)程序2 時間的運行依靠定時中斷子程序?qū)r鐘單元數(shù)值進位調(diào)整來實現(xiàn)的。計數(shù)器t0打開后,進入計時
12、,滿10毫秒后,重裝定時。中斷一次,滿一秒后秒進位,滿60秒后即為1分鐘,分鐘單元進位,60分到了后,時單元進位,24小時滿后,天單元進位。這樣然后根據(jù)進率,得到年、月、日、時、分、秒存儲單元的值,并經(jīng)譯碼后,通過掃描程序送led中一位一位顯示出來,實現(xiàn)時鐘計時功能。累加是用指令inc來實現(xiàn)的。 進入中斷服務(wù)程序以后,執(zhí)行push psw和push a將程序狀態(tài)寄存器psw的內(nèi)容和累加器a中的數(shù)據(jù)保存起來,這便是所謂的保護現(xiàn)場。以保護現(xiàn)場和恢復(fù)現(xiàn)場時存取關(guān)鍵數(shù)據(jù)的存儲區(qū)叫做堆棧。在軟件的控制之下,堆棧可在片內(nèi)ram中的任一區(qū)間設(shè)定,而堆棧的數(shù)據(jù)存取與一般的ram存取又有區(qū)別,對它的操作,要遵循
13、i后進先出i的原則。3.3定時,音樂播放控制功能與比較指令12系統(tǒng)的另一功能就是實現(xiàn)對執(zhí)行設(shè)備的定時開關(guān)控制,其主要控制思想是這樣的:先將執(zhí)行設(shè)備開啟的時間和關(guān)閉時間置入ram某一單元,在計時主程序當中執(zhí)行幾條比較指令,如果當前計時時間與執(zhí)行設(shè)備的設(shè)定開啟時間相等,就執(zhí)行一條steb 12h指令,將對應(yīng)的那路置為高電位,開啟,定時時間到,調(diào)用音樂播放子程序;如果當前計時時間與執(zhí)行設(shè)備設(shè)定的關(guān)閉時間相等,就執(zhí)行clr對應(yīng)的12h置低電位,關(guān)閉,音樂播放停止。實現(xiàn)此控制功能用到的比較指令為cjne a,#direct,rel,其轉(zhuǎn)移條件是累加器a中的值與立即數(shù)不等則轉(zhuǎn)移。3.4整點報時控制功能當時
14、間的秒開始進入到59分55秒時,開蜂鳴器,56秒時關(guān)蜂鳴器,57秒開蜂鳴器,58秒關(guān)蜂鳴器,59秒開蜂鳴器,60秒關(guān)掉。這樣實現(xiàn)了整點報時功能。如果有播放音樂則不進行整點報時,這點也在程序中加以控制,以免產(chǎn)生混亂。3.5秒表功能的實現(xiàn)秒表是通過定時100毫秒的時間。將0.1秒位通過cjne 的不等轉(zhuǎn)移的比較指令和10比較,如果不等,則0.1秒位繼續(xù)每100毫秒加1;如果等于10,0.1秒位清0,秒位則加1。秒位通過cjne 的不等轉(zhuǎn)移的比較指令和60比較,如果不等,則秒位繼續(xù)每1毫秒加1;如果等于60,秒位清0,分位加1。分位則也是通過cjne 的不等轉(zhuǎn)移的比較指令和60比較,如果不等,則分位
15、繼續(xù)每60秒加1;如果等于60,分位清0,秒位清0,0.1秒位清0,停止計數(shù)。4軟件設(shè)計4.1程序流程圖圖4-1 主程序流程圖圖4-2定時器0流程圖圖4-3 外部中斷0流程圖圖4-4 外部中斷1流程圖5調(diào)試中的問題與解決方法數(shù)字時鐘設(shè)計剛完成時,我經(jīng)過檢查,發(fā)現(xiàn)了一些問題147:1 剛弄好電路板并燒寫程序進去后發(fā)現(xiàn)數(shù)碼管不能正確顯示時間,每個數(shù)碼管中顯示的數(shù)字幾乎一樣。經(jīng)過詢問老師,自己查閱資料,終于找出問題的原因:由于我在電路中采用的是動態(tài)數(shù)碼管顯示,需準確地調(diào)整延時子程序del1ms。我在程序中采取的延時時間為1毫秒。2整點報時不準確,本來我是定在55秒開始啟動蜂鳴器報警,卻提前了兩秒鐘,
16、經(jīng)過檢查程序后發(fā)現(xiàn)是報時程序里錯寫成了53秒,才造成提前報時。3復(fù)位電路中的開關(guān)不能使電路復(fù)位到初始狀態(tài)即12:00:00,經(jīng)過認真檢查電路后我發(fā)現(xiàn)我是開關(guān)的管腳沒接對。測試后重新接下開關(guān)的管腳就可以了。6結(jié)束語經(jīng)過調(diào)試之后,我發(fā)現(xiàn)我做的基于at89s51設(shè)計的數(shù)字時鐘,經(jīng)過調(diào)試,一天的時間里面,差不多在1秒,計時、定時時間是相對準確。而且該設(shè)計的成本不高,硬件電路簡單,可以用在對時間精度要求不高的場合. 由于時鐘電路的重要性,時鐘電路在很多應(yīng)用系統(tǒng)中必不可少,用軟件方法可以實現(xiàn),但誤差很大。在對時間精度要求很高的情況下,通常采用時鐘芯片來實現(xiàn)。典型的時鐘芯片有:ds1302,ds12887,
17、x1203等都可以滿足精度要求。附錄org 0000hljmp main ;跳到主程序org 0003hljmp int0 ;跳到外部中斷0org 000bh ljmp t0 ;跳到定時器0org 0013hljmp int1 ;跳到外部中斷1org 001bhljmp t1 ;跳到定時器1org 0100hmain: ;主函數(shù)clr p3.0 ;關(guān)蜂鳴器acall initial ;調(diào)用初始化函數(shù)done:jnb 00h,done1 ;是否顯示時間mov r0,#73h ;顯示時間acall convert ;把時間存儲器轉(zhuǎn)化到顯示存儲器ajmp test ;是否處于調(diào)整狀態(tài)done1:jn
18、b 01h,done2 ;是否顯示日期mov r0,#70h ;顯示日期acall convert ;轉(zhuǎn)化ajmp test ;是否處于調(diào)整狀態(tài)done2:jnb 02h,done3 ;是否顯示定時時間mov r0,#63h ;顯示定時時間acall convert ;轉(zhuǎn)化ajmp test ;done3:mov r0,#60h ;顯示秒表acall convert ;轉(zhuǎn)化ljmp disp ;跳到顯示函數(shù)test: ;判斷是否處于調(diào)整狀態(tài) jnb 18h,test10 ;是否按鍵已經(jīng)按下 jnb p3.5,test7 ;按鍵是否已經(jīng)釋放 ajmp test11test10:jb 16h,te
19、st8 ;判斷是否有按鍵按下 jb p3.5,test7 setb 16h ajmp test7test8:jb p3.5,test9 setb 18h ajmp test7 test11:clr 18h cpl 17h mov c,17h mov p0.0,c clr 16h clr 12h ;定時結(jié)束 clr tr1 ;關(guān)定時器1 clr p3.0 ;關(guān)蜂鳴器 clr 13h ; mov 59h,#00h ; mov 58h,#01h ajmp test7 test9:clr 16h test7:jnb 12h,test6 jb p3.4,test6 clr 12h ;定時結(jié)束 clr t
20、r1 ;關(guān)定時器1 clr p3.0 ;關(guān)蜂鳴器 clr 13h ; mov 59h,#00h ; mov 58h,#01h ;test6:jnb 01h,test5 ;是否處于日期狀態(tài) jb p3.4,test4 ;案鍵3是否按下 mov 20h,#01h ; 返回時間狀態(tài) mov 21h,#00h ljmp disp test5:jnb 02h,test4 ;是否處于定時時間狀態(tài) jb p3.4,test4 ;按鍵3是否按下 mov 20h,#01h ;返回時間狀態(tài) mov 21h,#00h ljmp disp test4:jnb 15h,do ;閃爍標志是否有效 ljmp disp ;無
21、效則進入顯示函數(shù)do: mov a,21h ; cjne a,#00h,test2 ;是否在調(diào)整狀態(tài) ljmp disp ;不處于調(diào)整狀態(tài)則進入顯示函數(shù) test2: jb p3.4,test3 mov 20h,#01h mov 21h,#00h ljmp disp test3:jnb 08h,done4 ;是否秒位置處于調(diào)整狀態(tài) mov 78h,#11 ;不顯示 mov 79h,#11 ;不顯示 ljmp disp ;進入顯示函數(shù) done4:jnb 09h,done5 ;是否分位置處于調(diào)整狀態(tài) mov 7bh,#11 ;不顯示 mov 7ch,#11 ;不顯示 ljmp disp ;進入顯
22、示函數(shù) done5:mov 7eh,#11 ;時位置不顯示 mov 7fh,#11 ;時位置不顯示 ljmp disp ;進入主函數(shù)convert: ;轉(zhuǎn)化成數(shù)碼管顯示所對應(yīng)的存儲器mov a,r0 ;把r0存儲的地址所對應(yīng)的存儲器的內(nèi)容轉(zhuǎn)化到秒位置的存儲器mov b,#10 ;div ab ;mov 79h,a ;高位存儲?mov 78h,b ;地位存儲inc r0 ;地址加一mov a,r0 ;取數(shù)據(jù)mov b,#10 ;div ab ;mov 7ch,a ;高位存儲mov 7bh,b ;低位存儲inc r0 ;地址加一mov a,r0 ;取數(shù)據(jù)mov b,#10 ;div ab ;mov
23、 7fh,a ;高位存儲mov 7eh,b ;低位存儲retinitial: mov 7fh,#1 ;數(shù)碼管顯示12:00:00 mov 7eh,#2 mov 7dh,#10 mov 7ch,#0 mov 7bh,#0 mov 7ah,#10 mov 79h,#0 mov 78h,#0 mov 75h,#12 ;初始化時間 12:00:00 mov 74h,#0 mov 73h,#0 mov 72h,#08 ;初始化日期 08.3.20 mov 71h,#3 mov 70h,#20 mov 65h,#12 ;初始化定時時間 12:00:20 mov 64h,#0 mov 63h,#20 mov
24、 62h,#00 ;初始化秒表00:00.00 mov 61h,#00 mov 60h,#00 mov 50h,#100 ;1s定時100*10ms mov 51h,#20 ;200ms閃爍計時 mov 52h,#10 ;秒表計數(shù)器 mov 53h,#5 ;每放一個音時延時5ms mov 58h,#1 ;存放音樂表的指針 mov th0,#0d8h ;t0定義為10ms中斷 mov tl0,#0f0h mov tmod,#11h ;定時器工作在方式1 mov ip,#2 ;定時器0高優(yōu)先級 mov ie,#8fh ;開中斷 setb it0 ;外部中斷為邊緣觸發(fā) setb it1 ;外部中斷為
25、邊緣觸發(fā) setb tr0 ;開定時器0 mov 20h,#0 ; setb 00h ;設(shè)置成處在時間顯示狀態(tài) 00h為時間顯示標志,01h為日期顯示標志,02h為定時時間顯示標志,03h秒表顯示標志 ;08h為秒位置選擇標志,09h為分位置選者標志,0ah為時位置選擇標志 ;10h為秒表開始或暫停標志,11h為,12h為是否正在放音樂標志,13h為是否延時標志,15h為閃爍標志,16h,17h為判斷定時按鍵標志 mov 21h,#0 ;位存儲器初始化 mov 22h,#0 ; setb 17h ; 開定時器 setb p0.0 ;開定時器指示燈retdisp: ;顯示函數(shù) mov r0,#7
26、8h ;顯示第一 個位置 mov dptr,#tab ;mov r7,#0feh ;第一位有效next: mov a,r0 ; movc a,a+dptr ;把十進制數(shù)轉(zhuǎn)化成數(shù)碼管對應(yīng)的數(shù)據(jù) mov p1,a ;數(shù)據(jù)送出端口 mov p2,r7 ;地址送出端口 acall del1ms ;延時一毫秒 mov a,r7 ; rl a ;地址位左移到下一位 mov r7,a ; inc r0 ;數(shù)據(jù)地址加1 cjne r0,#80h,next ;是否已經(jīng)顯示完ljmp donetab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,40h,00h ;0 1 2
27、 3 4 5 6 7 8 9 - 空del1ms: ;延時1毫秒函數(shù) mov r6,#2 del1:mov r5,#250 djnz r5,$ djnz r6,del1rett0: ;定時器0函數(shù) push dph push dpl push psw push acc mov th0,#0d8h ;定時時間設(shè)置為10毫秒 mov tl0,#0f0h djnz 50h,miao1 ;是否已經(jīng)延時1秒 ajmp next5 ; miao1:ljmp miaobiao ;一秒還沒到,進入秒表 next5:mov 50h,#100 ; 重新循環(huán)100次,即一秒 inc 73h ;秒加一 mov a,7
28、3h ; cjne a,#60,miao2 ;是否已經(jīng)加到60 ajmp next6 ; miao2:ljmp miaobiao ;沒到60,進入秒表 next6:mov 73h,#0 ;已經(jīng)加到60,秒清0 inc 74h ;分加一 mov a,74h ; cjne a,#60,miao3 ;分是否已經(jīng)加到60 ajmp next7 ; miao3:ljmp miaobiao ;沒到60,進入秒表 next7:mov 74h,#0 ;已經(jīng)到60,分清0 inc 75h ;時加1 mov a,75h ; cjne a,#24,miao4 ;是否已加到24 ajmp next8 ; miao4:
29、ljmp miaobiao ;沒到24則進入秒表 next8:mov 75h,#0 ;時清0 inc 70h ;日加1 mov a,70h ; cjne a,#29,month ;是否是29 mov a,71h ; cjne a,#2,miao5 ;是否是2月 ajmp next9 ;miao5:ljmp miaobiao ;不是2月,進入秒表next9:mov 71h,#3 ;月份為3 mov 70h,#1 ;日為1 ljmp miaobiao ;month: mov a,70h ; cjne a,#31,month1 ;是否是日是31 mov a,71h ; cjne a,#4,month
30、6 ;是否是4月 mov 71h,#5 ;月份為5 mov 70h,#1 ;日為1 ajmp miaobiao ; month6:mov a,71h ; cjne a,#6,month9 ;是否是6月 mov 71h,#7 ;月份為7 mov 70h,#1 ;日為1 ajmp miaobiao ; month9:mov a,71h ; cjne a,#9,month11 ;是否是 9月 mov 71h,#10 ;月分為10 mov 70h,#1 ;日為1 ajmp miaobiao ; month11:mov a,71h ; cjne a,#11,miaobiao ;是否是11月 mov 71
31、h,#12 ;月份為12 mov 70h,#1 ; 日為1 ajmp miaobiao ;month1: mov a,70h ; cjne a,#32,miaobiao ;是否日是32 mov a,71h ; cjne a,#12,month0 ;是否是 12月 inc 73h ;年加1 mov 70h,#1 ;月為1 mov 71h,#1 ;日為1 ajmp miaobiao ; month0:inc 71h ;不是12月,月加1 mov 70h,#1 ;日為 ajmp miaobiao ;miaobiao: ;秒表函數(shù) jnb 03h,dingshi ;是否進入計時 jnb 10h,din
32、gshi ;是否開始計時 djnz 52h,dingshi ;是否100毫秒已到 mov 52h,#10 ; jnb p3.4,clear ;按鍵按下時清0 inc 60h ;0.1秒位加1 mov a,60h ; cjne a,#10,dingshi ;是否已加到10 mov 60h,#0 ;0.1秒位清0 inc 61h ;秒位加1 mov a,61h ; cjne a,#60,dingshi ;秒是否已經(jīng)加到60 mov 61h,#0 ;秒位清0 inc 62h ;分加1 mov a,62h ; cjne a,#60,dingshi ;是否是60分 mov 62h,#0 ;分為清0 aj
33、mp dingshi ; clear:mov 60h,#0 ;清0 mov 61h,#0 ; mov 62h,#0 ; clr 10h ;停止計數(shù) ajmp dingshi ;dingshi: ;定時函數(shù) jb 17h,ystart ;定時器有效 ljmp baoshi ;定時器無效 ystart:jb 12h,start ;是否已經(jīng)在放音樂 mov a,63h ; cjne a,73h,bao1 ;是否時已到 ajmp next10 ; bao1:ljmp baoshi ; next10:mov a,64h ; cjne a,74h,bao2 ;是否分已到 ajmp next11 ; bao
34、2:ljmp baoshi ; next11:mov a,65h ; cjne a,75h,bao3 ;是否秒已到 ajmp next12 ; bao3:ljmp baoshi ; next12:setb 12h ;設(shè)置定時已到 mov 55h,#10h ;第一個節(jié)拍 mov 57h,#0fbh ;第一個音調(diào)高位 mov 56h,#8bh ;第一個音調(diào)低位 setb tr1 ;啟動定時器1start:djnz 55h,bao4 ;節(jié)拍是否已結(jié)束 ajmp next13 ;bao4: ljmp baoshi ;next13: cpl 13h ; jb 13h,delay50ms ;進入延時50毫
35、秒 mov a,58h ; inc a ;表地址加1 mov 58h,a ; getnext:mov dptr,#dat ; movc a,a+dptr ;取音調(diào) cjne a,#00h,dsq1 ;是否已經(jīng)結(jié)束 clr 12h ;定時結(jié)束 clr tr1 ;關(guān)定時器1 clr p3.0 ;關(guān)蜂鳴器 clr 13h ; mov 59h,#00h ; mov 58h,#01h ; ajmp baoshi ; dsq1:cjne a,#01h,dsq2 ; mov a,55h ; inc a ; inc a ; mov 55h,a ; ajmp getnext ; dsq2:cjne a,#0ffh,dsq3 ;是否播放空音調(diào) clr tr1 ;關(guān)定時器1 clr p3.0 ;關(guān)蜂鳴器 ajmp dsq4 ; dsq3:mov b,#20 ;把音調(diào)轉(zhuǎn)化成定時器1所對應(yīng)定時存儲器 mul ab ; mov 59h,a ; mov a,#0ffh ; subb a,59h ; mov 56h,a ; mov 59h,b ; mov a,#0ffh ; subb a,59h ; mov 57h,a ; setb tr1 ; dsq4:mov a,5
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國旗下講話稿(12篇)
- 讀書日主題活動方案7篇
- 暑假實踐心得模板10篇
- 實習生個人自我鑒定集合15篇
- 2024年北師大版必修3地理上冊階段測試試卷
- 2024-2025學年江蘇省宿遷市數(shù)學三上期末統(tǒng)考模擬試題含解析
- 辦公環(huán)境下的安全工作生產(chǎn)規(guī)范與措施
- 2024年度打印機銷售與綠色制造標準實施合同3篇
- 創(chuàng)新型會議展覽的創(chuàng)意視覺元素探討
- 2024年標準化托盤出口貿(mào)易合同3篇
- 華東師大版科學七年級上冊期末測試卷2
- 危機管理與應(yīng)急響應(yīng)
- 2024年度廢鋼再生資源買賣合同樣本3篇
- 2024年綜合實踐活動課程實施計劃(4篇)
- 2024-2025學年北師版八年級物理上冊期末考試綜合測試卷
- 陸軍第七十五集團軍醫(yī)院招聘筆試真題2023
- 【MOOC】國際商務(wù)-暨南大學 中國大學慕課MOOC答案
- 人教版八年級英語上冊期末專項復(fù)習-完形填空和閱讀理解(含答案)
- GB/T 44592-2024紅樹林生態(tài)保護修復(fù)技術(shù)規(guī)程
- 2023-2024學年廣東省廣州市白云區(qū)八年級(上)期末數(shù)學試卷及答案解析
- 2024年中郵保險公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論