【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
本课题为基于单片机的智能门禁系统,整个系统由AS608指纹识别模块,矩阵键盘,STM32F103单片机,OLED液晶,RFID识别模块,继电器,蜂鸣器等构成,在使用时,用户可以录入新的指纹信息,注册新的IC卡,修改新的密码,也可以删除旧的指纹,注销旧的IC卡,用户可以通过密码,IC卡或者指纹三种方式打开门禁,当输入信息正确时继电器会动作打开门禁,如果信息错误蜂鸣器会进行报警提示。本系统从原理图设计,C语言编写等多个角度完成了整个系统的设计,并最终通过制作实物完全了目标,经过测试达到了预期效果。
资料下载:待更新。。。。
1、实现功能
(1)用户管理需求
注册新用户:系统需要提供注册新用户的功能,包括录入新的指纹信息、注册新的IC卡和设置新的密码。用户可以通过其中一种或多种方式进行身份验证。删除用户:系统需要提供删除旧用户的功能,允许管理员删除指纹信息、注销IC卡或重置密码。
(2)身份验证需求
密码验证:系统需要支持用户通过输入正确的密码来验证身份。IC卡验证:系统需要支持用户通过刷卡的方式进行身份验证。指纹验证:系统需要支持用户通过指纹识别模块进行身份验证。
(3)门禁控制需求
继电器控制:系统需要通过继电器实现对门禁的控制。当用户通过正确的身份验证方式后,继电器应该动作,打开门禁。报警提示:系统需要通过蜂鸣器进行报警提示,当用户输入的信息不正确时,蜂鸣器应该发出警报。
(4)用户界面需求
显示屏:系统需要配备OLED液晶屏幕,用于显示用户信息、菜单选项和操作结果等。用户可以通过液晶屏幕进行交互和操作。
(5)安全性需求
数据保护:系统需要保护用户数据的安全性,包括指纹信息、IC卡数据和密码。数据应该被加密存储,并采取相应的措施防止未经授权的访问。防止暴力破解:系统应该设置安全机制,如密码输入错误次数限制、防止暴力破解的策略。
(6)扩展性需求
RFID识别模块支持:系统需要支持RFID识别模块,允许用户通过刷卡方式进行身份验证。多用户管理:系统需要支持多个用户的管理,包括新增用户、删除用户和权限设置等功能。
可增加的功能:
主要元器件:
STM32F103C8T6最小系统板、
目录
- 资料下载:待更新。。。。
- 1、实现功能
- 2、硬件
- 3、代码
- 4、原理图/PCB
- 5、论文
2、硬件
硬件框图
本课题为基于单片机的智能门禁系统,整个系统由AS608指纹识别模块,矩阵键盘,STM32F103单片机,OLED液晶,RFID识别模块,继电器,蜂鸣器等构成,在使用时,用户可以录入新的指纹信息,注册新的IC卡,修改新的密码,也可以删除旧的指纹,注销旧的IC卡,用户可以通过密码,IC卡或者指纹三种方式打开门禁,当输入信息正确时继电器会动作打开门禁,如果信息错误蜂鸣器会进行报警提示。
实物
3、代码
STM32代码采用C语言,标准库编写,软件是keil5,关键代码有中文注释,看不懂可以VX问我
#include "stm32f10x.h"
#include <stdio.h>
#include <string.h>
#include "delay.h"
#include "sys.h"
#include "pwm.h"
#include "usart.h"
#include "timer.h"
#include "key4_4.h"
#include "stmflash.h"
#include "OLED.h"
#include "as608.h"
#include "rc522.h"
#include "rc522_user.h"
#include "IO_Init.h"
extern void Beep_Init(void); //蜂鸣器
int key;
u8 open_door_flag=0; //开门标志位
u16 user_ID=0; //保存指纹模块返回的用户ID,用于判断用户
u8 Password[6], Password2[6]={"123456"}; //六位用户密码,管理员密码
u8 password_eeror,rc522_error,figer_error; //错误次数
u16 Locked_time;
void open_door() //开门函数
{u8 i;if(open_door_flag>0) //ok,就开门{OLED_Clear();Relay=0;for(i=58;i<62;i++) //门已打开{OLED_ShowCH(32+i*16-16*58,1,i);}delay_ms(1700);delay_ms(1700);OLED_Clear();Relay=1;if(open_door_flag==1) //非管理员密码,自动回复原始状态open_door_flag=0;USART1_RX_STA=0;memset(USART1_RX_BUF,0,sizeof(USART1_RX_BUF));}
}void admin_show() //总管理界面显示
{int i;OLED_ShowStr(0,0,"A:",2);for(i=9;i<=10;i++) //指纹{OLED_ShowCH(i*16-16*8,0,i);}for(i=111;i<=112;i++) //管理{OLED_ShowCH(i*16-16*108,0,i);}OLED_ShowStr(0,4,"C:",2);for(i=17;i<=18;i++) //密码{OLED_ShowCH(i*16-16*16,4,i);}for(i=111;i<=112;i++) //管理{OLED_ShowCH(i*16-16*108,4,i);}OLED_ShowStr(0,6,"D:IC",2);for(i=111;i<=112;i++) //管理{OLED_ShowCH(i*16-16*108,6,i);}}
void oled_show() //界面显示
{u8 i;for(i=42;i<=45;i++) //欢迎使用{OLED_ShowCH(32+i*16-16*42,0,i);}for(i=115;i<=117;i++) //多功能{OLED_ShowCH(i*16-16*114,2,i);}for(i=39;i<=41;i++) //电子锁{OLED_ShowCH(i*16-16*35,2,i);}for(i=46;i<=49;i++) //请您开锁{OLED_ShowCH(32+i*16-16*46,6,i);}
// u16 i;
// for(i=116;i<=118;i++) //实验室
// {
// OLED_ShowCH(40+i*16-16*116,0,i);
// }
// for(i=119;i<=124;i++) //智能门禁系统
// {
// OLED_ShowCH(16+i*16-16*119,2,i);
// }
// for(i=125;i<=129;i++) // 设计与实现
// {
// OLED_ShowCH(24+i*16-16*125,6,i);
// }
}
void oled_init_show() //初始化界面显示
{u8 i;for(i=42;i<=45;i++) //欢迎使用{OLED_ShowCH(32+i*16-16*42,0,i);}for(i=113;i<=115;i++) //多功能{OLED_ShowCH(i*16-16*112,2,i);}for(i=39;i<=41;i++) //电子锁{OLED_ShowCH(i*16-16*35,2,i);}for(i=46;i<=49;i++) //请您开锁{OLED_ShowCH(32+i*16-16*46,6,i);}
}
void finger_check() //刷指纹开门验证
{u16 uid,i;uid=press_FR();if((uid<300)&&(uid>0)){open_door_flag=1;OLED_Clear(); //清屏 for(i=70;i<72;i++) //用户{OLED_ShowCH(i*16-16*70,4,i);}OLED_ShowStr(32,4,"ID:",2);figer_error=0;OLED_ShowNum(56,4,uid,3,16);delay_ms(1000);OLED_Clear(); //清屏}else if(uid==0xffff){ OLED_Clear(); //清屏 for(i=66;i<70;i++) //指纹错误{OLED_ShowCH(32+i*16-16*66,1,i);}Beep_Work(500,4);figer_error++;OLED_Clear(); //清屏}
}
void ADD_finger() //添加指纹
{int i=0;OLED_Clear();for(i=23;i<27;i++) //请按手指{OLED_ShowCH(16*i-23*16,0,i);}i=Add_FR();if(i>0){for(i=27;i<31;i++) //添加成功{OLED_ShowCH(16*i-16*27,4,i);}for(i=70;i<72;i++) //用户{OLED_ShowCH(i*16-16*70,6,i);}OLED_ShowStr(32,6,"ID:",2);OLED_ShowNum(56,6,user_ID,3,16);delay_ms(1000);}else{ for(i=31;i<35;i++) //添加失败{OLED_ShowCH(16*i-16*30,4,i);}delay_ms(1000);}OLED_Clear();
}
void figer_show() //指纹管理界面显示
{int i;OLED_ShowStr(0,0,"A:",2);for(i=7;i<=10;i++) //添加指纹{OLED_ShowCH(i*16-16*6,0,i);}OLED_ShowStr(0,2,"B:",2);for(i=11;i<=14;i++) //删除指纹{OLED_ShowCH(i*16-16*10,2,i);}
}
void finger_admin() //指纹管理
{int i;OLED_Clear();while(key!='*') //*退出{key=Key44_Scan();switch (key){case'A' :ADD_finger();break;//添加case'B' :PS_Empty();OLED_Clear(); for(i=97;i<103;i++) { OLED_ShowCH(16+16*i-16*97,2,i);}delay_ms(1800); OLED_Clear();break;//删除default :figer_show();break;//管理显示界面 }}OLED_Clear();
}void Esp8266_AP_Init() //ESP8266局域网开热点等待手机APP链接
{UsartPrintf(USART1,"AT\r\n"); delay_ms(1000);OLED_Clear();OLED_printf(0,0,"1 AT+CWMODE ");UsartPrintf(USART1,"AT+CWMODE=2\r\n"); //设置路由器模式1 station,模式2 AP,模式3 station+AP混合模式 delay_ms(1000);OLED_Clear();OLED_printf(0,0,"2 AT+CWSAP ");UsartPrintf(USART1,"AT+CWSAP=\"WIFI\",\"123456789\",11,4\r\n"); //AT+CWSAP="wifi_yuan","123456789",11,4 设置模块SSID:WIFI, PWD:密码 及安全类型加密模式(WPA2-PSK) delay_ms(1000);OLED_Clear();OLED_printf(0,0,"3 AT+CIPMUX ");UsartPrintf(USART1,"AT+CIPMUX=1\r\n"); //开启多连接模式,允许多个各客户端接入 delay_ms(1000);OLED_Clear();OLED_printf(0,0,"4 AT+CIPSERVER ");UsartPrintf(USART1,"AT+CIPSERVER=1,5000\r\n"); //启动TCP/IP 实现基于网络//控制 delay_ms(1000);OLED_Clear();OLED_printf(0,0,"5 AT+CIPSTO ");UsartPrintf(USART1,"AT+CIPSTO=0\r\n"); delay_ms(1000);OLED_Clear();
}int main(void) //主函数
{ vu16 falsh,reclen,t;SystemInit();delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2组中断分组Relay_Init(); //继电器初始化Relay=0;Beep_Init(); //蜂鸣器初始化Beep = 0;OLED_Init(); //OLED初始化Relay=1;Beep =1;usart2_Init(57600); //串口2初始化 RC522_Init();Key44_Init(); //矩阵按键初始化oled_show(); //界面显示STMFLASH_Read(FLASH_PASSWORD_SAVE_ADDR,(u16*)Password,6); //读取密码 下载程序后,数据是0XFFSTMFLASH_Read(FLASH_ICcard_SAVE_ADDR,(u16*)ICCard_Name,IC_Card_Num*4); //读取密码 下载程序后,数据是0XFFTIM2_Int_Init(4999,7199);while(1){delay_ms(1);if(pass_cnt==0) //没有在密码输入的时候{IC_check();if(t++>50){t=0;finger_check(); //指纹检验}}password_cheak(); //密码检验oled_show(); //显示open_door(); //开门函数if(password_eeror>=3){password_eeror=2;Locked_time = 30;while(Locked_time--){OLED_printf(0,4," Locked:%d ",Locked_time);Beep_Work(1000,1);}OLED_printf(0,4," ");}while(open_door_flag==2) //输入管理员密码进入设置{key=Key44_Scan();switch (key){case'C' :password_admin();break; //密码管理case'A' :finger_admin(); break; //指纹管理case'D' :rc522_admin();break; //IC卡管理case'*' :open_door_flag=0;OLED_Clear(); break;//退出default :admin_show();break; //管理显示界面}}}
}
4、原理图/PCB
原理图和PCB都使用立创EDA绘制,对新手较为友好。可以导出为AD格式的文件
5、论文
本设计基于单片机的智能门禁系统,主要是结合单片机技术立足于产业应用而展开,全文针对目标功能进行关键器件的选择,电路图绘制,软件程序编写等等,在整个文章的章节结构上,大致如下:在第一章绪论对基于单片机的智能门禁系统课题的理论背景进行分析并引申出设计的必要性,在第二章则围绕基于单片机的智能门禁系统课题进行总体框架设计,确定整个系统中使用到的关键器件,在第三章则从硬件设计的角度,对每个模块完成硬件电路设计,从单片机最小系统到各个传感器应用电路,在第四章则对各模块完成程序流程的分析和绘制,在第五章则进行系统测试,针对硬件和软件进行联调,并最终完成整个系统的功能和测试。
相关文章:
【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
本课题为基于单片机的智能门禁系统,整个系统由AS608指纹识别模块,矩阵键盘,STM32F103单片机,OLED液晶,RFID识别模块,继电器,蜂鸣器等构成,在使用时,用户可以录入新的指纹…...
贪心算法,其优缺点是什么?
什么是贪心算法? 贪心算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最优(局部最优)的选择,从而希望导致全局最优解的算法策略。 它不像动态规划那样考虑所有可能的子问题,而是做出局部最优选择,依赖这些选择来…...
java知识梳理(二)
一.lambda表达式 作用:Lambda 表达式在 Java 8 引入,主要用于简化匿名内部类的写法,特别是在函数式编程场景中,比如 函数式接口、流式 API(Streams)、并发编程等。它让 Java 代码更简洁、可读性更强&#x…...
鸿蒙Flutter实战:20. Flutter集成高德地图,同层渲染
本文以同层渲染为例,介绍如何集成高德地图 完整代码见 Flutter 鸿蒙版 Demo 概述 Dart 侧 核心代码如下,通过 OhosView 来承载原生视图 OhosView(viewType: com.shaohushuo.app/customView,onPlatformViewCreated: _onPlatformViewCreated,creation…...
c++中%符号使用的注意事项/易错点
在C中,% 是取模运算符(modulus operator),用于计算两个数相除后的余数。虽然它的用法看起来简单,但在实际编程中有一些需要注意的细节和易错点。以下是关键注意事项: 1. 操作数必须为整数类型 % 只能用于整…...
AI辅助下基于ArcGIS Pro的SWAT模型全流程高效建模实践与深度进阶应用
目前,流域水资源和水生态问题逐渐成为制约社会经济和环境可持续发展的重要因素。SWAT模型是一种基于物理机制的分布式流域水文与生态模拟模型,能够对流域的水循环过程、污染物迁移等过程进行精细模拟和量化分析。SWAT模型目前广泛应用于流域水文过程研究…...
Java 基础-30-单例设计模式:懒汉式与饿汉式
在软件开发中,单例设计模式(Singleton Design Pattern)是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式通常用于管理共享资源(如数据库连接池、线程池等)或需要…...
尚语翻译图册翻译|专业图册翻译|北京专业翻译公司推荐|专业文件翻译报价
内容概要 尚语翻译公司聚焦多语种产品图册翻译的竞价推广服务,通过行业垂直化运营构建差异化竞争力。其核心服务覆盖机械制造、医疗器械、电子元件三大领域,依托ISO 17100认证的翻译流程和Trados术语管理系统,实现技术文档的精准转化。为提升…...
杂篇-行业分类一二-2(通、专用设备制造,汽车制造)
接上篇, 本篇列举制造业中另外几个细分行业:通用设备制造,专用设备制造,汽车制造业。 一、通用设备制造 分类 序号 类别名称 说明 1 锅炉及原动设备制造 1 锅炉及辅助设备制造 指各种蒸汽锅炉、汽化锅炉,以及…...
[笔记.AI]大模型训练 与 向量值 的关系
(借助 DeepSeek-V3 辅助生成) 大模型在训练后是否会改变向量化的值,取决于模型的训练阶段和使用方式。以下是详细分析: 1. 预训练阶段:向量化值必然改变 动态调整过程: 在预训练阶段(如BERT、…...
LeetCode 解题思路 30(Hot 100)
解题思路: 递归参数: 生成括号的对数 n、结果集 result、当前路径 path、左括号数 open、右括号数 close。递归过程: 当当前路径 path 的长度等于 n * 2 时,说明已经生成有效括号,加入结果集。若左括号数小于 n&…...
Java EE(18)——网络原理——应用层HTTP协议
一.初识HTTP协议 HTTP(HyperText Transfer Protocol,超文本传输协议)是用于在客户端(如浏览器)和服务器之间传输超媒体文档(如HTML)的应用层协议。 HTTP协议发展至今发布了多个版本,其中1.0,1.…...
强大而易用的JSON在线处理工具
强大而易用的JSON在线处理工具:程序员的得力助手 在当今的软件开发世界中,JSON(JavaScript Object Notation)已经成为了数据交换的通用语言。无论是前端还是后端开发,我们都经常需要处理、验证和转换JSON数据。今天&a…...
Qt笔记----》不同环境程序打包
文章目录 概要1、windows环境下打包qt程序2、linux环境下打包qt程序2.1、程序目录2.2、创建一个空文件夹2.3、添加依赖脚本2.4、打包过程2.4.1、添加程序依赖库2.4.2、添加Qt相关依赖库 概要 qt不同运行环境下打包方式:windows/linux 1、windows环境下打包qt程序 …...
企业服务器备份软件,企业服务器备份的方法有哪些?
企业服务器备份需综合考虑数据量、业务连续性要求(RTO/RPO)、合规性及成本等因素。以下是分场景的工具和方法指南: 一、备份软件推荐 1. 80KM备份软件 80KM备份软件可以进行很复杂的备份方式,也可以内网对内网备份、还能内网的…...
Vue3 表单
Vue3 表单 随着前端技术的发展,Vue.js 作为一款流行的前端框架,不断更新迭代,以适应更高效、更便捷的开发需求。Vue3 作为 Vue.js 的第三个主要版本,引入了许多新特性和改进,其中包括对表单处理机制的优化。本文将深入探讨 Vue3 表单的使用方法、技巧以及注意事项。 1. …...
html5炫酷图片悬停效果实现详解
html5炫酷图片悬停效果实现详解 这里写目录标题 html5炫酷图片悬停效果实现详解项目介绍技术栈核心功能实现1. 页面布局2. 图片容器样式3. 炫酷悬停效果缩放效果倾斜效果模糊效果旋转效果 4. 悬停文字效果5. 性能优化6. 响应式设计 项目亮点总结 项目介绍 本文将详细介绍如何使…...
安徽京准:GPS北斗卫星校时服务器助力大数据云计算
安徽京准:GPS北斗卫星校时服务器助力大数据云计算 安徽京准:GPS北斗卫星校时服务器助力大数据云计算 GPS北斗卫星校时服务器在大数据与云计算系统中发挥着关键作用,其通过提供高精度、高可靠的时间同步服务,解决了分布式系统的核…...
【Linux】内核驱动学习笔记(二)
7、framebuffer驱动详解 7.1、什么是framebuffer (1)裸机中如何操作LCD (2)OS下操作LCD的难点 (3)framebuffer帧缓冲(简称fb)是linux内核中虚拟出的一个设备 (4)framebuffer向应用层提供一个统一标准接口的显示设备 (5)从驱动来看,fb是一个…...
机器学习的一百个概念(5)数据增强
前言 本文隶属于专栏《机器学习的一百个概念》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…...
在MCU工程中优化CPU工作效率的几种方法
在嵌入式系统开发中,优化 CPU 工作效率对于提升系统性能、降低功耗、提高实时性至关重要。Keil 作为主流的嵌入式开发工具,提供了多种优化策略,包括 关键字使用、内存管理、字节对齐、算法优化 等。本文将从多个方面介绍如何在 Keil 工程中优…...
优化程序命名:提升专业感与用户体验
在软件开发的广阔天地中,程序命名这一环节常常被开发者们忽视。不少程序沿用着简单直白、缺乏雕琢的名字,如同素面朝天的璞玉,虽不影响其核心功能的发挥,但却在无形之中错失了许多提升用户印象与拓展应用场景的机会。今天…...
美团民宿 mtgsig 小程序 mtgsig1.2 分析
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 cp execjs.compile(open(民…...
短视频团队架构工作流程---2025.3.30 李劭卓
短视频团队架构&工作流程—2025.3.30 李劭卓 文章目录 短视频团队架构&工作流程---2025.3.30 李劭卓1 工作职责1.1 编剧:1.2 主编:1.3 总编:1.4 导演:1.5 摄影:1.6 演员:1.7 后期:1.8 美…...
es 集群存储字典 json字段----python实现
本人的意思是value为json格式数据,而不是简单的如下这种:这种我就没有必要写个博文,肯定是复杂的情况啊。 from elasticsearch import Elasticsearch import json# 创建Elasticsearch客户端 es = Elasticsearch([{host: localhost, port: 9200}])# 定义要存储的字典 my_dic…...
(done) MIT6.824 Lecture 02 - RPC and Threads
知乎专栏:https://zhuanlan.zhihu.com/p/641105196 原视频:https://www.bilibili.com/video/BV16f4y1z7kn?spm_id_from333.788.videopod.episodes&vd_source7a1a0bc74158c6993c7355c5490fc600&p2 看知乎专栏 一、Why we choose go?…...
软件工程面试题(二十四)
1、连接池的原理 j2ee 服务器启动时会建立一定数量的池连接,并一直维持不少于此数量的池连接。当客户端程序需要连接时,吃驱动程序会返回一个未使用的池连接并将其标记为忙。如果当前 没有空闲连接,池驱动就建立一定新的 连接 2、用javascript编写脚本小程序,实现点击全选…...
LayaAir3.3.0-beta.3重磅更新!Spine4.2、2D物理、UI系统、TileMap等全面升级!
正式版推出前,说明3.3的功能还没开发完。所以,又一大波更新来了~ 下面对重点更新进行说明。 Spine的重要更新 3.3.0-beta.3版本开始,新增了Spine 4.2 的运行时库,Spine动画上可以支持物理特性了。例如,下图右侧女孩在启…...
【AI学习】机器学习算法
1,线性回归模型(Linear Regression):预测连续数值 寻找自变量(解释变量)与因变量(被解释变量)之间的线性关联关系,通过构建线性方程来对数据进行拟合和预测。即两个变量之间是一次函…...
【渗透测试】Vulnhub靶机-FSoft Challenges VM: 1-详细通关教程
下载地址:https://www.vulnhub.com/entry/fsoft-challenges-vm-1,402/ 目录 前言 信息收集 目录扫描 wpscan扫描 修改密码 反弹shell 提权 思路总结 前言 开始前注意靶机简介,当第一次开机时会报apache错误,所以要等一分钟后重启才…...

