📄 keyboard.txt
字号:
keyscan ;RD7~RD4为行线,RB3~RB0为列线
;有键按下时value为位置码无按下时value为ffh
bank1 ;选择体1,使得D和B端口为输入
bcf option_reg,7 ;启动B口上拉电阻
movlw 0fh ;D端口的低4位为输入,高4位为输出
movwf trisd
movlw 0ffh ;B端口全为输入(这一步是为了从RB3~RB0获得列码)
movwf trisb
bank0 ;恢复到体0
movlw 00h ;4条行线输出全0
movwf portd
nop
nop
movf portb,0 ;读取列线状态
andlw 0fh ;取出B端口的低4位
movwf value ;将其值送到value
xorlw 0fh ;检测是否有按键按下,没有按键则结果为全0
btfsc status,2 ;是0就跳过下条指令,说明有键按下
goto nokey ;没按键则调用"没有按键子程序"
bank1
movlw 0f0h
movwf trisd ;将端口D的高4位设为输入,低4位设为输出
movlw 0f0h
movwf trisb ;将端口B的高4位设为输入,低4位设为输出
bank0 ;(这一步是从获得的列码后进一步行码,最后组合成value的完整码)
movf value,0
movwf portb ;读取列码,再经过列线(RB3~RB0)输出
nop ;等待输出状态稳定下来
nop
movf portd,0 ;读取行线状态
andlw 0f0h ;只取高4位
iorwf value,1 ;组合成完整的按键码送value
return
nokey ;没有按键按下value为0ffh
movlw 0ffh
movwf value
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -