资源描述
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
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 ;转存至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 ;自身相加 相当于左移一位
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
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
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
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
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
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
展开阅读全文