📄 cymometer.asm
字号:
VALUEH EQU 20H ;暂存TH1的值
VALUEL EQU 21H ;暂存TL1的值
DVALUE0 EQU 22H ;暂存计数值的BCD码
DVALUE1 EQU 23H
DVALUE2 EQU 24H
DVALUE3 EQU 25H
DVALUE4 EQU 26H
CNT EQU 30H
KEY EQU P3.7
ORG 00H
SJMP START
ORG 0BH
LJMP INT_T0
START: 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 TMOD,#51H ;定时器0工作在定时方式
;定时器1工作在计数方式
MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
MOV TH1,#00H
MOV TL1,#00H
MOV IE,#8AH
WAIT: JB KEY,$
LCALL DELAY
JB KEY,$ ;按键为低电平时,开始计数
SETB TR0
SETB TR1
W1: LCALL DISP ;显示计数值
JNB KEY,W1
LJMP START
INT_T0: MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
INC CNT
MOV A,CNT
CJNE A,#20,RETUNE ;是否计满1秒
MOV CNT,#00H
CLR TR0
CLR TR1
MOV VALUEL,TL1 ;存放计数值
MOV VALUEH,TH1
LCALL HTOD ;将十六进制数转换为十进制数
RETUNE: RETI
;************************
;这段程序将VALUEH/VALUEL中的16进制数转成10进制并且把5位数依次存入
;DVALUE0至DVALUE4
HTOD: MOV R2,VALUEH
MOV R3,VALUEL
CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#10H
LOOP1: CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,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,#DVALUE4
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
RET
;***************************
DISP: MOV P2,0FFH ;显示子程序
CLR P2.0
MOV A,DVALUE4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.0
CLR P2.1
MOV A,DVALUE3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.1
CLR P2.2
MOV A,DVALUE2
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.2
CLR P2.3
MOV A,DVALUE1
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.3
CLR P2.4
MOV A,DVALUE0
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.4
RET
DELAY: MOV R6,#10 ;延时5毫秒
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -