元器件交易网-中发网全新升级平台
关注我们:
首页 > IC技术 > 基础知识 > 正文

浅谈矩阵式键盘扫描原理

    矩阵式键盘扫描原理

    将键值显示在七节显示器上的单片机源码。把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,比对之后就可知道是哪个键被按下。

    比如说扫描码送入01111111,前面的0111是代表扫描第一行P1.0列,而后面的1111是让读取的4行接脚先设為VDD,若第一行的第三列按键被按下,那读取的结果就会变成01111101(注意1111变成1101),其中LSB的第三个bit会由1变成0,这是因為这个按键被按下之后,会被垂直的扫描码电位short,而把读取的LSB的bit电位拉到0,此即為扫描原理。

    由於这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,為了避免让8051误判為多次输入同一按键,我们必须在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定状态,再去判读所按下的键,就可以让键盘的输入稳定。

    SCAN:

    MOV R3,#F7H ; 扫描初始值

    MOV R1,#00H ; 取码指标

    SCAN1:

    MOV A,R3 ; 开始扫描

    MOV P1,A ; 将扫描值输出到 P1

    MOV A,P1 ; 读入 P1 判断是否有按下

    MOV R4,A ; 存到 R4, 判断是否放开

    SETB C ; C=1

    MOV R5,#04H ; 扫描 P14~P17

    L1:

    RLC A ; 将按键值左移一位元

    JNC KEYIN ; 若 C=0, 有按, 执行 KEYIN

    INC R1 ; 将指标值加 1, 继续扫描下一行

    DJNZ R5,L1 ; 扫描四行

    MOV A,R3 ; 载入扫描值

    SETB C ; C=1

    RRC A ; 扫描下一列(P13~P10)

    MOV R3,A ; 存回扫描值

    JC SCAN1 ; C=1, 尚未完成扫描

    RET ; 结束键盘扫描, 回到 Main Program

    KEYIN:

    MOV R7,#10 ; 消除弹跳

    D2:

    MOV R6,#248

    DJNZ R6,$

    DJNZ R7,D2

    D3:

    MOV A,P1 ; 读入 P1

    XRL A,R4

    JZ D3

    MOV A,R1

    MOV DPTR,#TABLE

    MOVC A,@A+DPTR

    Table:

    db0c0h,0f9h,0a4h,0b0h,099h   ;0-4

    db   092h,082h,0f8h,080h,090h   ;5-9

    db   088h,083h,0a7h,0a1h,086h   ;A-E

    db   08eh            ;F

    end

扫描左侧的二维码

科技圈最新动态一手掌握
每日砸蛋,中奖率100%