[模块介绍] 6 x 6 矩阵键盘(硬件部分和扫描方法)
目录
概述
原理图
扫描方式
扫描法
单个按键按下
多个按键按下
行反转法
图解
成品
概述
矩阵键盘非常常见
就是利用键盘组成矩阵来减少IO口的使用
做成6×6的矩阵键盘可以使用12个IO口读取36个按键
矩阵键盘的优势在于成本低,无需其他芯片即可实现功能
原理图
这是我所制作的原理图
扫描方式
常见的扫描方式有2种,此原理图的方案这两种方法均可使用
扫描法
扫描法就是间隔一段时间给不同的控制线通低电平(默认不触发状态是高电平)之后读取接收线的电平高低,如果是低电平(接上拉避免误触,默认高电平)则认为这根控制线和接收线对应的按键被按下
单个按键按下
假设某一时刻,红色线为低电平,其余控制线为高电平,蓝色按键被按下,则只有黄色的接收线为低电平
如果某个时刻,如下图红色的为低电平,其余控制线为高电平,因为没有其他按键按下,因此只有蓝色按键被按下,所有没有线为低电平
以此类推,每隔一段时间改变控制线电压,即可找到按下的按键,
即哪个控制线通低电平,读取接收线,为低电平的是被按下的
多个按键按下
使用扫描法可以识别多个按键按下的情况,但并不是所有的情况均能识别出,这是原理的限制
显而易见,整行或整列的任意几个按键按下均可被识别出来
这行任意按下,均可再分时状态识别出来,即每个不同控制线的通低电平可以读取到读取线的低电平
这列被按下时,这列的控制线通低电平时,按下按键的读取线为低电平
“L”型按下则会出现误触
像这三个按键按下,因为这三个按键组成回路,使得不管控制线0或控制线1均会出现读取线的0和1为低电平
也就是会认为1,2,7,8这4个按键按下
以此类推,一般会再软件中禁止这些会发生误触的按键
这样子也会出现误触
其余情况不会发生误触且可以识别
行反转法
行反转法是一种比较高效的方法,大体的实现流程是
- 先给列(行)线通全部低电平,行(列)通高电平(开漏)
- 检测行(列)线电平,如果出现一个低电平则认为有按键被按下
- 读取行(列)线数值,保存下来
- 将列(行)通高电平,行(列)通低电平,读取列(行)的数值
- 这两个数值就代表这键盘按下的信息
可以做到和扫描法同样的多按键识别,同样L型会出现误触(硬件决定的)
图解
就像这样,每一个横线和竖线的交点为开关 ????
我们先给列线通高电平,行线设为低电平????
没有开关按下时,列线为高电平
假设这个按键被按下,则L0线被拉到低电平,读取列线(0b110)????
然后给行线通高电平, 列线通低电平,读取行线(0b110)????
则这两个代码(3,3)则代表这个按键被按下
两个或多个按键被按下,只要是硬件原理是上能被区分的均可识别出来
成品
这是使用AD画的PCB,(在10cm×10cm以内)
链接百度网盘https://pan.baidu.com/s/1ya_UqaPhN4RAMhYENeg8Mw?pwd=aahh%C2%A0
提取码:aahh