版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)電子時(shí)鐘設(shè)計(jì)一、作品功能介紹該作品是個(gè)性化電子鐘設(shè)計(jì),技術(shù)上主要用單片機(jī)( AT89S52 )主控, 6 位 LED 數(shù)碼 顯示,分別顯示“小時(shí):分鐘:秒” 。該作品主要用于 24 小時(shí)計(jì)時(shí)顯示 ,能整時(shí)報(bào)時(shí) ,能作為 秒表使用 ,能定時(shí)鬧鈴 1 分鐘。功能介紹:( 1)上電以后自動(dòng)進(jìn)入計(jì)時(shí)狀態(tài),起始于00:00:00 。(2)設(shè)計(jì)鍵盤調(diào)整時(shí)間,完成時(shí)間設(shè)計(jì),并設(shè)置鬧鐘。( 3)定時(shí)時(shí)間為 1/100 秒,可采用定時(shí)器實(shí)現(xiàn)。( 4)采用 LED 數(shù)碼管顯示,時(shí)、分,秒采用數(shù)字顯示。( 5)采用 24 小時(shí)制,具有方便的時(shí)間調(diào)校功能。(6)具有時(shí)鐘和秒表的切換功能。使用方法 :開機(jī)后時(shí)鐘在
2、 00:00:00 起開始計(jì)時(shí)。( 1)長(zhǎng)按 P3.2 進(jìn)入調(diào)分狀態(tài) :分單元閃爍 ,按 P3.2 加 1,按 P3.3 減 1.再長(zhǎng)按 P3.2 進(jìn)入 時(shí)調(diào)整狀態(tài) ,時(shí)單元閃爍 ,加減調(diào)整同調(diào)分 .按長(zhǎng)按退出調(diào)整狀態(tài)。( 2)( 2)按 P3.3 進(jìn)入設(shè)定鬧時(shí)狀態(tài) : 12:00: ,可進(jìn)行分設(shè)定 ,按 P3.4 分加 1,再按 P3.2 為時(shí)調(diào)整 ,按 P3.4 時(shí)加 1,按 P3.3 調(diào)鬧鐘結(jié)束 .在鬧鈴時(shí)可按 P3.2 停鬧,不按鬧鈴 1 分鐘。(3)按下P3.4進(jìn)入秒表狀態(tài)再按P3.4秒表又啟動(dòng),按P3.4暫停再按P3.4秒表清零,按P3.4退出秒表回到時(shí)鐘狀態(tài)。二、電路原理圖如原理
3、圖所示,硬件系統(tǒng)主要由單片機(jī)最小應(yīng)用系統(tǒng)、LED數(shù)碼管顯示模塊、電源模塊、晶振模塊、按鍵模塊等組成。電子時(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各個(gè)模塊設(shè)計(jì)1.單片機(jī)系統(tǒng) AT89S52 AT89S52 概述 :是一 款非常適合單片機(jī)初學(xué)者學(xué)習(xí)的單片機(jī),它完全兼容傳統(tǒng)的8051 , 8031 的指令系統(tǒng),他的運(yùn)行速度要比 8051 快最高支持達(dá) 33MHz 的晶體震蕩器, 在此系統(tǒng)中使用 12MHz 的晶 振。AT89S52 具有
5、以下標(biāo)準(zhǔn)功能: 門狗定時(shí)器, 2 個(gè)數(shù)據(jù)指針,三個(gè)口線,看6 向量 2 級(jí)中斷結(jié)構(gòu),全雙 靜態(tài)邏輯操作,支持 2 種 定時(shí)器 / 計(jì)數(shù)器、串口、 單片機(jī)一切工作停止,、 8K 字節(jié)在系統(tǒng)可編程 Flash 存儲(chǔ)器、 1000三級(jí)加密程序存儲(chǔ)器 、32 個(gè)可編程 I/O 口、全雙工 UART 串行通道、 低功耗空閑和掉 、雙數(shù)據(jù)指針 、掉電標(biāo)識(shí)符 。8k 字節(jié) Flash ,256 字節(jié) RAM ,32 位 I/O16 位定時(shí)器 / 計(jì)數(shù)器,一個(gè)工串行口,片內(nèi)晶振及時(shí)鐘電路。另外, 軟件可選擇節(jié)電模式??臻e模式下, 中斷繼續(xù)工作。 掉電保護(hù)方式下, 直到下一個(gè)中斷或硬件復(fù)位為止.主要性能: 與
6、MCS-51 單片機(jī)產(chǎn)品兼容 次擦寫周期、全靜態(tài)操作:OHz33Hz、線 、三個(gè) 16 位定時(shí)器 /計(jì)數(shù)器 八個(gè)中斷源 電模式 、掉電后中斷可喚醒、看門狗定時(shí)器 2 、顯示模塊AT89S52 可降至 0HzCPU 停止工作,允許RAM 、RAM 內(nèi)容被保存, 振蕩器被凍結(jié),LED 數(shù)碼管是由發(fā)光二極管構(gòu)成的,亦稱半導(dǎo)體數(shù)碼管。將條狀發(fā)光二極管按照共陰極(負(fù)極 )或共陽極 (正極 )的方法連接,組成“ 8”字,再把發(fā)光二極管另一電極作筆段電極,就構(gòu)成了 LED 數(shù)碼管。若按規(guī)定使某些筆段上的發(fā)光二極管發(fā)光,就能顯示從09 的系列數(shù)字。同熒光數(shù)碼管(VFD)、輝光數(shù)碼管(NRT)相比,它具有:體積
7、小、功耗低、耐震動(dòng)、壽命長(zhǎng)、亮度高、單色性好、發(fā)光響應(yīng)的時(shí)間短,能與TTL、CMOS電路兼容等的數(shù)顯器件。+、-分別表示公共陽極和公共陰極。 ag是7個(gè)筆段電極,DP為小數(shù)點(diǎn)。另有 一種字高為7 . 6mm的超小型LED數(shù)碼管,管腳從左右兩排引出,小數(shù)點(diǎn)則是獨(dú)立的。本系統(tǒng)利用6位LED數(shù)碼管顯示時(shí)間,共陰極結(jié)構(gòu)。LED數(shù)碼管由7段發(fā)光二極管組成,當(dāng)要顯示某個(gè)數(shù)字時(shí)只要將數(shù)字所對(duì)應(yīng)的引腳送入低電平。3.按鍵模塊匚 本設(shè)計(jì)中主要有三個(gè)控制按鍵,按鍵功能為:(1 ) P3.2為調(diào)時(shí)間模式,長(zhǎng)按 P3.2進(jìn)入調(diào)分狀態(tài):分單元閃爍,按P3.2加1,按P3.3減1.再長(zhǎng)按P3.2進(jìn)入時(shí)調(diào)整狀態(tài),時(shí) 單元閃
8、爍,加減調(diào)整同調(diào)分按長(zhǎng)按退出調(diào)整狀態(tài)。(2 )按P3.3進(jìn)入設(shè)定鬧時(shí)狀態(tài):12:00:,可進(jìn)行分設(shè)定,按P3.4分加1,再按P3.2為時(shí)調(diào)整,按P3.4時(shí)加1,按P3.3調(diào)鬧鐘結(jié)束在鬧鈴時(shí)可按P3.2停鬧,不按鬧鈴1分鐘。(3)按下P3.4進(jìn)入秒表狀態(tài):再按P3.4秒表又啟動(dòng),按 P3.4暫停再按P3.4秒表清零按 P3.4退出秒表回到時(shí)鐘狀態(tài)。4 .晶振模塊在AT89S51芯片內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。而在芯片內(nèi)部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。時(shí)鐘電路產(chǎn)生的振蕩脈沖經(jīng)過觸發(fā)器進(jìn)行二分
9、頻之后,才成為單片機(jī)的時(shí)鐘脈沖信號(hào)。晶振電路三、程序設(shè)計(jì)源程序代碼AT89S52時(shí)鐘程序定時(shí)器T0、T1溢出周*期為50MS,T0為秒計(jì)數(shù)用, T1為調(diào)整時(shí)閃爍及秒表定時(shí)用,P3.2、P3.3、P3.4為調(diào)整按鈕,P0 口為字符輸出口,P2為掃描口, P1.2為蜂嗚器口,采用共陽顯示管。50H-55H 為鬧鐘定時(shí)單元, 60H-65H 為秒表計(jì)時(shí)單元, 70H-75H 為顯示時(shí)間單元,76H-79H為分時(shí)計(jì)時(shí)單元。次, 用作間隔嗚叫 .*DISPFIRST EQU 30H;顯示首址存放單元BELL EQU P1.2CONBS EQU 2FH;存放報(bào)時(shí)次數(shù)CLOCK EQU 2DH*中斷入口程序
10、*ORG 0000HLJMP STARTORG 0003HRETIORG 000BHLJMP INTT0ORG 0013HRETI;程序執(zhí)行開始地址;跳到標(biāo)號(hào) START 執(zhí)行;外中斷 0 中斷程序入口 外中斷 0 中斷返回;定時(shí)器 T0 中斷程序入口;跳至 INTTO 執(zhí)行;外中斷 1 中斷程序入口;外中斷 1 中斷返回LJMP INTT1;跳至 INTT1 執(zhí)行ORG 0023H;串行中斷程序入口地址RETI;串行中斷程序返回;定時(shí)器 T1 中斷程序入口*ORG 001BH以下程序開始*整點(diǎn)報(bào)時(shí)用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 (標(biāo)志用);放入熄滅符
12、 數(shù)據(jù);設(shè) T0、 T1 為 16 位定時(shí)器;50MS 定時(shí)初值( T0 計(jì)時(shí)用);50MS 定時(shí)初值;50MS 定時(shí)初值( T1 閃爍定時(shí)用);以下主程序循環(huán)MOVTH1,#3CH;50MS 定時(shí)初值SETBEA;總中斷開放SETBET0;允許 T0 中斷SETBTR0;開啟 T0 定時(shí)器MOVR4,#14H;1秒定時(shí)用計(jì)數(shù)值(50MS X20MOVDISPFIRST,#70H; 顯示單元為 70-75HLCALL DISPLAY;調(diào)用顯示子程序JNBP3.2,SETMM1;P3.2 口為 0 時(shí)轉(zhuǎn)時(shí)間調(diào)整程序JNBP3.3,TSFUN; 定時(shí)鬧鈴設(shè)定JNBP3.4,FUNPT; 秒表功能(
13、 STOP,RUN,CLR )JB08H, QQQQAJMPSTART1;P3.2 口為 1 時(shí)跳回 START1)START1:FUNPT:LJMP FUNPTTSTART12:LJMP START1以下鬧鈴時(shí)間設(shè)定程序,按 P3.3 進(jìn)入設(shè)定TSFUN: LCALL DS20MSJBP3.3,START1定時(shí)單元;鬧鈴已開的話,關(guān)鬧鈴;進(jìn)入鬧鈴設(shè)定程序,顯示 52-55H 鬧鐘;分加 1;分減 1;進(jìn)入時(shí)調(diào)整;關(guān)鬧鈴標(biāo)志;消抖;進(jìn)入時(shí)調(diào)整;轉(zhuǎn)到時(shí)間調(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;等鍵 釋放;鬧鈴設(shè)定分加 1;分?jǐn)?shù)據(jù)放入 A;清進(jìn)位標(biāo)志J;小于 60 分時(shí)返回;大于或等于 60 分時(shí)分計(jì)時(shí)單元清 0;消抖;等鍵 釋放;鬧鈴設(shè)定分減 1LJMP DSWAIT;以下秒表暫停 清零功能程序;按下 P3.4 切換秒表功能,再按開始計(jì)時(shí),暫?;蚯?, 最后按 P3.4 退出秒表回到時(shí)鐘計(jì)時(shí)FUNPTT: LCALLDS20MSJBP3.4,START12WAI
16、T22: JNBP3.4,WAIT21CPL03HJNB03H,TIMFUNMOVDISPFIRST,#60H ;顯示秒表數(shù)據(jù)單元MOV60H,#00HMOV61H,#00HMOV62H,#00HMOV63H,#00HMOV64H,#00HMOV65H,#00HMOVTL1,#0F0H ;10MS 定時(shí)初值MOVTH1,#0D8H ;10MS 定時(shí)初值JBP3.4,WAIT81WAIT99:JNBP3.4,WAIT99SETB TR1;T1 運(yùn)行控制軟件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í)鐘數(shù)據(jù)單元CLR ET1CLR TR1AJMP FUNSS11FUNSS11: AJMP START1;以下鍵等待釋放時(shí)顯示不會(huì)熄滅用WAIT21:LCALL DISPLAYAJMP WAIT22W
18、AIT31:LCALL DISPLAYAJMP WAIT33WAIT41:LCALL DISPLAYAJMP WAIT44WAIT51:LCALL DISPLAYAJMP WAIT55WAIT61:LCALL DISPLAYAJMP WAIT66AJMP WAIT88WAIT91: LCALL DISPLAYAJMP WAIT991 秒計(jì)時(shí)程序;T0 中斷服務(wù)程序INTT0: PUSH ACC;累加器入棧保護(hù)PUSHPSW;狀態(tài)字入棧保護(hù)CLRET0;關(guān) T0 中斷允許CLRTR0; 關(guān)閉定時(shí)器 T0MOVA,#0B7H;中斷響應(yīng)時(shí)間同步修正ADDA,TL0;低 8 位初值修正MOVTL0,A
19、;重裝初值(低 8 位修正值)MOVA,#3CH;高 8 位初值修正ADDCA,TH0JMOVTH0,A;重裝初值(高 8 位修正值)SETBTR0;開啟定時(shí)器 T0DJNZ R4, OUTT0合)ADDSS:MOVR4,#14H;20 次中斷到( 1 秒)重賦初值CPL07H;鬧鈴時(shí)間隔嗚叫用MOVR0,#71H;指向秒計(jì)時(shí)單元( 71H-72H )ACALL ADD1;調(diào)用加 1 程序(加 1 秒操作)MOVA,R3;秒數(shù)據(jù)放入 A( R3 為 2 位十進(jìn)制數(shù)組CLRC;清進(jìn)位標(biāo)志CJNEA,#60H,ADDMMJADDMM:JCOUTT0;小于 60 秒時(shí)中斷退出ACALL CLR0;大
20、于或等于 60 秒時(shí)對(duì)秒計(jì)時(shí)單元清 0MOVR0,#77H;指向分計(jì)時(shí)單元( 76H-77H )ACALL ADD1;分計(jì)時(shí)單元加 1 分鐘MOVA,R3;分?jǐn)?shù)據(jù)放入 ACLRC;清進(jìn)位標(biāo)志CJNEA,#60H,ADDHHJADDHHJCOUTT0;小于 60 分時(shí)中斷退出;20 次中斷未到中斷退出ACALL CLR0;大于或等于 60 分時(shí)分計(jì)時(shí)單元清 0SETB 08HMOVR0,#79H;指向小時(shí)計(jì)時(shí)單元( 78H-79H )ACALL ADD1;小時(shí)計(jì)時(shí)單元加 1 小時(shí)MOVA,R3;時(shí)數(shù)據(jù)放入 ACLRC;清進(jìn)位標(biāo)志CJNEA,#24H,HOURJJCOUTT0;小于 24 小時(shí)中斷
21、退出ACALL CLR0;大于或等于 24 小時(shí)小時(shí)計(jì)時(shí)單元清 0MOV72H,76H;中斷退出時(shí)將分、 時(shí)計(jì)時(shí)單元數(shù)據(jù)移MOV73H,77H;入對(duì)應(yīng)顯示單元MOV74H,78HJMOV75H,79HJLCALLBAOJPOPPSW;恢復(fù)狀態(tài)字(出棧)POPACC;恢復(fù)累加器SETBET0;開放 T0 中斷RETI;中斷返回HOUR:OUTT0: *閃動(dòng)調(diào)時(shí)程序 秒表功能程序 *J;T1 中斷服務(wù)程序,用作時(shí)間調(diào)整時(shí)調(diào)整單元閃爍指示或秒表計(jì)時(shí)INTT1:PUSHACC;中斷現(xiàn)場(chǎng)保護(hù)PUSHPSWJJB03H, MMFUN;=1 時(shí)秒表MOVTL1, #0B0H;裝定時(shí)器 T1 定時(shí)初值MOVT
22、H1, #3CHJDJNZR2,INTT1OUT;0.3 秒未到退出中斷 ( 50MS 中斷 6次)MOVR2,#06H;重裝 0.3 秒定時(shí)用初值CPL02H;0.3 秒定時(shí)到對(duì)閃爍標(biāo)志取反JB02H,FLASH1;02H 位為 1 時(shí)顯示單元 熄滅 MOV72H,76H;02H 位為 0 時(shí)正常顯示MOV73H,77HJMOV74H,78HJMOV75H,79HJINTT1OUT:POPPSW;恢復(fù)現(xiàn)場(chǎng)POPACCJFLASH1:JB01H,FLASH2;01H 位為 1 時(shí),轉(zhuǎn)小時(shí)熄滅控制MOV72H,7AH;01H 位為 0 時(shí), 熄滅符 數(shù)據(jù)放入分MOV73H,7AH;顯示單元( 7
23、2H-73H ),將不顯示分?jǐn)?shù)據(jù)MOV74H,78HJMOV75H,79HJAJMPINTT1OUT;轉(zhuǎn)中斷退出FLASH2:MOV72H,76H;01H 位為 1 時(shí), 熄滅符 數(shù)據(jù)放入小時(shí)MOV73H,77H;顯示單元 ( 74H-75H ),小時(shí)數(shù)據(jù)將不顯示MOV74H,7AHJMOV75H,7AHJAJMPINTT1OUT;轉(zhuǎn)中斷退出JMMFUN :CLRTR1MOVA,#0F7H;中斷響應(yīng)時(shí)間同步修正 ,重裝初值 (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;開啟定時(shí)器 T1;指向秒計(jì)時(shí)單元( 71H-72H );調(diào)用加 1 程序(加 1 秒操作)JJ;加 1 后為 00 ,C=0;加 1 后不為 00 , C=1;大于或等于 60 秒時(shí)對(duì)秒計(jì)時(shí)單元清 0;指向
25、分計(jì)時(shí)單元( 76H-77H );分計(jì)時(shí)單元加 1 分鐘;分?jǐn)?shù)據(jù)放入 A;清進(jìn)位標(biāo)志J;小于 60 分時(shí)中斷退出;大于或等于 60 分時(shí)分計(jì)時(shí)單元清 0 ;指向小時(shí)計(jì)時(shí)單元( 78H-79H );小時(shí)計(jì)時(shí)單元加 1 小時(shí)OUTT01:POP ACC; 恢復(fù)累加器RETI;中斷返回*; 加 1 子 程 序 *ADD1: MOVA,R0;取當(dāng)前計(jì)時(shí)單元數(shù)據(jù)到 ADECR0;指向前一地址SWAPA;A 中數(shù)據(jù)高四位與低四位交換ORLA,R0;前一地址中數(shù)據(jù)放入 A 中低四位ADDA,#01H;A 加 1 操作DAA;十進(jìn)制調(diào)整MOVR3,A;移入 R3 寄存器ANLA,#0FH;高四位變 0MOVR
26、0,A;放回前一地址單元MOVA,R3;取回 R3 中暫存數(shù)據(jù)INCR0;指向當(dāng)前地址單元SWAPA;A 中數(shù)據(jù)高四位與低四位交換ANLA,#0FH;高四位變 0;子程序返回RET *J; 分減 1 子 程 序 *SUB1: MOVA,R0;取當(dāng)前計(jì)時(shí)單元數(shù)據(jù)到 ADECR0;指向前一地址SWAPA;A 中數(shù)據(jù)高四位與低四位交換ORLA,R0;前一地址中數(shù)據(jù)放入 A 中低四位JZSUB11DECA;A 減 1 操作SUB111: MOVR3,A;移入 R3 寄存器ANLA,#0FH;高四位變 0CLRC;清進(jìn)位標(biāo)志SUBBA,#0AHSUB1111: JCSUB1110MOVR0,#09H;大
27、于等于 0AH ,為 9SUB110: MOVA,R3;取回 R3 中暫存數(shù)據(jù)INCR0;指向當(dāng)前地址單元SWAPA;A 中數(shù)據(jù)高四位與低四位交換ANLA,#0FH;高四位變 0MOVR0,A;數(shù)據(jù)放入當(dāng)削地址單元中RET;子程序返回SUB11: MOVA,#59HAJMPSUB111SUB1110:MOVA,R3;移入 R3 寄存器ANLA,#0FH;高四位變 0MOVR0,AAJMPSUB110 *時(shí)減 1 子 程 序 *SUBB1:MOV A,R0;取當(dāng)前計(jì)時(shí)單元數(shù)據(jù)到 ADEC R0;指向前一地址JZSUBB11;00 減 1 為 23 (小時(shí))DECA;A 減 1 操作SUBB111
28、:MOVR3,A;移入 R3 寄存器ANLA,#0FH;高四位變 0CLRC;清進(jìn)位標(biāo)志SUBBA,#0AH;時(shí)個(gè)位大于 9 為 9SUBB1111:JCSUBB1110 ;MOVR0,#09H;大于等于 0AH ,為 9SUBB110:MOVA,R3;取回 R3 中暫存數(shù)據(jù)INCR0;指向當(dāng)前地址單元SWAPA;A 中數(shù)據(jù)高四位與低四位交換ANLA,#0FH;高四位變 0MOVR0,A;時(shí)十位數(shù)數(shù)據(jù)放入RET;子程序返回SUBB11:MOVA,#23HAJMPSUBB111SUBB1110:MOVA,R3;時(shí)個(gè)位小于 0A 不處理ANLA,#0FH;高四位變 0MOV R0,A;個(gè)位移入AJ
29、MP SUBB110 *J; 清零程序 ; *J;對(duì)計(jì)時(shí)單元復(fù)零用CLR0: CLRA;清累加器MOVR0,A;清當(dāng)前地址單元DECR0;指向前一地址MOVR0,A;前一地址單元清 0RET;子程序返回 *時(shí)鐘時(shí)間調(diào)整程序 *;當(dāng)調(diào)時(shí)按鍵按下時(shí)進(jìn)入此程序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ù);關(guān)定時(shí)器 T0 中斷; 關(guān)閉定時(shí)器 T0;調(diào)用 1 秒延時(shí)程序;消抖;鍵按下時(shí)間小于 1 秒,關(guān)閉顯示 (省電);進(jìn)入調(diào)時(shí)狀態(tài),賦閃爍定時(shí)初值;調(diào)時(shí)時(shí)秒單元為 00 秒;允許 T1 中斷;開啟定時(shí)器 T1;P3.2 口為 0(鍵未釋放) ,等待;鍵釋放,分調(diào)整閃爍標(biāo)志置 1;等待鍵按下;有鍵按下,延時(shí) 0.5 秒;消抖;按下時(shí)間大于 0.5 秒轉(zhuǎn)調(diào)小時(shí)狀態(tài);按下時(shí)間小于 0.5 秒加 1 分鐘操作;調(diào)用加 1 子程序CLRCCJNE A,#60H,HHHHHH: JCSET4;清進(jìn)位標(biāo)志;調(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 時(shí)清 0;清進(jìn)位標(biāo)志;跳轉(zhuǎn)到 SET4 循環(huán);省電( LED 不顯示)狀態(tài)。開 T0 中斷;開啟 T0 定時(shí)器(開時(shí)鐘) ;無按鍵按下,等待。;消抖;是干擾返回 CLOS
32、E 等待;等待鍵釋放;返回主程序( LED 數(shù)據(jù)顯示亮);分閃爍標(biāo)志清除(進(jìn)入調(diào)小時(shí)狀態(tài));小時(shí)調(diào)整標(biāo)志置 1;等待鍵釋放;等待按鍵按下;有鍵按下延時(shí) 0.5 秒;消抖LCALL DS20MSJNBP3.2,SETOUT;按下時(shí)間大于 0.5 秒退出時(shí)間調(diào)整MOVR0,#79H;按下時(shí)間小于 0.5 秒加 1 小時(shí)操作LCALLADD1;調(diào)加 1 子程序MOVA,R3JCLRCJCJNEA,#24H,HOUU;計(jì)時(shí)單元數(shù)據(jù)與 24 比較HOUU: JCSET6;小于 24 轉(zhuǎn) SET6 循環(huán)LCALLCLR0;大于或等于 24 時(shí)清 0 操作AJMPSET6;跳轉(zhuǎn)到 SET6 循環(huán)SETOUT
33、: JNBP3.2,SETOUT1;調(diào)時(shí)退出程序。等待鍵釋放LCALL DS20MS;消抖JNBP3.2,SETOUT;是抖動(dòng),返回 SETOUT 再等待CLR01H;清調(diào)小時(shí)標(biāo)志CLR00H;清調(diào)分標(biāo)志CLR02H;清閃爍標(biāo)志CLRTR1;關(guān)閉定時(shí)器 T1CLRET1;關(guān)定時(shí)器 T1 中斷SETBTR0;開啟定時(shí)器 T0SETBET0;開定時(shí)器 T0 中斷(計(jì)時(shí)開始)時(shí))LJMPSTART1;跳回主程序SET1:LCALLDISPLAY;鍵釋放等待時(shí)調(diào)用顯示程序(調(diào)分)AJMPSET2;防止鍵按下時(shí)無時(shí)鐘顯示SET3:LCALLDISPLAY;等待調(diào)分按鍵時(shí)時(shí)鐘顯示用JNBP3.3, FUN
34、SUB; 減 1 分操作AJMPSET4;調(diào)分等待SET5:LCALLDISPLAY;鍵釋放等待時(shí)調(diào)用顯示程序(調(diào)小AJMPSETHH1;防止鍵按下時(shí)無時(shí)鐘顯示SET7:LCALLDISPLAY;等待調(diào)小時(shí)按鍵時(shí)時(shí)鐘顯示用JNBP3.3, FUNSUBB;小時(shí)減 1 操作AJMPSET6;調(diào)時(shí)等待SETOUT1:LCALLDISPLAY;退出時(shí)鐘調(diào)整時(shí)鍵釋放等待AJMPSETOUT;防止鍵按下時(shí)無時(shí)鐘顯示;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, 時(shí)減 1 程序FUNSUBB: LCALL DS20MS;消抖JBP3.3,SET61; 干擾,返回調(diào)時(shí)等待FUNSUBB1: JNBP3.3,FUNSUBB1; 等待鍵放開MOVR0,#79HJLCALLSUBB1; 時(shí)減 1 程序LJMPSET6; 返回調(diào)時(shí)等待SET61: LJMP SET6 *J; 顯示程序 ; *JP2 口; 顯示數(shù)據(jù)在 70H-75H 單元內(nèi), 用六位 LED 共陽數(shù)碼管顯示, P0 口輸出段碼數(shù)據(jù),作; 掃描控制,每個(gè) LED 數(shù)碼管
36、亮 1MS 時(shí)間再逐位循環(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ù)對(duì)應(yīng)段碼MOVP0,A;段碼放入 P1 口MOVA,R5JBACC.2,LOOP5;小數(shù)點(diǎn)處理CLRP0.7LOOP5:JBACC.4,LOOP6;小數(shù)點(diǎn)處理CLRP0.7LOOP6:LCALLDL1MS;顯示 1MSINCR1;指向下一地址MOVA,R5;掃描控制字放入 AJNBACC
37、.5,ENDOUT;ACC.5=0 時(shí)一次顯示結(jié)束RL;A 中數(shù)據(jù)循環(huán)左移MOVR5,A;放回 R5 內(nèi)AJMPPLAY;跳回 PLAY 循環(huán)ENDOUT: MOVP2,#0FFH;一次顯示結(jié)束, P2 口復(fù)位MOVP0,#0FFH ;P0 口復(fù)位RET;子程序返回TAB:DBMOVP0,#0FFH0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH;共陰段碼表012 34567 89不亮 “A”“-” *J; SDISPLAY ,上電顯示子程序 *J;不帶小數(shù)點(diǎn)顯示,有“A”“ -”顯示功能SDISPLAY: MOVR1,DIS
38、PFIRSTMOVR5,#0FEH;掃描控制字初值SPLAY: MOVA,R5;掃描字放入 AMOVP2,A;從 P2 口輸出MOVA,R1;取顯示數(shù)據(jù)到 AMOVDPTR,#TABS;取段碼表地址MOVCA,A+DPTR;查顯示數(shù)據(jù)對(duì)應(yīng)段碼MOVP0,A;段碼放入 P1 口MOVA,R5JLCALLDL1MS;顯示 1MSINCR1;指向下一地址MOVA,R5;掃描控制字放入 AJNBACC.5,ENDOUTS;ACC.5=0 時(shí)一次顯示結(jié)束RLA;A 中數(shù)據(jù)循環(huán)左移MOVR5,A;放回 R5 內(nèi)AJMPSPLAY;跳回 PLAY 循環(huán)ENDOUTS: MOVP2,#0FFH;一次顯示結(jié)束,
39、 P2 口復(fù)MOVP0,#0FFH;P0 口復(fù)位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 顯示“ -” *;以下是鬧鈴時(shí)間設(shè)定程序中的時(shí)調(diào)整程序 *JDSSFUNN:LCALL DISPLAY;等待鍵釋放JNB P3.3, DSSFUNNLCALL DS20MSOOOO:WAITSS:SETB EALCALL DISPLAYJNBP3.4,FFFF;時(shí)加 1 鍵JNBP3.2,DDDD;時(shí)減 1JNBP3.3,OOOO;鬧鈴設(shè)定退出鍵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 點(diǎn)返回ACALL CLR0;大于等于 24 點(diǎn)清零AJMP WAITSSDDDDLCALL DS20MS;消抖JB P3.2, WAITSSDSSFUNDD: LCALL DISPLAY;鍵釋放等待JNBP3.2, DSSFUNDDCLREAMOVR0,#55HLCALL SUBB1LJMPWAITSS *;以下是鬧鈴判斷子程序 *BAOJ:比較BB3:MOVA,79H;從時(shí)十位、個(gè)位、分十位、分個(gè)位順序CJNEA,55H,BBAOMOVA,78HCLRCCJNEA,54H
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年KTV消防設(shè)施運(yùn)行管理及監(jiān)督合同2篇
- 大班健康預(yù)防艾滋
- 《工程材料及應(yīng)用》課件第10章
- 兒童傷害與預(yù)防
- 元宵節(jié)營(yíng)銷策略解析
- 《電氣控制與PLC原理及應(yīng)用》課件第10章
- 2024年河海大學(xué)設(shè)計(jì)院甘肅分院招聘考試真題
- 2024年廣州市荔灣區(qū)東沙街環(huán)衛(wèi)站招聘環(huán)衛(wèi)工人考試真題
- 五年級(jí)健康成長(zhǎng)之路
- 2024年淮安市第三人民醫(yī)院招聘筆試真題
- 箱變遷移工程施工方案
- 北師大版九年級(jí)數(shù)學(xué)下冊(cè)《圓的對(duì)稱性》評(píng)課稿
- 《遙感原理與應(yīng)用》期末考試試卷附答案
- 物流無人機(jī)垂直起降場(chǎng)選址與建設(shè)規(guī)范(征求意見稿)
- 工程分包管理制度
- 2023年湖南成人學(xué)位英語考試真題
- GB/T 9452-2023熱處理爐有效加熱區(qū)測(cè)定方法
- 肺炎支原體肺炎診治專家共識(shí)
- 藥物化學(xué)(第七版)(全套課件1364P)
- 能源中國(guó)(上海電力大學(xué))超星爾雅學(xué)習(xí)通網(wǎng)課章節(jié)測(cè)試答案
- 采購(gòu)計(jì)劃流程圖
評(píng)論
0/150
提交評(píng)論