📄 键盘串行显示n位数.asm
字号:
mov 70h, #16
mov 71h, #16
mov 72h, #16
mov 73h, #16
main:
lcall keybord
lcall shuchuli
lcall display
ajmp main
;------------------------------------------------------------------------
keybord:
acall ks
jnz k_1
lcall display
ljmp keybord
k_1:
lcall display
acall ks
jz keybord
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, keybord ;检测是否溢出
rl a
mov r4, a
ljmp key
;------------------------------------------------------------
ks: mov p1, #0f0h ;检测是否有键按下
nop
mov a, p1
anl a, #0f0h
cpl a
anl a, #0f0h
ret
;-------------------------------------------------------------
delay: mov r6, #4h ;延时2s
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
;---------------------------------------------------------------
shuchuli:
mov r0, #70h
mov 73h, 72h
mov 72h, 71h
mov 71h, 70h
mov @r0, a
ret
;-----------------------------------------------------------
table:
db 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h, 80h, 90h
db 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xff
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -