⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 w566&588&567.inc

📁 键盘扫描程序
💻 INC
字号:
FLAG                 DS         1
keyfg     equ  01h         
KEY_VALUE            DS         1
LINE_COUNT           DS         1
SCAN_TIME            DS         4
SCAN_OLD             DS         4
KEY_ENABLE           DS         4 ;BITN:1->ENABLE,0->DISABLE
SCAN_NEW             DS         1

;BP1.0~7  INPUT
;BP0.0~3  OUTPUT          
INPUT           EQU  BP1
OUTPUT          EQU  BP0

deb_time   equ 4  ;>=2

row equ  4 ;bp00~bp03
col equ  8 ;bp10~bp17

;在TIMER中扫描按键   TIMER为2MSEC INTERRUPT

SCAN_KEY:
        PHX
        PHY
        LDX    <LINE_COUNT
        INC    <LINE_COUNT        
        CPX    #row-1
        BCC    2 
        STZ    <LINE_COUNT  ;clear if LINE_COUNT>=row       
        
        LDA    !INPUT
        STA    <SCAN_NEW
        LDA    #0FH
        TSB    !OUTPUT      ;set all output 
        LDA    SET_OUTPUT,X
        TRB    !OUTPUT      ;clear next output pin  
        LDA    <SCAN_NEW
        EOR    <SCAN_OLD,X
        BNE    KEY_CHANGE   ;key status change
        STZ    <SCAN_TIME,X
        JMP    SCAN_KEY_RTN 	
KEY_CHANGE:
        INC    <SCAN_TIME,X
        LDY    <SCAN_TIME,X
        CPY    #deb_time
        BCC    SCAN_KEY_RTN ;scan_time,x<deb_time
        STZ    <SCAN_TIME,X
        TAY
        EOR    <SCAN_OLD,X  ;just nor the bit changed,
        STA    <SCAN_OLD,X
        TYA
        AND    <KEY_ENABLE,X
        BEQ    SCAN_KEY_RTN ;disabled key pressed return
        BIT    <SCAN_OLD,X  ;1: means 0->1(release key);0: means 1->0(press key) 
        BNE    SCAN_KEY_RTN ;reture if release key            
	    LDY    #FFH
GET_ROW:
        INY
        LSR    A
        BCC    GET_ROW        
        JSR    METHOD2
        LDA    #keyfg      ;set key pressed flag 
        TSB    <FLAG
        JSR    GET_HOLD_KEYS_NUM
SCAN_KEY_RTN:
        PLY
        PLX
        RTS
GET_HOLD_KEYS_NUM:
;return Y
        LDX    #0
        LDY    #0
DETECT_NEXT_ROW:        
        LDA    #01H
DETECT_NEXT_COL:        
        BIT    <SCAN_OLD,X
        BNE    1
        INY
        ASL    A
        BCC    DETECT_NEXT_COL
        INX
        CPX    #row
        BCC    DETECT_NEXT_ROW 
        RTS 


SET_OUTPUT:
        DB     02H,04H,08H,01H

METHOD1:
        CLC
        TYA
        ADC    METHOD_ADJUST1,X         
        STA    <KEY_VALUE                                    
        RTS         
METHOD2:
        CLC
        TXA
        ADC    METHOD_ADJUST2,Y         
        STA    <KEY_VALUE                                    
        RTS         
METHOD_ADJUST1:
        DB     0*col+1,1*col+1,2*col+1,3*col+1       
        DB     4*col+1,5*col+1,6*col+1,7*col+1       
METHOD_ADJUST2:
        DB     0*row+1,1*row+1,2*row+1,3*row+1       
        DB     4*row+1,5*row+1,6*row+1,7*row+1       


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -