;========================================================================
; PB0 PB1 PB2 PB3
; PB4 KEY1 KEY2 KEY3 KEY4
; PB5 KEY5 KEY6 KEY7 KEY8
; PB6 KEY9 KEY10 KEY11 KEY12
; PB7 KEY13 KEY14 KEY15 KEY16
;=========================== 定义部分 ===========================
IDATA
KEY_CACHE0 RES 1 ;按键1~8
KEY_CACHE1 RES 1 ;按键9~16
#DEFINE KEY1_FLAG KEY_CACHE0,0
#DEFINE KEY2_FLAG KEY_CACHE0,1
#DEFINE KEY3_FLAG KEY_CACHE0,2
#DEFINE KEY4_FLAG KEY_CACHE0,3
#DEFINE KEY5_FLAG KEY_CACHE0,4
#DEFINE KEY6_FLAG KEY_CACHE0,5
#DEFINE KEY7_FLAG KEY_CACHE0,6
#DEFINE KEY8_FLAG KEY_CACHE0,7
#DEFINE KEY9_FLAG KEY_CACHE1,0
#DEFINE KEY10_FLAG KEY_CACHE1,1
#DEFINE KEY11_FLAG KEY_CACHE1,2
#DEFINE KEY12_FLAG KEY_CACHE1,3
#DEFINE KEY13_FLAG KEY_CACHE1,4
#DEFINE KEY14_FLAG KEY_CACHE1,5
#DEFINE KEY15_FLAG KEY_CACHE1,6
#DEFINE KEY16_FLAG KEY_CACHE1,7
CODE
;=========================== 初始化部分 ===========================
Port_Init:
MOVLW B'00001111'
MOVWF TRISB ;纵:输出模式 横:输入模式
MOVLW B'00000000'
MOVWF WPUB ;开上拉
;=========================== 程序部分 ===========================
Key_Scan:
CLRF KEY_CACHE0
CLRF KEY_CACHE1
MOVLW B'11101111'
MOVWF PORTB ;第1行输出0
MOVF PORTB,W
ANDLW B'00001111'
IORWF KEY_CACHE0,F
MOVLW B'11011111'
MOVWF PORTB ;第2行输出0
SWAPF PORTB,W
ANDLW B'11110000'
IORWF KEY_CACHE0,F
MOVLW B'10111111'
MOVWF PORTB ;第3行输出0
MOVF PORTB,W
ANDLW B'00001111'
IORWF KEY_CACHE1,F
MOVLW B'01111111'
MOVWF PORTB ;第4行输出0
SWAPF PORTB,W
ANDLW B'11110000'
IORWF KEY_CACHE1,F
COMF KEY_CACHE0,F
COMF KEY_CACHE1,F
;======================================================================== |