硬件设计
链接:https://pan.baidu.com/s/1H2T16ocY72IZYBCI–MtJg
提取码:w0bf
代码设计
VALUEH EQU 20H ;暂存TH1的值
VALUEL EQU 21H ;暂存TL1的值
DATE0 EQU 22H ;暂存计数值的BCD码
DATE1 EQU 23H
DATE2 EQU 24H
DATE3 EQU 25H
DATE4 EQU 26H
DATE5 EQU 27H
COUNT EQU 30H
;-----------------------------------------------------------------------------
ORG 0000H
SJMP MAIN
ORG 000BH
LJMP INT_T0
ORG 001BH
LJMP INT_T1
MAIN: MOV DPTR,#TABLE
MOV 20H,#00H ;存储空间初始化
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
MOV 24H,#00H
MOV 25H,#00H
MOV 26H,#00H
MOV 30H,#00H
MOV R1,#00H ;R1作为计数器溢出的次数
MOV TMOD,#15H ;定时器1工作在定时方式
;定时器0工作在计数方式
MOV TH1,#3CH
MOV TL1,#0B8H
MOV TH0,#00H
MOV TL0,#00H
MOV IE,#8AH ;开启定时器0和1
SETB TR0 ;启动定时
SETB TR1 ;启动计数
W1:
LCALL DISP ;显示计数值
LJMP W1
;------------------------------------------------------------------------
INT_T0: ;中断0作为计数器溢出
;溢出R1加1
MOV TH0,#00H
MOV TL0,#00H
INC R1
CLR TF0
RETI
INT_T1: MOV TH1,#3CH
MOV TL1,#0B8H
INC COUNT
MOV A,COUNT
CJNE A,#20,RETUNE ;是否计满1秒
MOV COUNT,#00H
CLR TR0 ;关闭定时器
CLR TR1 ;关闭计数器
MOV VALUEL,TL0 ;存放计数值
MOV VALUEH,TH0
LCALL HTOD
;将十六进制数转换为十进制数
RETUNE:
RETI
;-------------------------------------------------------------------------------------
;这段程序将VALUEH/VALUEL中的16进制数转成10进制并且把5位数依次存入DATE0至DATE4
;-------------------------------------------------------------------------------------
HTOD:
MOV R2,VALUEH ;把计数器的值送到R2,R3
MOV R3,VALUEL ;送到R2,R3后把R2,R3里面压缩的十六位的二进制数转换成十进制数
CLR A ;然后存放到R4,R5,R6中
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#18H
LOOP1:
CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R1
RLC A
MOV R1,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,LOOP1
CZ: MOV R0,#DATE5 ;把R4,R5,R6中的数放到DATE0~DATE5中
MOV A,R6
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R6
SWAP A
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R5
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R5
SWAP A
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R4
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R4
SWAP A
ANL A,#0FH
MOV @R0,A
RET
;-----------------显示子程序----------------------------------------------
DISP:
MOV A,DATE5 ;把DATE5~DATE0送到数码管显示
MOVC A,@A+DPTR
MOV P2,#0FFH
CLR P2.2
MOV P1,A
LCALL DL1MS
SETB P2.2
MOV A,DATE4
MOVC A,@A+DPTR
MOV P2,#0FFH
CLR P2.3
MOV P1,A
LCALL DL1MS
MOV P2,#0FFH
MOV A,DATE3
MOVC A,@A+DPTR
MOV P2,#0FFH
CLR P2.4
MOV P1,A
LCALL DL1MS
MOV P2,#0FFH