📄 wildman.asm
字号:
LEDBUF EQU 60H ;显示缓冲区
HOUR EQU 40H
MINUTE EQU 41H
SECOND EQU 42H
C100US EQU 43H
TICK EQU 10000 ;中断次数计数器
T100US EQU 256-50 ;100US定时初值
ORG 0000H ;复位入口
LJMP START
ORG 000BH ;定时器T0中断入口
LJMP T0INT
ORG 0030H
LEDMAP:
DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
DB 40H,0F9H,24H,30H,19H ;数码管显示代码
DB 12H,02H,78H,00H,10H
DELAY: MOV R7,#0 ;延时子程序
DELAYLOOP:
DJNZ R7,DELAYLOOP
DJNZ R6,DELAYLOOP
RET
DISPLAYLED: ;显示子程序
MOV 50H,#0FBH
MOV 51H,#0F7H
MOV 52H,#0EFH
MOV 53H,#0DFH
MOV 54H,#0BFH
MOV 55H,#7FH
MOV R0,#LEDBUF
MOV R2,#6 ;共6个数码管
MOV R1,#50H ;从左边开始显示
LOOP: MOV A,@R0
MOV P0,A
MOV A,@R1
MOV P2,A ;显示一位八段管
MOV R6,#1
CALL DELAY
INC R1
INC R0
DJNZ R2,LOOP
RET
TOLED: MOV DPTR,#LEDMAP ;查表取显示代码子程序
MOVC A,@A+DPTR
RET
START: MOV TMOD,#02H ;主程序
MOV TH0,#T100US ;设置T0工作方式及初值
MOV TL0,#T100US
MOV IE,#10000010B ;开中断
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
MOV C100US,#HIGH(TICK)
MOV C100US+1,#LOW(TICK)
SETB TR0 ;启动T0
MLOOP: MOV A,HOUR
MOV B,#10
DIV AB
CALL TOLED
MOV LEDBUF,A
MOV A,B
CALL TOLED
ORL A,#80H
MOV LEDBUF+1,A
MOV A,MINUTE
MOV B,#10
DIV AB
CALL TOLED
MOV LEDBUF+2,A
MOV A,B
CALL TOLED
ORL A,#80H
MOV LEDBUF+3,A
MOV A,SECOND
MOV B,#10H
DIV AB
CALL TOLED
MOV LEDBUF+4,A
MOV A,B
CALL TOLED
MOV LEDBUF+5,A
CALL DISPLAYLED
LJMP MLOOP
T0INT: PUSH PSW ;定时器T0中断服务程序
PUSH ACC
MOV A,C100US+1
JNZ GOON
DEC C100US
GOON: DEC C100US+1
MOV A,C100US
ORL A,C100US+1
JNZ EXIT
MOV C100US,#HIGH(TICK)
MOV C100US+1,#LOW(TICK)
INC SECOND
MOV A,SECOND
CJNE A,#60,EXIT
MOV SECOND,#0
INC MINUTE
MOV A,MINUTE
CJNE A,#60,EXIT
MOV MINUTE,#0
INC HOUR
MOV A,HOUR
CJNE A,#24,EXIT
MOV HOUR,#0
EXIT: POP ACC
POP PSW
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -