基于單片機的多功能電子時鐘設(shè)計_secret90068_第1頁
基于單片機的多功能電子時鐘設(shè)計_secret90068_第2頁
基于單片機的多功能電子時鐘設(shè)計_secret90068_第3頁
基于單片機的多功能電子時鐘設(shè)計_secret90068_第4頁
基于單片機的多功能電子時鐘設(shè)計_secret90068_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、機 電 工 程 系課 程 設(shè) 計 報 告題目: 數(shù)字時鐘課程設(shè)計 專 業(yè): 通信技術(shù) 班 級: 07通信 學(xué) 號: 0706090111 姓 名: 指導(dǎo)老師: 時 間:2010年1月10日目錄一、 設(shè)計目的、設(shè)計題目3二、 設(shè)計任務(wù)、功能描述.3三、 硬件原理分析.3四、 軟件設(shè)計.71 地址空間分配.72 軟件整體架構(gòu)分析.82.1總體架構(gòu)說明:設(shè)計思路.82.2主程序功能描述及分析、主程序流程圖.92.3各子程序功能描述及子程序入口出口、各程序流程圖.9五、 程序清單.12一、 設(shè)計題目:數(shù)字時鐘。設(shè)計的時鐘能夠?qū)崿F(xiàn)日常的時鐘顯示,同時具有時鐘調(diào)整、兩個鬧鐘及正點報時功能。二、 設(shè)計任務(wù)、

2、功能描述整體設(shè)計任務(wù):本電子時鐘設(shè)計首要的工作是結(jié)合以往所學(xué)的單片機程序編寫理論和編寫規(guī)則來編寫電子時鐘的軟件部分,編寫時要結(jié)合所配的AT89S52芯片的管腳功能和其他硬件電路,該部分運用keil單片機軟件來完成。在編寫完軟件并檢測完正確后再編譯成.hex載入用Isis仿真軟件布好的仿真硬件中運行檢測程序是否正確,并調(diào)試。待這一切工作做好后再利用已焊接好的小系統(tǒng)板硬件電路來實踐實現(xiàn)軟件功能與硬件的結(jié)合。此步驟要用progisp單片機燒寫軟件來實現(xiàn)。在硬件設(shè)計上:(1)用四個電位按鍵來實現(xiàn)對電子時鐘的調(diào)試工作,當按第一下總控鍵時進入時鐘的調(diào)整狀態(tài),有兩個電位按鍵分別來調(diào)整時鐘的分和時,在調(diào)整時秒

3、正常運行;當按第二下總控鍵時時鐘進入鬧鐘一設(shè)置,有兩個電位按鍵分別來調(diào)整時鐘的分和時的設(shè)定,另外有一個時鐘控鍵來實現(xiàn)鬧鐘是否開啟;當按第三下總控鍵時時鐘進入鬧鐘二設(shè)置,其余操作同鬧鐘一設(shè)置操作,當按第四下總控鍵時時鐘退出調(diào)整模式進入正常時鐘走勢。(2)用兩個四位數(shù)碼管來實現(xiàn)設(shè)計的顯示部分,其演示模式是: 時時-分分-秒秒 該數(shù)碼管組合的功能管腳是八個位選擇連接芯片的p2引腳,八個顯示管位并聯(lián)再接入到芯片p0引腳。從而在功能上區(qū)分開,實現(xiàn)數(shù)碼管的顯示功能。 (3)用一個led燈和電阻組成的簡易電路結(jié)合設(shè)計來實現(xiàn)正點報時的功能,當時鐘走到正點時,該led燈便能夠閃爍五秒剛好是五下,之后進入暗的狀態(tài)

