基于51单片机指纹识别管理门禁密码锁系统设计
1. 功能介绍
本系统是一套基于 STC89C52 单片机 的指纹识别管理门禁密码锁系统,结合 LCD1602 液晶显示器、指纹识别模块、按键输入模块、继电器驱动电路 及 电源系统,实现了双重认证(指纹与密码)的门禁控制功能。它既支持对指纹进行管理(添加、搜索、删除),又具备密码输入与修改功能,并提供掉电数据保存能力,适用于家庭、办公室以及小型安防系统。
主要功能如下:
-
双模式工作
系统上电后可选择进入“指纹管理模式”或“控制系统模式”,并可在两种模式间自由切换。 -
指纹管理模式
- 搜索指纹:验证录入指纹是否存在,并显示对应 ID 号。
- 添加指纹:录入新指纹并为其分配 ID 号。
- 删除指纹:删除指定 ID 号的指纹信息。
- 掉电保存:指纹数据存储在模块内,断电不丢失。
-
控制系统模式
- 指纹开锁:匹配成功则继电器闭合 3 秒后断开。
- 密码开锁:输入 6 位数字密码,匹配则开锁 3 秒。
- 密码修改:输入管理员密码(默认 123123)进入密码设置模式,输入新密码后保存至 Flash,掉电不丢失。
-
其它功能
- 通过专用按键可直接开门,模拟从室内开门的情形。
- LCD1602 实时显示系统状态、指纹验证结果、密码输入与提示信息。
- 默认开锁密码为 112233,可由用户修改;管理员密码不可修改。
2. 系统电路设计
本系统由多个功能模块组成,每个模块在硬件上独立完成其任务,在软件中通过单片机协同工作。
2.1 STC89C52 单片机最小系统
STC89C52 单片机作为系统核心,负责指纹数据处理、密码管理、继电器控制以及液晶显示等逻辑控制。
- 晶振电路:采用 12MHz 晶振搭配 30pF 电容,提供稳定的时钟信号。
- 复位电路:上电自动复位与按键手动复位结合,确保系统可快速初始化或人工重启。
- 电源滤波:在 Vcc 与 GND 间增加 0.1μF 陶瓷电容及 10μF 电解电容,抑制电源纹波和干扰。
2.2 LCD1602 液晶显示模块
LCD1602 负责显示系统工作状态、模式菜单、指纹匹配结果以及密码输入提示。
-
连接方式:采用 4 位数据模式连接,节省 I/O 口资源。
-
显示内容示例:
"Search OK ID3"
:指纹验证成功,ID 为 3。"******"
:输入密码过程中的掩码显示。"PW OK!"
:密码正确,开锁成功。"PW Err!"
:密码错误。"SET OK!"
:密码设置成功。
2.3 指纹识别模块电路
指纹模块用于指纹录入、存储与比对,具备内置 Flash 存储,掉电不丢失。
- 通讯方式:采用 UART 串口通讯,与单片机 TXD、RXD 相连。
- 供电要求:5V 直流电源,电源端增加去耦电容以提升稳定性。
- 功能说明:支持搜索指纹、添加指纹、删除指纹,并可返回匹配 ID。
2.4 按键输入电路
按键用于模式选择、菜单操作、密码输入及直接开门。
-
按键类型:独立按键结构,具备上拉电阻与防抖设计。
-
功能分配:
- 模式键:切换指纹管理与控制模式。
- 数字键(1-3):输入密码数字。
- 确认/返回键:完成输入或返回上一级菜单。
- 开门键:直接触发继电器开门。
2.5 继电器驱动电路
继电器控制门锁电路,需单片机通过驱动电路控制。
- 驱动方式:采用 NPN 三极管(如 9013)或 N 沟道 MOSFET 驱动,继电器线圈两端并联续流二极管防止反向电动势。
- 动作逻辑:单片机输出高电平驱动继电器闭合,保持 3 秒后断开。
2.6 电源电路
系统统一使用 5V 电源,单片机、LCD1602、指纹模块均工作于 5V,必要时可使用 AMS1117 等稳压芯片提供稳定电源。
3. 程序设计
软件部分采用模块化结构,包括主控流程、指纹管理、密码管理、继电器控制、LCD 显示及按键扫描等。
3.1 主程序流程
主程序负责初始化各模块,并根据当前模式调用不同的功能函数。
#include <reg52.h>
#include "lcd1602.h"
#include "finger.h"
#include "key.h"
#include "relay.h"
#include "eeprom.h"unsigned char mode = 0; // 0:指纹管理 1:控制模式
unsigned char admin_pw[6] = {1,2,3,1,2,3};
unsigned char user_pw[6] = {1,1,2,2,3,3};void main() {Init_LCD1602();Init_FingerModule();Init_Key();Init_Relay();Load_UserPassword();while(1) {if(mode == 0) {Finger_Manage();} else {Control_Mode();}}
}
3.2 指纹管理模块
负责指纹添加、搜索、删除等操作。
void Finger_Manage() {unsigned char choice = Menu_Select();switch(choice) {case 1: Finger_Search(); break;case 2: Finger_Add(); break;case 3: Finger_Delete(); break;default: break;}
}
3.3 控制系统模块
根据指纹或密码进行开锁控制。
void Control_Mode() {if(Finger_Check() == 1) {Relay_On();Delay3s();Relay_Off();} else if(Password_Input()) {Relay_On();Delay3s();Relay_Off();}
}
3.4 密码输入与修改模块
通过按键输入 6 位数字密码,并与存储密码进行比对;如果输入管理员密码,则进入密码设置状态。
bit Password_Input() {unsigned char pw[6];LCD_ShowString(0,0,"Enter PW:");Get_Password(pw);if(Check_Password(pw, user_pw)) {LCD_ShowString(0,1,"PW OK!");return 1;} else if(Check_Password(pw, admin_pw)) {LCD_ShowString(0,1,"intSet!");Get_Password(user_pw);Save_UserPassword();LCD_ShowString(0,1,"SET OK!");return 0;} else {LCD_ShowString(0,1,"PW Err!");return 0;}
}
3.5 继电器驱动模块
void Relay_On() {RELAY_PIN = 1;LCD_ShowString(0,1,"Door Open");
}void Relay_Off() {RELAY_PIN = 0;LCD_ShowString(0,1,"Door Close");
}
3.6 EEPROM 数据存储模块
通过单片机内部 EEPROM 或外部 24C02 保存用户密码,保证掉电不丢失。
void Save_UserPassword() {for(unsigned char i=0;i<6;i++) {EEPROM_Write(i, user_pw[i]);}
}void Load_UserPassword() {for(unsigned char i=0;i<6;i++) {user_pw[i] = EEPROM_Read(i);}
}
4. 总结
本系统通过 STC89C52 单片机实现了指纹识别与密码开锁的双重安全控制,支持灵活的指纹管理、密码修改和掉电数据保存,配合 LCD1602 显示实现直观的人机交互界面。系统硬件结构简洁、功能模块清晰、可扩展性强,不仅适用于门禁管理,还可用于文件柜、保险箱等安全防护场景。