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

📄 key.asm

📁 多功能按键判断程序
💻 ASM
字号:
;;     KEY.ASM
PROC   READKEY,KEY
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READKEY:
       NOP
       SETB  HD_KEY
       MOV   C,HD_KEY
       MOV   F0,C
       MOV   ACC.0,C
       MOV   C,HD_KEYL_F
       MOV   B.0,C
       XRL   A,B
       MOV   C,F0
       MOV   HD_KEYL_F,C
       ANL   A,#01H
       JZ    READ_KEY1
       JC    READ_KEY_UP
READ_KEY_DOWN:
       JB    KEY_DOWN_F,READ_KEY1
       LCALL HD_READ
       ANL   A,#03H
       MOV   KEY_VALUE,A
       SETB  KEY_DOWN_F
       SETB  KEY_ONE_F
       MOV   A,#KEY_800MS
       LCALL DELAY_MS
       MOV   KEY_DELAY,A
       SJMP  READ_KEY1
READ_KEY_UP:
       JNB   KEY_DOWN_F,READ_KEY1
       SETB  KEY_UP_F
       MOV   A,#MAIN_10S
       LCALL DELAY_SEC
       MOV   MAIN_DELAY,A
READ_KEY1:
       CLR    KEY_DELAY_F
       JNB    KEY_DOWN_F,READ_KEY_END
       MOV    A,KEY_DELAY
       XRL    A,TIMER_CAL3
       JNZ    READ_KEY_END
       SETB   KEY_DELAY_F
       CLR    KEY_ONE_F
       MOV    A,#KEY_150MS
       LCALL  DELAY_MS
       MOV    KEY_DELAY,A
       MOV    A,#MAIN_10S
       LCALL  DELAY_SEC
READ_KEY_END:
       RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY:
        NOP
        MOV   A,SYS_STATE
        CJNE  A,#0BH,KEY_STATE_ERROR
KEY_STATE_ERROR:
        JC    KEY_STATE_RIGHT
        MOV   KEY_VALUE,#00H
        MOV   SYS_STATE,#00H
        LJMP  KEY_END
KEY_STATE_RIGHT:
        MOV   B,#03H
        MUL   AB
        MOV   DPTR,#KEY_MENU_TAB
        JMP   @A+DPTR
KEY_MENU_TAB:
        LJMP  KEY_MENU0    ;自动显示
        LJMP  KEY_MENU1    ;手动显示
        LJMP  KEY_MENU2    ;密码输入
        LJMP  KEY_MENU3    ;设置显示
        LJMP  KEY_MENU4    ;设置波特率
        LJMP  KEY_MENU5    ;设置地址
        LJMP  KEY_MENU6    ;设置电压
        LJMP  KEY_MENU7    ;设置电流
        LJMP  KEY_MENU8    ;复位
        LJMP  KEY_MENU9    ;保存设置
        LJMP  KEY_MENU10   ;退出菜单
        LJMP  KEY_END
KEY_END:
        JNB   KEY_UP_F,KEY_END1
        MOV   KEY_VALUE,#00H
KEY_END1:
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;自动显示
KEY_MENU0:
        NOP
        JNB   KEY_UP_F,KEY_MENU0_END
        MOV   A,KEY_VALUE
        ANL   A,#03H
        CJNE  A,#00H,KEY_MENU0_1
        MOV   R0,#SHOWMD_TEMP
        MOV   R5,#SHOWMDH_AD
        MOV   R4,#SHOWMDL_AD
        MOV   R2,#08H
        LCALL AREAD
        MOV   SYS_STATE,#03H
        SJMP  KEY_MENU0_END
KEY_MENU0_1:
        CJNE  A,#01H,KEY_MENU0_2
        MOV   R0,#SHOWMD_TEMP
        MOV   R5,#SHOWMDH_AD
        MOV   R4,#SHOWMDL_AD
        MOV   R2,#08H
        LCALL AREAD
        MOV   SYS_STATE,#0AH
        SJMP  KEY_MENU0_END
KEY_MENU0_2:
        CJNE  A,#02H,KEY_MENU0_3
        SJMP  KEY_MENU0_END
KEY_MENU0_3:
        CJNE  A,#03H,KEY_MENU0_END
KEY_MENU0_END:
        LJMP  KEY_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;手动显示
KEY_MENU1:
        NOP
        JNB   KEY_UP_F,KEY_MENU1_END
        MOV   A,KEY_VALUE
        ANL   A,#03H
        CJNE  A,#00H,KEY_MENU1_1
        ;MOV   SYS_STATE,#00H
        SJMP  KEY_MENU0_END
KEY_MENU1_1:
        CJNE  A,#01H,KEY_MENU1_2
        ;MOV   SYS_STATE,#00H
        SJMP  KEY_MENU1_END
