一、设计背景
随着智能化设备的普及,电子密码锁逐渐取代了传统机械锁,广泛应用于门禁系统、保险箱、实验室等场所。本文基于 51单片机(AT89C52) ,结合 矩阵键盘、LCD1602显示屏、数码管、蜂鸣器和LED指示灯,实现了一个完整的电子密码锁系统。
二、系统功能
-
密码输入:通过键盘输入四位密码。
-
LCD提示:LCD1602 显示提示信息及输入过程。
-
数码管显示:同步显示当前输入的按键值。
-
密码校验 :默认密码设为
1234
,输入正确后开锁。 -
错误提示:若密码错误,蜂鸣器报警,并提示错误信息。
-
LED状态:
- 密码正确 → 绿灯亮(LED熄灭)
- 密码错误 → 红灯亮(LED点亮)
三、硬件设计
主要硬件模块如下:
- 51单片机:作为主控芯片,负责键盘扫描、逻辑处理、显示控制。
- 矩阵键盘:用户输入密码。
- LCD1602 :显示提示信息(如
Input password:
、OK
、NO
)。 - 数码管:实时显示输入的数字。
- 蜂鸣器:密码输入错误时报警。
- LED:状态指示灯。
引脚分配(部分):
P1
:矩阵键盘P0
:LCD 数据口P3.0
:蜂鸣器P3.1~P3.3
:LCD 控制口P3.4
:LED
四、软件设计思路
软件采用 模块化设计:
- 延时函数:提供毫秒级延时。
- 蜂鸣器函数:控制蜂鸣器发声。
- LCD驱动函数:初始化、写命令、写数据。
- 键盘扫描函数:检测按键并返回键值。
- 密码处理函数:记录输入的四位数字,组合后与设定密码对比。
- 主循环:持续检测输入,显示结果。
核心流程图如下:
markdown
启动初始化
↓
LCD显示提示
↓
等待键盘输入
↓
是否按下确认键?
/ \
否 是
| ↓
| 四位密码组合 → 比较
| ↓
| 密码正确?
| / \
| 是 否
| ↓ ↓
| 显示OK 显示NO+蜂鸣器报警
|
返回输入等待
五、核心代码分析
1. 蜂鸣器报警
ini
void Fen(u8 a, u8 b) {
u8 i,j;
for(i=0;i<a;i++) {
for(j=0;j<100;j++) {
fen = ~fen;
delay(b);
}
}
}
当密码错误时,调用 Fen(20,200)
让蜂鸣器发声报警。
2. LCD 显示函数
ini
void writedat(u8 dat){
rs = 1; rw = 0; e = 0;
P0 = dat;
delay(5);
e = 1; e = 0;
}
用于在 LCD1602 上显示字符,例如 Input password:
、OK
、NO
等。
3. 密码校验逻辑
ini
zh = a*1000 + b*100 + c*10 + d; // 四位组合
if(zh == 1234){ // 默认密码1234
biao1 = 1; // 正确
} else {
biao1 = 0; // 错误
Fen(20,200); // 蜂鸣器报警
}
4. 主循环
scss
while(1){
Key(); // 扫描按键
shi(); // 处理按键
P2 = shu[keyz]; // 数码管显示
if(biao1==1){
led=0; // 密码正确 → 显示 OK
writedat('O'); writedat('K');
} else {
led=1; // 密码错误 → 显示 NO
writedat('N'); writedat('O');
}
}
六、运行效果
-
系统上电,LCD 显示
"Input password:"
。 -
用户输入四位数字,LCD 和数码管实时显示。
-
输入完成后按确认键:
- 若输入为
1234
,LCD 显示"OK"
,LED 熄灭,蜂鸣器不响。 - 若输入错误,LCD 显示
"NO"
,LED 点亮,同时蜂鸣器报警。
- 若输入为
七、总结与改进
本文设计的 电子密码锁 实现了基本的密码输入与验证功能,具有以下特点:
- 硬件电路简单,成本低廉;
- LCD 与数码管结合,显示直观;
- 软件逻辑清晰,便于扩展。
可进一步优化的方向:
- 可更改密码:增加管理员模式,支持密码修改与存储(EEPROM存储)。
- 多次错误锁定:连续错误超过三次,锁定系统。
- 更换输入方式:升级为触摸按键或键盘模块。
- 智能化:结合蓝牙、WiFi 模块,实现手机远程解锁。