4、,等到下一個整點到來。 (4)用一個喇叭和三極管等配件組成一個鬧鐘電路,再與芯片的p1.0引腳連接。當時鐘到設(shè)定的報時點時便會發(fā)出“嘟嘟嘟嘟.的聲音來實現(xiàn)鬧鐘功能。 (5)用一個按鍵和其他部件組成的復(fù)位電路與芯片連接來實現(xiàn)整個程序及硬件的重新復(fù)位功能。三、 硬件原理分析電路設(shè)計分析電路原理設(shè)計是基于小系統(tǒng)包括電源電路、復(fù)位電路、按鍵電路、時鐘電路、數(shù)碼管顯示驅(qū)動電路、輸出控制電路。電源部分是用電池來提供的3v-5v,晶體振蕩器采用的是12MHz的石英晶體振蕩器。總體硬件設(shè)計框圖如下:主 控制器AT89S52系列單片機芯片電源復(fù)位電路按鍵電路時鐘振蕩電路七段數(shù)碼管數(shù)碼管顯示驅(qū)動電路輸出控制電路1

5、.1復(fù)位電路 本次設(shè)計采用按鍵電平復(fù)位,按鍵電平復(fù)位相當于按復(fù)位鍵后,復(fù)位端通過電阻與Vcc電源接通;1.2振蕩器和時鐘電路設(shè)計1.21振蕩器和時鐘電路工作原理 80C51系列單片機內(nèi)部有一個高增益反相放大器,用于構(gòu)成振蕩器,但要形成時鐘,外部還需附加電路。XTAL1引腳為反相放大器和時鐘發(fā)生電路的輸入端,XTAL2引腳為反相放大器的輸出端。片內(nèi)時鐘發(fā)生器實質(zhì)是個2分頻的觸發(fā)其輸入來自振蕩器的fosc,輸出為2相時鐘信號,即節(jié)拍信號P1、P2,器頻率為fosc2。2個節(jié)拍為1個狀態(tài)時鐘S。狀態(tài)時鐘再3分頻后為ALE信號,其頻率為fosc6,狀態(tài)時鐘6分頻后為機器周期信號,器頻率為fosc12。

6、特殊功能寄存器PCON的PD位可以控制振蕩器的工作,當PD=0時,振蕩器停止工作,單片機進入低功耗工作狀態(tài),復(fù)位后,PD=0,振蕩器正常工作。1.22 本次設(shè)計采用常用的內(nèi)部時鐘方式接法:通過在引腳XTAL1和XTAL2兩端跨接晶體或陶瓷諧振器,再利用芯片內(nèi)部的振蕩電路,就構(gòu)成了穩(wěn)定的自激振蕩器,其發(fā)出的脈沖直接送入內(nèi)部時鐘電路,如圖所示,外接晶振時,C5和C6的值通常選擇為20-30pf。C5、C6對頻率有微調(diào)作用,影響振蕩的穩(wěn)定性和起振速度。所采用的晶體或陶瓷諧振器得頻率選擇0-2433MHz。為了減小寄生電容,更好的保證振蕩器穩(wěn)定、可靠的工作,諧振器和電容贏盡可能與單片機芯片靠近安裝。1

7、.3電源 因為該電路所需電壓為3-5v,可直接用電池供應(yīng)或也可以用直流電源供應(yīng),但需經(jīng)過變壓才行。1.4數(shù)碼管顯示電路 采用LED共陽極數(shù)碼管的發(fā)光二極管接到高電平(電壓為5V),用LED動態(tài)掃描顯示方式,在單片機電路里,芯片的驅(qū)動電流很小,一般為微安級別的,要通過三極管(可驅(qū)動電流為毫安級別,甚至更大)來驅(qū)動LED(正常工作電流為幾十毫安)發(fā)光,本設(shè)計由P2端口掃描數(shù)碼管的選通,P0口送數(shù)據(jù)顯示。1.5按鍵電路S1按鍵接在P3.0口,用于切換正常走時、調(diào)時間、設(shè)定鬧鐘;S2按鍵接在P3.1口,用于調(diào)整時鐘分加一和調(diào)鬧鐘時間分加一的功能;S3按鍵接在P3.2口,用于調(diào)整時鐘時加一和調(diào)鬧鐘時加一

8、的功能;S4按鍵接在P3.3口,用于設(shè)定是否開啟鬧鐘。1.6輸出控制電路 在P1.1和P1.0端口分別接一個發(fā)光二極管,用于整點報時,和一個蜂鳴器,用于響鬧鈴。1.7整體布局圖四、 軟件設(shè)計分析1、地址空間及端口分配30h37h地址空間分別分配給led1、led2、led3、led7、led4、led8、led5、led6.用于數(shù)碼管顯示。38h地址空間分配給gn,定義38h空間為按鍵次數(shù)讀取的緩存空間。3bh地址空間分配給nk1,定義3bh空間是鬧鐘開啟開關(guān)按鍵次數(shù)讀取緩存空間。39h地址空間分配給nao1f,用于存儲調(diào)整鬧鐘一分加一按鍵次數(shù)讀取緩存。3ah地址空間分配給nao1s,用于存儲

9、調(diào)整鬧鐘一時加一按鍵次數(shù)讀取緩存。3dh地址空間分配給nao2f,用于存儲調(diào)整鬧鐘二分加一按鍵次數(shù)讀取緩存。3eh地址空間分配給nao2s,用于存儲調(diào)整鬧鐘二時加一按鍵次數(shù)讀取緩存。50h地址空間用于存放50ms中斷寄存。51h地址空間用與存放秒的十位和個位。52h地址空間用與存放分的十位和個位。53h地址空間用與存放時的十位和個位。p1.1端口分配給zdled ,定義燈接到p1.1.利用setb和clr zdled控制燈的亮暗起到整點報時顯示作用。p1.0 端口分配給nb,定義蜂鳴器接到p1.0 利來實現(xiàn)鬧腫p0端口分配給數(shù)碼管顯示控制p2端口分配給數(shù)碼管選擇顯示控制。2、總體架構(gòu)說明該時鐘

10、程序設(shè)計思路如下:(1)、在程序頭將設(shè)計中的一些固定空間進行分配并注釋。(2)、初始化程序,如設(shè)定時鐘初始顯示005956 以便一開始就能進入整點報時狀態(tài),顯示該功能;設(shè)定使用定時器1;將一些未到時鐘設(shè)計功能的功能端口關(guān)閉等。(3)開始主程序進行程序掃描,先掃描拆字子程序,將分配好的時分秒等高地位的數(shù)字調(diào)入到顯示子程序中。顯示子程序通過分配的空間對應(yīng)口將拆字子程序的內(nèi)容在七段數(shù)碼管上顯示相應(yīng)的時分秒,再調(diào)用走時程序使時鐘進行讀秒等工作。進入按鍵掃描,判斷按鍵是否有變動,若有就根據(jù)設(shè)計程序?qū)ο鄳?yīng)的按鍵按入次數(shù)而進行實現(xiàn)相應(yīng)的功能。如進入時間調(diào)整、鬧鐘一設(shè)置、鬧鐘開啟與否等。進入鬧鐘一、二的判斷,

11、在時分上與設(shè)置的鬧鈴時間吻合的話就做相對應(yīng)的判斷,再依據(jù)是否有開啟鬧鐘而進行響鈴與否,如果有響鈴則設(shè)置其一直響鈴知道有人為按取消按鍵取消鬧鈴。進入整點報時掃描,判斷是否在時分上都進入了整點,如果是就報時顯示燈閃爍五下(5s),然后就退出整點報時,等到下一個整點的到來。最后返回主程序頭重新依次掃描。顯示過程設(shè)有消隱,按鍵設(shè)有去斗。(4)、子程序部分。在主程序的調(diào)用下依據(jù)不同的子程序工能而編寫子程序,有多級嵌套。這些子程序包括顯示子程序、拆字子程序、延時子程序、走時間子程序、整點報時子程序、按鍵處理子程序、調(diào)時間子程序、鬧鐘設(shè)置子程序、鬧鐘子程序、鬧鐘開啟子程序。3、各子程序功能及出入口地址(1)

12、各子程序功能: 顯示子程序:將拆分好的高低位時分秒拆分碼放入相對應(yīng)的數(shù)碼管,調(diào)用tab選通相應(yīng)的七段數(shù)碼顯示時分秒當前數(shù)字。 拆字子程序:將空間51h、52h、53h內(nèi)的秒時分拆成高低字節(jié)分配到,30h、31h、33h、34h、36h、37h實現(xiàn)時分秒的顯示。 延時子程序:該子程序是為了實現(xiàn)八個七段數(shù)碼管顯示的順序顯示選通時間,2ms的顯示時間頻率是的顯示效果穩(wěn)定,同時作為按鍵開關(guān)掃描判斷去抖走時間子程序:該程序功能是使得秒程序走動,走到59后進位分,后變00從新開始計時,分走到59后進位時,分從新開始00計時,時走到23,分走到59,秒走到59后進入從新日期周期計時。整點報時子程序:在達到整

13、點時該程序的功能實現(xiàn)報時,報時以led燈閃爍顯示為報時信號。按鍵處理子程序:該程序進行按鍵處理的功能判斷分別是有調(diào)試按鍵處理,鬧鐘設(shè)置按鍵處理,鬧鐘開啟與否按鍵處理。調(diào)時間子程序:該程序功能實現(xiàn)時間的調(diào)整。調(diào)鬧鐘子程序:該程序鬧鐘程序設(shè)計與按鍵結(jié)合實現(xiàn)鬧鐘設(shè)置調(diào)整的功能。鬧鐘開啟子程序:該功能實現(xiàn)鬧鐘開啟與否而達到鬧鐘響鈴功能。4、程序流程圖開始調(diào)用拆字節(jié)子程序調(diào)用延時顯示時分秒調(diào)用按鍵子程序調(diào)用鬧鐘1.2判斷鬧鐘調(diào)用鬧鐘子程序調(diào)用整點報時子程序結(jié)束,循環(huán)子程序Led1r0tabdptr查表#07r2,顯示控制#0fehr3,秒個位顯示ar0,a+dptra,查表#0ffhp2消隱ap0,顯示

14、當前文字R3a,ap2,選通相應(yīng)數(shù)碼管Inc r0,指向下一位顯示ar3,保存下一位選碼延時2ms顯示當前數(shù)字R2-1=?0拆字子程序YN(一)主程序流程圖(二)顯示子程序顯示鬧鐘二A=?#3顯示鬧鐘二的時分秒Lcall bcd處理led3,led6顯示顯示鬧鐘一時分秒顯示鬧鐘一調(diào)用bcd調(diào)用bcdACC、PSW入棧保存Chaizi1.顯示A=?#2retbcd程序retYYN(三)拆字子程序T1.重新賦值Th1#3chTl1.50h,重新賦值,再定時1sPSW .ACC出棧reti50h-1=?051h=?6052h=?6053h=?24YYYYNNNN(四)走時間子程序#0FFa,ap1調(diào)

15、用延時ret#0gngn+1gna P2.0=?1P2.0=?1調(diào)用延時P2.0=?1a=?4調(diào)時間程序NYNYYNNY(五)按鍵處理五、 程序清單; 初始化 ; led1 equ 30h ;定義30h = 第8個數(shù)碼管(最右邊第1個數(shù)碼管)的顯示內(nèi)容 =LED1=秒的個位 led2 equ 31h ;定義31h = 第7個數(shù)碼管顯示內(nèi)容 =LED2=秒的十位 led3 equ 32h ;定義32h = 第6個數(shù)碼管顯示內(nèi)容 =LED3=時分秒中間的一個橫桿 led7 equ 33h ;定義33h = 第5個數(shù)碼管顯示內(nèi)容 =LED7=分的個位 led4 equ 34h ;定義34h = 第4

16、個數(shù)碼管顯示內(nèi)容 =LED4=分的十位 led8 equ 35h ;定義35h = 第3個數(shù)碼管顯示內(nèi)容 =LED8=時分秒中間的一個橫桿 led5 equ 36h ;定義36h = 第2個數(shù)碼管顯示內(nèi)容 =LED5=時的個位 led6 equ 37h ;定義37h = 第1個數(shù)碼管顯示內(nèi)容 =LED6=時的十位 gn equ 38h ;定義38h空間為按鍵次數(shù)讀取的緩存空間 bssj equ 3fh ; zdled bit p1.1 ;定義燈接到p1.1.利用setb和clr zdled控制燈的亮暗 nb bit p1.0 ;定義蜂鳴器接到p1.0 利來實現(xiàn)鬧鈴響 nk1 equ 3bh n

