Arduino中矩阵键盘的编程与搭建

矩阵键盘在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中如何使用矩阵键盘的内容就为大家分享这些了,欲知更多精彩内容,可长按下面的二维码关注作者微信公众号,走过路过不要错过哦~

 

一个简单的PCB键盘,可轻松用于Arduino项目。提供了完全可定制的代码! 硬件部件: Arduino UNO × 1个 1N4148 –通用快速开关 × 64 触觉开关,顶部致动 × 64 排针× 1个 74HC595移位寄存器× 1个 软件应用程序和在线服务: Arduino IDE 手动工具和制造机: 烙铁(通用) 我目前正在开发一个带有集成键盘的项目,这带来了一个问题:如何在开发板原型包含键盘?我不能使用USB键盘或现有的基于Arduino的键盘,因为实际项目的键盘直接连接到处理所有其他功能的微控制器。因此,我设计了这种基于PCB的基本64键原型键盘矩阵。 该PCB不包含任何IC(集成电路)。键盘矩阵的行和列直接连接到引脚接头,以便键盘可以连接到Arduino或任何其他微控制器。它是为您的项目原型制作的完美选择,其包括集成键盘。 我已经包含了详细的,经过注释的代码,以使其与任何具有足够I / O引脚可用的Arduino兼容开发板一起使用,需要11个引脚。键盘有64个键,包括shift,caps,ctrl,alt,fn和“ special”的修饰符。还有六个其他键可用于任何您喜欢的操作。每个单个键的功能都可以单独定义,包括激活修饰符时每个键的功能。我认为,这比现有的键盘代码明显有用,后者严重限制了您自定义按键行为的能力。 提供的代码将文本打印到串行。如果您希望文本移至其他位置,则可以轻松更改。 关于程序大小的注意事项: 我提供的代码很大,因为它不使用任何现有的库。我完全从头开始编写此代码,以实现所需的可定制性。在Arduino UNO上,这将使用9100字节(28%)的程序存储空间,而全局变量使用394字节(19%)的动态内存。 我的代码可能会更高效,并且键盘的库和草图肯定会更小,但这是我可以设计的唯一方法,可以为每个键和每个修饰符提供完全的灵活性。它还考虑了实际的键盘使用情况。例如,在启用Caps Lock的情况下,按我的代码的同时按Shift键,将产生应小写的字母。默认情况下,在按ESC的同时按住FN键不会执行任何操作。但是该行为是完全可定制的,因此您可以根据自己的喜好进行更改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值