xufeng 发表于 2021-8-17 16:28:03

基于Arduino 使用矩阵键盘

基于Arduino 使用矩阵键盘

矩阵键盘
矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O则作为输入。
组成结构
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
4X3矩阵键盘(4X3矩阵键盘电路图)
如上图所示,4X3键盘总共有7个引脚,分别是4行和3列,行数从下往上我们做了一个标号4-7号,列数从右往左做了标号1-3号,这个标号在编辑程序的时候需要对应到控制器的引脚里。接下来我们来看看定义键盘输入值和引脚的程序。Mixly图形化程序,比较直观
以上程序我们可以看出使用二维数组来定义了每个按键里的值,图片里的定义是按照键盘来排列的,我们也可以放入自己需要的字符,根据需要改吧,在下面一个模块是矩阵键盘跟Arduino控制器连接的引脚号,列管脚1-3分别插到控制器里的3#-5#,行管脚4-7分别插到控制器6#-9#。定义值和引脚连接搞定后我们就需要读取按键的值了,我们可以看到矩阵键盘我们定义了一个名称“KEY”,我们用串口打印这个“KEY”就行附上完整程序代码:#include <Keypad.h>
char KEYPAD_4_3_hexaKeys = {{'1', '2', '3'},{'4', '5', '6'},{'7', '8', '9'},{'*', '0', '#'}};
const byte KEY_ROWS = 4;
const byte KEY_COLS = 3;
byte KEY_rowPins = {9,8,7,6};
byte KEY_colPins = {5,4,3};
Keypad KEY = Keypad(makeKeymap(KEYPAD_4_3_hexaKeys), KEY_rowPins, KEY_colPins, KEY_ROWS, KEY_COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.println(KEY.getKey());
}
接线方式
4X3矩阵键盘   <------>    Arduino uno 1      <------>       32   <------>   43   <------>    54      <------>      65   <------>   76    <------>   87    <------>   9
扩展资料(4X3矩阵键盘 工业键)

(4X3矩阵键盘 工业键电路图)
从上图电路我们可以看出,工业键盘的键盘号排列有点不同,还是按照行从下往上列从右往左排列就行。
4X3矩阵键盘   <------>    Arduino uno 1      <------>       42   <------>   93   <------>   54      <------>      65   <------>   36    <------>   77    <------>   8程序跟上面一样
4X4矩阵键盘(4X4矩阵键盘电路图)
如上图所示,4X4键盘总共有8个引脚,分别是4行和4列,行数从下往上我们做了一个标号5-8号,列数从右往左做了标号1-4号,这个标号在编辑程序的时候需要对应到控制器的引脚里。接下来我们来看看定义键盘输入值和引脚的程序。Mixly图形化程序,比较直观
以上程序我们可以看出使用二维数组来定义了每个按键里的值,图片里的定义是按照键盘来排列的,我们也可以放入自己需要的字符,根据需要改吧,在下面一个模块是矩阵键盘跟Arduino控制器连接的引脚号,列管脚1-4分别插到控制器里的3#-6#,行管脚5-8分别插到控制器7#-10#。定义值和引脚连接搞定后我们就需要读取按键的值了,我们可以看到矩阵键盘我们定义了一个名称“KEY”,我们用串口打印这个“KEY”就行附上完整程序代码:#include <Keypad.h>
char KEYPAD_4_4_hexaKeys = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'*', '0', '#', 'D'}};
const byte KEY_ROWS = 4;
const byte KEY_COLS = 4;
byte KEY_rowPins = {10,9,8,7};
byte KEY_colPins = {6,5,4,3};
Keypad KEY = Keypad(makeKeymap(KEYPAD_4_4_hexaKeys), KEY_rowPins, KEY_colPins, KEY_ROWS, KEY_COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.println(KEY.getKey());
}接线方式
4X4矩阵键盘   <------>    Arduino uno 1      <------>       32   <------>   43   <------>   54      <------>      65   <------>   76    <------>   87    <------>   98    <------>   10
页: [1]
查看完整版本: 基于Arduino 使用矩阵键盘