17、ao1f equ 39h nao1s equ 3ah nao2f equ 3dh nao2s equ 3eh org 00h ; 這句話把下面那條指令定位到(燒寫到)00h這個地址去 sjmp main ;這里是單片機復(fù)位后運行的第一條指令, 這句話使單片機跳到main那里繼續(xù)執(zhí)行程序 org 001bh ;這句話把下面那條指令定位到(燒寫到)001b這個地址去. ljmp zoushijian ;這句話是定時器50毫秒定時到之后,TH0,TL0記數(shù)到FFFFH時單片機自動跳到 這里運行,我們再把它跳到zoushijian 繼續(xù)執(zhí)行,因為這個時候主程序已經(jīng)暫停運行,我們稱主程序發(fā)生了中斷,而z

18、uoshijian就是中斷服務(wù)主程序. org 40h ;把主程序main定位到40h這個地址 main: mov sp,#5FH;設(shè)置堆棧指針,存放進入50ms中斷時的PC值 mov 50h,#01;50h存放定時器中斷的次數(shù),現(xiàn)在定時器每50ms中斷一次,所以 ;賦初值20,利用djnz減,減到0時自然就是1秒到了 mov 51h,#55;51h存放秒的十位和個位,現(xiàn)在給32h等于十進制的50,相當于一開始讓 ;第7個,第8個數(shù)碼管顯示50秒,盡快到達整點,利于調(diào)試整點報時. mov 52h,#59;52h存放分的十位和個位,現(xiàn)在給3bh等于十進制的59,相當于一開始讓 ;第4個,第5個數(shù)

19、碼管顯示59分,盡快到達整點,利于調(diào)試整點報時. mov 53h,#00;53h存放小時的十位和個位,現(xiàn)在給00h等于十進制的00,相當于一開始讓 ;第1個,第2個數(shù)碼管顯示00小時, mov tmod,#10h;使定時器1工作在工作模式1,即16位定時器工作模式 mov th1,#3ch;65536us-50000us=15536微秒,剛好是3cb0h,這樣定時器1每50ms進入中斷一次 mov tl1,#0afh setb zdled ; 還沒到整點,先讓燈暗 mov a,#0 mov r1,a mov bssj,#10 clr rs0 clr rs1 clr gn clr nao1f c

20、lr nao1s clr nk1 setb nb setb tr1 ;開啟定時器1,使TH1,TL1不斷加1 setb et1 ;開啟定時器1中斷,使TH1,TL1加到FFFF時讓單片機自動跳到001bh去執(zhí)行,如果不 開啟這個中斷標志,那么即使單片機TH1,TL1記數(shù)到FFFF,單片機也不會跳到001bh去的. setb ea ;開啟總中斷; 主程序 ;l5: nop lcall chaizi;把當前的時分秒的值(即53h51h的內(nèi)容)按照十位,個位拆到35h30h中 lcall display;把拆好的時分秒的十位,個位分別顯示到相應(yīng)的數(shù)碼管上面. lcall anjian ;理按鍵 lc

21、all xiang1 ;判斷鬧鐘 lcall xiang2 lcall nk ;設(shè)置鬧鐘是否開 lcall zdbs ;整點報時 sjmp l5;主循環(huán)結(jié)束,又跳到主循環(huán)開始處;顯示子程序,把拆好的時分秒的十位,個位分別顯示到相應(yīng)的數(shù)碼管上面 ;入口地址:r2、r3;出口地址:p0、p2display:mov r0,#led1;從LED1開始顯示,即從第8個數(shù)碼管秒的個位開始 mov dptr,#tab mov r2,#08;8個數(shù)碼管同時顯示 mov r3,#0feh;選通第8個數(shù)碼管,關(guān)閉其他的數(shù)碼管disp_1: mov a,r0;把當前要顯示的數(shù)放到A里面 movc a,a+dptr;

22、得到當前要顯示數(shù)的7段碼 mov p2,#0ffh ;關(guān)掉所有數(shù)碼管顯示,消隱,把殘留在數(shù)碼管上面的亂碼消去 mov p0,a;顯示當前的數(shù),運行到這里,人的眼睛應(yīng)該看到顯示內(nèi)容 mov a,r3;位選給A mov p2,a;選通相應(yīng)的數(shù)碼管 rl a;得到新的位選碼 inc r0;指針指向下一個要顯示的內(nèi)容 mov r3,a;保存下一個位選碼,以便選通下一個數(shù)碼管. lcall delay;延時4毫秒顯示當前的數(shù)碼管 djnz r2,disp_1;跳回去,進入下一個數(shù)碼管的顯示 rettab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0

23、bfh,0ffh,8ch,3fh,7fh; 采用除法指令實現(xiàn)的拆字程序 ;入口地址:38h、;出口地址:30h38h、3bhchaizi: mov a,gn ;顯示鬧鐘二 cjne a,#3,chaizi2 mov a,nao2f mov b,#10 div ab mov led2,a mov led1,b mov a,nao2s mov b,#10 div ab mov led4,a mov led7,b mov led5,#02h mov led6,#0ch retchaizi2:mov a,gn ;顯示鬧鐘一 cjne a,#2,chaizi1 mov a,nao1f mov b,#10

24、 div ab mov led2,a mov led1,b mov a,nao1s mov b,#10 div ab mov led4,a mov led7,b mov led5,#01h mov led6,#0ch lcall bcd retchaizi1:mov a,51h;把51h這個秒的數(shù)值拆成個位和十位 mov b,#10 div ab mov led2,a;秒的十位進入LED2保存 mov led1,b;秒的個位進入LED1保存 mov a,52h;把52h這個分的數(shù)值拆成個位和十位 mov b,#10 div ab mov led4,a;分的十位進入LED4保存 mov led7

25、,b;分的個位進入LED7保存 mov a,53h;把53h這個時的數(shù)值拆成個位和十位 mov b,#10 div ab mov led6,a;時的十位進入LED6保存 mov led5,b;時的個位進入LED5保存 lcall bcd1 lcall bcd2;處理第3個和第6個數(shù)碼管的顯示 retbcd1: mov a,gn cjne a,#0,l3 cjne r1,#0,l3 mov a,50h;讀取50ms中斷的次數(shù),看看經(jīng)過了幾次50ms的中斷 cjne a,#09,l1l1: jc l3 mov a,nk1 cjne a,#1,k_1 mov led3,#0dh retk_1: mo

26、v led3,#0bh;沒到0.5秒,顯示橫桿 ret ;是否經(jīng)過了0.5秒(即是否經(jīng)過了10次的50ms中斷)l3: mov a,nk1 cjne a,#1,k_2 mov led3,#0eh retk_2: mov led3,#0ah;已經(jīng)到了0.5秒,讓兩個橫桿消失,這樣造成兩個橫桿一閃一閃效果 retbcd2: mov a,gn cjne a,#0,l13 cjne r1,#0,l13 mov a,50h;讀取50ms中斷的次數(shù),看看經(jīng)過了幾次50ms的中斷 cjne a,#09,l11l11: jc l13 mov a,nk1 cjne a,#1,k_11 mov led8,#0dh

27、 retk_11: mov led8,#0bh;沒到0.5秒,顯示橫桿 ret ;是否經(jīng)過了0.5秒(即是否過了10次50ms中斷)l13: mov a,nk1 cjne a,#1,k_21 mov led8,#0eh retk_21: mov led8,#0ah;已經(jīng)到了0.5秒,讓兩個橫桿消失,這樣造成兩個橫桿一閃一閃效果 ret; 延時程序 ;;入口地址:r6、r7;出口地址:r6delay: mov r6,#5 ;這是一個(1+1+2)*100+2+1)*5=2015微秒=2毫秒的延時程序 dl2: mov r7,#100 ;1微秒 dl1: nop ;1 微秒 nop ;1微秒 dj

28、nz r7,dl1 ;2微秒 djnz r6,dl2 ;2微秒 ret; 走時間 ;;入口地址:acc、psw;出口地址:acczoushijian: PUSH acc ;0E0H就是A,見課本44頁,因為這個時候SP=5fh,故把A的值保存在5fh里面去 PUSH psw ;因為0D0H就是PSW(見課本44頁),此時SP=60H,所以這句話是把PSW的值保存到60h中去 mov th1,#3ch ;重新給定時器賦初值,讓它再定時50ms mov tl1,#0afh djnz 50h,l2 ;判斷是否到了1秒沒有,50h減到0表示已經(jīng)進行了20次的50ms,剛好1秒 mov 50h,#20

29、;已經(jīng)到1秒,重新賦次數(shù),再定時記數(shù)一秒 inc 51h mov a,51h ;從51h讀取秒的值(包含十位,個位) cjne a,#60,l2 ;判斷是否到60秒,沒到60秒,中斷返回退到主程序 mov 51h,#0 ;到60秒,重新從0秒加起,分鐘加1 inc 52h mov a,52h ;讀取分鐘 cjne a,#60,l2 ;判斷是否到了60分鐘,沒到60分鐘,中斷返回退到主程序 mov 52h,#0 ;到60分鐘,重新從0分鐘加,小時加1 inc 53h mov a,53h ;讀取小時值 cjne a,#24,l2 ;判斷是否到了24小時,沒到24小時街卸戲禱贗說街鞒絳? mov 5

30、3h,#0 ;到了24小時,重新清零小時,從00小時又開始新一天定時l2: POP psw ;把放在60h的東西放回到PSW里面,因為這個時候SP=60h,0D0H就是PSW POP acc ;把放在60h的東西放回到PSW里面,因為這個時候SP=5fh,0E0H就是A reti ;PC指針變回進入中斷時的下一條指令的值; 整點報時子程序 ?報時時間為 5 秒 ;;入口地址:51h、52h;出口地址:p1.1zdbs: mov a,52h cjne a,#0,zdbs_1 mov a,50h cjne a,#10,zdbs_2zdbs_2: jc zdbs_3 mov a,51h cjne a

31、,#5,zdbs_4zdbs_4: jnc zdbs_1 clr p1.1 retzdbs_3: mov a,51h cjne a,#5,zdbs_5zdbs_5: jnc zdbs_1 setb p1.1 ret ;打開整點報時的指示燈zdbs_1: setb zdled ret; 按鍵處理 ;;入口地址:38h、p3;出口地址:p3.0anjian: mov a,#0ffh mov p3,a ;0000給P1口上拉高電頻 jb p3.0,js_1 lcall delay jb p3.0,js_1a_1: jnb p3.0,a_1 lcall delay jnb p3.0,a_1 inc g

32、n mov a,gn cjne a,#4,js_1 mov gn,#0 retfanhui: ret; 調(diào)時間 ;;入口地址:38h、52h、53h;出口地址:38h、p3.1、p3.2js_1: mov a,gn cjne a,#1,jn1_1js1_2: jb p3.1,js2_2 lcall delay jb p3.1,js2_2js1_1: jnb p3.1,js1_1 lcall delay jnb p3.1,js1_1 inc 52h mov a,52h cjne a,#60,anjian mov 52h,#0 retjs2_2: jb p3.2,jn1_1 lcall delay jb p3.2,jn1_1js2_1: jnb p3.2,js2_1 lcall delay jnb p3.2,js2_1 inc 53h mov a,53h cjne a,#24,anjian mov 53h,#0 ret; 調(diào)鬧鐘一 ;;入口地址:38h;出口地址:p3.1、p3.2jn1_1: mov a,gn cjne a,#2,en1_1 jb p3.1,jn1_3 lcall delay jb p3.1,jn1_3jn1_2: jnb p3.1,jn1_2 lcall delay jnb p3.1,jn1_2 inc nao1f mov a,nao1f cjn

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論