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

📄 80c196jianpan.asm

📁 单片80C196的键盘扫描和数码显示控制的一个实例。
💻 ASM
字号:
;80c196键盘显示

OUTSEG  EQU 0FFFCH      ;字形控制口
OUTBIT  EQU 0FFFDH      ;字位/键扫控制口
IN_KEY  EQU 0FFFEH      ;键盘读入口

$INCLUDE(8096.INC)
        CSEG AT 2080H
        LD 18H,#00E0H
        LDB 1CH,#06H
        LDB 1AH,#10H
        LD 1EH,#0079H
LOOP1:  STB 1AH,[1EH]+
        DJNZ 1CH,LOOP1
        LDB 7EH,#12H
        LCALL DISP
KEYSM:  LCALL DISP
        LCALL KEYM0
        SJMP KEYSM
;----------------------------
KEYM0:  LDB 1AH,#0FFH        ;屏蔽显示
        STB 1AH,OUTSEG[00H]  ;关字形口
        LD 26h,#0feffH
        LD 1CH,#0008H
        LDB 2EH,#00H
KEYS1:  STB 27H,OUTBIT[00H]  ;键扫描
        SHL 26H,#01H         ;指向下一位
gkyx_r: ldb 1aH,IN_KEY[00H]  ;读键值口
        ldb 1bh,IN_KEY[00H]
        cmpb 1ah,1bh
        jne gkyx_r
        JBS 1BH,0,NKEY
;----------------------------
        LDB 1aH,#0FFH
        STB 1aH,OUTBIT[00H]
        NOP
        NOP
        NOP
        LDB 1AH,IN_KEY[00H]
        JBS 1Ah,0,YKEYX
        LDB 1AH,IN_KEY[00H]
        JBS 1Ah,0,YKEYX
        LDB 1AH,IN_KEY[00H]
        JBS 1Ah,0,YKEYX
NKEY:   INCB 2EH              ;列值加1
        DJNZ 1CH,KEYS1        ;未到8列转
        RET
;----------------------------
YKEYX:  LDB 1AH,#00H
        LJMP YKEY5
;----------------------------
DISP:   LD 30H,#79H
        LDB 1EH,#20H
        LDB 29H,#06H
        LDB 28H,#30H
DISP1:  LD 20H,#OUTSEG
        LD 22H,#OUTBIT
        STB 1EH,[22H]
        CLRB 1BH
        LDB 1AH,[30H]
        LD 1CH,#DATA0
        ADD 1CH,1AH
        LDB 1AH,[1CH]
        STB 1AH,[20H]
        INCB 30H
        SHRB 1EH,#01H
LOOP4:  LDB 1BH,IN_KEY[00H]
        JBC 1Bh,1,KEYRS
        JBC 1Bh,2,KEYRS
        JBC 1Bh,3,KEYRS
        DJNZ 28H,LOOP4
        DJNZ 29H,DISP1
        LDB 1AH,#0FFH
        LD 1EH,#OUTSEG
        STB 1AH,[1EH]
        RET
;--------------------------
KEYRS:  POP 28H
        LCALL KEYR0
        LJMP KEYSM
;---------------------------
KEYR0:  LDB 1AH,#0FFH        ;屏蔽显示
        STB 1AH,OUTSEG[00H]  ;关字形口
        LD 26h,#0feffH
        LD 1CH,#0008H
        LDB 2EH,#00H
KEYR1:  STB 27H,OUTBIT[00H]   ;键扫描
        SHL 26H,#01H          ;指向下一位
        LDB 28H,#06H
NKERY:  LDB 1AH,IN_KEY[00H]   ;读键值口
        JBS 1AH,1,YKED2
        LDB 1AH,#08H
        SJMP YKEY5
;----------------------------
YKED4:  DJNZ 28H,NKERY
        INCB 2EH              ;列值加1
        DJNZ 1CH,KEYR1        ;未到8列转
        RET
;----------------------------
YKED2:  JBS 1AH,2,YKED3
        LDB 1AH,#10H
        SJMP YKEY5
;----------------------------
YKED3:  JBS 1AH,3,YKED4
        LDB 1AH,#18H
YKEY5:  ADDB 1AH,2EH
        CMPB 1AH,#10H
        JC YKEY6
        LD 28H,#DATA1
        ADDB 28H,1AH
YKEY8:  LDB 1BH,[28H]+
        LDB 7EH,1BH
        RET
;----------------------------
YKEY6:  LDB 7EH,#11H
        RET
;----------------------------
DATA0:  DCB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
        DCB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
DATA1:  DCB 07H,04H,08H,05H,09H,06H,0AH,0BH
        DCB 01H,00H,02H,0FH,03H,0EH,0CH,0DH
;----------------------------
        END

⌨️ 快捷键说明

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