目录
前言
本站带领大家了解矩阵键盘,知道其电路连接,以及在此连接模式下如何通过“扫描”来获取键值。
通过简易密码锁制作来带大家感受单片机带来的小乐趣,同时熟悉逻辑代码的实现。
一、本站实验
1、实验6-1 矩阵键盘
通过编写函数MatrixKey(),获取矩阵键盘键值S1-S16并返回。主函数中利用lcd_1602模块输出显示MatrixKey()返回的键值。
2、实验6-2 矩阵键盘密码锁
实验6-1中我们通过函数MatrixKey()、lcd_1602模块化编程实现了在lcd模块显示输入的键值。在实验6-2中,我们实现通过矩阵键盘输入密码并实时显示在lcd模块,设计清零和确认按钮,实现可重复输入,确认密码是否正确,输入清零的功能,通过清晰明了的代码简单实现了简易密码锁。
二、矩阵键盘
1、矩阵键盘介绍
普中51开发板上的矩阵键盘是由4*4的机械按键组成的矩阵,将某一行的其中一个引脚连接在同一个IO口,将某一列的按键的另一个引脚连接在同一个IO口,例如第一行的S1-S4按键左边的引脚共同连接在P1_7,第一列的S1-S13按键右侧的引脚连接在P1_3。这种连接方式可以节约IO口,通过独立按键的学习知道每个独立按键占一个IO用来检测其是否按下,那么矩阵键盘如果按照独立的连接方式则需要16个IO,而通过矩阵形式排列只需要(行+列)个IO。图6-1为矩阵键盘实物图及电路图。
图6-1 矩阵键盘
2、扫描
本文所使用的扫描方式为列扫描,对应的还有行扫描,我们来介绍一下列扫描。
矩阵按键有16个口,我们想要知道哪个按键按下,就要检测对应连接的引脚的电平,现在每一行的按键的其中一个引脚连接在一起,比如S1-S4连接在P1_7,而每一列的按键引脚连接在一起,比如
第一列的S1-S13连接在P1_3;
我们单独看某一行或者某一列,比如第一列S1-S13,我们令公共端P1_3为低电平,然后检测各个按键的另一个引脚的电平,如果是0,就说明对应的按键被按下;同理,我们可以让第二行的公共端P1_2为低电平,再检测这一列的按键是否被按下。
注意:当我们检测第一列时,第一列公共端引脚设为低电平,其他三列为高电平;同理,检测第二列时,其他列设为高电平。
按照上述,我们想要知道哪个按键被按下,可以轮询所有按键,检测非公共端的引脚是否为低电平(前提是设置了公共端引脚为低电平)。
此时列扫描的意思就是,按列进行扫描,先扫描第一列的四个IO,再扫描第二列,以此类推。
行扫描就是扫描第一行,再第二行。。。