📄 time.asm
字号:
; 李坤三作品:时钟数码显示。AT89S52单片机控制,P1口的0-5口用于扫描,P0口用于段码显示;
; 定时器0工作于方式1;s1键控制调整分钟,S2键控制调整小时,S3键用于启动流水灯演示
;P3口的(0-3);S17用于控制P3.7口的输出,控制继电器Q2;S18用于控制P3.6口的输出
;控制继电器Q3;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h
jmp start
org 0bh
jmp tim0
;;;;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;
start:mov sp,#40h
mov r3,#6
clear:
mov r0,20h ;显示器寄存器赋初值
mov @r0,#00h
inc r0
djnz r3,clear
clr 30h;按键标志位
mov 2ah,#12h ;时
mov 2bh,#00 ;分
mov 2ch,#00 ;秒
mov tmod,#00000001b ;time0,model1
mov tl0,#0b0h
mov th0,#3ch
mov r4,#14h;1s
setb ea
setb et0
setb tr0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 键盘扫描程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
key:lcall dis0
lcall display
mov a,#11110111b ;P2.3=0,扫描S1键;
mov p2,a
mov a,p2
jnb acc.4,setm ;若P2.4=0,说明S1被按下,转setm
mov a,#11111011b ;若未被按下,扫描下一行,S2键;
mov p2,a
mov a,p2
jnb acc.4,setn
sjmp key ;跳至KEY扫描;
setm :lcall de5ms
mov a,p2
jnb acc.4,setmm ;确有按键按下,转setmm
ajmp key
setn :lcall de5ms
mov a,p2
jnb acc.4,setnn ;确有按键按下,转setnn
setmm:
ljmp setmm0
setnn:ljmp setnn0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 中断服务程序 1S ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
tim0: push acc
push psw
clr et0
clr tr0
mov tl0,#0b0h
mov th0,#3ch
djnz r4,out0
mov r4,#14h;重赋值
call clock;调计时程序
call dis0
out0:call display
setb et0
setb tr0
pop psw
pop acc
reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 加1子程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
clock: mov a,2ch ;秒
add a,#1
da a
mov 2ch,a
cjne a,#60h,out1;不是60秒退出
mov 2ch,#00
mov a,2bh ;分
add a,#1
da a
mov 2bh,a
cjne a,#60h,out1
mov 2bh,#00
mov a,2ah ;时
add a,#1
da a
mov 2ah,a
cjne a,#24h,out1
mov 2ah,#00
out1:ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 调时程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
setmm0:clr et0
clr tr0
waitm:mov a,p2
jnb acc.4,waitm1
setmin:mov a,2bh
add a,#1
da a
mov 2bh,a
mov 2ch,#00h
cjne a,#60h,setout
mov 2bh,#00h
ajmp setout
setnn0:clr et0
clr tr0
waitn:mov a,p2
jnb acc.4,waitn1
sethou:mov a,2ah
add a,#1
da a
mov 2ah,a
cjne a,#24h,setout ;不是24H,重新扫描
mov 2ah,#00h
sjmp setout
waitm1: call dis0
call display
sjmp waitm
waitn1: call dis0
call display
sjmp waitn
setout:call dis0
call display
setb et0
setb tr0
ljmp key
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 调整子程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dis0:push acc
push psw
mov r1,#20h
mov a,2ch
mov b,#10h
div ab
mov @r1,b ;把B的内容存入20H,秒个位
inc r1
mov @r1,a ;把A的内容放入21H,秒十位
inc r1
mov a,2bh
mov b,#10h
div ab
mov @r1,b ;入22H,分个位
inc r1
mov @r1,a ;入23H,分十位
inc r1
mov a,2ah
mov b,#10h
div ab
mov @r1,b ;入24H,时个位
inc r1
mov @r1,a ;入25H,时十位
pop psw
pop acc
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 显示子程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
display: push acc
push psw
mov r1,#25h
mov r2,#11111110b;秒扫描字初值
display0:mov a,r2
mov p1,a
mov a,@r1
mov dptr,#tab
movc a,@a+dptr
mov p0,a
call delay0
dec r1
mov a,r2
jnb acc.5,endout
rl a
mov r2,a
ajmp display0
endout:mov p1,#0ffh
mov p0,#00h
pop psw
pop acc
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 显示数字表 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
tab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,00h
;共阴表,0123456789不亮;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 延时子程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
delay0:mov r5,#10 ;1ms
dl1:mov r4,#15
dl2:djnz r4,dl2
djnz r5,dl1
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -