使用51单片机实现一个电子密码锁,可以实现修改密码,三次错误输入锁定等功能。
说明
- 仿真工具:Proteus 8,keil5
- 利用c语言编程
- 仿真图根据51单片机实验板绘制,实物可以使用
- 使用模块:矩阵键盘,LCD1602
一、实现方法原理
笔者参考普中51单片机开发攻略,根据单片机内部电路模块连接方法来设计的程序。虽然电子密码锁之类的程序单片机设计已经比较基础,但是笔者认为自己亲自动手编程,从电路实际情况出发,去了解原理,去最终实现功能这个独立思考动手操作的过程是非常有必要的。
二、电子密码锁各功能模块介绍
1.矩阵键盘
以下参考《普中51单片机开发攻略》
本章以4*4矩阵键盘为例讲解其工作原理和检测方法。在我们的51实验开发板上将16个按键排成4行4列,将每一行的一端以及每一列的另一端都连接在一起,这样便一共有8根线,正好与我们单片机的8个I/O口上,通过程序扫描就可以检测这16个按键。本文参考的键盘检测方法是行列扫描法,以下为开源的程序代码:![]()
在Proteus仿真中可以这样进行连线。
u8 key_matrix_ranks_scan(void) {
u8 key_value=0;
KEY_MATRIX_PORT=0xf7;//给第一列赋值 0,其余全为 1
if(KEY_MATRIX_PORT!=0xf7)//判断第一列按键是否按下
{
delay_10us(1000);//消抖
switch(KEY_MATRIX_PORT)//保存第一列按键按下后的键值
{
case 0x77: key_value=1;break;
case 0xb7: key_value=5;break;
case 0xd7: key_value=9;break;
case 0xe7: key_value=13;break;
}
}
while(KEY_MATRIX_PORT!=0xf7);//等待按键松开
KEY_MATRIX_PORT=0xfb;//给第二列赋值 0,其余全为 1
if(KEY_MATRIX_PORT!=0xfb)//判断第二列按键是否按下
{
delay_10us(1000);//消抖
switch(KEY_MATRIX_PORT)//保存第二列按键按下后的键值
{
case 0x7b: key_value=2;break;
case 0xbb: key_value=6;break;
case 0xdb: key_value=10;break;
case 0xeb: key_value=14;break;
}
}
while(KEY_MATRIX_PORT!=0xfb);//等待按键松开
KEY_MATRIX_PORT=0xfd;//给第三列赋值 0,其余全为 1
if(KEY_MATRIX_PORT!=