📄 shuzizhong.txt
字号:
ORG 0000H
sec EQU 30H ;秒各位
sect EQU 31H ;秒十位
min EQU 32H ;分个位
mint EQU 33H ;分十位
hour EQU 34H ;时各位
hourt EQU 35H ;时十位
LJMP START ;跳转
ORG 0100H
START:
CLR sec ;对各位赋零
CLR sect
CLR min
CLR mint
CLR hour
CLR hourt
stloop: //;开始计时
ACALL DISP //2;调用显示
INC sec //1;秒个位加1
MOV A, sec //1
CJNE A, #10, stloop //2;秒个位不为10,则继续计时
MOV sec, #00H //1;秒个位为10,该位清零,并转到秒十位计时
INC sect //1;秒十位加1
MOV A, sect //1
CJNE A, #6, stloop //2;秒十位不为6,则继续计时
mov sect, #00H //1;秒十位为6,该位清零,并转到分个位计时
INC min //1
MOV A, min //1
CJNE A, #10, stloop //2;分个位不为10,则继续计时
mov min, #00H //1;分个位为10,该位清零,并转到分十位计时
INC mint //1
MOV A, mint //1
CJNE A, #6, stloop //2;分十位不为6,则继续计时
MOV mint, #00H //1;分十位为6,该位清零,并转到时个位计时
/*下面是24进制的判断和时的计时*/
MOV A, hourt //1
CJNE A, #2, h //2;判断时十位是否为2,不为2就继续计时
MOV A, hour //1
/*此处比较特殊,由于是显示0~23,到22的时候就转到h: ,就变成23了,
然后转到stloop,延迟1秒,然后到下面这句,就清零了,即00~23计时*/
CJNE A, #3, h //2;
MOV hour, #00H //1,23显示1秒后,就清零了
MOV hourt, #00H //1
AJMP stloop //2
h:
INC hour //1 若分的十位满6,清零后时个位加1
MOV A, hour //1
CJNE A, #10, stloop //2 若时个位部满10
MOV hour, #00H //1
INC hourt //1
AJMP stloop //2
/*下面是显示程序*/
DISP:
MOV DPTR, #TABLE //2;TABLE的地址给DPTR指针
MOV R2, #6 //1;R2、R3后面DJNZ循环会用到.
D2:
MOV R3, #150 //1
loop:
MOV A, sec //1
MOVC A, @A+DPTR //2
MOV P1, A //1将秒个位数输出到p1口
SETB P0.7 //1开秒个位的显示
ACALL DELAY //2延时
CLR P0.7 //1关个位的显示
MOV A, sect //1秒十位
MOVC A, @A+DPTR //2
MOV P1, A //1
SETB P0.6 //1
ACALL DELAY //2
CLR P0.6 //1
MOV P1, #0FDH //1显示分隔符号
SETB P0.5 //1
ACALL DELAY //2
CLR P0.5 //1
MOV A, min //1分个位
MOVC A, @A+DPTR //2
MOV P1, A //1
SETB P0.4 //1
ACALL DELAY //2
CLR P0.4 //1
MOV A, mint //1分十位
MOVC A, @A+DPTR //2
MOV P1, A //1
SETB P0.3 //1
ACALL DELAY //2
CLR P0.3 //1
MOV P1, #0FDH //1分隔符
SETB P0.2 //1
ACALL DELAY //2
CLR P0.2 //1
MOV A, hour //1小时个位
MOVC A, @A+DPTR //2
MOV P1, A //1
SETB P0.1 //1
ACALL DELAY //2
CLR P0.1 //1
MOV A, hourt //1小时十位
MOVC A, @A+DPTR //2
MOV P1, A //1
SETB P0.0 //1
ACALL DELAY //2
CLR P0.0 //1
/*这里,和DELAY一起构成延时1s,另外还要将非延时指令
的指令周期算在内,以确保软件上的最小误差*/
DJNZ R3, loop //2不能DELAY太长时间,所以要各位循环显示,看上去才不闪烁
DJNZ R2, D2 //2
RET
/*131个机器周期的DELAY*/
DELAY:
MOV R0, #10 //1
D1:
MOV R1, #5 //1
DJNZ R1, $ //2
DJNZ R0, D1 //2
RET
/*下面是共阳八位数码管的0至9的段的数字表示*/
TABLE: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,1H,09H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -