單片機電子時鐘教學規(guī)劃設計報告_第1頁
單片機電子時鐘教學規(guī)劃設計報告_第2頁
單片機電子時鐘教學規(guī)劃設計報告_第3頁
單片機電子時鐘教學規(guī)劃設計報告_第4頁
單片機電子時鐘教學規(guī)劃設計報告_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機電子時鐘設計一、作品功能介紹該作品是個性化電子鐘設計,技術上主要用單片機( AT89S52 )主控, 6 位 LED 數(shù)碼 顯示,分別顯示“小時:分鐘:秒” 。該作品主要用于 24 小時計時顯示 ,能整時報時 ,能作為 秒表使用 ,能定時鬧鈴 1 分鐘。功能介紹:( 1)上電以后自動進入計時狀態(tài),起始于00:00:00 。(2)設計鍵盤調(diào)整時間,完成時間設計,并設置鬧鐘。( 3)定時時間為 1/100 秒,可采用定時器實現(xiàn)。( 4)采用 LED 數(shù)碼管顯示,時、分,秒采用數(shù)字顯示。( 5)采用 24 小時制,具有方便的時間調(diào)校功能。(6)具有時鐘和秒表的切換功能。使用方法 :開機后時鐘在

2、 00:00:00 起開始計時。( 1)長按 P3.2 進入調(diào)分狀態(tài) :分單元閃爍 ,按 P3.2 加 1,按 P3.3 減 1.再長按 P3.2 進入 時調(diào)整狀態(tài) ,時單元閃爍 ,加減調(diào)整同調(diào)分 .按長按退出調(diào)整狀態(tài)。( 2)( 2)按 P3.3 進入設定鬧時狀態(tài) : 12:00: ,可進行分設定 ,按 P3.4 分加 1,再按 P3.2 為時調(diào)整 ,按 P3.4 時加 1,按 P3.3 調(diào)鬧鐘結束 .在鬧鈴時可按 P3.2 停鬧,不按鬧鈴 1 分鐘。(3)按下P3.4進入秒表狀態(tài)再按P3.4秒表又啟動,按P3.4暫停再按P3.4秒表清零,按P3.4退出秒表回到時鐘狀態(tài)。二、電路原理圖如原理

3、圖所示,硬件系統(tǒng)主要由單片機最小應用系統(tǒng)、LED數(shù)碼管顯示模塊、電源模塊、晶振模塊、按鍵模塊等組成。電子時鐘原理圖rypi.o c1匸伽1 IccT2EUP1 1 匸2351 FO Q/ABOn.2 c3 3Sn.3 l4折J FO. 2/AI2Fl 4 C5陽1 PO 3/ADSMDSI/P1.5 r6351 PO 4/JlD4f豁 FS 5/JiD5scs/n.7 匸S33J M引IEKST匸9就j ML r/mrKII/F3.0 r1031n wmnr/F3.i r11301 ALE/FEO&INT0/P3.2 匸12 I FESSISfi/P3,3 L132$j F2. misTO/P

4、3 4 匚U 27:P2. &/A14T1/F3 5 r152&1 P2. 5/J118RR/P8 B C16251 F2.4/H2KD/P3.7 匸IT 2+J F2. 3/J11LITiL2 匸18胡J P2. 2M0IT1L1 匚19竝Zl PJ. 1/Jl$pbif 匚20 21n F2. a/JiS各個模塊設計1.單片機系統(tǒng) AT89S52 AT89S52 概述 :是一 款非常適合單片機初學者學習的單片機,它完全兼容傳統(tǒng)的8051 , 8031 的指令系統(tǒng),他的運行速度要比 8051 快最高支持達 33MHz 的晶體震蕩器, 在此系統(tǒng)中使用 12MHz 的晶 振。AT89S52 具有

5、以下標準功能: 門狗定時器, 2 個數(shù)據(jù)指針,三個口線,看6 向量 2 級中斷結構,全雙 靜態(tài)邏輯操作,支持 2 種 定時器 / 計數(shù)器、串口、 單片機一切工作停止,、 8K 字節(jié)在系統(tǒng)可編程 Flash 存儲器、 1000三級加密程序存儲器 、32 個可編程 I/O 口、全雙工 UART 串行通道、 低功耗空閑和掉 、雙數(shù)據(jù)指針 、掉電標識符 。8k 字節(jié) Flash ,256 字節(jié) RAM ,32 位 I/O16 位定時器 / 計數(shù)器,一個工串行口,片內(nèi)晶振及時鐘電路。另外, 軟件可選擇節(jié)電模式??臻e模式下, 中斷繼續(xù)工作。 掉電保護方式下, 直到下一個中斷或硬件復位為止.主要性能: 與

6、MCS-51 單片機產(chǎn)品兼容 次擦寫周期、全靜態(tài)操作:OHz33Hz、線 、三個 16 位定時器 /計數(shù)器 八個中斷源 電模式 、掉電后中斷可喚醒、看門狗定時器 2 、顯示模塊AT89S52 可降至 0HzCPU 停止工作,允許RAM 、RAM 內(nèi)容被保存, 振蕩器被凍結,LED 數(shù)碼管是由發(fā)光二極管構成的,亦稱半導體數(shù)碼管。將條狀發(fā)光二極管按照共陰極(負極 )或共陽極 (正極 )的方法連接,組成“ 8”字,再把發(fā)光二極管另一電極作筆段電極,就構成了 LED 數(shù)碼管。若按規(guī)定使某些筆段上的發(fā)光二極管發(fā)光,就能顯示從09 的系列數(shù)字。同熒光數(shù)碼管(VFD)、輝光數(shù)碼管(NRT)相比,它具有:體積

7、小、功耗低、耐震動、壽命長、亮度高、單色性好、發(fā)光響應的時間短,能與TTL、CMOS電路兼容等的數(shù)顯器件。+、-分別表示公共陽極和公共陰極。 ag是7個筆段電極,DP為小數(shù)點。另有 一種字高為7 . 6mm的超小型LED數(shù)碼管,管腳從左右兩排引出,小數(shù)點則是獨立的。本系統(tǒng)利用6位LED數(shù)碼管顯示時間,共陰極結構。LED數(shù)碼管由7段發(fā)光二極管組成,當要顯示某個數(shù)字時只要將數(shù)字所對應的引腳送入低電平。3.按鍵模塊匚 本設計中主要有三個控制按鍵,按鍵功能為:(1 ) P3.2為調(diào)時間模式,長按 P3.2進入調(diào)分狀態(tài):分單元閃爍,按P3.2加1,按P3.3減1.再長按P3.2進入時調(diào)整狀態(tài),時 單元閃

8、爍,加減調(diào)整同調(diào)分按長按退出調(diào)整狀態(tài)。(2 )按P3.3進入設定鬧時狀態(tài):12:00:,可進行分設定,按P3.4分加1,再按P3.2為時調(diào)整,按P3.4時加1,按P3.3調(diào)鬧鐘結束在鬧鈴時可按P3.2停鬧,不按鬧鈴1分鐘。(3)按下P3.4進入秒表狀態(tài):再按P3.4秒表又啟動,按 P3.4暫停再按P3.4秒表清零按 P3.4退出秒表回到時鐘狀態(tài)。4 .晶振模塊在AT89S51芯片內(nèi)部有一個高增益反相放大器,其輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。而在芯片內(nèi)部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構成一個穩(wěn)定的自激振蕩器。時鐘電路產(chǎn)生的振蕩脈沖經(jīng)過觸發(fā)器進行二分

9、頻之后,才成為單片機的時鐘脈沖信號。晶振電路三、程序設計源程序代碼AT89S52時鐘程序定時器T0、T1溢出周*期為50MS,T0為秒計數(shù)用, T1為調(diào)整時閃爍及秒表定時用,P3.2、P3.3、P3.4為調(diào)整按鈕,P0 口為字符輸出口,P2為掃描口, P1.2為蜂嗚器口,采用共陽顯示管。50H-55H 為鬧鐘定時單元, 60H-65H 為秒表計時單元, 70H-75H 為顯示時間單元,76H-79H為分時計時單元。次, 用作間隔嗚叫 .*DISPFIRST EQU 30H;顯示首址存放單元BELL EQU P1.2CONBS EQU 2FH;存放報時次數(shù)CLOCK EQU 2DH*中斷入口程序

10、*ORG 0000HLJMP STARTORG 0003HRETIORG 000BHLJMP INTT0ORG 0013HRETI;程序執(zhí)行開始地址;跳到標號 START 執(zhí)行;外中斷 0 中斷程序入口 外中斷 0 中斷返回;定時器 T0 中斷程序入口;跳至 INTTO 執(zhí)行;外中斷 1 中斷程序入口;外中斷 1 中斷返回LJMP INTT1;跳至 INTT1 執(zhí)行ORG 0023H;串行中斷程序入口地址RETI;串行中斷程序返回;定時器 T1 中斷程序入口*ORG 001BH以下程序開始*整點報時用QQQQ: MOV A,#10HMOV B,79HMUL ABADD A,78HMOV CON

11、BS,ABSLOOP: LCALL DS21MSLCALL DL1SLCALL DL1SLCALL DL1SDJNZ CONBS,BSLOOPAJMP START1*主程序開始*START: LCALL STMOVR0,#00HMOVR7,#80HCLEARDISP: MOVR0,#00HINCR0DJNZR7,CLEARDISPMOV20H,#00HMOV55H,#1MOV54H,#2MOV7AH,#0AHMOVTMOD,#11HMOVTL0,#0B0HMOVTH0,#3CHMOVTL1,#0B0H;上電顯示 00:00:00;清 00H-7FH 內(nèi)存單元;清 20H (標志用);放入熄滅符

12、 數(shù)據(jù);設 T0、 T1 為 16 位定時器;50MS 定時初值( T0 計時用);50MS 定時初值;50MS 定時初值( T1 閃爍定時用);以下主程序循環(huán)MOVTH1,#3CH;50MS 定時初值SETBEA;總中斷開放SETBET0;允許 T0 中斷SETBTR0;開啟 T0 定時器MOVR4,#14H;1秒定時用計數(shù)值(50MS X20MOVDISPFIRST,#70H; 顯示單元為 70-75HLCALL DISPLAY;調(diào)用顯示子程序JNBP3.2,SETMM1;P3.2 口為 0 時轉(zhuǎn)時間調(diào)整程序JNBP3.3,TSFUN; 定時鬧鈴設定JNBP3.4,FUNPT; 秒表功能(

13、 STOP,RUN,CLR )JB08H, QQQQAJMPSTART1;P3.2 口為 1 時跳回 START1)START1:FUNPT:LJMP FUNPTTSTART12:LJMP START1以下鬧鈴時間設定程序,按 P3.3 進入設定TSFUN: LCALL DS20MSJBP3.3,START1定時單元;鬧鈴已開的話,關鬧鈴;進入鬧鈴設定程序,顯示 52-55H 鬧鐘;分加 1;分減 1;進入時調(diào)整;關鬧鈴標志;消抖;進入時調(diào)整;轉(zhuǎn)到時間調(diào)整程序 SETMM;消抖JB 05H,CLOSESPMOV DISPFIRST,#52HDSWAIT: SETB EALCALL DISPLA

14、YJNB P3.4,DSFINCJNB P3.2,DSDECJNB P3.3,DSSFUAJMP DSWAITCLOSESP: CLR 05HCLR BELLAJMP START1DSSFU: LCALL DS20MSJB P3.3, DSWAITLJMP DSSFUNNSETMM1: LJMP SETMMDSFINC : LCALL DS20MSJBP3.4, DSWAITDSWAIT12:LCALLDISPLAYJNBP3.4, DSWAIT12CLREAMOVR0,#53HLCALLADD1MOVA,R3CLRCCJNEA,#60H,ADDHH22ADDHH22:JCDSWAITACAL

15、LCLR0AJMPDSWAITDSDEC :LCALLDS20MSJB P3.2, DSWAITDSWAITEE: LCALLDISPLAYJNBP3.2, DSWAITEECLREAMOVR0,#53HLCALLsub1;等鍵 釋放;鬧鈴設定分加 1;分數(shù)據(jù)放入 A;清進位標志J;小于 60 分時返回;大于或等于 60 分時分計時單元清 0;消抖;等鍵 釋放;鬧鈴設定分減 1LJMP DSWAIT;以下秒表暫停 清零功能程序;按下 P3.4 切換秒表功能,再按開始計時,暫?;蚯?, 最后按 P3.4 退出秒表回到時鐘計時FUNPTT: LCALLDS20MSJBP3.4,START12WAI

16、T22: JNBP3.4,WAIT21CPL03HJNB03H,TIMFUNMOVDISPFIRST,#60H ;顯示秒表數(shù)據(jù)單元MOV60H,#00HMOV61H,#00HMOV62H,#00HMOV63H,#00HMOV64H,#00HMOV65H,#00HMOVTL1,#0F0H ;10MS 定時初值MOVTH1,#0D8H ;10MS 定時初值JBP3.4,WAIT81WAIT99:JNBP3.4,WAIT99SETB TR1;T1 運行控制軟件WAIT33:WAIT33:WAIT44:WAIT44:WAIT55:WAIT55:WAIT66:WAIT66:SETB ET1;T1 溢出中

17、斷允許LCALL DS20MSJB P3.4,WAIT31JNB P3.4,WAIT41CLR ET1CLR TR1LCALL DS20MSJB P3.4,WAIT51JNB P3.4,WAIT61MOV 60H,#00HMOV 61H,#00HMOV 62H,#00HMOV 63H,#00HMOV 64H,#00HMOV 65H,#00HTIMFUN:MOV DISPFIRST,#72H ;顯示時鐘數(shù)據(jù)單元CLR ET1CLR TR1AJMP FUNSS11FUNSS11: AJMP START1;以下鍵等待釋放時顯示不會熄滅用WAIT21:LCALL DISPLAYAJMP WAIT22W

18、AIT31:LCALL DISPLAYAJMP WAIT33WAIT41:LCALL DISPLAYAJMP WAIT44WAIT51:LCALL DISPLAYAJMP WAIT55WAIT61:LCALL DISPLAYAJMP WAIT66AJMP WAIT88WAIT91: LCALL DISPLAYAJMP WAIT991 秒計時程序;T0 中斷服務程序INTT0: PUSH ACC;累加器入棧保護PUSHPSW;狀態(tài)字入棧保護CLRET0;關 T0 中斷允許CLRTR0; 關閉定時器 T0MOVA,#0B7H;中斷響應時間同步修正ADDA,TL0;低 8 位初值修正MOVTL0,A

19、;重裝初值(低 8 位修正值)MOVA,#3CH;高 8 位初值修正ADDCA,TH0JMOVTH0,A;重裝初值(高 8 位修正值)SETBTR0;開啟定時器 T0DJNZ R4, OUTT0合)ADDSS:MOVR4,#14H;20 次中斷到( 1 秒)重賦初值CPL07H;鬧鈴時間隔嗚叫用MOVR0,#71H;指向秒計時單元( 71H-72H )ACALL ADD1;調(diào)用加 1 程序(加 1 秒操作)MOVA,R3;秒數(shù)據(jù)放入 A( R3 為 2 位十進制數(shù)組CLRC;清進位標志CJNEA,#60H,ADDMMJADDMM:JCOUTT0;小于 60 秒時中斷退出ACALL CLR0;大

20、于或等于 60 秒時對秒計時單元清 0MOVR0,#77H;指向分計時單元( 76H-77H )ACALL ADD1;分計時單元加 1 分鐘MOVA,R3;分數(shù)據(jù)放入 ACLRC;清進位標志CJNEA,#60H,ADDHHJADDHHJCOUTT0;小于 60 分時中斷退出;20 次中斷未到中斷退出ACALL CLR0;大于或等于 60 分時分計時單元清 0SETB 08HMOVR0,#79H;指向小時計時單元( 78H-79H )ACALL ADD1;小時計時單元加 1 小時MOVA,R3;時數(shù)據(jù)放入 ACLRC;清進位標志CJNEA,#24H,HOURJJCOUTT0;小于 24 小時中斷

21、退出ACALL CLR0;大于或等于 24 小時小時計時單元清 0MOV72H,76H;中斷退出時將分、 時計時單元數(shù)據(jù)移MOV73H,77H;入對應顯示單元MOV74H,78HJMOV75H,79HJLCALLBAOJPOPPSW;恢復狀態(tài)字(出棧)POPACC;恢復累加器SETBET0;開放 T0 中斷RETI;中斷返回HOUR:OUTT0: *閃動調(diào)時程序 秒表功能程序 *J;T1 中斷服務程序,用作時間調(diào)整時調(diào)整單元閃爍指示或秒表計時INTT1:PUSHACC;中斷現(xiàn)場保護PUSHPSWJJB03H, MMFUN;=1 時秒表MOVTL1, #0B0H;裝定時器 T1 定時初值MOVT

22、H1, #3CHJDJNZR2,INTT1OUT;0.3 秒未到退出中斷 ( 50MS 中斷 6次)MOVR2,#06H;重裝 0.3 秒定時用初值CPL02H;0.3 秒定時到對閃爍標志取反JB02H,FLASH1;02H 位為 1 時顯示單元 熄滅 MOV72H,76H;02H 位為 0 時正常顯示MOV73H,77HJMOV74H,78HJMOV75H,79HJINTT1OUT:POPPSW;恢復現(xiàn)場POPACCJFLASH1:JB01H,FLASH2;01H 位為 1 時,轉(zhuǎn)小時熄滅控制MOV72H,7AH;01H 位為 0 時, 熄滅符 數(shù)據(jù)放入分MOV73H,7AH;顯示單元( 7

23、2H-73H ),將不顯示分數(shù)據(jù)MOV74H,78HJMOV75H,79HJAJMPINTT1OUT;轉(zhuǎn)中斷退出FLASH2:MOV72H,76H;01H 位為 1 時, 熄滅符 數(shù)據(jù)放入小時MOV73H,77H;顯示單元 ( 74H-75H ),小時數(shù)據(jù)將不顯示MOV74H,7AHJMOV75H,7AHJAJMPINTT1OUT;轉(zhuǎn)中斷退出JMMFUN :CLRTR1MOVA,#0F7H;中斷響應時間同步修正 ,重裝初值 (10ms )ADDA,TL1;低 8 位初值修正MOVTL1,A;重裝初值(低 8 位修正值)MOVA,#0D8H;高 8 位初值修正;中斷退出RETIADDC A,TH

24、1MOV TH1,A;重裝初值(高 8 位修正值)FSS1:SETB TR1MOV R0,#61HACALL ADD1CLR CMOV A,R3JZ FSS1AJMP OUTT01ACALL CLR0MOV R0,#63HACALL ADD1MOVA,R3CLRCCJNEA,#60H,ADDHH1ADDHH1: JCOUTT01LCALL CLR0MOV R0,#65HACALL ADD1;開啟定時器 T1;指向秒計時單元( 71H-72H );調(diào)用加 1 程序(加 1 秒操作)JJ;加 1 后為 00 ,C=0;加 1 后不為 00 , C=1;大于或等于 60 秒時對秒計時單元清 0;指向

25、分計時單元( 76H-77H );分計時單元加 1 分鐘;分數(shù)據(jù)放入 A;清進位標志J;小于 60 分時中斷退出;大于或等于 60 分時分計時單元清 0 ;指向小時計時單元( 78H-79H );小時計時單元加 1 小時OUTT01:POP ACC; 恢復累加器RETI;中斷返回*; 加 1 子 程 序 *ADD1: MOVA,R0;取當前計時單元數(shù)據(jù)到 ADECR0;指向前一地址SWAPA;A 中數(shù)據(jù)高四位與低四位交換ORLA,R0;前一地址中數(shù)據(jù)放入 A 中低四位ADDA,#01H;A 加 1 操作DAA;十進制調(diào)整MOVR3,A;移入 R3 寄存器ANLA,#0FH;高四位變 0MOVR

26、0,A;放回前一地址單元MOVA,R3;取回 R3 中暫存數(shù)據(jù)INCR0;指向當前地址單元SWAPA;A 中數(shù)據(jù)高四位與低四位交換ANLA,#0FH;高四位變 0;子程序返回RET *J; 分減 1 子 程 序 *SUB1: MOVA,R0;取當前計時單元數(shù)據(jù)到 ADECR0;指向前一地址SWAPA;A 中數(shù)據(jù)高四位與低四位交換ORLA,R0;前一地址中數(shù)據(jù)放入 A 中低四位JZSUB11DECA;A 減 1 操作SUB111: MOVR3,A;移入 R3 寄存器ANLA,#0FH;高四位變 0CLRC;清進位標志SUBBA,#0AHSUB1111: JCSUB1110MOVR0,#09H;大

27、于等于 0AH ,為 9SUB110: MOVA,R3;取回 R3 中暫存數(shù)據(jù)INCR0;指向當前地址單元SWAPA;A 中數(shù)據(jù)高四位與低四位交換ANLA,#0FH;高四位變 0MOVR0,A;數(shù)據(jù)放入當削地址單元中RET;子程序返回SUB11: MOVA,#59HAJMPSUB111SUB1110:MOVA,R3;移入 R3 寄存器ANLA,#0FH;高四位變 0MOVR0,AAJMPSUB110 *時減 1 子 程 序 *SUBB1:MOV A,R0;取當前計時單元數(shù)據(jù)到 ADEC R0;指向前一地址JZSUBB11;00 減 1 為 23 (小時)DECA;A 減 1 操作SUBB111

28、:MOVR3,A;移入 R3 寄存器ANLA,#0FH;高四位變 0CLRC;清進位標志SUBBA,#0AH;時個位大于 9 為 9SUBB1111:JCSUBB1110 ;MOVR0,#09H;大于等于 0AH ,為 9SUBB110:MOVA,R3;取回 R3 中暫存數(shù)據(jù)INCR0;指向當前地址單元SWAPA;A 中數(shù)據(jù)高四位與低四位交換ANLA,#0FH;高四位變 0MOVR0,A;時十位數(shù)數(shù)據(jù)放入RET;子程序返回SUBB11:MOVA,#23HAJMPSUBB111SUBB1110:MOVA,R3;時個位小于 0A 不處理ANLA,#0FH;高四位變 0MOV R0,A;個位移入AJ

29、MP SUBB110 *J; 清零程序 ; *J;對計時單元復零用CLR0: CLRA;清累加器MOVR0,A;清當前地址單元DECR0;指向前一地址MOVR0,A;前一地址單元清 0RET;子程序返回 *時鐘時間調(diào)整程序 *;當調(diào)時按鍵按下時進入此程序SETMM:CLRET0CLRTR0LCALLDL1SLCALL DS20MSJBP3.2,CLOSEDISMOVR2,#06HMOV70H,#00HMOV71H,#00HSETBET1SETBTR1SET2:JNBP3.2,SET1SETB00HSET4:JBP3.2,SET3LCALLDL05SLCALL DS20MSJNBP3.2,SET

30、HHMOVR0,#77HLCALLADD1MOVA,R3;取調(diào)整單元數(shù)據(jù);關定時器 T0 中斷; 關閉定時器 T0;調(diào)用 1 秒延時程序;消抖;鍵按下時間小于 1 秒,關閉顯示 (省電);進入調(diào)時狀態(tài),賦閃爍定時初值;調(diào)時時秒單元為 00 秒;允許 T1 中斷;開啟定時器 T1;P3.2 口為 0(鍵未釋放) ,等待;鍵釋放,分調(diào)整閃爍標志置 1;等待鍵按下;有鍵按下,延時 0.5 秒;消抖;按下時間大于 0.5 秒轉(zhuǎn)調(diào)小時狀態(tài);按下時間小于 0.5 秒加 1 分鐘操作;調(diào)用加 1 子程序CLRCCJNE A,#60H,HHHHHH: JCSET4;清進位標志;調(diào)整單元數(shù)據(jù)與 60 比較; 調(diào)

31、整單元數(shù)據(jù)小于 60 轉(zhuǎn) SET4 循環(huán)LCALLCLR0CLRCAJMPSET4CLOSEDIS:SETBET0SETBTR0CLOSE:JBP3.2,CLOSELCALL DS20MSJBP3.2,CLOSEWAITH:JNBP3.2,WAITHLJMPSTART1SETHH:CLR00HSETB01HSETHH1:JNBP3.2,SET5SET6:JBP3.2,SET7LCALLDL05S;調(diào)整單元數(shù)據(jù)大于或等于 60 時清 0;清進位標志;跳轉(zhuǎn)到 SET4 循環(huán);省電( LED 不顯示)狀態(tài)。開 T0 中斷;開啟 T0 定時器(開時鐘) ;無按鍵按下,等待。;消抖;是干擾返回 CLOS

32、E 等待;等待鍵釋放;返回主程序( LED 數(shù)據(jù)顯示亮);分閃爍標志清除(進入調(diào)小時狀態(tài));小時調(diào)整標志置 1;等待鍵釋放;等待按鍵按下;有鍵按下延時 0.5 秒;消抖LCALL DS20MSJNBP3.2,SETOUT;按下時間大于 0.5 秒退出時間調(diào)整MOVR0,#79H;按下時間小于 0.5 秒加 1 小時操作LCALLADD1;調(diào)加 1 子程序MOVA,R3JCLRCJCJNEA,#24H,HOUU;計時單元數(shù)據(jù)與 24 比較HOUU: JCSET6;小于 24 轉(zhuǎn) SET6 循環(huán)LCALLCLR0;大于或等于 24 時清 0 操作AJMPSET6;跳轉(zhuǎn)到 SET6 循環(huán)SETOUT

33、: JNBP3.2,SETOUT1;調(diào)時退出程序。等待鍵釋放LCALL DS20MS;消抖JNBP3.2,SETOUT;是抖動,返回 SETOUT 再等待CLR01H;清調(diào)小時標志CLR00H;清調(diào)分標志CLR02H;清閃爍標志CLRTR1;關閉定時器 T1CLRET1;關定時器 T1 中斷SETBTR0;開啟定時器 T0SETBET0;開定時器 T0 中斷(計時開始)時)LJMPSTART1;跳回主程序SET1:LCALLDISPLAY;鍵釋放等待時調(diào)用顯示程序(調(diào)分)AJMPSET2;防止鍵按下時無時鐘顯示SET3:LCALLDISPLAY;等待調(diào)分按鍵時時鐘顯示用JNBP3.3, FUN

34、SUB; 減 1 分操作AJMPSET4;調(diào)分等待SET5:LCALLDISPLAY;鍵釋放等待時調(diào)用顯示程序(調(diào)小AJMPSETHH1;防止鍵按下時無時鐘顯示SET7:LCALLDISPLAY;等待調(diào)小時按鍵時時鐘顯示用JNBP3.3, FUNSUBB;小時減 1 操作AJMPSET6;調(diào)時等待SETOUT1:LCALLDISPLAY;退出時鐘調(diào)整時鍵釋放等待AJMPSETOUT;防止鍵按下時無時鐘顯示;FUNSUB ,分減 1 程序FUNSUB: LCALL DS20MS ;消抖JB P3.3,SET41;干擾,返回調(diào)分等待FUNSUB1: JNBP3.3,FUNSUB1;等待鍵放開MOV

35、R0,#77HLCALLSUB1;分減 1 程序LJMPSET4;返回調(diào)分等待JSET41: LJMPSET4J;FUNSUBB, 時減 1 程序FUNSUBB: LCALL DS20MS;消抖JBP3.3,SET61; 干擾,返回調(diào)時等待FUNSUBB1: JNBP3.3,FUNSUBB1; 等待鍵放開MOVR0,#79HJLCALLSUBB1; 時減 1 程序LJMPSET6; 返回調(diào)時等待SET61: LJMP SET6 *J; 顯示程序 ; *JP2 口; 顯示數(shù)據(jù)在 70H-75H 單元內(nèi), 用六位 LED 共陽數(shù)碼管顯示, P0 口輸出段碼數(shù)據(jù),作; 掃描控制,每個 LED 數(shù)碼管

36、亮 1MS 時間再逐位循環(huán)。DISPLAY: MOVR1,DISPFIRST;指向顯示數(shù)據(jù)首址MOVR5,#0FEH;掃描控制字初值PLAY: MOVA,R5;掃描字放入 AMOVP2,A;從 P2 口輸出MOVA,R1;取顯示數(shù)據(jù)到 AMOVDPTR,#TAB;取段碼表地址MOVCA,A+DPTR;查顯示數(shù)據(jù)對應段碼MOVP0,A;段碼放入 P1 口MOVA,R5JBACC.2,LOOP5;小數(shù)點處理CLRP0.7LOOP5:JBACC.4,LOOP6;小數(shù)點處理CLRP0.7LOOP6:LCALLDL1MS;顯示 1MSINCR1;指向下一地址MOVA,R5;掃描控制字放入 AJNBACC

37、.5,ENDOUT;ACC.5=0 時一次顯示結束RL;A 中數(shù)據(jù)循環(huán)左移MOVR5,A;放回 R5 內(nèi)AJMPPLAY;跳回 PLAY 循環(huán)ENDOUT: MOVP2,#0FFH;一次顯示結束, P2 口復位MOVP0,#0FFH ;P0 口復位RET;子程序返回TAB:DBMOVP0,#0FFH0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH;共陰段碼表012 34567 89不亮 “A”“-” *J; SDISPLAY ,上電顯示子程序 *J;不帶小數(shù)點顯示,有“A”“ -”顯示功能SDISPLAY: MOVR1,DIS

38、PFIRSTMOVR5,#0FEH;掃描控制字初值SPLAY: MOVA,R5;掃描字放入 AMOVP2,A;從 P2 口輸出MOVA,R1;取顯示數(shù)據(jù)到 AMOVDPTR,#TABS;取段碼表地址MOVCA,A+DPTR;查顯示數(shù)據(jù)對應段碼MOVP0,A;段碼放入 P1 口MOVA,R5JLCALLDL1MS;顯示 1MSINCR1;指向下一地址MOVA,R5;掃描控制字放入 AJNBACC.5,ENDOUTS;ACC.5=0 時一次顯示結束RLA;A 中數(shù)據(jù)循環(huán)左移MOVR5,A;放回 R5 內(nèi)AJMPSPLAY;跳回 PLAY 循環(huán)ENDOUTS: MOVP2,#0FFH;一次顯示結束,

39、 P2 口復MOVP0,#0FFH;P0 口復位RET;子程序返回TABS:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0C6H,0BFH,88H; 顯示數(shù) 0 1 2 3 4 5 6 7 8 9 不亮 C9 0AH; 內(nèi)存數(shù) 0 1 2 3 4 5 6 7 8 0BH 0CH0DH STAB:DB 0AH,0AH,0AH,0AH,0AH,09H,06H,04H,02H,00H,00H,06H,00H,01H,03H,0AHDB0AH,09H,01H,0CH,06H,00H,0CH,09H,00H,00H,02H,0AH,0AH,0

40、AH,0AH,0AH; 注: 0A 不亮, 0B 顯示“ A”, 0C 顯示“ -” *;以下是鬧鈴時間設定程序中的時調(diào)整程序 *JDSSFUNN:LCALL DISPLAY;等待鍵釋放JNB P3.3, DSSFUNNLCALL DS20MSOOOO:WAITSS:SETB EALCALL DISPLAYJNBP3.4,FFFF;時加 1 鍵JNBP3.2,DDDD;時減 1JNBP3.3,OOOO;鬧鈴設定退出鍵AJMPWAITSS;消抖JB P3.3,WAITSSDSSFUNNM: LCALL DISPLAY;鍵釋放等待JNB P3.3, DSSFUNNMMOV DISPFIRST,#7

41、2HLJMP START1FFFF: LCALL DS20MS;消抖JB P3.4, WAITSSDSSFUNMM: LCALL DISPLAY;鍵釋放等待JNBP3.4, DSSFUNMMCLREAMOVR0,#55HLCALL ADD1MOV A,R3CLR CCJNE A,#24H,ADDHH33NADDHH33N: JC WAITSS;小于 24 點返回ACALL CLR0;大于等于 24 點清零AJMP WAITSSDDDDLCALL DS20MS;消抖JB P3.2, WAITSSDSSFUNDD: LCALL DISPLAY;鍵釋放等待JNBP3.2, DSSFUNDDCLREAMOVR0,#55HLCALL SUBB1LJMPWAITSS *;以下是鬧鈴判斷子程序 *BAOJ:比較BB3:MOVA,79H;從時十位、個位、分十位、分個位順序CJNEA,55H,BBAOMOVA,78HCLRCCJNEA,54H

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論