1 系统功能介绍
本设计实现了一套 基于 51 单片机的指纹识别管理门禁密码锁系统,该系统融合了指纹识别与密码输入两种身份认证方式,结合继电器实现电子门禁控制,具有较强的安全性与实用性。系统由 STC89C52 单片机最小系统电路、LCD1602 液晶显示、指纹识别模块、按键输入电路、继电器驱动电路及电源模块构成,能够完成用户身份验证、密码管理、指纹录入与删除、开锁控制等功能。
主要功能包括:
- 双重验证模式:既可通过指纹识别进行开锁,也可通过密码验证实现门禁控制。
- 指纹管理:系统支持指纹搜索、增加、删除,指纹信息存储在模块内部,具有掉电不丢失功能。
- 密码管理:支持 6 位数字密码输入,默认开锁密码为“112233”,可由管理员在正确输入管理员密码(123123)后修改,修改后的密码掉电不丢失。
- 多模式切换:系统上电进入模式选择界面,可通过按键在“指纹管理”和“控制系统”模式之间自由切换。
- 安全提示:在 LCD 显示屏上实时显示操作提示与验证结果,如“PW OK!”、“PW Err!”、“SET OK!” 等。
- 继电器开锁控制:当身份验证成功后,继电器闭合 3 秒,模拟电子锁开启动作,随后自动断开。
- 出门按钮功能:设置单独按键,实现类似门禁系统的“出门开锁”操作。
该系统不仅具备传统门禁的开锁功能,还支持管理员对指纹与密码进行管理,实现了较高的灵活性与安全性。
2 系统电路设计
2.1 STC89C52 单片机最小系统
STC89C52 单片机作为系统核心,负责与指纹模块通信、密码存储与比对、继电器控制及显示管理。
- 主要电路组成:
- 功能作用:完成指纹管理、密码管理逻辑判断,并通过串口与指纹模块通信,同时驱动 LCD1602 显示用户界面。
2.2 指纹识别模块电路
采用常用的 UART 通信指纹模块(如 R305)。
- 电气连接:模块 TXD、RXD 分别与单片机串口引脚相连,电源 VCC 接 +5V。
- 功能作用:实现指纹录入、搜索、删除及比对等功能,存储指纹数据并在掉电后保持不丢失。
2.3 LCD1602 显示电路
LCD1602 用于显示系统运行状态、用户提示信息。
2.4 按键输入电路
- 主要功能:
- 模式切换按键:切换“指纹管理”和“控制系统”模式;
- 密码输入按键:0-9 数字键,供用户输入 6 位密码;
- 确认/取消按键:完成输入确认或返回上一级菜单;
- 出门按钮:模拟门禁中从内部直接开门的功能。
- 电路实现:按键一端接单片机 I/O 口,另一端接地,并通过上拉电阻保证信号稳定。
2.5 继电器驱动电路
继电器用于模拟电控门锁的开关。
2.6 电源电路
系统采用 +5V 直流电源供电。指纹模块和单片机均使用 5V,必要时可通过 AMS1117 等稳压芯片转换电压。
3 程序设计
3.1 主程序框架
#include <reg52.h>
#include "lcd.h"
#include "finger.h"
#include "password.h"
#include "relay.h"
#include "key.h"
void main()
{
LCD_Init();
Finger_Init();
Password_Init();
Relay_Init();
Key_Init();
LCD_ShowString(0,0,"System Start");
DelayMs(1000);
while(1)
{
Mode_Select(); // 模式选择:指纹管理/控制系统
}
}
主程序完成系统初始化,并通过循环函数进入模式选择界面,用户可根据需求进入指纹管理或控制系统。
3.2 模式选择程序
void Mode_Select(void)
{
LCD_Clear();
LCD_ShowString(0,0,"1:Finger Mng");
LCD_ShowString(1,0,"2:Control Sys");
key = Key_Scan();
if(key == 1) Finger_Manage();
else if(key == 2) Control_System();
}
通过按键选择进入不同模式,LCD 显示当前选项。
3.3 指纹管理程序
void Finger_Manage(void)
{
LCD_Clear();
LCD_ShowString(0,0,"1:Search");
LCD_ShowString(1,0,"2:Add 3:Del");
key = Key_Scan();
if(key == 1) Finger_Search();
else if(key == 2) Finger_Add();
else if(key == 3) Finger_Delete();
}
在指纹管理模式下,用户可以完成指纹的搜索、录入和删除操作。
3.4 控制系统程序
void Control_System(void)
{
LCD_Clear();
LCD_ShowString(0,0,"1:Finger Open");
LCD_ShowString(1,0,"2:PW Open");
key = Key_Scan();
if(key == 1)
{
if(Finger_Check()==SUCCESS)
{
LCD_ShowString(0,0,"Search OK ID*");
Relay_On();
DelayMs(3000);
Relay_Off();
}
else LCD_ShowString(0,0,"Finger Err!");
}
else if(key == 2)
{
if(Password_Check()==SUCCESS)
{
LCD_ShowString(0,0,"PW OK!");
Relay_On();
DelayMs(3000);
Relay_Off();
}
else LCD_ShowString(0,0,"PW Err!");
}
}
此程序用于系统实际控制,包括指纹开锁和密码开锁。
3.5 密码管理与修改程序
void Password_Set(void)
{
LCD_Clear();
LCD_ShowString(0,0,"Input Admin PW:");
if(Password_Input()==ADMIN_PW)
{
LCD_ShowString(1,0,"intSet!");
NewPW = Password_Input();
SavePassword(NewPW);
LCD_ShowString(1,0,"SET OK!");
}
else
{
LCD_ShowString(1,0,"PW Err!");
}
}
该程序实现密码的修改功能,只有输入管理员密码 123123 才能进入密码设置界面,防止非法修改。
3.6 继电器驱动程序
void Relay_On(void)
{
P2 = 0xFE; // 控制继电器闭合
}
void Relay_Off(void)
{
P2 = 0xFF; // 控制继电器断开
}
继电器开关与 LCD 显示结合,便于用户直观了解门锁状态。
4 总结
本系统通过 STC89C52 单片机、指纹识别模块 与 密码输入功能 的结合,实现了一种功能丰富、安全可靠的门禁系统。其主要优点如下:
- 多模式验证:指纹识别与密码输入双重认证,提高安全性。
- 完善的指纹管理功能:支持指纹搜索、录入与删除,且指纹存储掉电不丢失。
- 灵活的密码管理:用户可在管理员授权下修改开锁密码,保证系统灵活性和安全性。
- 人性化交互:LCD1602 实时提示操作结果,增强用户体验。
- 安全可靠:继电器模拟门锁,具备开关状态显示和定时控制功能。
综上,本设计不仅满足普通门禁的开锁需求,还具备强大的扩展性与实用性,可广泛应用于家庭、办公室、实验室等多种场景。
256