📄 text1.asm
字号:
org 0000h
ljmp main
org 000bh
ljmp int
org 0023h
ljmp sint
org 0100h
main: ;初始LED显示零
mov 70h, #00
mov 71h, #00
mov 72h, #00
mov 73h, #00
mov r0, # 5
kaishi: ;初始化
acall display
acall display
mov r4, #20
mov tmod, #21h
mov tl0, #0b0h
mov th0, #3ch
mov tl1, #0f3h
mov th1, #0f3h
mov scon, #50h
setb tr1
setb et0
setb ea
panduan:lcall keyboard
mov 76h, a
pana:
clr c
subb a, #10 ;设A为定时加
jnz panb
mov r4, #20
mov 30h, #1
mov 31h, #0
acall dingshi
ajmp panduan
panb:
mov a, 76h
clr c
subb a, #11 ;设B为定时减
jnz panc
mov r4, #20
mov 31h, #1
mov 30h, #0
acall dingshi
ajmp panduan
panc: mov a, 76h
clr c
subb a, #12 ;设C为串行口发送数据
jnz pand
acall chuanxing
ajmp kaishi
pand: mov a, 76h
clr c
subb a, #13 ;设D为接受数据控制键
jnz panf
mov r0, #74h
setb es
ajmp kaishi
panf: mov a, 76h
clr c
subb a, #15 ;设F为暂停键
jnz pane
acall zanting
acall panduan
pane: mov a, 76h
clr c
subb a, #14 ;设E为清零键
jnz hui
acall clear
acall panduan
hui: mov a, 76h
lcall siwei
lcall display
ajmp kaishi
keyboard:
acall ks ;判断有无键按下
jnz k_1
lcall display
ljmp keyboard
k_1:
lcall display ;消抖
acall ks
jz keyboard
k_2:
mov r5, #00h
mov r4, #0feh
key:
mov p1, r4
mov a, p1
anl a, #0f0h
key0:
jb acc.4, key1
mov a, #0
ljmp knum
key1:
jb acc.5, key2
mov a, #1
ljmp knum
key2:
jb acc.6, key3
mov a, #2
ljmp knum
key3:
jb acc.7, next
mov a, #3
knum:
add a, r5
push acc
halt:
acall delay
acall ks
jnz halt
pop acc
ret
next:
mov a, r5
add a, #4
mov r5, a
mov a, r4
jnb acc.3, keyboard
rl a
mov r4, a
ljmp key
ks: ;有无闭合键判断子程序
mov p1, #0f0h
nop
mov a, p1
cpl a
anl a, #0f0h
ret
delay: mov r6, #4h ;延时子程序
mov r7, #250
loop: djnz r7, $
djnz r6, loop
ret
display:
mov dptr, #table ;查表显示
mov r1, #70h
MOV R2, #0EFH ;取最右边一个
MOV R3, #4
play:
mov a, @r1
movc a , @a+dptr
mov p0, a
mov p2, r2
acall delay
inc r1
mov a, r2
rl a
mov r2, a
djnz r3, play
acall ks
jz display
ret
siwei: ;输入够四位循环
djnz r0, shuchuan
mov r0, #4
mov 73h, #16
mov 72h, #16
mov 71h, #16
mov 70h, a
ret
shuchuan:
mov 73h, 72h
mov 72h, 71h
mov 71h, 70h
mov 70h, a
ret
;=======================================================功能实现
dingshi:
setb tr0
lcall display
lcall ks
jz dingshi
clr tr0
setb p3.4
ret
int:
djnz r4, outz
mov r4, #20
mov a, 30h
jnz zeng
mov a, 31h
jnz jian
;**************定时加********************
zeng:
inc 70h
mov a, 70h
cjne a, #10, outz
setb p3.4
zz0: inc 71h
mov 70h, #00h
mov a, 71h
cjne a, #10, outz
clr p3.4
zz1:
inc 72h
mov 71h, #00h
mov a, 72h
cjne a, #10, outz
zz2:
inc 73h
mov 72h, #00h
mov a, 72h
cjne a, #10, outz
;*******************定时减******************
jian:
mov a, 70h
cjne a,#0,PP
mov 70h,#9
mov a,71h
cjne a,#0,QQ
mov 71h,#9
mov a,72h
cjne a,#0,JJ
mov 72h,#9
mov a,73h
cjne a,#0,YY
mov 73h,#9
ajmp outz
PP: dec 70h
ajmp outz
QQ: dec 71h
ajmp outz
JJ: dec 71h
ajmp outz
YY: dec 73h
outz:
mov tl0, #0b0h
mov th0, #3ch
reti
;***************串行通信********************
chuanxing:
clr es
mov r0, #74h
sout:
dec r0
mov sbuf, @r0
jnb ti, $
clr ti
cjne r0, #70h, sout
ret
sint:
dec r0
mov @r0, sbuf
clr ri
cjne r0, #70h, bbbb
clr es
bbbb:
reti
;***************暂停****************************
zanting:
clr ea
acall kaishi
ret
;***************清零*****************************
clear:
MOV 70H, #0
MOV 71H, #0
MOV 72H, #0
MOV 73H, #0
ret
;===========================LED段码表
table:
db 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h, 80h, 90h
db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -