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

📄 anjiancehngxu.txt

📁 51单片机学习的实用程序的运用,希望给大家带来帮助!
💻 TXT
字号:
4*4矩阵键盘扫描汇编程序(基于51单片机)
关键词: 矩阵键盘                                           

;//======================================================================
;//
;//     程序名称:4-4keyscan.asm
;//     程序用途:4*4矩阵键盘扫描检测
;//     功能描述:扫描键盘,确定按键值。程序不支持双键同时按下,
;//               如果发生双键同时按下时,程序将只识别其中先扫描的按键
;//     程序入口:void
;//     程序出口:KEYNAME,包含按键信息、按键有效信息、当前按键状态
;//     编写人  :黄伟,2007-12-11
;//     最后修改:黄伟,2007-12-12
;//
;//======================================================================
PROC    KEYCHK
KEYNAME         DATA    40H             ;按键名称存储单元
                                        ;(b7-b5纪录按键状态,b4位为有效位,
                                        ;b3-b0纪录按键)
KEYRTIME        DATA    43H             ;重复按键时间间隔
SIGNAL          DATA    50H             ;提示信号时间存储单元
KEY             EQU     P3              ;键盘接口(必须完整I/O口)
KEYPL           EQU     P0.6            ;指示灯接口
RTIME           EQU     30              ;重复按键输入等待时间

KEYCHK:
;//=============按键检测程序=============================================
        MOV     KEY,#0FH                ;送扫描信号
        MOV     A,KEY                   ;读按键状态
        CJNE    A,#0FH,NEXT1            ;ACC<=0FH
;       CLR     C                       ;Acc等于0FH,则CY为0,无须置0
NEXT1:
;       SETB    C                       ;Acc不等于0FH,则ACC必小于0FH,
                                        ;CY为1,无须置1
        MOV     A,KEYNAME
        ANL     KEYNAME,#1FH            ;按键名称屏蔽高三位
        RRC     A                       ;ACC带CY右移一位,纪录当前按键状态
        ANL     A,#0E0H                 ;屏蔽低五位
        ORL     KEYNAME,A               ;保留按键状态
;//=============判别按键状态,决定是否执行按键扫描========================
        CJNE    A,#0C0H,NEXT2           ;110按键稳定闭合,调用按键检测子程序
        SJMP    KEYSCAN
NEXT2:
        CJNE    A,#0E0H,NEXT3           ;111按键长闭合,重复输入允许判断
        SJMP    WAIT   
NEXT3:
        CJNE    A,#0A0H,EXIT            ;101干扰,当111长闭合处理
        ORL     KEYNAME,#0E0H
WAIT:
        MOV     A,KEYRTIME
        JNZ     EXIT                    ;时间没到,退出
 
;//=============键盘扫描程序==============================================
KEYSCAN:
        MOV     R1,#0                   ;初始化列地址
        MOV     R3,#11110111B           ;初始化扫描码
LOOP:
        MOV     A,R3
        RL      A
        MOV     R3,A                    ;保留扫描码
        MOV     KEY,A                   ;送扫描码
        MOV     A,KEY                   ;读键盘
        ORL     A,#0F0H                 ;屏蔽高四位
        CJNE    A,#0FFH,NEXT31          ;A不等于FFH,说明该列有按键动作
        INC     R1                      ;列地址加1,准备扫描下一列
        CJNE    R1,#4,LOOP              ;列地址不等于4,扫描下一列
        SJMP    EXIT                    ;没有按键,退出
;//=============按键判断对应位等于零,说明该行有按键按下==================
NEXT31:
        JB      ACC.0,NEXT32
        MOV     R2,#0                   ;第0行有按键
        SJMP    NEXT5
NEXT32:
        JB      ACC.1,NEXT33
        MOV     R2,#1                   ;第1行有按键
        SJMP    NEXT5
NEXT33:
        JB      ACC.2,NEXT34
        MOV     R2,#2                   ;第2行有按键
        SJMP    NEXT5
NEXT34:
        MOV     R2,#3                   ;第3行有按键
NEXT5:                                  ;计算按键地址
        MOV     A,R1
        RL      A
        RL      A                       ;列地址乘4(每列对应4行)
        ADD     A,R2                    ;加行地址
        MOV     DPTR,#KEYTAB
        MOVC    A,@A+DPTR
        ANL     KEYNAME,#0E0H
        ORL     KEYNAME,A               ;送按键(送值的时候已经置按键有效)
        MOV     KEYRTIME,#RTIME         ;送重复按键等待时间
        CLR     KEYPL                   ;打开指示灯
        MOV     SIGNAL,#10              ;送信号提示时间(每次按键闪100ms)
EXIT:
        MOV     KEY,#0FFH               ;置键盘接口高电平
        RET                             ;退出
 
;//=============按键名称表================================================
KEYTAB:
DB      1AH     ;扫描码0,对应A ******************************************
DB      1BH     ;扫描码1,对应B **                                      **
DB      1CH     ;扫描码2,对应C **      I/O口   PX.4  PX.5  PX.6  PX.7  **
DB      1DH     ;扫描码3,对应D **                                      **
DB      11H     ;扫描码4,对应1 **      PX.0    A(0)  1(4)  2(8)  3(C)  **
DB      14H     ;扫描码5,对应4 **                                      **
DB      17H     ;扫描码6,对应7 **      PX.1    B(1)  4(5)  5(9)  6(D)  **
DB      1EH     ;扫描码7,对应E **                                      **
DB      12H     ;扫描码8,对应2 **      PX.2    C(2)  7(6)  8(A)  9(E)  **
DB      15H     ;扫描码9,对应5 **                                      **
DB      18H     ;扫描码A,对应8 **      PX.3    D(3)  E(7)  0(B)  F(F)  **
DB      10H     ;扫描码B,对应0 **                                      **
DB      13H     ;扫描码C,对应3 ******************************************
DB      16H     ;扫描码D,对应6
DB      19H     ;扫描码E,对应9
DB      1FH     ;扫描码F,对应F
 
        END


⌨️ 快捷键说明

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