/*************************************************************************************** 008.ASM 用八位數(shù)碼管顯示時(shí)間,通過兩個(gè)按鍵改變顯示內(nèi)容及修改時(shí)間 接線:J15.J16短接,P0接八位數(shù)碼管,P2接獨(dú)立鍵盤 2010.09.06 ***************************************************************************************/ ORG 0000H LJMP MAIN ORG 001BH LJMP INT_T1 ORG 0040H MAIN: LCALL FRIST ;上電初始化 LOOP: ;主循環(huán) LCALL KEY_READ ;讀鍵盤 JBC 00H,N LJMP N0 ;無鍵,則跳到N0 N: LCALL CHAUNG ;有鍵則去刷新顯示狀態(tài) LJMP LOOP N0: ;輸出當(dāng)前時(shí)分秒 MOV R0,#60H MOV R1,#07H MOV R5,#08H LCALL COUNT_OUTPUT ;刷新輸出 LCALL SHOW ;輸出 LCALL CHANG_TIME ;按秒改變輸出時(shí)間 LJMP LOOP FRIST: MOV SP,#30H ;設(shè)置堆棧 MOV 45H,#01H ;設(shè)置初始狀態(tài)為00H MOV P1,#0FFH ;初始化P1口 MOV TMOD,#21H ;設(shè)置定時(shí)器工作模式,T0為工作模式2,T1為工作模式1 MOV 50H,#06H ;初始化年月日 數(shù)碼管顯示 MOV 51H,#00H MOV 52H,#09H MOV 53H,#00H MOV 54H,#00H MOV 55H,#01H MOV 56H,#00H MOV 57H,#02H MOV 46H,#14H ;初始化年月日 MOV 47H,#0AH MOV 48H,#09H MOV 49H,#06H MOV 60H,#00H ;初始化時(shí) 分 秒 數(shù)碼管顯示 MOV 61H,#00H MOV 62H,#08H MOV 63H,#05H MOV 64H,#02H MOV 65H,#02H MOV 66H,#00H MOV 67H,#00H MOV 58H,#16H ;初始化時(shí)分秒 MOV 59H,#3AH MOV 68H,#00H MOV R6,#19H ;定時(shí)T1計(jì)數(shù) MOV R7,#28H MOV TH0,#15H ;賦T0定時(shí)初值 MOV TL0,#0A0H MOV TH1,#06H ;賦T1定時(shí)初值 MOV TL1,#06H SETB TR1 CLR 00H ;初始化按鍵標(biāo)志為“0” , 即 無 鍵 CLR 01H ;初始化鍵值為“0”,即A CLR 02H ;初始化按鍵長短為“0”,即短按鍵 CLR 03H ;初始化定時(shí)T1標(biāo)志 CLR 04H ;初始時(shí)間更改標(biāo)志位(秒,分,時(shí),日,月,年) CLR 05H CLR 06H CLR 07H CLR 08H CLR 09H CLR 0AH CLR 0BH ;01狀態(tài)標(biāo)志位,表示為01狀態(tài) MOV IE,#88H ;開定時(shí)中斷 RET /*輸出計(jì)算子程序*/ COUNT_OUTPUT: JBC 04H,COUNT_S ;秒改變,則計(jì)算出顯示值送相應(yīng)內(nèi)存 LJMP COUNT_M COUNT_S: ;否則去計(jì)算分 MOV B,#0AH ;秒/10。商送61H,余數(shù)送60H MOV A,68H DIV AB MOV 61H,A MOV 60H,B COUNT_M: JBC 05H,COUNT_M0 ;分改變,則計(jì)算出顯示值送相應(yīng)內(nèi)存 LJMP COUNT_H ;否則去計(jì)算時(shí) COUNT_M0: MOV B,#0AH ;分/10,商送63H,余數(shù)送62H MOV A,59H DIV AB MOV 63H,A MOV 62H,B COUNT_H: JBC 06H,COUNT_H0 ;時(shí)改變,則計(jì)算出顯示值送相應(yīng)內(nèi)存 LJMP COUNT_D ;否則去計(jì)算日 COUNT_H0: MOV B,#0AH ;時(shí)/10,商送65H,余數(shù)送64H MOV A,58H DIV AB MOV 65H,A MOV 64H,B COUNT_D: ;日改變,則計(jì)算出顯示值送相應(yīng)內(nèi)存 JBC 07H,COUNT_D0 ;否則去計(jì)算月 LJMP COUNT_MON COUNT_D0: ;日/10,商送51H,余數(shù)送50H MOV B,#0AH MOV A,49H DIV AB MOV 51H,A MOV 50H,B COUNT_MON: JBC 08H,COUNT_MON0 ;月改變,則計(jì)算出顯示值送相應(yīng)內(nèi)存 LJMP COUNT_YL ;否則去計(jì)算年(L) COUNT_MON0: MOV B,#0AH ;月/10,商送53H,余數(shù)送52H MOV A,48H DIV AB MOV 53H,A MOV 52H,B COUNT_YL: JBC 09H,COUNT_YL0 ;年低位改變,則計(jì)算出顯示值送相應(yīng)內(nèi)存 LJMP COUNT_YH ;否則去計(jì)算年(H) COUNT_YL0: MOV B,#0AH ;年(L)/10,商送55H,余數(shù)送54H MOV A,47H DIV AB MOV 55H,A MOV 54H,B COUNT_YH: ;年高改變,則計(jì)算出顯示值送相應(yīng)內(nèi)存 JBC 0AH,COUNT_YH0 ;否則子程序返回 LJMP COUNT_RETURN COUNT_YH0: MOV B,#0AH ;年(H)/10,商送57H,余數(shù)送56H MOV A,46H DIV AB MOV 57H,A MOV 56H,B COUNT_RETURN: RET /*時(shí)間修改子程序*/ CHAUNG: STAR: MOV A,45H ;讀狀態(tài)值 CJNE A,#01H,CHAUNG0 ;狀態(tài)值=01H,則轉(zhuǎn)H_M_S0,否則進(jìn)行下一個(gè)判斷 LCALL H_M_S0 LJMP CHAUNG10 CHAUNG0: CJNE A,#02H,CHAUNG1 ;狀態(tài)值=02H,則轉(zhuǎn)H_M_S1,否則進(jìn)行下一個(gè)判斷 LCALL H_M_S1 LJMP CHAUNG10 CHAUNG1: CJNE A,#04H,CHAUNG3 ;狀態(tài)值=04H,則轉(zhuǎn)H_M_S2,否則進(jìn)行下一個(gè)判斷 LCALL H_M_S2 LJMP CHAUNG10 CHAUNG3: CJNE A,#03H,CHAUNG4 ;狀態(tài)值=03H,則轉(zhuǎn)Y_M_D0,否則進(jìn)行下一個(gè)判斷 LCALL Y_M_D0 LJMP CHAUNG10 CHAUNG4: CJNE A,#06H,CHAUNG5 ;狀態(tài)值=06H,則轉(zhuǎn)Y_M_D1,否則進(jìn)行下一個(gè)判斷 LCALL Y_M_D1 LJMP CHAUNG10 CHAUNG5: CJNE A,#0CH,CHAUNG6 ;狀態(tài)值=0cH,則轉(zhuǎn)Y_M_D2,否則進(jìn)行下一個(gè)判斷 LCALL Y_M_D2 CHAUNG6: CJNE A,#18H,CHAUNG7 ;狀態(tài)值=18H,則轉(zhuǎn)Y_M_D3,否則進(jìn)行下一個(gè)判斷 LCALL Y_M_D3 LJMP CHAUNG10 CHAUNG7: CJNE A,#07H,CHAUNG8 ;狀態(tài)值=07H,則轉(zhuǎn)S_CLOCK0,否則進(jìn)行下一個(gè)判斷 LCALL S_CLOCK0 LJMP CHAUNG10 CHAUNG8: CJNE A,#0EH,CHAUNG9 ;狀態(tài)值=0eH,則轉(zhuǎn)S_CLOCK1,否則進(jìn)行下一個(gè)判斷 LCALL S_CLOCK1 LJMP CHAUNG10 CHAUNG9: CJNE A,#1CH,CHAUNG10 ;狀態(tài)值=07H,則轉(zhuǎn)S_CLOCK2,否則進(jìn)行下一個(gè)判斷 LCALL S_CLOCK2 LJMP CHAUNG10 CHAUNG10: ;子程序返回 JBC 0BH,STAR RET /*狀態(tài)01修理子程序*/ H_M_S0: JB 01H,S_01 ;判斷A鍵,B鍵 MOV 45H,#02H ;A鍵,狀態(tài)轉(zhuǎn)為02H LJMP S_01_RETURN S_01: ;B鍵,狀態(tài)轉(zhuǎn)為03H MOV 45H,#03H S_01_RETURN: SETB 0BH RET /*狀態(tài)02修理子程序*/ H_M_S1: MOV 69H,#00H ;定時(shí)標(biāo)志,定時(shí)到,回到A狀態(tài) LOOP_02: MOV R0,#64H ;設(shè)置顯示內(nèi)容 MOV R1,#03H MOV R5,#02H LCALL COUNT_OUTPUT ;計(jì)算顯示數(shù)據(jù) LCALL SHOW ;顯示 LCALL KEY_READ ;讀鍵盤 JBC 00H,S_02 ;有鍵,則去判斷長按短按 INC 69H ;無鍵,定時(shí)標(biāo)志+1 MOV A,69H CJNE A,#0FFH,LOOP_02 ;定時(shí)到,狀態(tài)轉(zhuǎn)為01H,子程序返回 MOV 45H,#01H LJMP S_02_RETURN S_02: MOV 69H,#00H ;有按鍵,清零定時(shí)標(biāo)志 JBC 02H,S_02_0 ;長按,去判斷A鍵B鍵 JBC 01H,S_02_1 ;短按,去判斷A鍵B鍵 INC 58H ;A鍵,時(shí)+1 SETB 06H ;置位,時(shí)改變標(biāo)志 LJMP LOOP_02 S_02_0: JBC 01H,S_02_2 ;長按,B鍵,狀態(tài)變?yōu)榱?1H,并子程序返回 MOV 45H,#04H ;A鍵,狀態(tài)轉(zhuǎn)為04H SETB 0BH LJMP S_02_RETURN S_02_1: ;短按B鍵,時(shí)-1,并置位時(shí)改變標(biāo)志 DEC 58H SETB 06H LJMP LOOP_02 S_02_2: MOV 45H,#01H S_02_RETURN: MOV 68H,#00H RET /*狀態(tài)04處理子程序*/ H_M_S2: MOV 69H,#00H ;定時(shí)標(biāo)志,定時(shí)到,回到A狀態(tài) LOOP_04: MOV R0,#62H ;設(shè)置顯示內(nèi)容 MOV R1,#05H MOV R5,#02H LCALL COUNT_OUTPUT ;計(jì)算顯示數(shù)據(jù) LCALL SHOW ;顯示 LCALL KEY_READ ;讀鍵盤 JBC 00H,S_04 ;有鍵,則去判斷長按短按 INC 69H ;無鍵,定時(shí)標(biāo)志+1 MOV A,69H CJNE A,#0FFH,LOOP_04 ;定時(shí)到,狀態(tài)轉(zhuǎn)為01H,子程序返回 MOV 45H,#01H LJMP S_02_RETURN S_04: MOV 69H,#00H ;有按鍵,清零定時(shí)標(biāo)志 JBC 02H,S_04_0 ;長按,去判斷A鍵B鍵 JBC 01H,S_04_1 ;短按,去判斷A鍵B鍵 INC 59H ;A鍵,分+1 SETB 05H ;置位,分改變標(biāo)志 LJMP LOOP_04 S_04_0: JBC 01H,S_04_2 ;長按,B鍵,狀態(tài)變?yōu)榱?1H,并子程序返回 MOV 45H,#01H ;A鍵,狀態(tài)轉(zhuǎn)為08H LJMP S_04_RETURN S_04_1: ;短按B鍵,分-1,并置位分改變標(biāo)志 DEC 59H SETB 05H LJMP LOOP_04 S_04_2: MOV 45H,#01H S_04_RETURN: MOV 68H,#00H RET /*狀態(tài)03修理子程序*/ Y_M_D0: MOV R0,#50H MOV R1,#07H MOV R5,#08H LCALL COUNT_OUTPUT LCALL SHOW LCALL KEY_READ JB 01H,S_03 ;判斷A鍵,B鍵 MOV 45H,#06H ;A鍵,狀態(tài)轉(zhuǎn)為02H LJMP S_03_RETURN S_03: ;B鍵,狀態(tài)轉(zhuǎn)為03H MOV 45H,#07H S_03_RETURN: SETB 0BH RET /*狀態(tài)06修理子程序*/ Y_M_D1: MOV 69H,#00H ;定時(shí)標(biāo)志,定時(shí)到,回到A狀態(tài) LOOP_06: MOV R0,#54H ;設(shè)置顯示內(nèi)容 MOV R1,#03H MOV R5,#04H LCALL COUNT_OUTPUT ;計(jì)算顯示數(shù)據(jù) LCALL SHOW ;顯示 LCALL KEY_READ ;讀鍵盤 JBC 00H,S_06 ;有鍵,則去判斷長按短按 INC 69H ;無鍵,定時(shí)標(biāo)志+1 MOV A,69H CJNE A,#0FFH,LOOP_06 ;定時(shí)到,狀態(tài)轉(zhuǎn)為01H,子程序返回 MOV 45H,#01H LJMP S_06_RETURN S_06: MOV 69H,#00H ;有按鍵,清零定時(shí)標(biāo)志 JBC 02H,S_06_0 ;長按,去判斷A鍵B鍵 JBC 01H,S_06_1 ;短按,去判斷A鍵B鍵 INC 47H ;A鍵,年+1 MOV A,47H CJNE A,#64H,S_066 MOV 47H,#00H INC 46H SETB 0AH S_066: SETB 09H ;置位,年改變標(biāo)志 LJMP LOOP_06 S_06_0: JBC 01H,S_06_2 ;長按,B鍵,狀態(tài)變?yōu)榱?1H,并子程序返回 MOV 45H,#01H ;A鍵,狀態(tài)轉(zhuǎn)為08H LJMP S_06_RETURN S_06_1: ;短按B鍵,年-1,并置位年改變標(biāo)志 DEC 47H MOV A,47H CJNE A,#-1,S_0666 MOV 47H,#00H DEC 46H SETB 0AH S_0666: SETB 09H LJMP LOOP_06 S_06_2: MOV 45H,#01H S_06_RETURN: RET /*狀態(tài)0C修理子程序*/ Y_M_D2: MOV 69H,#00H ;定時(shí)標(biāo)志,定時(shí)到,回到A狀態(tài) LOOP_0C: MOV R0,#52H ;設(shè)置顯示內(nèi)容 MOV R1,#05H MOV R5,#02H LCALL COUNT_OUTPUT ;計(jì)算顯示數(shù)據(jù) LCALL SHOW ;顯示 LCALL KEY_READ ;讀鍵盤 JBC 00H,S_0C ;有鍵,則去判斷長按短按 INC 69H ;無鍵,定時(shí)標(biāo)志+1 MOV A,69H CJNE A,#0FFH,LOOP_0C ;定時(shí)到,狀態(tài)轉(zhuǎn)為01H,子程序返回 MOV 45H,#01H LJMP S_0C_RETURN S_0C: MOV 69H,#00H ;有按鍵,清零定時(shí)標(biāo)志 JBC 02H,S_0C_0 ;長按,去判斷A鍵B鍵 JBC 01H,S_0C_1 ;短按,去判斷A鍵B鍵 INC 48H ;A鍵,月+1 SETB 08H ;置位,月改變標(biāo)志 LJMP LOOP_0C S_0C_0: JBC 01H,S_0C_2 ;長按,B鍵,狀態(tài)變?yōu)榱?1H,并子程序返回 MOV 45H,#01H ;A鍵,狀態(tài)轉(zhuǎn)為08H LJMP S_0C_RETURN S_0C_1: ;短按B鍵,月-1,并置位月改變標(biāo)志 DEC 48H SETB 08H LJMP LOOP_0C S_0C_2: MOV 45H,#01H S_0C_RETURN: RET /*狀態(tài)18修理子程序*/ Y_M_D3: MOV 69H,#00H ;定時(shí)標(biāo)志,定時(shí)到,回到A狀態(tài) LOOP_18: MOV R0,#50H ;設(shè)置顯示內(nèi)容 MOV R1,#07H MOV R5,#02H LCALL COUNT_OUTPUT ;計(jì)算顯示數(shù)據(jù) LCALL SHOW ;顯示 LCALL KEY_READ ;讀鍵盤 JBC 00H,S_18 ;有鍵,則去判斷長按短按 INC 69H ;無鍵,定時(shí)標(biāo)志+1 MOV A,69H CJNE A,#0FFH,LOOP_18 ;定時(shí)到,狀態(tài)轉(zhuǎn)為01H,子程序返回 MOV 45H,#01H LJMP S_18_RETURN S_18: MOV 69H,#00H ;有按鍵,清零定時(shí)標(biāo)志 JBC 02H,S_18_0 ;長按,去判斷A鍵B鍵 JBC 01H,S_18_1 ;短按,去判斷A鍵B鍵 INC 49H ;A鍵,日+1 SETB 07H ;置位,日改變標(biāo)志 LJMP LOOP_18 S_18_0: JBC 01H,S_18_2 ;長按,B鍵,狀態(tài)變?yōu)榱?1H,并子程序返回 MOV 45H,#01H ;A鍵,狀態(tài)轉(zhuǎn)為08H LJMP S_18_RETURN S_18_1: ;短按B鍵,日-1,并置位日改變標(biāo)志 DEC 49H SETB 07H LJMP LOOP_18 S_18_2: MOV 45H,#01H S_18_RETURN: MOV 68H,#00H RET /*狀態(tài)07修理子程序*/ S_CLOCK0: JB 01H,S_07 ;判斷A鍵,B鍵 MOV 45H,#01H ;A鍵,狀態(tài)轉(zhuǎn)為02H LJMP S_07_RETURN S_07: ;B鍵,狀態(tài)轉(zhuǎn)為03H MOV 45H,#07H S_07_RETURN: SETB 0BH RET /*狀態(tài)0E修理子程序*/ S_CLOCK1: LOOP_0E: MOV R0,#62H ;設(shè)置顯示內(nèi)容 MOV R1,#05H MOV R5,#02H LCALL COUNT_OUTPUT ;計(jì)算顯示數(shù)據(jù) LCALL SHOW ;顯示 LCALL KEY_READ ;讀鍵盤 JBC 00H,S_0E ;有鍵,則去判斷長按短按 INC 69H ;無鍵,定時(shí)標(biāo)志+1 MOV A,69H CJNE A,#0FFH,LOOP_0E ;定時(shí)到,狀態(tài)轉(zhuǎn)為01H,子程序返回 MOV 45H,#01H LJMP S_18_RETURN S_0E: MOV 69H,#00H ;有按鍵,清零定時(shí)標(biāo)志 JBC 02H,S_0E_0 ;長按,去判斷A鍵B鍵 JBC 01H,S_0E_1 ;短按,去判斷A鍵B鍵 INC 59H ;A鍵,分+1 SETB 05H ;置位,時(shí)改變標(biāo)志 LJMP LOOP_0E S_0E_0: JBC 01H,S_0E_2 ;長按,B鍵,狀態(tài)變?yōu)榱?1H,并子程序返回 MOV 45H,#01H ;A鍵,狀態(tài)轉(zhuǎn)為08H LJMP S_0E_RETURN S_0E_1: ;短按B鍵,分-1,并置位時(shí)改變標(biāo)志 DEC 59H SETB 05H LJMP LOOP_0E S_0E_2: MOV 45H,#01H S_0E_RETURN: MOV 68H,#00H RET /*狀態(tài)1C修理子程序*/ S_CLOCK2: LOOP_1C: MOV R0,#62H ;設(shè)置顯示內(nèi)容 MOV R1,#05H MOV R5,#02H LCALL COUNT_OUTPUT ;計(jì)算顯示數(shù)據(jù) LCALL SHOW ;顯示 LCALL KEY_READ ;讀鍵盤 JBC 00H,S_1C ;有鍵,則去判斷長按短按 INC 69H ;無鍵,定時(shí)標(biāo)志+1 MOV A,69H CJNE A,#0FFH,LOOP_1C ;定時(shí)到,狀態(tài)轉(zhuǎn)為01H,子程序返回 MOV 45H,#01H LJMP S_1C_RETURN S_1C: MOV 69H,#00H ;有按鍵,清零定時(shí)標(biāo)志 JBC 02H,S_1C_0 ;長按,去判斷A鍵B鍵 JBC 01H,S_1C_1 ;短按,去判斷A鍵B鍵 INC 59H ;A鍵,分+1 SETB 05H ;置位,時(shí)改變標(biāo)志 LJMP LOOP_1C S_1C_0: JBC 01H,S_1C_2 ;長按,B鍵,狀態(tài)變?yōu)榱?1H,并子程序返回 MOV 45H,#01H ;A鍵,狀態(tài)轉(zhuǎn)為08H LJMP S_1C_RETURN S_1C_1: ;短按B鍵,分-1,并置位時(shí)改變標(biāo)志 DEC 59H SETB 05H LJMP LOOP_1C S_1C_2: MOV 45H,#01H S_1C_RETURN: MOV 68H,#00H RET /*時(shí)間按秒增長子程序*/ CHANG_TIME: JBC 03H,C_TIME ;秒定時(shí)標(biāo)志是否為1,為1則去改變時(shí)間,否則子程序返回 LJMP C_RETURN C_TIME: MOV A,68H ;讀出秒,加1,判斷是否大于等于60,是則送#00H到68H,否則將秒寫回68H INC A SETB 04H CJNE A,#3CH,S ;僅當(dāng)秒大于等于60時(shí),才去改變分 MOV 68H,#00H LJMP M0 S: MOV 68H,A LJMP C_RETURN M0: MOV A,59H ;讀出分,加1,判斷是否大于等于60,是則送#00H到59H,否則將秒寫回59H INC A SETB 05H CJNE A,#3CH,M1 ;僅當(dāng)分大于等于60時(shí),才去改變時(shí) MOV 59H,#00H LJMP H0 M1: MOV 59H,A LJMP C_RETURN H0: MOV A,58H ;讀出時(shí),加1,判斷是否大于等于24,是則送#00H到58H,否則將秒寫回58H INC A SETB 06H CJNE A,#18H,H1 ;僅當(dāng)時(shí)大于等于24時(shí),才去改變?nèi)? MOV 58H,#00H LJMP DAY0 H1: MOV 58H,A LJMP C_RETURN DAY0: MOV A,49H ;讀出日,加1,判斷是否大于等于31,是則送#01H到49H,否則將秒寫回49H INC A SETB 07H CJNE A,#1EH,DAY1 ;僅當(dāng)日大于等于30時(shí),才去改變月 MOV 49H,#01H LJMP MON0 DAY1: MOV 49H,A LJMP C_RETURN MON0: MOV A,48H ;讀出月,加1,判斷是否大于等于13,是則送#01H到48H,否則將秒寫回48H INC A SETB 08H CJNE A,#0CH,MON1 ;僅當(dāng)月大于等于13時(shí),才去改變年 MOV 48H,#01H LJMP YEARL0 MON1: MOV 48H,A LJMP C_RETURN YEARL0: MOV A,47H ;讀出年(L),加1,判斷是否大于等于100,是則送#00H到48H,否則將秒寫回47H INC A SETB 09H CJNE A,#64H,YEARL1 ;僅當(dāng)年(L)大于等于100時(shí),才去改變年(H) MOV 47H,#00H LJMP YAERH0 YEARL1: MOV 47H,A LJMP C_RETURN YAERH0: MOV A,46H ;讀出年(H),加1,判斷是否大于等于100,是則送#00H到48H,否則將秒寫回46H INC A SETB 0AH CJNE A,#64H,YEARH1 MOV 46H,#00H LJMP C_RETURN YEARH1: MOV 46H,A C_RETURN: RET /*數(shù)碼管顯示子程序,R0存顯示內(nèi)容首址,R1存位選首址 ,*/ SHOW: MOV DPTR,#LED_DATA S2: MOV A,R1 RL A RL A MOV P2,A MOV A,@R0 MOVC A,@A+DPTR CPL A MOV P0,A INC R0 DEC R1 MOV R4,#01H LCALL DELAY DJNZ R5,S2 MOV R4,#01H LCALL DELAY RET /*鍵盤掃描子程序*/ KEY_READ: JB P1.0,NEXT MOV R4,#64H LCALL DELAY JB P1.0,NEXT SETB TR0 SETB 00H CLR 01H JNB P1.0,$ CLR TR0 JNB TF0,KEY_RETUN SETB 02H LJMP KEY_RETUN NEXT: JB P1.2,KEY_RETUN MOV R4,#64H LCALL DELAY JB P1.2,KEY_RETUN SETB TR0 SETB 00H SETB 01H JNB P1.2,$ CLR TR0 JNB TF0,KEY_RETUN SETB 02H LJMP KEY_RETUN KEY_RETUN: MOV TH0,#15H ;重賦T0定時(shí)初值 MOV TL0,#0A0H CLR TF0 RET /*定時(shí)器T1中斷服務(wù)子程序*/ INT_T1: PUSH ACC DJNZ R6,INT_1 MOV R6,#50H DJNZ R7,INT_1 MOV R7,#32H SETB 03H INT_1: POP ACC RETI /*延時(shí)子程序,R2,R3為定時(shí)常數(shù),R4為定時(shí)變量*/ DELAY: D: MOV R2,#0AH D0: MOV R3,#0AH D1: DJNZ R3,D1 DJNZ R2,D0 DJNZ R4,D RET /*數(shù)碼管顯示代碼,0~F*/ LED_DATA: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH DB 01H,09H,11H,0C1H,63H,85H,61H,71H END