📄 电子时钟。1.asm
字号:
;选择定时器T0,方式一,定时一秒,50MS中断一次
;P3口送位码,P1口送段码
SEC1 EQU 30H ; 秒存储器(个位)
SEC10 EQU 31H ; 秒存储器(十位)
MIN1 EQU 32H ; 分存储器(个位)
MIN10 EQU 33H ; 分存储器(十位)
HOU1 EQU 34H ; 时存储器(个位)
HOU10 EQU 35H ; 时存储器(十位)
SEC EQU 41H ; 秒计数器
MIN EQU 42H ; 分计数器
HOU EQU 43H ; 时计数器
ORG 0000H
LJMP START
ORG 000BH
LJMP INT_T0
ORG 0100H
START:
MOV SP,#60H ; 调整指针
MOV P3,#0FFH ; 关闭显示
MOV R2,#20
MOV SEC,#00H ; 时间初始化为零
MOV MIN,#00H
MOV HOU,#00H
MOV TMOD,#01H ; 选择方式1
MOV TH0,#3CH ; 设置定时常数
MOV TL0,#0B0H
SETB EA
SETB ET0 ; 开中断
SETB TR0
MAIN: ; 读数据程序
MOV A,SEC ; 读取秒数据,并把计数器的内容分为个位和十位
MOV B,#0AH
DIV AB
MOV SEC1,A
MOV SEC10,B
MOV A,MIN ; 读取分数据
MOV B,#0AH
DIV AB
MOV MIN1,A
MOV MIN10,B
MOV A,HOU ; 读取小时数据
MOV B,#0AH
DIV AB
MOV HOU1,A
MOV HOU10,B
ACALL DISPLAY ; 调用显示子程序
LJMP MAIN
DISPLAY: ; 显示子程序
MOV R0,#SEC1 ; 指向数据首址
MOV R3,#00000001B ; 位码
DISP1:
MOV A,R3
MOV P3,A ; 送位码
MOV A,@R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A ; 送段码
ACALL DELAY ; 调用延时程序,实现2MS延时
MOV A,R3
JB ACC.5,EXIT2
RL A
MOV R3,A
INC R0
AJMP DISP1
EXIT2:
RET
INT_T0: ;中断程序
PUSH ACC
PUSH PSW
MOV TH0,#3CH ; 重装定时常数
MOV TL0,#0B0H
DJNZ R2,EXIT1 ; 判断1秒循环次数
MOV R2,#20
INC SEC ; 秒值加1
MOV A,SEC
CJNE A,#60,EXIT1 ; 判断60秒
MOV SEC,#00H ; 秒值清0
INC MIN ; 分值加1
MOV A,MIN
CJNE A,#60,EXIT1 ; 判断60分
MOV MIN,#00H ; 分值清0
INC HOU ; 小时值加1
MOV A,HOU
CJNE A,#24,EXIT1 ; 判断24小时
MOV HOU,#00H
EXIT1:
POP PSW
POP ACC
RETI
DELAY: ;2毫秒的廷时子程序
MOV R7,#10
DELAY1:
MOV R6,#100
DJNZ R6,$
DJNZ R7,DELAY1
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;位码0-9 共阳极
;TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H, 7FH,6FH ;位码0-9 共阴极
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -