?? keyboard.asm
字號:
;3*3鍵盤程序,使用C口作鍵盤掃描,7段數碼管顯示按鍵號
;63系列通用寄存器地址:20~7FH, A0~FFH
;未達到預期目的,只用個位數顯示按鍵號時正常工作,增加按鍵號轉換(用2位數顯示)
;則提示“STACK OVERFLOW"--堆棧溢出.編譯后機器碼容量為1.3KB左右,未超過CALL跳轉范圍——1頁(2K)
#include P16C63A.INC
KEYCODE EQU H'0020'
KEYNUM EQU H'0021'
CC EQU H'0024'
TABADD EQU H'0025'
SW EQU H'0026'
GW EQU H'0027'
;PD EQU H'0028'
ORG H'0000'
GOTO MAIN
ORG H'0010'
MAIN MOVLW H'00'
TRIS PORTA
TRIS PORTB ;RB口全為輸出,用作驅動7段數碼管
MOVWF KEYNUM
MOVLW H'F0'
TRIS PORTC ; 設置RC低四位為輸出,高四位為輸入
MOVLW TABLE
MOVWF TABADD
MOVLW H'0001'
; MOVWF PD ;用來判斷按鍵號是否大于9
LOOP
CALL KEYSCAN
; CALL JUDGE ;判斷是按鍵號是否大于9
; XORLW H'0001'
; BTFSS STATUS,Z
CALL XIAO
; GOTO DASHU
XS CALL DISP_2
GOTO LOOP ;循環掃描、顯示按鍵號
JUDGE
MOVLW H'0A'
SUBWF KEYNUM,0
BTFSC STATUS,0 ; C標志
; RETLW 0 ;小于10
; RETLW 1 ; 10以上的按鍵號
GOTO XIAO
GOTO DASHU
XIAO MOVLW 0
MOVWF SW
MOVF KEYNUM,0
MOVWF GW
RETLW 0
; GOTO XS
DASHU
MOVLW H'01'
MOVWF SW
MOVLW H'0A'
SUBWF KEYNUM,0
MOVWF GW
RETLW 0
; GOTO XS
DISP_2
MOVLW H'02'
MOVWF PORTA
MOVF SW,0
CALL DISP
CALL DELAY
MOVLW H'01'
MOVWF PORTA
MOVF GW,0
CALL DISP
CALL DELAY
RETLW 0
DELAY MOVLW 0
MOVWF CC
LL DECFSZ CC,1
GOTO LL
RETLW 0
DISP ; MOVF KEYNUM,0 ;輸入W,輸出W
ADDWF TABADD,0
CALL CONV
MOVWF PORTB
RETLW 0
CONV MOVWF PCL ;取碼,輸入W(0~F),輸出W
TABLE RETLW H'C0'
RETLW H'F9'
RETLW H'A4'
RETLW H'B0'
RETLW H'99'
RETLW H'92'
RETLW H'82'
RETLW H'F8'
RETLW H'80'
RETLW H'90'
RETLW H'88'
RETLW H'83'
RETLW H'C6'
RETLW H'A1'
RETLW H'86'
RETLW H'8E' ;0~F 數碼管代碼
RETLW H'C0'
KEYSCAN MOVLW H'FE' ;第一行置低(RC0輸出0)
MOVWF PORTC
NOP
MOVF PORTC,0 ;讀RC各端口狀態
ANDLW H'F0' ;屏蔽低四位,只需要低四位來判斷
MOVWF KEYCODE ;保存端口狀態
MOVLW H'F0'
SUBWF KEYCODE,0 ;與初值比較,看是否有鍵按下
BTFSS STATUS,Z ;有鍵按下(不等于初值,Z為零)則結束掃描
GOTO GETNUM1
MOVLW H'FD' ;第二行置低(RC1輸出0)
MOVWF PORTC
NOP
MOVF PORTC,0 ;讀RC各端口值
ANDLW H'F0' ;屏蔽低四位,只需要低四位來判斷
MOVWF KEYCODE ;保存端口狀態
MOVLW H'F0'
SUBWF KEYCODE,0 ;與初值比較,看是否有鍵按下
BTFSS STATUS,Z ;有鍵按下(不等于初值,Z為零)則結束掃描
GOTO GETNUM2
MOVLW H'FB' ;第三行置低(RC2輸出0)
MOVWF PORTC
NOP
MOVF PORTC,0 ;讀RC各端口值
ANDLW H'F0' ;屏蔽低四位,只需要低四位來判斷
MOVWF KEYCODE ;保存端口狀態
MOVLW H'F0'
SUBWF KEYCODE,0 ;與初值比較,看是否有鍵按下
BTFSS STATUS,Z ;有鍵按下(不等于初值,Z為零)則結束掃描
GOTO GETNUM3
MOVLW H'F7' ;第四行置低(RC3輸出0)
MOVWF PORTC
NOP
MOVF PORTC,0 ;讀RC各端口值
ANDLW H'F0' ;屏蔽低四位,只需要低四位來判斷
MOVWF KEYCODE ;保存端口狀態
MOVLW H'F0'
SUBWF KEYCODE,0 ;與初值比較,看是否有鍵按下
BTFSS STATUS,Z ;有鍵按下(不等于初值,Z為零)則結束掃描
GOTO GETNUM4
FH RETLW 0 ; 子程序返回
QUDOU MOVF PORTC,0 ;去抖處理
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO QUDOU
GOTO FH
GETNUM1 MOVLW H'E0' ;1號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM1
MOVLW H'D0' ;2號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM2
MOVLW H'B0' ;3號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM3
MOVLW H'70' ;4號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM4
GOTO FH
GETNUM2 MOVLW H'E0' ;5號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM5
MOVLW H'D0' ;6號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM6
MOVLW H'B0' ;7號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM7
MOVLW H'70' ;8號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM8
GOTO FH
GETNUM3 MOVLW H'E0' ;9號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM9
MOVLW H'D0' ;10號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM10
MOVLW H'B0' ;11號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM11
MOVLW H'70' ;12號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM12
GOTO FH
GETNUM4 MOVLW H'E0' ;13號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM13
MOVLW H'D0' ;14號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM14
MOVLW H'B0' ;15號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM15
MOVLW H'70' ;16號鍵
SUBWF KEYCODE,0
BTFSC STATUS,Z
GOTO NUM16
GOTO FH
NUM1 MOVLW 1
MOVWF KEYNUM
GOTO QUDOU
NUM2 MOVLW 2
MOVWF KEYNUM
GOTO QUDOU
NUM3 MOVLW 3
MOVWF KEYNUM
GOTO QUDOU
NUM4 MOVLW 4
MOVWF KEYNUM
GOTO QUDOU
NUM5 MOVLW 5
MOVWF KEYNUM
GOTO QUDOU
NUM6 MOVLW 6
MOVWF KEYNUM
GOTO QUDOU
NUM7 MOVLW 7
MOVWF KEYNUM
GOTO QUDOU
NUM8 MOVLW 8
MOVWF KEYNUM
GOTO QUDOU
NUM9 MOVLW 9
MOVWF KEYNUM
GOTO QUDOU
NUM10 MOVLW H'000A'
MOVWF KEYNUM
GOTO QUDOU
NUM11 MOVLW H'000B'
MOVWF KEYNUM
GOTO QUDOU
NUM12 MOVLW H'000C'
MOVWF KEYNUM
GOTO QUDOU
NUM13 MOVLW H'000D'
MOVWF KEYNUM
GOTO QUDOU
NUM14 MOVLW H'000E'
MOVWF KEYNUM
GOTO QUDOU
NUM15 MOVLW H'000F'
MOVWF KEYNUM
GOTO QUDOU
NUM16 MOVLW H'0010'
MOVWF KEYNUM
GOTO QUDOU
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -