「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块

摘要:
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。108种传感器模块系列实验实验二十六:4X4矩阵键盘模块矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。工作原理矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。矩阵键盘所需库文件在ArduinoIDE1.8.0或者以上版本中,项目-˃加载库-˃管理库中搜索Keypad,然后安装即可。

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真) 实验二十六:4X4矩阵键盘模块(轻触式按键)

矩阵键盘

是单片机外部设备中所使用的排布类似于矩阵的键盘组。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4X4和8X8,其中用的最多的是4X4。

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第1张

工作原理
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4X4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。由于单片机IO端口具有线与的功能,因此当任意一个按键按下时,行和列都有一根线被线与,通过运算就可以得出按键的坐标从而判断按键键值。

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第2张

行列扫描法原理
1、使行线为编程的输入线,列线是输出线,拉低所有的列线,判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则所有的行线都为高电平。
2、在第一步判断有键按下后, 延时10ms消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下 一步,否则返回第一步重新判断。
3、开始扫描按键位置,采用逐 行扫描,每间隔1ms的时间,分别拉低第一列,第二列,第三列,第四 列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置,分别把行值和列值储存在寄存器里。
4、从寄存器中找到行值和列 值并把其合并,得到按键值,对此按键值进行编码,按照从第一行第一个一直到第四行第四个逐行进行编码,编码值从“0000” 至“1111” , 再进行译码,最后显示按键号码。

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第3张

4X4矩阵4管脚直插按键键盘
(1)体积小;
(2)节省空间;
(3)使用方便;
(4)共计16按键;
(5)单片机外扩键盘的上佳选择。

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第4张

矩阵键盘所需库文件

在Arduino IDE 1.8.0 或者以上版本中, 项目->加载库->管理库中搜索Keypad,然后安装即可。

也可以在下载库(需要下载库文件https://github.com/Chris--A/Keypad),然后手动添加到IDE中的libraries文件夹里面,重新启动IDE即可。

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第5张

安装4*4矩阵键盘
4*4矩阵键盘有一个8孔的排母,理论上可以直接插到0-7脚上,但0,1脚用于串口通信,所以只能选择2~13脚,这里选用了2-9脚。
Keypad Pin R1 –> Arduino Pin 2
Keypad Pin R2 –> Arduino Pin 3
Keypad Pin R3 –> Arduino Pin 4
Keypad Pin R4 –> Arduino Pin 5
Keypad Pin C1 –> Arduino Pin 6
Keypad Pin C2 –> Arduino Pin 7
Keypad Pin C3 –> Arduino Pin 8
Keypad Pin C4 –> Arduino Pin 9

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第6张

/*

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)

实验二十六:4X4矩阵键盘模块(12键示例代码)

实验区域位3x4

*/

 

#include <Keypad.h>

 

const byte ROWS = 4; 

const byte COLS = 3; 

 

char keys[ROWS][COLS] = {

  {'1','2','3'},

  {'4','5','6'},

  {'7','8','9'},

  {'#','0','*'}

};

byte rowPins[ROWS] = {5, 4, 3, 2}; 

byte colPins[COLS] = {8, 7, 6}; 

 

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

 

void setup(){

  Serial.begin(9600);

}

 

void loop(){

  char key = keypad.getKey();

 

  if (key != NO_KEY){

    Serial.println(key);

  }

}

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第7张

这是一个非常简单的示例,可以看到将键盘输入添加到Arduino程序中是多么容易。也可以将此类输入用于许多不同的项目,包括:
● 门锁
● 输入PWM
● 闹钟
● 安全锁等

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第8张

尝试图形编程

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第9张

/*

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)

实验二十六:4X4矩阵键盘模块(16键示例代码)

*/

 

#include <Keypad.h>

 

const byte ROWS = 4; 

const byte COLS = 4; 

 

char hexaKeys[ROWS][COLS] = {

  {'1','2','3','A'},

  {'4','5','6','B'},

  {'7','8','9','C'},

  {'*','0','#','D'}

};

 

byte rowPins[ROWS] = {2, 3, 4, 5}; 

byte colPins[COLS] = {6, 7, 8, 9}; 

 

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

 

void setup(){

  Serial.begin(9600);

}

 

void loop(){

  char customKey = customKeypad.getKey();

 

  if (customKey){

    Serial.println(customKey);

  }

}

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第10张

程序思路
1
#include <Keypad.h> //加载库
2
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};//建立二维数组,用于设置按键的输出字符
3
byte rowPins[ROWS] = {2,3,4,5}; //定义行引脚
byte colPins[COLS] = {6,7,8,9}; //定义列引脚
4
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //实例化Keypad 对象
5
char key = keypad.getKey();//新建一个key 变量 用于获取键盘当前的值

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第11张

4X4矩阵键盘模块的应用电路

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第12张

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第13张

尝试的仿真事件编程

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第14张

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块第15张

免责声明:文章转载自《「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle 12c新特性(For DBA)android动态申请权限下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

opencv 仿射变换 投射变换, 单应性矩阵

仿射 estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变。 getAffineTransform():计算3个二维点对之间的仿射变换矩阵H(2行x3列),自由度为6. warpAffine():对输入图像进行仿射变换 estimateAffine3D...

OptimalSolution(5)--数组和矩阵问题(1)简单

  一、转圈打印矩阵   题目:给定一个整型矩阵matrix,按照转圈的方式打印它。   要求:额外空间复杂度为O(1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10   思路:矩阵分圈处理问题。用...

【tensorflow2.0】张量的数学运算

张量的操作主要包括张量的结构操作和张量的数学运算。 张量结构操作诸如:张量创建,索引切片,维度变换,合并分割。 张量数学运算主要有:标量运算,向量运算,矩阵运算。另外我们会介绍张量运算的广播机制。 本篇我们介绍张量的数学运算。 一,标量运算 张量的数学运算符可以分为标量运算符、向量运算符、以及矩阵运算符。 加减乘除乘方,以及三角函数,指数,对数等常见函数,...

采用DCT进行图像压缩

一、实验目的:熟悉变换编码的图像压缩方法 二、实验内容:以所给图像为例,采用dct进行图像压缩编码,通过改变模板矩阵中非零元素的个数,得到不同缩编码图像, 根据公式 ,编写程序计算原图像和dct变换后得到的图像之间的均方误差。用到的matlab函数为im2double,dctmtx,blkproc。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

【Arduino】使用C#实现Arduino与电脑进行串行通讯

在给Arduino编程的时候,因为没有调试工具,经常要通过使用串口通讯的方式调用Serial.print和Serial.println输出Arduino运行过程中的相关信息,然后在电脑上用Arduino IDE的Serial Monitor来查看print出来的信息。Serial Monitor不仅可以接受Arduino发送到电脑的数据,还可以向Ardui...

矩阵求逆

LuoguP4783 思路: 求A的逆矩阵,把A和单位矩阵I放在一个矩阵里 对A进行加减消元使A化成单位矩阵 此时原来单位矩阵转化成逆矩阵 原理大概就是 A(逆) * [A I] = [I A(逆)] Code: 1 #include <bits/stdc++.h> 2 #define ll long long 3 using namespa...