📄 mykeyboard.txt
字号:
LIST P=16F877
INCLUDE "P16F877.INC"
;--------------------------------
INITIAL
VALUE EQU 21H
TEMP EQU 22H
TEMP1 EQU 23H
DATA1 EQU 30H
DATA2 EQU 31H
ORG 00H
GOTO MAIN
ORG 05H
MAIN
NOP
BANKSEL TRISD
MOVLW 00H
MOVWF TRISD
MOVLW 0FFH
MOVWF TRISB
MOVLW 00H
MOVWF TRISC
BANKSEL PORTD
START
NOP
CALL KEYSCAN
CALL KEYDELAY
CALL KEYSCAN
CALL KEYSEE
MOVF VALUE,0
MOVWF PORTC
GOTO START
;----------------------------------
KEYSCAN
NOP
MOVF PORTB,0
ANDLW 0FH
XORLW 0FH
BTFSS STATUS,Z
RETURN
GOTO KEYSCAN
;-----------------------------
KEYSEE
ROW1
MOVLW B'01111111'
MOVWF PORTD
MOVF PORTB,0
ANDLW 0FH
XORLW 0FH
BTFSC STATUS,Z
GOTO ROW2
MOVF PORTB,0
ANDLW 0FH
XORLW 0FH
MOVWF TEMP
CALL KEYOUT
CLRW
BTFSC TEMP,0
ADDLW 4
BTFSC TEMP,1
ADDLW 3
BTFSC TEMP,2
ADDLW 2
BTFSC TEMP,3
ADDLW 1
ANDLW 0FH
BTFSS STATUS,Z
GOTO NEXT
ROW2
MOVLW B'10111111'
MOVWF PORTD
MOVF PORTB,0
ANDLW 0FH
XORLW 0FH
BTFSC STATUS,Z
GOTO ROW3
MOVF PORTB,0
ANDLW 0FH
XORLW 0FH
MOVWF TEMP
CALL KEYOUT
CLRW
BTFSC TEMP,0
ADDLW 8
BTFSC TEMP,1
ADDLW 7
BTFSC TEMP,2
ADDLW 6
BTFSC TEMP,3
ADDLW 5
GOTO NEXT
ROW3
MOVLW B'11011111'
MOVWF PORTD
MOVF PORTB,0
ANDLW 0FH
XORLW 0FH
BTFSC STATUS,Z
GOTO ROW4
MOVF PORTB,0
ANDLW 0FH
XORLW 0FH
MOVWF TEMP
CALL KEYOUT
CLRW
BTFSC TEMP,0
ADDLW 0BH
BTFSC TEMP,1
ADDLW 0AH
BTFSC TEMP,2
ADDLW 00H
BTFSC TEMP,3
ADDLW 09H
GOTO NEXT
ROW4
MOVLW B'11101111'
MOVWF PORTD
MOVF PORTB,0
ANDLW 0FH
XORLW 0FH
MOVWF TEMP
CALL KEYOUT
CLRW
BTFSC TEMP,0
ADDLW 0FH
BTFSC TEMP,1
ADDLW 0EH
BTFSC TEMP,2
ADDLW 0DH
BTFSC TEMP,3
ADDLW 0CH
NEXT CALL KEYTRANSLATE
MOVWF VALUE
RETURN
;--------------------------------
KEYTRANSLATE
ADDWF PCL,F
KEYTABLE
RETLW 30H
RETLW 31H
RETLW 32H
RETLW 33H
RETLW 34H
RETLW 35H
RETLW 36H
RETLW 37H
RETLW 38H
RETLW 39H
RETLW 41H
RETLW 42H
RETLW 43H
RETLW 44H
RETLW 45H
RETLW 46H
;--------------------------------
KEYOUT
CLRF PORTD
MOVF PORTB,0
ANDLW 0fh
XORLW 0fh
BTFSS STATUS,Z
GOTO KEYOUT
CALL KEYDELAY
MOVF PORTB,0
ANDLW 0fh
XORLW 0fh
BTFSS STATUS,Z
GOTO KEYOUT
RETURN
;-------------------
KEYDELAY
MOVLW D'14'
MOVWF DATA1
LOOP1
MOVLW D'251'
MOVWF DATA2
LOOP2
DECFSZ DATA2,1
GOTO LOOP2
DECFSZ DATA1,1
GOTO LOOP1
RETURN
;-----------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -