51矩阵键盘密码锁

准备工作:
材料:
工具准备




- 51单片机
- 我使用的是
STC89C52型号
的,其它类型的单片机都行,但是要注意其引脚的分布、I/O口类型,还有在烧录程序时注意更改单片机的型号。 - LCD1602液晶显示屏
- 购买单片机时,这个模块应该是赠送的,也可以单买。这里提一下
LCD1602
的控制指令,后面显示屏的初始化、写/读操作等需要用到。
LCD1602的使用代码

由于调试的代码过长,所以放入附件里了,有需要的可参考。这里面的几个调试函数说明一下:
函数介绍
ShowSignedNum(); | 显示有符号十进制数字 | |
ShowHexNum(); | 显示十六进制数字 | |
ShowBinNum(); | 显示二进制数字 | |
ShowChar(); | 显示字符 | |
ShowString(); | 显示字符串 | |
ShowNum(); | 显示数字 |
调试完后可以验证一下程序,调试中LED和数码管可能会乱闪,这是由于引脚冲突造成的。
矩阵键盘原理及实现

当我们设计一个矩阵键盘以减少对微控制器输入/输出(I/O)端口的需求时,可以使用一种有效的方法来管理多个按键。以51系列单片机为例,如果我们想要连接一个4x4的矩阵键盘,只需要使用8个I/O端口来控制16个按键。这是通过创建一个由行和列组成的网格实现的,在这个网格中,每个按键位于行线和列线的交叉点上。
具体来说,矩阵键盘的工作原理如下:
- 行线和列线分别连接到单片机的I/O端口上,形成一个网格。
- 当没有按键被按下时,行线和列线之间是相互隔离的。
- 当一个按键被按下时,它会短接一个行线和一个列线,从而改变该行和列之间的电气状态。
例如,如果我们把行线之一(比如P1.3)设为低电平(0),而其他的行线设为高电平(1),那么当位于P1.3行上的任何一个按键被按下时,与之相连的列线电平将会从高电平变成低电平。通过检测哪一行被设为了低电平以及哪一列的电平发生了变化,可以确定哪个按键被按下了。
例如:
- 如果我们把行线P1.3设置为低电平(0),其他行线保持高电平(1),并且检测到列线P1.7也变成了低电平(0),则说明位于P1.3行和P1.7列交叉点处的按键S1被按下了。
- 同样地,如果发现列线P1.6变成了低电平(0),那么我们可以判断位于P1.6列对应的行(假设此时行被设置为低电平的那一行为P1.0)上的按键S5被按下了。
因为51系列单片机的I/O端口具有内部上拉电阻特性(或称为“弱上拉强下拉”),即在未被设置为输出时,默认为高阻态,当作为输入时,内部有一个较弱的上拉电阻拉高电平。因此,在这种配置下,当没有按键被按下时,所有的列线都会保持高电平状态。当按键被按下时,相应的行线和列线之间的连接会使该列线变为低电平,这种电位的变化是可以被可靠检测的。
代码实现

完成LCD1602液晶显示屏和矩阵键盘的调试之后,就可以将这两个模块合在一起开发新的内容了,密码锁只是其中的一个小应用而已,你还可以使用这两个工具做更多好玩的内容,做一个简易的计算器?做一个实时日历放在实验室?还可以用来显示其他模块的数据。









