📄 shizhong.asm
字号:
org 0000h
ajmp main
org 000bh
ajmp ptf0
main:mov 7ch,#00h ;时十位清零
mov 7bh,#00h ;时个位清零
mov 7ah,#00h ;分十位清零
mov 79h,#00h ;分个位清零
mov 78h,#00h ;秒清零
mov th0,#3ch ;t0初始化
mov tl0,#0b0h ;定时50ms
mov tmod,#01h
mov ip,#02h
mov ie,#82h ;中断初始化
setb tr0
mov 30h,#01h ;t0溢出中断次数计数单元初始化20(1s)
; mov 31h,#02h ;秒闪烁判断
ld: acall disp
jb p2.3,ld1 ;时十位校正
mov a,7ch
cjne a,#02h,w
mov 7ch,#0ffh
w: inc 7ch ;时十位加1
mov 78h,#00h ;秒清零
ld1: jb p2.2,ld2 ;时个位校正
mov a,7bh
cjne a,#09h,w1
mov 7bh,#0ffh
w1: inc 7bh ;时个位加1
mov 78h,#00h ;秒清零
ld2: jb p2.1,ld3 ;分十位校正
mov a,7ah
cjne a,#05h,w2
mov 7ah,#0ffh
w2: inc 7ah ;分十位加1
mov 78h,#00h ;秒清零
ld3: jb p2.0,ld4 ;分个位校正
mov a,79h
cjne a,#09h,w3
mov 79h,#00h
w3: inc 79h ;分个位加1
mov 78h,#00h ;秒清零
ld4: sjmp ld
ptf0:mov th0,#3ch ;中断服务子程序
mov tl0,#0b0h
djnz 30h,ptf0r ;1秒到否?
inc 78h ;秒加1
mov 30h,#01h ;恢复中断次数计数单元20
; djnz 31h,la
; mov 31h,#02h ;秒闪烁
; clr p0.4
; sjmp la1
;la: setb p0.4
;la1: clr p2.6
mov a,78h
cjne a,#3ch,ptf0r ;1分到否?
mov 78h,#00h
inc 79h
mov a,79h
cjne a,#0ah,ptf0r ;分个位到十否?
mov 79h,#00h
inc 7ah
mov a,7ah
cjne a,#06h,ptf0r ;分十位到六否?
mov 7ah,#00h
inc 7bh
mov a,7bh
cjne a,#0ah,ptf0r ;时个位到十否?
mov 7bh,#00h
inc 7ch
; acall baoshi ;调用报时程序
mov a,7ch
cjne a,#01h,ptf0r ;12小时到否?
mov a,7bh
cjne a,#04h,ptf0r
mov 7ch,#00h
mov 7bh,#00h
ptf0r: reti
disp: mov r0,#79h ;设79H-7C为显示缓冲器
mov r3,#1
mov a,#0efh
gg: mov r4,a ;数码管动态显示
mov p0,#00h
mov p2,a
mov a,@r0
mov dptr,#tab
movc a,@a+dptr
ee: mov p0,a
acall delay
inc r0
MOV A,R3
JB ACC.3,ff
RL A
MOV R3,A
mov a,r4
rl a
SJMP gg
ff: ret
tab: DB 0EDH,28H,0CBH,0ABH,2EH ;0,1,2,3,4
DB 0A7H,0E7H,29H,0EFH,0AFH ;5,6,7,8,9
delay:MOV R7,#02H ;延时子程序
cc: MOV R6,#0FFH
dd: DJNZ R6,dd
DJNZ R7,cc
RET
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -