找回密码
 立即注册

QQ登录

只需一步,快速开始

基础模块资料库

基于Arduino 使用矩阵键盘


矩阵键盘

矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O则作为输入。

组成结构

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

4X3矩阵键盘
1.png
(4X3矩阵键盘电路图)

如上图所示,4X3键盘总共有7个引脚,分别是4行和3列,行数从下往上我们做了一个标号4-7号,列数从右往左做了标号1-3号,这个标号在编辑程序的时候需要对应到控制器的引脚里。接下来我们来看看定义键盘输入值和引脚的程序。
Mixly图形化程序,比较直观
2.png

以上程序我们可以看出使用二维数组来定义了每个按键里的值,图片里的定义是按照键盘来排列的,我们也可以放入自己需要的字符,根据需要改吧,在下面一个模块是矩阵键盘跟Arduino控制器连接的引脚号,列管脚1-3分别插到控制器里的3#-5#,行管脚4-7分别插到控制器6#-9#。
定义值和引脚连接搞定后我们就需要读取按键的值了,我们可以看到矩阵键盘我们定义了一个名称“KEY”,我们用串口打印这个“KEY”就行
3.png
附上完整程序
4.png
代码:
  1. #include <Keypad.h>
  2. char KEYPAD_4_3_hexaKeys[4][3] = {{'1', '2', '3'},{'4', '5', '6'},{'7', '8', '9'},{'*', '0', '#'}};
  3. const byte KEY_ROWS = 4;
  4. const byte KEY_COLS = 3;
  5. byte KEY_rowPins[KEY_ROWS] = {9,8,7,6};
  6. byte KEY_colPins[KEY_COLS] = {5,4,3};
  7. Keypad KEY = Keypad(makeKeymap(KEYPAD_4_3_hexaKeys), KEY_rowPins, KEY_colPins, KEY_ROWS, KEY_COLS);
  8. void setup(){
  9.   Serial.begin(9600);
  10. }
  11. void loop(){
  12.   Serial.println(KEY.getKey());
  13. }
复制代码
接线方式

4X3矩阵键盘   <------>    Arduino uno
1      <------>       3
2     <------>     4
3     <------>    5
4      <------>      6
5     <------>     7
6    <------>     8
7    <------>     9

扩展资料
5.png
(4X3矩阵键盘 工业键)

6.png

(4X3矩阵键盘 工业键电路图)

从上图电路我们可以看出,工业键盘的键盘号排列有点不同,还是按照行从下往上列从右往左排列就行。

4X3矩阵键盘   <------>    Arduino uno
1      <------>       4
2     <------>     9
3     <------>     5
4      <------>      6
5     <------>     3
6    <------>     7
7    <------>     8
程序跟上面一样

4X4矩阵键盘
7.png
(4X4矩阵键盘电路图)

如上图所示,4X4键盘总共有8个引脚,分别是4行和4列,行数从下往上我们做了一个标号5-8号,列数从右往左做了标号1-4号,这个标号在编辑程序的时候需要对应到控制器的引脚里。接下来我们来看看定义键盘输入值和引脚的程序。
Mixly图形化程序,比较直观

8.png
以上程序我们可以看出使用二维数组来定义了每个按键里的值,图片里的定义是按照键盘来排列的,我们也可以放入自己需要的字符,根据需要改吧,在下面一个模块是矩阵键盘跟Arduino控制器连接的引脚号,列管脚1-4分别插到控制器里的3#-6#,行管脚5-8分别插到控制器7#-10#。
定义值和引脚连接搞定后我们就需要读取按键的值了,我们可以看到矩阵键盘我们定义了一个名称“KEY”,我们用串口打印这个“KEY”就行
9.png
附上完整程序
10.png
代码:
  1. #include <Keypad.h>
  2. char KEYPAD_4_4_hexaKeys[4][4] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'*', '0', '#', 'D'}};
  3. const byte KEY_ROWS = 4;
  4. const byte KEY_COLS = 4;
  5. byte KEY_rowPins[KEY_ROWS] = {10,9,8,7};
  6. byte KEY_colPins[KEY_COLS] = {6,5,4,3};
  7. Keypad KEY = Keypad(makeKeymap(KEYPAD_4_4_hexaKeys), KEY_rowPins, KEY_colPins, KEY_ROWS, KEY_COLS);
  8. void setup(){
  9.   Serial.begin(9600);
  10. }
  11. void loop(){
  12.   Serial.println(KEY.getKey());
  13. }
复制代码
接线方式

4X4矩阵键盘   <------>    Arduino uno
1      <------>       3
2     <------>     4
3     <------>     5
4      <------>      6
5     <------>     7
6    <------>     8
7    <------>     9
8    <------>     10

分享至 : QQ空间
收藏

0 个回复

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