keyboard.txt

来自「实现PIC16F877的键盘控制液晶显示功能」· 文本 代码 · 共 40 行

TXT
40
字号
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 + =
减小字号Ctrl + -
显示快捷键?