📄 556.asm
字号:
a_bit equ 20h
b_bit equ 21h
c_bit equ 22h
d_bit equ 23h
temp1 equ 24h
temp2 equ 25h
org 0000h
ljmp main
org 001bh
ajmp intt1
;org 0013h
;ajmp intr1
org 0100h
main: mov temp1,#0
mov temp2,#0
mov tmod,#10h ;用定时器1,其中断优先级比外部中断1低
mov th1,#3ch ;工作模式1,定时50ms
mov tl1,#0b0h
setb tr1
setb et1
;clr it1 ;外部中断1触发方式,电平触发
;setb ex1
setb ea
mov r3,#6 ;r3,r4定时器两重循环,定时60s
mov r4,#153
stlop: jnb p2.3,intr11
lcall display
mov a,temp1
cjne a,#60,next
mov temp1,#0
inc temp2
clr p3.7 ;整点报时
acall delay
setb p3.7
mov a,temp2
cjne a,#24,next
mov temp1,#0
mov temp2,#0
next: ljmp stlop
intr11: clr p1.6
lcall delay
setb p1.6
ljmp intr1
;显示子程序
display: cpl p1.0
mov a,temp1 ;将temp1中的十六进制数转换成10进制
mov b,#10 ;10进制/10=10进制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;个位在b
mov a,temp2
mov b,#10
div ab
mov d_bit,a
mov c_bit,b
mov dptr,#numtab ;指定查表启始地址
mov r0,#4
dpl1: mov r1,#250 ;显示1000次
dplop: mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,a ;送出个位的7段代码
clr p2.4 ;开个位显示
acall d1ms ;显示1ms
setb p2.4
mov a,b_bit ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p0,a ;送出十位的7段代码
clr p2.5 ;开十位显示
acall d1ms ;显示1ms
setb p2.5
mov a,c_bit
movc A,@A+DPTR
mov p0,a
clr p2.6
mov c,p1.0 ;把p1.0的状态送到p0.7,使小数点闪烁
mov p0.7,c
acall d1ms
setb p2.6
mov a,d_bit
movc A,@A+DPTR
mov p0,a
clr p2.7
acall d1ms
setb p2.7
djnz r1,dplop
djnz r0,dpl1
ret
;1MS延时(按12MHZ算)
;====================================================
D1MS: MOV R7,#80
DJNZ R7,$
RET
DELAY:
MOV R5,#1
L3: MOV R2 ,#250
L1: MOV R6 ,#250
L2: DJNZ R6 ,L2
DJNZ R2 ,L1
DJNZ R5 ,L3
RET
intt1:mov tl0,#0b0h ;定时器1中断服务程序
mov th0,#3ch ;重新赋定时器初值
djnz r4,a2
djnz r3,a1 ;定时60s
mov r3,#6 ;重新赋循环初值
mov r4,#153
inc temp1 ;分钟加1
a2: reti
a1: mov r4,#153
ajmp a2
intr1:clr tr1
mov tl1,#0
mov th0,#0
mov temp1,#0 ;外部中断1服务程序,分钟清0
mov temp2,#0 ;小时清0
b1: acall display ;调用显示程序
jnb p2.2,b4 ;当p2.2键按下为0时,退出中断服务程序
jnb p2.0,b2 ;当p2.0键按下为0时,小时加1
jnb p2.1,b3 ;当p2.1按下时,分钟加1
ajmp b1 ;当没按下p2.0,p2.1,p2.2键时,循环查询按键
b2: inc temp2 ;小时加1
mov a,temp2
cjne a,#24,b1 ;调到24小时,清0
mov temp2,#0
ajmp b1 ;循环查询按键
b3: inc temp1 ;分钟加1
mov a,temp1
cjne a,#60,b1 ;调到60分钟,清0
mov temp1,#0
ajmp b1 ;循环查询按键
b4: clr p1.7 ;当p2.2键按下时,p1.7灯亮,退出中断服务程序
acall delay
setb p1.7
mov tl1,#0b0h
mov th1,#3ch
setb tr1
ljmp stlop
;reti
;7段数码管各划的数字排列表
numtab: DB 0C0H;0
DB 0F9H;1
DB 0A4H;2
DB 0B0H;3
DB 099H;4
DB 092H;5
DB 082H;6
DB 0F8H;7
DB 080H;8
DB 090H;9
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -