【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、论文

本设计基于单片机的智能门禁系统,主要是结合单片机技术立足于产业应用而展开,全文针对目标功能进行关键器件的选择,电路图绘制,软件程序编写等等,在整个文章的章节结构上,大致如下:在第一章绪论对基于单片机的智能门禁系统课题的理论背景进行分析并引申出设计的必要性,在第二章则围绕基于单片机的智能门禁系统课题进行总体框架设计,确定整个系统中使用到的关键器件,在第三章则从硬件设计的角度,对每个模块完成硬件电路设计,从单片机最小系统到各个传感器应用电路,在第四章则对各模块完成程序流程的分析和绘制,在第五章则进行系统测试,针对硬件和软件进行联调,并最终完成整个系统的功能和测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/74430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习总结-io流-字节流

io的体系&#xff1a; FlieInputStream(文件字节输入流) 是什么&#xff1a;磁盘以字节的形式输入到内存中。 由于不同格式编码长度&#xff0c;每次读取一个或几个字节&#xff0c;都有可能出现乱码。 所以官方提供了&#xff0c;一次性读入全部字节&#xff0c;以数组的形式…

玩转JUC - 如何优雅的异步处理任务

1、概述 前面我们学习了并发包中的一些核心的基础类&#xff0c;包括原子类、Lock 、以及线程间通信的一些工具类&#xff0c;相信你已经能够正确的处理线程同步的问题了&#xff0c;今天我们继续学习并发包下的工具类&#xff0c;我们本次主要学习线程池和异步计算框架相关的内…

MINIQMT学习课程Day2

如何和聚宽进行绑定交易 目前市场上的方式主要为以下三种方案&#xff1a; 1.聚宽和一创直接绑定&#xff08;现在已经被废除&#xff09; 2.通过蒋老师所提出的redis方案&#xff0c;进行交易 3.李兴果的&#xff0c;网页发送到服务器数据库&#xff0c;然后本地读取数据进行…

【AI视频】度加视频测试

目标 前边&#xff0c;大藏经用AI翻译成功了&#xff0c;语音也生成了&#xff0c;就想着生成视频了&#xff0c;然后就发现了这个宝藏工具。 先说结果&#xff1a;速度不是很快&#xff0c;出错了&#xff0c;提示也不是很清晰&#xff0c;虽然不顺利&#xff0c;但过程还是…

SAP CEO引领云端与AI转型

在现任首席执行官克里斯蒂安克莱因&#xff08;Christian Klein&#xff09;的领导下&#xff0c;德国软件巨头 SAP 正在经历一场深刻的数字化转型&#xff0c;重点是向云计算和人工智能方向发展。他提出的战略核心是“RISE with SAP”计划&#xff0c;旨在帮助客户从传统本地部…

《系统分析师-基础篇-1-6章总结》

第1章 绪论 系统分析师角色 职责&#xff1a;需求分析、系统设计、项目管理、技术协调。 能力要求&#xff1a;技术深度&#xff08;架构设计、开发方法&#xff09; 业务理解&#xff08;企业流程、行业知识&#xff09; 沟通能力。 系统开发生命周期 传统模型&#xf…

HCIP-12 中间系统到中间系统基础

HCIP-12 中间系统到中间系统基础 一、ISIS的区域 1.管理区域&#xff1a;Area ID&#xff08;基于路由器的管理区域&#xff09; 2.算法区域 骨干区域&#xff1a;由连续的L2或者L1/2路由器组成的逻辑区域 非骨干区域&#xff1a;是由连续的L1或者L1/2路由器组成的逻辑区域…

企业管理系统的功能架构设计与实现

一、企业管理系统的核心功能模块 企业管理系统作为现代企业的中枢神经系统&#xff0c;涵盖了多个核心功能模块&#xff0c;以确保企业运营的顺畅与高效。这些功能模块通常包括&#xff1a; 人力资源管理模块&#xff1a;负责员工信息的录入、维护、查询及统计分析&#xff0c…

大语言模型中的嵌入模型

本教程将拆解什么是嵌入模型、为什么它们在NLP中如此重要,并提供一个简单的Python实战示例。 分词器将原始文本转换为token和ID,而嵌入模型则将这些ID映射为密集向量表示。二者合力为LLMs的语义理解提供动力。图片来源:[https://tzamtzis.gr/2024/coding/tokenization-by-an…

【从零实现Json-Rpc框架】- 项目实现 - 服务端主题实现及整体封装

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

AI与玩具结合的可行性分析

文章目录 一、市场需求&#xff1a;教育与陪伴的双重驱动&#xff08;一&#xff09;教育需求&#xff08;二&#xff09;情感陪伴需求&#xff08;三&#xff09;消费升级 二、技术发展&#xff1a;赋能玩具智能化&#xff08;一&#xff09;AI技术的成熟&#xff08;二&#…

基于 RK3588 的 YOLO 多线程推理多级硬件加速引擎框架设计(代码框架和实现细节)

一、前言 接续上一篇文章&#xff0c;这个部分主要分析代码框架的实现细节和设计理念。 基于RK3588的YOLO多线程推理多级硬件加速引擎框架设计&#xff08;项目总览和加速效果&#xff09;-CSDN博客https://blog.csdn.net/plmm__/article/details/146542002?spm1001.2014.300…

LeetCode Hot100 刷题笔记(7)—— 贪心

目录 前言 一、贪心 1. 买卖股票的最佳时机 2. 跳跃游戏 3. 跳跃游戏 II 4. 划分字母区间 前言 一、贪心&#xff1a;买卖股票的最佳时机&#xff0c;跳跃游戏&#xff0c;跳跃游戏 II&#xff0c;划分字母区间。 一、贪心 1. 买卖股票的最佳时机 原题链接&#xff1a;121. …

SQL语句的训练

DELECT FROM 蜀国 WHEHE name 刘玄德 AND 创业进度<0.5 AND 存活状态 true&#xff1b; 基础的sql语句 SELECT >选择列FROM >确认数据源JOIN >联合操作WHERE >筛选数据GROUP BY >分组 HAVING >过滤分组的数据DISTINCT >去重ORDEY BY > 排序…

汽车 HMI 设计的发展趋势与设计要点

一、汽车HMI设计的发展历程与现状 汽车人机交互界面&#xff08;HMI&#xff09;设计经历了从简单到复杂、从单一到多元的演变过程。2012年以前&#xff0c;汽车HMI主要依赖物理按键进行操作&#xff0c;交互方式较为单一。随着特斯拉Model S的推出&#xff0c;触控屏逐渐成为…

基于51单片机的模拟条形码识别系统proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1AtAry19X3BgavLqXcM4scg 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C51 是一款常用的 8 位单片机&#xff0c;由 Atmel 公司&#xff08;现已被 Microchip 收…

CD22.【C++ Dev】类和对象(13) 流提取运算符的重载和const成员

目录 1.流提取运算符>>的重载 知识回顾 重载方法 operator<<格式 operator>>格式 使用cin对日期类对象写入数据 如果想指定格式输入 方法1:getchar() 方法2:使用临时变量接收字符 完善operator>>代码(修bug) 2.类中的权限问题(const成员) …

Spring 核心技术解析【纯干货版】- XIX:Spring 日志模块 Spring-Jcl 模块精讲

在现代 Java 开发中&#xff0c;日志是调试、监控和维护应用程序的重要工具。Spring 作为企业级框架&#xff0c;提供了 Spring-Jcl 作为日志抽象层&#xff0c;使开发者可以灵活切换不同的日志实现&#xff0c;而无需修改业务代码。本篇文章将深入解析 Spring-Jcl 模块&#x…

Hadoop集群---运维管理和技巧

一. daemon 守护进程管理 1. NameNode守护进程管理 hadoop-daemon.sh start namenode 2. DataNode守护进程管理 hadoop-daemon.sh start datanode 3. ResourceManager守护进程管理 yarn-daemon.sh start resourcemanager 4. NodeManager守护进程管理 yarn-daemon.sh st…

ngx_log_init

定义在 src\core\ngx_log.c ngx_log_t * ngx_log_init(u_char *prefix, u_char *error_log) {u_char *p, *name;size_t nlen, plen;ngx_log.file &ngx_log_file;ngx_log.log_level NGX_LOG_NOTICE;if (error_log NULL) {error_log (u_char *) NGX_ERROR_LOG_PATH;}…