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

📄 8155kd.asm

📁 该程序可以为IC卡读写系统服务
💻 ASM
字号:
;键盘显示程序
        ORG     0000H
        AJMP    MAIN
        ORG     0030H
MAIN:   MOV     SP,#60H
        MOV     10H,#0          ;显示区送初值
        MOV     11H,#1
        MOV     12H,#2
        MOV     13H,#3
        MOV     14H,#4
        MOV     15H,#5
        MOV     DPTR,#0FF20H     ;8155方式
        MOV     A,#03
        MOVX    @DPTR,A
SDISP:  LCALL   DISP
OFFDISP:MOV     A,#0FFH          ;关显示器
        MOV     DPTR,#0FF22H
        MOVX    @DPTR,A
;--------------------------------------读键程序
        MOV     DPTR,#0FF21H     ;是否有键输入?
        MOV     A,#0
        MOVX    @DPTR,A
        MOV     DPTR,#0FF23H
        MOVX    A,@DPTR
        ANL     A,#07H
        CJNE    A,#07H,HK
        AJMP    SDISP
HK:     MOV     R7,#10
        LCALL   DELAY
        MOV     DPTR,#0FF21H     ;再次判断是否有键输入?
        MOV     A,#0
        MOVX    @DPTR,A
        MOV     DPTR,#0FF23H
        MOVX    A,@DPTR
        ANL     A,#07H
        CJNE    A,#07H,READK     ;确实有键,转读键程序
        AJMP    SDISP
READK:
        MOV     R4,#0            ;键盘列数初值
        MOV     R5,#0FEH         ;扫描键盘第一列
SCAN:   MOV     A,R5
        MOV     DPTR,#0FF21H     ;
        MOVX    @DPTR,A
        RL      A                ;准备扫下一列
        MOV     R5,A
        MOV     DPTR,#0FF23H     ;读行线(8155C口)
        MOVX    A,@DPTR
        ANL     A,#07H
        CJNE    A,#07H,KEYOP1    ;是这一列, 再确定是哪一行
        INC     R4               ;不是这一列,列数+1
        CJNE    R4,#8,SCAN       ;没有扫描完列线,继续
        LJMP    SDISP
KEYOP1:                          ;确定行线(行数×8)
        JB      ACC.0,KEYOP2
        MOV     A,#0
        AJMP    KEYOP
KEYOP2: JB      ACC.1,KEYOP3
        MOV     A,#08H
        AJMP    KEYOP
KEYOP3: JB      ACC.2,KEYOP4
        MOV     A,#10H
        AJMP    KEYOP
KEYOP4: JB      ACC.3,SDISP
        MOV     A,#18H
KEYOP:  ADD     A,R4             ;合成键值 (行数×8+列数)
        MOV     B,A
        CLR     C                ;判断键值是否 > F
        SUBB    A,#10H
        JC      KEYNAM
        AJMP    SDISP            ; >F,按键无效
;-------------------------------------------------------
KEYNAM: MOV     A,B
        MOV     DPTR,#KEYC       ;确定键名
        MOVC    A,@A+DPTR
        MOV     1EH,A            ;暂存键名
        MOV     R0,#14H          ;显示区的数移位
        MOV     R1,#15H
DISLOOP:MOV     A,@R0
        MOV     @R1,A
        DEC     R0
        DEC     R1
        CJNE    R1,#10H,DISLOOP  ;----------------
        MOV     10H,1EH          ;键码送显示区
        MOV     DPTR,#0FF21H     ;按键是否抬起?
        MOV     A,#0
        MOVX    @DPTR,A
        MOV     DPTR,#0FF23H
KEYON:  MOVX    A,@DPTR
        ANL     A,#0FH
        CJNE    A,#0FH,KEYON     ;没有抬起,再查
        LJMP    SDISP            ;--------------
DELAY:  MOV     R6,#0
        DJNZ    R6,$
        DJNZ    R7,DELAY
        RET
DISP:   MOV     R0,#10H
        MOV     R1,#01H
DNEXT:  MOV     DPTR,#DISPC      ;指向显示码表
        MOV     A,@R0            ;取显示数
        MOVC    A,@A+DPTR        ;取显示码
        MOV     DPTR,#0FF22H     ;显示数从PB口送出
        MOVX    @DPTR,A
        MOV     DPTR,#0FF21H     ;确定显示位
        MOV     A,R1
        MOVX    @DPTR,A
        RL      A
        MOV     R1,A
        MOV     R7,#2
        ACALL   DELAY
        INC     R0
        CJNE    R0,#16H,DNEXT
        RET
KEYC:	DB  07H,04H,08H,05H,09H,06H,0AH,0BH   ;0----7
	DB  01H,00H,02H,0FH,03H,0EH,0CH,0DH   ;8----F
        DB  10H,12H,14H,16H  ;TV,EPRGH,PRT,EXEC
        DB  11H,13H,15H,17H  ;REG,ODRW,COMP,PCDBG
        DB  18H,1AH,1CH,1EH  ;F1,EPROM,MOVE,SETP
        DB  19H,1BH,1DH,1FH  ;F2,EPCH,DAR,MON
DISPC:  DB  0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
        DB  80H,90H,88H,83H,0C6H,0A1H,86H,8EH
        END

⌨️ 快捷键说明

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