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

📄 keyscan.asm

📁 本文介紹了一種在單片機應用中實現高效、多功能鍵盤掃描分析的設計思想、方法和原理。該演算法可以實現組合鍵、自動連續等功能
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;****************************************************************************
;This program abstracted from a real project is based on 80196.
;Variables definitions are omitted. They differ from the article. Please 
;refer to the article attached.
;****************************************************************************
;CONSTANTS
K_ALT       EQU   39
K_SHIFT     EQU   38
KCHAR_MAX   EQU   180
;****************************************************************************
;KEY PROCESSING PROGRAM
KEY:        CMPB  KYFLG,#01
            JE    KEY1
            CMPB  KYFLG,#60
            JNE   KEY2
            LDB   KYFLG,#40
KEY11:      LDB   P1IMG,#11111110B
            STB   P1IMG,P1
            LDB   CL,#-1
            LD    SI,#KBUF
KEY12:      LCALL INKY
            JE    KEY13
            LDB   BH,#10
KEY15:      INCB  CL
            SHR   AX,#1
            JC    KEY14
            STB   CL,[SI]+
            CMP   SI,#KBUF+2
            JE    KEY3
KEY14:      DJNZ  BH,KEY15
KEY16:      SHLB  P1IMG,#1
            JC    KEY12M
            CMP   SI,#KBUF
            JE    KEY21
KEY17:      LDB   AL,KBUF[0]
KEY18:      LD    BX,#KCTAB
            LDB   AH,#0
            ADD   BX,AX
            LDB   KV,[BX]
            SJMP  SSJP
KEY12M:     ORB   P1IMG,#01H
            STB   P1IMG,P1
            SJMP  KEY12
KEY13:      ADDB  CL,#10
            SJMP  KEY16
KEY1:       INCB  KYFLG
            SJMP  KEY11
KEY2:       LDB   P1IMG,#00H
            STB   P1IMG,P1
            LCALL INKY
            JE    KEY21
KEY22:      INCB  KYFLG
            SJMP  KRET
KEY21:      LDB   KYFLG,#0
KRET:       RET
KEY3:       LD    BX,#0200H
KEY33:      DEC   SI
            LDB   FL,[SI]
            CMPB  FL,#K_ALT
            JE    KEY31
            LDB   FL,[SI]
            CMPB  FL,#K_SHIFT
            JNE   KEY32
            LDB   DL,#160
            STB   DL,[SI]
KEY34:      LDB   BL,#1
KEY32:      DJNZ  BH,KEY33
            CMPB  BL,#1
            JNE   KEY17
            ADDB  AL,KBUF,KBUF+1
            SJMP  KEY18
KEY31:      LDB   DL,#80
            STB   DL,[SI]
            SJMP  KEY34
INKY:       LDB   AH,P2
            LDB   AL,P0
            SHRB  AH,#3
            AND   AX,#03FFH
            CMP   AX,#03FFH
            RET
SSJP:       CMPB  KV,#KCHAR_MAX 
            JC    SSJP1
            LCALL EDIT
            RET
SSJP1:      CMPB  KV,#255
            JE    KRET
            SUBB  K_CMD,KV,#KCHAR_MAX
            CLRB  BH
            LDB   BL,K_CMD
            ADD   BX,BX
            ADDB  BL,K_CMD
            ADDCB BH,0
            ADD   BX,#KCMDJP
            BR    [BX]
KCMDJP:     LJMP  DELETE      ;K_CMD #180
            LJMP  SHUTDOWN    ;K_CMD #181
            LJMP  CANCEL      ;K_CMD #182
            LJMP  AFFIRM      ;K_CMD #183
            LJMP  UP_ARROW    ;K_CMD #184
            LJMP  HEAD        ;K_CMD #185
            LJMP  HV          ;K_CMD #186
            LJMP  HELP        ;K_CMD #187
            LJMP  PRINT       ;K_CMD #188
            LJMP  R_ARROW     ;K_CMD #189
            LJMP  DN_ARROW    ;K_CMD #190
            LJMP  L_ARROW     ;K_CMD #191
            LJMP  QUIT        ;K_CMD #192
            LJMP  PAGE_DN     ;K_CMD #193
            LJMP  FUNC_F3     ;K_CMD #194
            LJMP  FUNC_F2     ;K_CMD #195
            LJMP  FUNC_F1     ;K_CMD #196
            LJMP  ALT_PGDN    ;K_CMD #197
            LJMP  ALT_F1      ;K_CMD #198
            LJMP  ALT_F2      ;K_CMD #199
            LJMP  ALT_F3      ;K_CMD #200
;--------------KEY VALUE----KEY CODE---MEANING
KCTAB:      DB    10          ;K0        'A'
            DB    11          ;K1        'B'
            DB    12          ;K2        'C'
            DB    13          ;K3        'D'
            DB    14          ;K4        'E'
            DB    15          ;K5        'F'
            DB    16          ;K6        'G'
            DB    17          ;K7        'H'
            DB    18          ;K8        'I'
            DB    19          ;K9        'J'
            DB    23          ;K10       'N'
            DB    24          ;K11       'O'
            DB    25          ;K12       'P'
            DB    26          ;K13       'Q'
            DB    27          ;K14       'R'
            DB    28          ;K15       'S'
            DB    29          ;K16       'T'
            DB    30          ;K17       'U'
            DB    31          ;K18       'V'
            DB    32          ;K19       'W'
            DB    120         ;K20       '1/2'
            DB    67          ;K21       '%'
            DB    122         ;K22       ''C' ,DEGREE
            DB    90          ;K23       '{'
            DB    85          ;K24       '['
            DB    71          ;K25       '('
            DB    69          ;K26       '&'
            DB    78          ;K27       '/'
            DB    96          ;K28       ' ' ,LIFT "
            DB    98          ;K29       '`' ,LIFT '
            DB    79          ;K30       ':'
            DB    76          ;K31       '-' ,MINUS
            DB    77          ;K32       '.'
            DB    88          ;K33       '^'
            DB    62          ;K34       ' ' ,SPACE
            DB    196         ;K35       CMD--F1
            DB    195         ;K36       CMD--F2
            DB    194         ;K37       CMD--F3
            DB    255         ;K38       NONE(SHIFT)
            DB    255         ;K39       NONE(ALT)
            DB    20          ;K40       'K'
            DB    21          ;K41       'L'
            DB    22          ;K42       'M'
            DB    1           ;K43       '1'
            DB    2           ;K44       '2'
            DB    3           ;K45       '3'
            DB    193         ;K46       CMD--DOWN
            DB    185         ;K47       CMD--HEAD
            DB    187         ;K48       CMD--HELP
            DB    182         ;K49       CMD--BACK
            DB    33          ;K50       'X'
            DB    34          ;K51       'Y'
            DB    35          ;K52       'Z'
            DB    4           ;K53       '4'
            DB    5           ;K54       '5'
            DB    6           ;K55       '6'
            DB    191         ;K56       CMD--LIFT ARROW
            DB    184         ;K57       CMD--UP ARROW
            DB    190         ;K58       CMD--DOWN ARROW
            DB    189         ;K59       CMD--RIGHT ARROW
            DB    75          ;K60       ','
            DB    103         ;K61       'Y=',YUN
            DB    65          ;K62       '#'

⌨️ 快捷键说明

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