ORG 0000H SJMP MAIN ORG 000BH LJMP DVT0 ;定時(shí)器T0中斷 ORG 0030H MAIN: MOV SP ,#50H ;設(shè)置堆棧區(qū) MOV 31H,#0 MOV 30H,#0 ;計(jì)數(shù)單元清零 MOV 7AH,#10 MOV 7BH,#10 MOV 7CH,#10 MOV 7DH,#10 ;復(fù)位狀態(tài)字型碼送緩沖區(qū) MOV 01H,#14H MOV TMOD,#51H ;設(shè)置T0、T1工作方式字 MOV TH0,#3CH MOV TL0,#0B0H MOV TH1,#0 MOV TL1,#0 ;T0、T1置初值 LOOP1: LCALL DISPLAY ;重復(fù)顯示、查鍵 LCALL KEY CLR C CJNE A,#0FH,LOOP2 LOOP2: JNC LOOP1 CJNE A,#00H,LOOP3 ;啟動(dòng)鍵沒被按下 SETB ET0 SETB TR0 SETB EA SETB TR1 LJMP LOOP1 LOOP3: CJNE A,#01H,LOOP4 ;停止鍵沒被按下 CLR TR1 CLR TR0 CLR ET0 CLR EA LJMP LOOP1 LOOP4: CJNE A,#02H,LOOP1 ;復(fù)位鍵沒被按下 . LJMP MAIN DVT0: PUSH PSW ;T0中斷程序 PUSH ACC ;相關(guān)內(nèi)容入棧保護(hù) MOV TH0,#3CH MOV TL0,#0B0H ;T0重裝初值 DJNZ 01H,RTN ;1s定時(shí)未到 MOV 01H,#14H CLR ET0 CLR TR1 CLR EA CLR TR0 MOV 31H,TH1 MOV 30H,TL1 MOV TH1,#0 MOV TL1,#0 ;計(jì)數(shù)器T1清零,準(zhǔn)備下一輪計(jì)數(shù) LCALL HEX_BCD LCALL DISPLAY SETB ET0 SETB TR1 SETB EA SETB TR0 RTN: POP ACC POP PSW RETI
HEX_BCD: ;數(shù)碼轉(zhuǎn)化子程序 PUSH PSW SETB RS0 SETB RS1 MOV A,30H MOV B,#60 MUL AB MOV 31H,B MOV 30H,A LCALL EXCH ;二進(jìn)制到BCD碼的轉(zhuǎn)化 MOV A,33H ;以下是將轉(zhuǎn)化后的BCD碼存入相應(yīng)緩沖區(qū) ANL A,#0FH MOV 7BH,A MOV A,33H SWAP A ANL A,#0FH MOV 7AH,A MOV A,32H ANL A,#0FH MOV 7DH,A MOV A,32H SWAP A ANL A,#0FH MOV 7CH,A CLR RS0 CLR RS1 POP PSW RET EXCH: MOV 40H,#0 MOV 41H,#0 MOV R7,#10H LP1: MOV R0,#30H MOV R6,#2 CLR C LP2: MOV A,@R0 RLC A MOV @R0,A INC R0 DJNZ R6,LP2 MOV R1,#41H MOV R5,#02H LP3: MOV A,@R1 ADDC A,@R1 DA A MOV @R1,A DEC R1 DJNZ R5,LP3 DJNZ R7,LP1 MOV 33H,40H MOV 32H,41H RET KEY: PUSH PSW ; 按鍵掃描子程序 JB P3.0,X1 LCALL DISPLAY ;延時(shí)去抖 JB P3.0,X1 MOV A,#0 SJMP X4 X1: JB P3.1,X2 LCALL DISPLAY JB P3.1,X2 MOV A,#1 SJMP X4 X2: JB P3.2,X3 LCALL DISPLAY JB P3.2,X3 MOV A,#2 SJMP X4 X3: MOV A,#0FH X4: POP PSW RET DISPLAY: PUSH ACC ;顯示子程序 PUSH PSW ;A,PSW入棧 SETB RS1 SETB RS0 MOV DPTR,#TAB MOV R0,#7AH MOV R6,#0FEH ;掃描顯示初始化 NEXT: MOV A,@R0 ;四位輪流掃描顯示 MOVC A,@A+DPTR MOV P0,A MOV A,R6 MOV P2,A LCALL DELAY MOV P2,#0FFH ;顯示中的消隱處理 INC R0 RL A MOV R6,A CJNE R6,#0EFH,NEXT POP PSW POP ACC RET DELAY: MOV R4,#4 ;軟件延時(shí)1ms DLY: MOV R7,#123 DJNZ R7,$ DJNZ R4,DLY RET TAB: DB 0C0H ;0 ;字形編碼表 DB 0F9H ;1 DB 0A4H ;2 DB 0B0H ;3 DB 99H ;4 DB 92H ;5 DB 82H ;6 DB 0F8H ;7 DB 80H ;8 DB 90H ;9 DB 0BFH ;- END
這是不是你自己寫的程序?
把里面的全角標(biāo)點(diǎn)逗號(hào)(,)、分號(hào)(;)都換過來,變成半角符號(hào)。可以使用“查找、替換”方法,免得有遺漏。
CLR RS0 CLR RS1 POP PSW PSW入棧保護(hù),RS0、RS1沒有必要再恢復(fù)。PSW出棧就已經(jīng)恢復(fù)了。
|