题目 5 :密码锁
使用单片机实现简易密码锁,通过输入密码,实现门锁的开启(控制继电器)。
具体要求如下:
(1)当输入正确密码后,继电器开启。
(2)当三次输入错误密码后,密码锁禁止输入 10 秒钟,并进行相应的提示。
(3)在输入正确的密码后,可修改密码和查询、清除门开启的次数。
(4)自制继电器电路模块。
(5)实现密码掉电不丢失。
可添加符合题目背景的其它合理功能。
显示屏LCD1602显示
矩阵键盘4*4按键
继电器
键盘按键有这些:
1 2 3 a
4 5 6 b
7 8 9 c
- 0 # d
1 密码一共6位密码,全数字。最开始的系统密码是123456.
2 正常输入正确密码继电器开启,门开启次数变量加1。按下按键a代表关门,继电器关闭。
3 继电器我会做一个连着小灯的电路,继电器开启后小灯会亮。
4 输入密码错误一次就记录一次,错误三次后,禁止所有输入10秒钟,有显示提示。时间过后清空错误次数。
5 每次输入正确密码会自动清空错误次数。
6 按键b按下后进入修改密码过程:输入原始密码–>输入新密码—>退出回到主页面。
7 按键c查询门开启次数变量,此时可以按键d清空门开启次数变量。
8 上电后密码从单片机EEPROM读取,每次修改密码也会保存到EEPROM,所以掉电不会丢密码。
也就是说修改密码后关机,下次开机后密码就是之间修改后的密码。
要实现一个简易密码锁,我们可以使用单片机结合LCD1602显示屏、4x4矩阵键盘和继电器来完成。这个密码锁的功能包括密码输入、验证、修改以及门开启次数的记录和显示。此外,密码锁还需要在掉电后保持密码不丢失。下面是实现这个密码锁的具体思路和功能介绍:
功能要求
-
密码输入与验证
- 使用4x4矩阵键盘输入6位数字密码。
- 初始系统密码为123456。
- 输入正确密码后,继电器开启,门开启次数增加1,LCD1602显示门已开启。
-
错误处理
- 每次输入错误密码,记录错误次数。
- 连续三次输入错误密码后,密码锁禁止输入10秒钟,并在LCD1602上显示提示信息。
- 10秒后清空错误次数,并允许重新输入密码。
-
密码修改
- 按键“b”进入修改密码模式:输入原始密码后再输入新密码。
- 新密码输入完成后返回主界面,并在EEPROM中保存新密码,保证掉电不丢失。
-
门开启次数查询与清除
- 按键“c”查询门开启次数,LCD1602显示当前门开启次数。
- 按键“d”清除门开启次数,LCD1602显示门开启次数已清除。
-
继电器控制
- 输入正确密码后,继电器开启,连接的指示灯亮起。
- 按键“a”关闭继电器,指示灯熄灭。
硬件连接
-
LCD1602显示屏
- 数据口连接到单片机的一个I/O口,用于显示密码输入状态、错误提示、门开启次数等信息。
-
4x4矩阵键盘
- 用于输入密码及操作命令,通过单片机扫描矩阵键盘得到按键值。
-
继电器
- 继电器控制电路连接到单片机的一个输出端口,用于控制门锁的开关状态。
-
EEPROM
- 用于存储系统密码,保证掉电后密码不丢失。
软件实现
-
延时函数
- 实现精确的延时函数,用于键盘扫描和LCD1602显示的时间控制。
-
LCD1602显示函数
- 初始化LCD1602显示屏,并实现清屏、写字符、写字符串等功能。
-
矩阵键盘扫描函数
- 实现逐行扫描方式,检测键盘按键的状态,并返回按键值。
-
EEPROM读写函数
- 实现EEPROM的读写操作,用于存储和读取系统密码。
-
主程序逻辑
- 初始化系统,读取EEPROM中的密码,设置初始显示状态。
- 实时扫描键盘输入,根据输入值进行密码验证、错误处理、密码修改、门开启次数查询与清除、继电器控制等操作。
程序逻辑框架
-
初始化
- 初始化LCD1602显示屏、矩阵键盘、继电器控制端口、EEPROM读取初始密码。
-
主循环
- 循环检测键盘输入,判断当前输入状态(正常输入、修改密码、查询次数)。
- 根据键盘输入值进行相应操作,包括密码验证、错误提示、密码修改、门开启次数显示与清除。
-
密码验证
- 对比输入密码与系统密码,验证通过则开启继电器,记录门开启次数;验证失败则增加错误次数并提示错误信息。
-
错误处理
- 三次连续输入错误密码后,锁定输入10秒钟,并在LCD1602上显示锁定提示。
-
密码修改
- 按键“b”进入修改密码模式,输入原密码后输入新密码,保存新密码到EEPROM。
-
门开启次数查询与清除
- 按键“c”查询门开启次数,按键“d”清除门开启次数,并在LCD1602上显示操作结果。
通过上述硬件和软件的结合,可以实现一个功能完整的密码锁系统,满足密码输入、验证、修改,错误处理和门开启次数管理等需求。
资源:
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2