矩阵键盘在51单片机的案例中应用较多,但是在Arduino中很少使用,今天小编就特立独行一次,在Arduino中搭建一个3*3的矩阵键盘。
一、什么是矩阵键盘?
矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组,实际上就是把键盘排成阵列,常见的有3行3列,4行4列等等。矩阵式的键盘显然比独立按键要复杂,不仅电路设计复杂,而且按键识别程序也比较复杂。
为什么会设计矩阵键盘呢?
举个例子,假设案例中要用到9个按键,我们先按照独立按键的方式连接到Arduino UNO板上,就需要占用9个引脚;如果我们换成矩阵键盘的连接方式,只需要6个引脚即可。如果是16个按键呢?所以说,使用矩阵键盘的优点是可以节约单片机的IO口(引脚)。
二、矩阵键盘的识别方法
目前,在矩阵键盘按键的识别方法中,最常用的一种方法叫做行扫描法,也叫动态扫描法,我们以Arduino接入的3*3矩阵键盘为例,介绍行扫描法的原理。行扫描法3行3列的矩阵式键盘设置行线为编程的输入线,列线为输出线,然后按照以下步骤判断被按下的按键位置。
行扫描法
1.列线输出全为0,读入行线,当行线读入全为1时,无按键按下;否则,有按键按下,进行延时去抖,然后再采用逐行扫描法判断按键位置。
2.先让第一列输出0,其他列输出1,分别判断行线,当某一行输出0时,则表示该行有按键按下,通过计算输出该按键的编号。
3.如果全部行线都没有输出0,则继续拉低下一列,其他列输出1,再次判断所有行线,如果某一行输出0,则表示该行有按键按下,输出其编号。
4.重复以上逐行扫描过程,直到全部扫描完成。
Arduino中实现3*3矩阵键盘的代码如下:
int hang[] = {4, 3, 2};
int lie[] = {7, 6, 5};
void setup() {
Serial.begin(9600);
for (int i = 0; i < 3; i++)
{
pinMode(hang[i], INPUT);
pinMode(lie[i], OUTPUT);
}
}
void loop() {
//列线输出0
digitalWrite(lie[0], LOW);
digitalWrite(lie[1], LOW);
digitalWrite(lie[2], LOW);
if (!digitalRead(hang[0]) || !digitalRead(hang[1]) || !digitalRead(hang[2]))
{
delay(10);
if (!digitalRead(hang[0]) || !digitalRead(hang[1]) || !digitalRead(hang[2]))
{
digitalWrite(lie[0], LOW);//扫描第一列
digitalWrite(lie[1], HIGH);
digitalWrite(lie[2], HIGH);
for (int j = 0; j < 3; j++)
{
if (!digitalRead(hang[j]))
{
Serial.println(0 + j * 3 + 1);//在串口监视器中输出键盘编号
while (!digitalRead(hang[j]));
}
}
digitalWrite(lie[0], HIGH);//扫描第二列
digitalWrite(lie[1], LOW);
digitalWrite(lie[2], HIGH);
for (int j = 0; j < 3; j++)
{
if (!digitalRead(hang[j]))
{
Serial.println(1 + j * 3 + 1);
while (!digitalRead(hang[j]));
}
}
digitalWrite(lie[0], HIGH);//扫描第三列
digitalWrite(lie[1], HIGH);
digitalWrite(lie[2], LOW);
for (int j = 0; j < 3; j++)
{
if (!digitalRead(hang[j]))
{
Serial.println(2 + j * 3 + 1);
while (!digitalRead(hang[j]));
}
}
}
}
}
关于在Arduino中如何使用矩阵键盘的内容就为大家分享这些了,欲知更多精彩内容,可长按下面的二维码关注作者微信公众号,走过路过不要错过哦~