KEY_MENU1_2:
        CJNE  A,#02H,KEY_MENU1_3
        SJMP  KEY_MENU1_END
KEY_MENU1_3:
        CJNE  A,#03H,KEY_MENU1_END
KEY_MENU1_END:
        LJMP  KEY_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;密码输入
KEY_MENU2:
        NOP
        LJMP  KEY_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置显示
KEY_MENU3:
        NOP
        MOV   C,KEY_DELAY_F
        ORL   C,KEY_UP_F
        JNC   KEY_MENU1_END
        MOV   A,KEY_VALUE
        ANL   A,#03H
        CJNE  A,#00H,KEY_MENU3_1
        JNB   KEY_UP_F,KEY_MENU3_END
        MOV   SYS_STATE,#04H
        SJMP  KEY_MENU1_END
KEY_MENU3_1:
        CJNE  A,#01H,KEY_MENU3_2
        JNB   KEY_UP_F,KEY_MENU3_END
        MOV   SYS_STATE,#0AH
        SJMP  KEY_MENU3_END
KEY_MENU3_2:
        CJNE  A,#02H,KEY_MENU3_3
        MOV   R0,#SHOWMD_TEMP
        LCALL INCSHOWMD
        SJMP  KEY_MENU3_END
KEY_MENU3_3:
        CJNE  A,#03H,KEY_MENU3_END
        MOV   R0,#SHOWMD_TEMP
        LCALL DECSHOWMD
KEY_MENU3_END:
        LJMP  KEY_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置波特率
KEY_MENU4:
        NOP
        MOV   C,KEY_DELAY_F
        ORL   C,KEY_UP_F
        JNC   KEY_MENU4_END
        MOV   A,KEY_VALUE
        ANL   A,#03H
        CJNE  A,#00H,KEY_MENU4_1
        JNB   KEY_UP_F,KEY_MENU4_END
        MOV   SYS_STATE,#05H
        SJMP  KEY_MENU4_END
KEY_MENU4_1:
        CJNE  A,#01H,KEY_MENU4_2
        JNB   KEY_UP_F,KEY_MENU4_END
        MOV   SYS_STATE,#03H
        SJMP  KEY_MENU5_END
KEY_MENU4_2:
        CJNE  A,#02H,KEY_MENU4_3
        MOV   R0,#BRATE_TEMP
        LCALL INCBRATE
        SJMP  KEY_MENU4_END
KEY_MENU4_3:
        CJNE  A,#03H,KEY_MENU4_END
        MOV   R0,#BRATE_TEMP
        LCALL DECBRATE
KEY_MENU4_END:
        LJMP  KEY_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置地址
KEY_MENU5:
        NOP
        MOV   C,KEY_DELAY_F
        ORL   C,KEY_UP_F
        JNC   KEY_MENU5_END
        MOV   A,KEY_VALUE
        ANL   A,#03H
        CJNE  A,#00H,KEY_MENU5_1
        JNB   KEY_UP_F,KEY_MENU4_END
        MOV   SYS_STATE,#06H
        SJMP  KEY_MENU5_END
KEY_MENU5_1:
        CJNE  A,#01H,KEY_MENU5_2
        JNB   KEY_UP_F,KEY_MENU5_END
        MOV   SYS_STATE,#04H
        SJMP  KEY_MENU5_END
KEY_MENU5_2:
        CJNE  A,#02H,KEY_MENU5_3
        MOV   R0,#SLAVE_TEMP
        LCALL INCSLAVE
        SJMP  KEY_MENU5_END
KEY_MENU5_3:
        CJNE  A,#03H,KEY_MENU5_END
        MOV   R0,#SLAVE_TEMP
        LCALL DECSLAVE
KEY_MENU5_END:
        LJMP  KEY_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置电压
KEY_MENU6:
        NOP
        MOV   C,KEY_DELAY_F
        ORL   C,KEY_UP_F
        JNC   KEY_MENU6_END
        MOV   A,KEY_VALUE
        ANL   A,#03H
        CJNE  A,#00H,KEY_MENU6_1
        JNB   KEY_UP_F,KEY_MENU6_END
        MOV   SYS_STATE,#07H
        SJMP  KEY_MENU6_END
KEY_MENU6_1:
        CJNE  A,#01H,KEY_MENU6_2
        JNB   KEY_UP_F,KEY_MENU6_END
        MOV   SYS_STATE,#05H
        SJMP  KEY_MENU6_END
KEY_MENU6_2:
        CJNE  A,#02H,KEY_MENU6_3
        MOV   A,#01H
        JB    KEY_ONE_F,KEY_MENU6_2_1
        MOV   A,#0AH
KEY_MENU6_2_1:
        MOV   R0,#KU1L
        LCALL INCKU
        SJMP  KEY_MENU6_END
KEY_MENU6_3:
        CJNE  A,#03H,KEY_MENU6_END
        MOV   A,#01H
        JB    KEY_ONE_F,KEY_MENU6_3_1
        MOV   A,#0AH
KEY_MENU6_3_1:
        MOV   R0,#KU1L
        LCALL DECKU
KEY_MENU6_END:
        LJMP  KEY_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置电流
KEY_MENU7:
        NOP
        MOV   C,KEY_DELAY_F
        ORL   C,KEY_UP_F
        JNC   KEY_MENU7_END
        MOV   A,KEY_VALUE
        ANL   A,#03H
        CJNE  A,#00H,KEY_MENU7_1
        JNB   KEY_UP_F,KEY_MENU7_END
        MOV   SYS_STATE,#08H
        SJMP  KEY_MENU7_END
KEY_MENU7_1:
        CJNE  A,#01H,KEY_MENU7_2
        JNB   KEY_UP_F,KEY_MENU7_END
        MOV   SYS_STATE,#06H
        SJMP  KEY_MENU7_END
KEY_MENU7_2:
        CJNE  A,#02H,KEY_MENU7_3
        MOV   A,#01H
        JB    KEY_ONE_F,KEY_MENU7_2_1
        MOV   A,#0AH
KEY_MENU7_2_1:
        MOV   R0,#KI1L
        LCALL INCKI
        SJMP  KEY_MENU7_END
KEY_MENU7_3:
        CJNE  A,#03H,KEY_MENU7_END
        MOV   A,#01H
        JB    KEY_ONE_F,KEY_MENU7_3_1
        MOV   A,#0AH
KEY_MENU7_3_1:
        MOV   R0,#KI1L
        LCALL DECKI
KEY_MENU7_END:
        LJMP  KEY_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;复位
KEY_MENU8:
        NOP
        MOV   C,KEY_DELAY_F
        ORL   C,KEY_UP_F
        JNC   KEY_MENU8_END
        MOV   A,KEY_VALUE
        ANL   A,#03H
        CJNE  A,#00H,KEY_MENU8_1
        JNB   KEY_UP_F,KEY_MENU8_END
        MOV   SYS_STATE,#09H
        SJMP  KEY_MENU8_END
KEY_MENU8_1:
        CJNE  A,#01H,KEY_MENU8_2
        JNB   KEY_UP_F,KEY_MENU8_END
        MOV   SYS_STATE,#07H
        SJMP  KEY_MENU8_END
KEY_MENU8_2:
        CJNE  A,#02H,KEY_MENU8_3
        CLR   EA
        SJMP  $
        SJMP  KEY_MENU8_END
KEY_MENU8_3:
        CJNE  A,#03H,KEY_MENU8_END

        ;SJMP  KEY_MENU8_END
KEY_MENU8_END:
        LJMP  KEY_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;保存设置
KEY_MENU9:
        NOP
        JNB   KEY_UP_F,KEY_MENU9_END
        MOV   A,KEY_VALUE
        ANL   A,#03H
        CJNE  A,#00H,KEY_MENU9_1
        MOV   SYS_STATE,#0AH
        SJMP  KEY_MENU9_END
KEY_MENU9_1:
        CJNE  A,#01H,KEY_MENU9_2
        MOV   SYS_STATE,#08H
        SJMP  KEY_MENU9_END
KEY_MENU9_2:
        CJNE  A,#02H,KEY_MENU9_3
        MOV   R0,#SHOWMD_TEMP
        MOV   R5,#SHOWMDH_AD
        MOV   R4,#SHOWMDL_AD
        MOV   R2,#08H
        LCALL AWRITE
        NOP
        LCALL READ_EE
        MOV   SYS_STATE,#00H
        SJMP  KEY_MENU9_END
KEY_MENU9_3:
        CJNE  A,#03H,KEY_MENU9_END

        ;SJMP  KEY_MENU9_END
KEY_MENU9_END:
        LJMP  KEY_END

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;退出菜单
KEY_MENU10:
        NOP
        JNB   KEY_UP_F,KEY_MENU10_END
        MOV   A,KEY_VALUE
        ANL   A,#03H
        CJNE  A,#00H,KEY_MENU10_1
        MOV   SYS_STATE,#03H
        SJMP  KEY_MENU10_END
KEY_MENU10_1:
        CJNE  A,#01H,KEY_MENU10_2
        MOV   SYS_STATE,#09H
        SJMP  KEY_MENU9_END
KEY_MENU10_2:
        CJNE  A,#02H,KEY_MENU10_3
        MOV   SYS_STATE,#00H
        SJMP  KEY_MENU10_END
KEY_MENU10_3:
        CJNE  A,#03H,KEY_MENU10_END

        ;SJMP  KEY_MENU10_END
KEY_MENU10_END:
        LJMP  KEY_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        END

⌨️ 快捷键说明

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