电子产业一站式赋能平台

PCB联盟网

搜索
查看: 28|回复: 0
收起左侧

矩阵键盘的“一厢情愿”与“两情相悦”

[复制链接]

208

主题

208

帖子

1635

积分

三级会员

Rank: 3Rank: 3

积分
1635
发表于 2021-5-12 21:39:00 | 显示全部楼层 |阅读模式

5dqxhzrajxt64069781754.png

5dqxhzrajxt64069781754.png

点击上方「嵌入式实验基地」,选择「置顶公众号」第一时间查看嵌入式笔记!

      来这里,还可以学习HAL库的使用哦
前言 ??日常设计中,不可避免的会使用到按键,像我们常见的 POS 机、计算器等设备用到的按键是非常多的,如果采用普通的 1 个 IO 1 个按键的设计方法,显然对单片机资源来说是非常浪费的,所以采用类似矩阵的设计思路,能够大大减少 MCU IO 的使用,也是我们所说的矩阵键盘。
应用场景

xo3jt1prnxq64069781854.jpg

xo3jt1prnxq64069781854.jpg

qo4wwmkfvgd64069781954.jpg

qo4wwmkfvgd64069781954.jpg

z1jznw220fq64069782054.jpg

z1jznw220fq64069782054.jpg

一、矩阵键盘的两种扫描方式??矩阵键盘常用的有以下两种扫描方式,相比较之下,小飞哥更推荐第二种扫描方式,第二种扫描方式能够更有效地避免错误按键,本次分享的也是第二种扫描方式的代码。
  • 逐行扫描:高四位输出低电平来对矩阵键盘逐行扫描,当低四位接受数据不全为一,表示有按键按下,然后通过接收到的数据是哪一位为 0 来判断哪个按键被按下,可以简单理解为,“一厢情愿型”;
  • 行列扫描:高四位全部输出低电平,低四位输出高电平。当接受到的数据,低四位不全为高电平时,说明有按键按下。然后通过接收到的值判断是哪一列有按键按下,然后再反过来高四位输出高电平,第四位低电平,然后通过高四位接收到的值判断哪一行按键按下,可以简单理解为,“两情相悦型”;
    二、“两情相悦型”按键扫描方式详解

    4bzrty5mga064069782154.png

    4bzrty5mga064069782154.png

    ??上面图片是 4*4 矩阵键盘电路设计,ROW1-ROW4 为键盘你的行,COL1-COL4 为键盘的列,8 个 IO 共 16 个按键,我们以 K1 按下为例,分析具体的工作流程:
  • 1、 先把行切换为上拉输入模式
  • 2、把列切换为输出模式,输出低电平
  • 3、获取当前行输入状态
    即:ROW1 线上此时为低电平,按下之前 ROW1-ROW4 为:1111,即 0x0F,按下之后,ROW1 与 COL1 连通,ROW1-ROW4 的值变为:1110,即 0x0e,此时获取到按键所在行;
  • 4、把行切换为输出状态,输出低电平
  • 5、把列切换为上拉输入模式
  • 6、获取当前列输入状态
    即:COL1 线上此时为低电平,按下之前 COL1-COL4 为:1111,即 0x0F,按下之后,ROW1 与 COL1 连通,COL1-COL4 的值变为:1110,即 0x0e,此时获取到按键所在列;
  • 7、两次行列状态获取完成之后,即确定了按键所在行列,得到按键编码:0xee,值并不是唯一的 0xee,具体跟硬件连接有关系。 硬件连接 ??调试用的键盘为这种非常简单的,某宝几毛钱,邮费都不够的说~

    fobuuyoahyi64069782254.jpg

    fobuuyoahyi64069782254.jpg

    MCU键盘PF0ROW1PF1ROW2PF2ROW3PF3ROW4PG0COL1PG1COL2PG2COL3PG3COL4
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表