📄 定时控制程序设计.asm
字号:
lcd equ p2
key1 bit p3.0
key2 bit p3.1
key3 bit p3.2
key4 bit p3.3
key5 bit p3.4
key6 bit p3.5
key7 bit p3.6
key8 bit p1.0
key9 bit p1.1
;=============================================================
org 0000h
ljmp main ;跳到主程序
org 0030h
;==============================================================
;==============================================================
main:mov lcd,#0ffh
mov lcd,#0c0h
mov a,#0
mov r0,#0
mov r1,#0
mov r7,#24
mov 3ah,#0
mov 3bh,#0
mov 3ch,#0
mov 3dh,#0 ;初始化
acall d0 ;送显示程序显示
;==============================================================
loop:lcall d1
ajmp loop
d1:
cjne r1,#1,d10 ;在第十一秒的时候开发光二极管
clr key7
d10: inc r0
cjne r0,#10,d0 ;不超过九秒就继续走
mov r0,#0
ljmp d2 ;转到秒钟十位程序去执行
;====================以上是秒钟个位子程序=======================
d2: inc r1
cjne r1,#6,d0 ;不超过六就继续走
mov r1,#0
ljmp d5 ;超过六十秒就返回主程序,重新开始计时
;====================以上是秒钟十位子程序======================
d5: inc 3ah
mov r5,3ah
cjne r5,#10,d0
mov 3ah,#0
ljmp d6
;===============以上是分钟个位子程序=============================
d6:inc 3bh
mov r5,3bh
cjne r5,#6,d0
mov 3bh,#0
ljmp d70
;===============以上是分钟十位子程序==============================
d70:djnz r7,d7
ljmp main ;判断是否到24小时,到则返回主程序重新计时
d7:
inc 3ch
mov r6,3ch
cjne r6,#10,d0
mov 3ch,#0
ljmp d8
;===============以上是时钟个位子程序==============================
d8:inc 3dh
ljmp d0
;===============以上是时钟十位子程序==============================
k3:mov dptr,#tab
movc a,@a+dptr
mov lcd,a
ret
;=======================以上是供调用的显示子程序=================
reset:
ajmp main
;===================================================================
d0: mov r2,#20
l1: mov tmod,#10h
mov th1,#3ch
mov tl1,#0b0h ;50ms初值
mov ie,#00
loop0: setb tr1
jbc tf1,loop1
;==================以上是定时服务程序===============================
d4:
jnb key8,reset
mov a,r0
acall k3
setb key6 ;开秒钟个位显示
lcall delay ;延时
clr key6 ;关闭秒钟个位
mov a,r1
acall k3
setb key5 ;开秒钟十位显示
lcall delay ;延时
clr key5 ;关闭秒钟十位
mov a,3ah
acall k3
setb key4 ;开分钟个位显示
lcall delay ;延时
clr key4 ;关闭分钟个位
mov a,3bh
acall k3
setb key3 ;开分钟十位显示
lcall delay ;延时
clr key3 ;关闭分钟十位
mov a,3ch
acall k3
setb key2 ;开时钟个位显示
lcall delay ;延时
clr key2 ;关闭时钟个位
mov a,3dh
acall k3
setb key1 ;开时钟十位显示
lcall delay ;延时
clr key1 ;关闭时钟十位
ajmp loop0 ;定时器循环
loop1: setb key7 ;关闭发光二极管
djnz r2,l1 ;50msx20=1s
ret
;==============================================================
delay:mov r4,#82
DJNZ r4,$
nop
RET ;延时子程序
;==============================================================
tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h;数型码表
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -