1、 ORG 0000H LJMP MAIN ORG 001BH LJMP TIMER1 ORG 0070H ;1.初始化 MAIN: MOV DPTR,#NUM MOV 30H,#20 ;中断计数20次 MOV TH1,#4CH MOV TL1,#0B0H ;定时50ms MOV TH0,#00H ;清T0数据 MOV TL0,#00H ;清T0数据 MOV 3EH,#00H ;存TH0
2、 MOV 3FH,#00H ;存TL0 MOV IE,#88H MOV TMOD,#15H SETB TR1 SETB TR0 LOOP0: ACALL CH_BCD ;调用字符变换函数 ACALL LED ;调用显示函数 SJMP LOOP0 ;2.完成16进制数变换为非压缩BCD码 CH_BCD: MOV R6,3EH ;转存至R6,转换BCD码 MOV R7,3FH ;
3、转存至R7,转换BCD码 CLR A MOV R2,A MOV R3,A MOV R4,A MOV R5,#16 ;共16位 LOOP1: CLR C MOV A,R7 RLC A ;高端移一位到CY MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R4 ;送到BCD码的低端 ADDC A,R4 ;自身
4、相加 相当于左移一位 DA A ;十进制调整 变成BCD码 MOV R4,A MOV A,R3 ADDC A,R3 DA A MOV R3,A MOV A,R2 ADDC A,R2 DA A MOV R2,A DJNZ R5,LOOP1 ;以上完成BCD码的转换 ;将R6R7转换为压缩BCD码,存放在R2R3R4
5、 MOV R0,#40H ;设置指针,40H到44H存放BCD码 MOV A,R2 MOV @R0,A INC R0 MOV A,R3 SWAP A ;高低四位互换 ANL A,#0FH MOV @R0,A INC R0 MOV A,R3 ANL A,#0FH MOV @R0,A INC R0 MOV A,R4 SWAP A
6、 ANL A,#0FH MOV @R0,A INC R0 MOV A,R4 ANL A,#0FH MOV @R0,A ;以上完成BCD码的拆分 RET ;3.完成数码管的显示 LED:MOV A,40H CJNE A,#0,XS2 XS1:MOV DPTR,#NUM MOV P2,#0F7H MOV A,41H MOVC A,@A+DPTR MOV P0,A
7、 ACALL DEL MOV P2,#0FBH MOV A,42H MOVC A,@A+DPTR MOV P0,A ACALL DEL MOV P2,#0FDH MOV A,43H MOVC A,@A+DPTR MOV P0,A ACALL DEL MOV P2,#0FEH MOV A,44H MOVC A,@A+DPTR MOV P0,A ACALL DEL
8、 RET XS2: MOV P2,#0F7H MOV A,40H MOVC A,@A+DPTR MOV P0,A ACALL DEL MOV P2,#0FBH MOV A,41H MOVC A,@A+DPTR MOV P0,A ORL P0,#080H ACALL DEL MOV P2,#0FDH MOV A,42H MOVC A,@A+DPTR MOV P0,A
9、 ACALL DEL MOV P2,#0FEH MOV A,43H MOVC A,@A+DPTR MOV P0,A ACALL DEL RET DEL:MOV R7,#08H ;延时 DEL0:MOV R6,#3CH DJNZ R6,$ DJNZ R7,DEL0 RET ;4.中断函数 TIMER1: MOV TH1,#4CH MOV TL1,#0B0H ;定时50ms DJNZ 30H,NEXT0 ;判断是否到1秒,不到1秒则减一跳出中断 MOV 30H,#20 MOV 3EH,TH0 ;存高位 MOV 3FH,TL0 ;存低位 MOV TH0,#00H ;清T0数据 MOV TL0,#00H ;清T0数据 NEXT0: RETI NUM: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END






