;-------4*4键盘程序的使用--------
PC EQU 2
STATUS EQU 3
RA EQU 5
RB EQU 6
RC EQU 7
BIJIAO EQU 0F
JIANZHI EQU 8
BUFFER EQU 9
BUFFER1 EQU 0AH
BUFFER2 EQU 0BH
COUNTER EQU 0CH
CON1 EQU 0DH
CON2 EQU 0EH
PIC57 EQU 7FFH
Z EQU 2
;-----------------------------
ORG PIC57
GOTO MAIN
;-----------------------------
ORG 0
;-----------------------------
; 延时子程序
;----------------------------
DELAY MOVLW D'100'
MOVWF CON1
L1 MOVLW D'200'
MOVWF CON2
L2 DECFSZ CON2,1
GOTO L2
DECFSZ CON1,1
GOTO L1
RETLW 0
;-----------------------------
; 4*4键盘扫描判断子程序
;-----------------------------
SCANKEY
MOVLW B'11101111'
MOVWF RB
MOVF RB,W
ANDLW B'00001111'
MOVWF BUFFER
MOVLW B'00001111'
XORWF BUFFER,W
SKPNZ
GOTO XYB1
MOVWF BUFFER1
MOVLW 1
MOVWF JIANZHI
MOVF RB,W
MOVWF BIJIAO
GOTO QJZ
XYB1 MOVLW B'11011111'
MOVWF RB
MOVF RB,W
ANDLW B'00001111'
MOVWF BUFFER
MOVLW B'00001111'
XORWF BUFFER,W
SKPNZ
GOTO XYB2
MOVWF BUFFER1
MOVLW 5
MOVWF JIANZHI
GOTO QJZ
XYB2 MOVLW B'10111111'
MOVWF RB
MOVF RB,W
ANDLW B'00001111'
MOVWF BUFFER
MOVLW B'00001111'
XORWF BUFFER,W
SKPNZ
GOTO XYB3
MOVWF BUFFER1
MOVLW 9
MOVWF JIANZHI
MOVF RB,W
MOVWF BIJIAO
GOTO QJZ
XYB3 MOVLW B'01111111'
MOVWF RB
MOVF RB,W
ANDLW B'00001111'
MOVWF BUFFER
MOVLW B'00001111'
XORWF BUFFER,W
SKPNZ
RETLW 0
MOVWF BUFFER1
MOVLW 0DH
MOVWF JIANZHI
MOVF RB,W
MOVWF BIJIAO
QJZ MOVLW 1
MOVWF BUFFER2
MOVLW 4
MOVWF COUNTER
QJZ1 MOVF BUFFER1,W
SUBWF BUFFER2,W
SKPNZ
RETLW 1
RLF BUFFER2,1
INCF JIANZHI,1
DECFSZ COUNTER,1
GOTO QJZ1
RETLW 0
;-------------------------------
; 测试程序(注意用法,键值放在JIANZHI里)
;-------------------------------
MAIN
MOVLW 0
TRIS RC
CLRF RC
MOVLW B'00001111' ;用RB口作4*4键盘
TRIS RB
LOOP CLRF RC
CALL SCANKEY
ANDLW 0FH
SKPNZ ;根据返回值不为零,判断有无键按下
GOTO LOOP
MOVLW 0FH
ANDWF JIANZHI,W
MOVWF RC
CALL DELAY
LOOP1 MOVF BUFFER1,W
ANDWF RB,W
XORWF BIJIAO,W
SKPNZ
GOTO LOOP1
GOTO LOOP
;--------------
;-------------------------------
END