矩阵键盘
51单片机-矩阵键盘
一、调试工具LCD1602
我们在学习C/C++
时,可以通过printf
或cout
很方便的在控制台中查看到输出的内容。但是在单片机中就没有这么方便了,所以我们需要一个能够显示内容的元件,来供我们调试使用。数码管其实也可以但由于显示内容少,采用的是扫描方式,我们选用LCD1602来显示打印输出内容。
下面提供了可以直接使用的函数:
LCD1602.h
1 |
|
LCD1602.c
1 |
|
案例:显示hello world
代码:
1 |
|
现象:
二、矩阵键盘的介绍
- 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式
- 采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态
2.1 扫描的概念
数码管扫描(输出扫描)
原理:显示第一位—>显示第二位—>显示第三位—> ······,然后快速循环这个过程,最终实现所有数码管同时显示的效果
矩阵键盘扫描(输入扫描)
原理:读取第一行(列)—> 读取第二行(列)—> 读取第三行(列)—> ······,然后快速循环这个过程,最终实现所有按键同时检测的效果
以上两种扫描方式的共性:节省I/O口
2.2 独立按键
独立按键的检测方式:所有的一端接GND(低电平) ,当按键按下即可被检测到输入的低电平。
2.3 矩阵按键
矩阵键盘可以看做一行行的独立按键。
就这样从第一行然后第二行最后第四行逐行检测,例如:
检测第一行可令P17 P16 P15 P14分别为0111,即第一行与独立按键接地等效;然后检测P13 P12 P11P1 0唧可得出哪个按键被按下。
第一行按键检测代码
1 | unsigned char oneRow(){ |
然后再是第二行,可邻P17 P16 P15 P14分别为1011,即第二行与独立按键接地等效;然后同理检测P13 P12 P11 P1 0唧可得出哪个按键被按下。
第二行按键检测代码
1 | unsigned char twoRow(){ |
第三行,可令P17 P16 P15 P14分别为1101,即第三行与独立按键接地等效:同理检测P13 P12 P11P1 0即可得出哪个按键被按下。
第三行按键检测代码
1 | unsigned char threeRow(){ |
第四行,令P17 P16 P15 P14分别为1110,即第四行与独立按键接地等效;然后同理检测P13 P12P11 P1 0即可得出哪个按键被按下。
第四行按键检测代码
1 | unsigned char fourRow(){ |
将上面代码合在MatrixKey的函数中:
MartriKey.c
1 | unsigned char MartinKey(){ |
2.4 实现在LCD1602中显示按下按键的序号
main.c
1 | void main(){ |
现象:
三、利用矩阵键盘实现密码锁
1 |
|
现象: