📄 键盘显示4位数.asm
字号:
main:
mov 70h, #16
mov 71h, #16
mov 72h, #16
mov 73h, #16
mov r0, #5 ;显示单元位数+1
kaishi:
lcall keybord
lcall shuchuli
lcall display
ajmp kaishi
;---------------键盘扫描程序---------------------------------------------------------
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
;----------------------延时2s------
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:
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
;--------------------LED段码表-----------------------------------------------------------
table:
db 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h, 80h, 90h
db 88h, 83h, 0c6h, 0a1h, 86h, 8eh, 0ffh
;----------------------结束程序---------------------------------------------------------
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -