| <!--StartFragment-->;-------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 |
|