首页 > 百科杂谈 > 矩阵键盘原理图及代码文件(构造矩阵键盘的原理及代码实现)

矩阵键盘原理图及代码文件(构造矩阵键盘的原理及代码实现)

构造矩阵键盘的原理及代码实现

矩阵键盘是一种常见的电子键盘,它由按键和电路组成。该电路使用较少的引脚以及代码实现方式易于实现,因此非常适合嵌入式开发。本文将介绍矩阵键盘的原理、代码实现方法以及如何使用该键盘来实现按键功能。

矩阵键盘的原理

矩阵键盘的原理是通过使用多个引脚来扫描按键,并通过矩阵电路进行按键编码。每一行和每一列都与一个引脚相连,这些引脚用于扫描按键的状态。从而,电路可以依据按键的按下情况编码。

矩阵键盘中的键位可以形成一个网格状的布局,其中每行与每列的交点处称为一个按键,被称为“键位”。例如,一个简单的4x4键盘可以使用10个引脚来检测每个键位。当按键按下时,该键位所在的行引脚和列引脚都会置高,这种状态可以被检测到。

为了检测每个按键,一种常见的做法是依次扫描每一行的引脚,读出每一行的状态(高或低)。然后,扫描每一列的引脚,并确定每个键是否按下。如果某个行与列在同一时间都被检测到,则该键被认为是被按下的。

实现代码

在这种实现方式中,需要设置一个矩阵键盘的类型(如4x4、3x4等)。为了完成按键扫描,首先定义相应的引脚。在这个例子中,行引脚由引脚0至引脚3表示,列引脚则由引脚4至引脚7代表。

#define ROW_NUM 4
#define COL_NUM 4
int row_pins[ROW_NUM] = {2, 3, 4, 5}; 
int col_pins[COL_NUM] = {6, 7, 8, 9};

接下来,需要声明一个用于存储按键编码的变量:

uint16_t keymap[ROW_NUM][COL_NUM] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

这里,按键编码是通过按键所在的行和列来设置的。例如,当第一行的第三列被按下时,对应的按键编码就是‘3’。当某个键被按下后,可以简单地在显示屏上显示对应的按键。

要实现的主要功能是对按键进行扫描,这个过程可以看作是矩阵键盘的工作原理。在本例子中,进行检测的循环次数是按键矩阵的大小。扫描的主要目的是检测每个键位是否被按下:

void scan_key(void) {
  static bool pressed;
  static uint16_t last_key = 0;
  for (int i = 0; i < ROW_NUM; ++i) { 
    pinMode(row_pins[i], OUTPUT);
    digitalWrite(row_pins[i], LOW);
    for (int j = 0; j < COL_NUM; ++j) {
      if (digitalRead(col_pins[j]) == LOW) { 
        if (!pressed) { 
          pressed = true;
          uint16_t key = keymap[i][j]; 
          last_key = key;
        }
      } else if (last_key != 0) { 
        pressed = false;
        Serial.println(last_key); 
        last_key = 0; 
      }
      pinMode(col_pins[j], OUTPUT);
      digitalWrite(col_pins[j], HIGH);
    }
    digitalWrite(row_pins[i], HIGH);
    pinMode(row_pins[i], INPUT_PULLUP); 
  }
}

该函数的主循环通过两层循环实现对按键矩阵的扫描。对于每个行,它将引脚设置为输出状态,将低电平作为输出。然后,它在列上循环扫描输入。如果该键位已经被按下,便读取其按键编码,然后将它视作最近一次按键。如果该键位被松开,且上一个按键并没有被处理,就可以将该按键从键盘缓存中删除。

应用场景及

这种矩阵键盘的实现方式是一种简单而简洁的方法,容易理解和实现。该方法是嵌入式系统所需的矩阵键盘电路的应用基础,并且通常被用于各种应用场景。例如,它可以用于操作安防代理根据输入的密码来解锁某个门。此外,矩阵键盘还可以应用于计算器和游戏机等各种嵌入式系统中。

总而言之,本文提供了实现矩阵键盘的基本方法,以及一个简单的键盘扫描程序的实现方式。希望阅读这篇文章的同学可以在这些基础上进行更多的扩展,以满足自己的需求。