📄 _scan_key_direct.a51
字号:
;==============================================
SCAN_KEY_INITIAL:
MOV KEY_OLD_STATE,#key_input_pins
MOV KEY_PIN_SETTING,#key_input_pins
MOV KEY_VALUE,#00H
MOV KEY_VALUE_BUF,#00H
MOV KEY_DEB_TIME,#00H
ORL KEY_INPUT_PORT,#0FFH
CLR KEY_FLAG
RET
;===============================================
SCAN_KEY:
MOV KEY_NEW_STATE,KEY_INPUT_PORT ;
ANL KEY_NEW_STATE,#key_input_pins ;
MOV A,KEY_OLD_STATE ;
XRL A,KEY_NEW_STATE ;
JNZ KEY_STATUS_CHANGE ;
MOV KEY_DEB_TIME,#00H ;
JMP SCAN_KEY_RTN
KEY_STATUS_CHANGE:
INC KEY_DEB_TIME ;
MOV A,KEY_DEB_TIME ;
CJNE A,#deb_time,SCAN_KEY_RTN ;
MOV KEY_DEB_TIME,#00H ;
MOV A,KEY_OLD_STATE ;
XRL A,KEY_NEW_STATE ;
MOV KEY_NEW_STATE,A ;
MOV KEY_PIN_SETTING,#key_input_pins ;
MOV R7,#0FFH ;
GET_COL_VALUE:
MOV A,KEY_PIN_SETTING ;
CLR C ;
RRC A ;
MOV KEY_PIN_SETTING,A ;
JNC GET_CHANGE_PIN
INC R7 ;
GET_CHANGE_PIN:
MOV A,KEY_NEW_STATE ;
CLR C ;
RRC A ;
MOV KEY_NEW_STATE,A ;
JNC GET_COL_VALUE ;
MOV A,R7 ;
MOV DPTR,#key_bit_table ;
MOVC A,@A+DPTR ;
PUSH ACC
XRL A,KEY_OLD_STATE ;
MOV KEY_OLD_STATE,A ;
POP ACC
IF(trigger_type==0) ;
ANL A,KEY_OLD_STATE ;
JNZ SCAN_KEY_RTN ;
ENDIF
IF(trigger_type==1) ;
ANL A,KEY_OLD_STATE ;
JZ SCAN_KEY_RTN ;
ENDIF
IF(trigger_type==2)
ANL A,KEY_OLD_STATE
JZ GET_KEY_VALUE
CLR C
MOV A,#max_key_num
ADD A,R7
MOV R7,A
ENDIF
GET_KEY_VALUE:
MOV KEY_VALUE,R7 ;save key value to KEY_VALUE
SETB KEY_FLAG
SCAN_KEY_RTN:
RET
;===============================================
key_bit_table:
IF(key_input_pin0==1)
DB 01H
ENDIF
IF(key_input_pin1==1)
DB 02H
ENDIF
IF(key_input_pin2==1)
DB 04H
ENDIF
IF(key_input_pin3==1)
DB 08H
ENDIF
IF(key_input_pin4==1)
DB 10H
ENDIF
IF(key_input_pin5==1)
DB 20H
ENDIF
IF(key_input_pin6==1)
DB 40H
ENDIF
IF(key_input_pin7==1)
DB 80H
ENDIF
;===============================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -