【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)

news2025/4/11 22:37:30

  本课题为基于单片机的智能门禁系统,整个系统由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);  //读取密码 下载程序后,数据是0XFF
	STMFLASH_Read(FLASH_ICcard_SAVE_ADDR,(u16*)ICCard_Name,IC_Card_Num*4);  //读取密码 下载程序后,数据是0XFF
	TIM2_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.coloradmin.cn/o/2327574.html

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

相关文章

java知识梳理(二)

一.lambda表达式 作用&#xff1a;Lambda 表达式在 Java 8 引入&#xff0c;主要用于简化匿名内部类的写法&#xff0c;特别是在函数式编程场景中&#xff0c;比如 函数式接口、流式 API&#xff08;Streams&#xff09;、并发编程等。它让 Java 代码更简洁、可读性更强&#x…

鸿蒙Flutter实战:20. Flutter集成高德地图,同层渲染

本文以同层渲染为例&#xff0c;介绍如何集成高德地图 完整代码见 Flutter 鸿蒙版 Demo 概述 Dart 侧 核心代码如下&#xff0c;通过 OhosView 来承载原生视图 OhosView(viewType: com.shaohushuo.app/customView,onPlatformViewCreated: _onPlatformViewCreated,creation…

AI辅助下基于ArcGIS Pro的SWAT模型全流程高效建模实践与深度进阶应用

目前&#xff0c;流域水资源和水生态问题逐渐成为制约社会经济和环境可持续发展的重要因素。SWAT模型是一种基于物理机制的分布式流域水文与生态模拟模型&#xff0c;能够对流域的水循环过程、污染物迁移等过程进行精细模拟和量化分析。SWAT模型目前广泛应用于流域水文过程研究…

尚语翻译图册翻译|专业图册翻译|北京专业翻译公司推荐|专业文件翻译报价

内容概要 尚语翻译公司聚焦多语种产品图册翻译的竞价推广服务&#xff0c;通过行业垂直化运营构建差异化竞争力。其核心服务覆盖机械制造、医疗器械、电子元件三大领域&#xff0c;依托ISO 17100认证的翻译流程和Trados术语管理系统&#xff0c;实现技术文档的精准转化。为提升…

LeetCode 解题思路 30(Hot 100)

解题思路&#xff1a; 递归参数&#xff1a; 生成括号的对数 n、结果集 result、当前路径 path、左括号数 open、右括号数 close。递归过程&#xff1a; 当当前路径 path 的长度等于 n * 2 时&#xff0c;说明已经生成有效括号&#xff0c;加入结果集。若左括号数小于 n&…

Java EE(18)——网络原理——应用层HTTP协议

一.初识HTTP协议 HTTP(HyperText Transfer Protocol&#xff0c;超文本传输协议)是用于在客户端&#xff08;如浏览器&#xff09;和服务器之间传输超媒体文档&#xff08;如HTML&#xff09;的应用层协议。 HTTP协议发展至今发布了多个版本&#xff0c;其中1.0&#xff0c;1.…

强大而易用的JSON在线处理工具

强大而易用的JSON在线处理工具&#xff1a;程序员的得力助手 在当今的软件开发世界中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已经成为了数据交换的通用语言。无论是前端还是后端开发&#xff0c;我们都经常需要处理、验证和转换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不同运行环境下打包方式&#xff1a;windows/linux 1、windows环境下打包qt程序 …

企业服务器备份软件,企业服务器备份的方法有哪些?

企业服务器备份需综合考虑数据量、业务连续性要求&#xff08;RTO/RPO&#xff09;、合规性及成本等因素。以下是分场景的工具和方法指南&#xff1a; 一、备份软件推荐 1. 80KM备份软件 80KM备份软件可以进行很复杂的备份方式&#xff0c;也可以内网对内网备份、还能内网的…

html5炫酷图片悬停效果实现详解

html5炫酷图片悬停效果实现详解 这里写目录标题 html5炫酷图片悬停效果实现详解项目介绍技术栈核心功能实现1. 页面布局2. 图片容器样式3. 炫酷悬停效果缩放效果倾斜效果模糊效果旋转效果 4. 悬停文字效果5. 性能优化6. 响应式设计 项目亮点总结 项目介绍 本文将详细介绍如何使…

机器学习的一百个概念(5)数据增强

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…

在MCU工程中优化CPU工作效率的几种方法

在嵌入式系统开发中&#xff0c;优化 CPU 工作效率对于提升系统性能、降低功耗、提高实时性至关重要。Keil 作为主流的嵌入式开发工具&#xff0c;提供了多种优化策略&#xff0c;包括 关键字使用、内存管理、字节对齐、算法优化 等。本文将从多个方面介绍如何在 Keil 工程中优…

美团民宿 mtgsig 小程序 mtgsig1.2 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 cp execjs.compile(open(民…

(done) MIT6.824 Lecture 02 - RPC and Threads

知乎专栏&#xff1a;https://zhuanlan.zhihu.com/p/641105196 原视频&#xff1a;https://www.bilibili.com/video/BV16f4y1z7kn?spm_id_from333.788.videopod.episodes&vd_source7a1a0bc74158c6993c7355c5490fc600&p2 看知乎专栏 一、Why we choose go&#xff1f…

LayaAir3.3.0-beta.3重磅更新!Spine4.2、2D物理、UI系统、TileMap等全面升级!

正式版推出前&#xff0c;说明3.3的功能还没开发完。所以&#xff0c;又一大波更新来了~ 下面对重点更新进行说明。 Spine的重要更新 3.3.0-beta.3版本开始&#xff0c;新增了Spine 4.2 的运行时库&#xff0c;Spine动画上可以支持物理特性了。例如&#xff0c;下图右侧女孩在启…

【AI学习】机器学习算法

1&#xff0c;线性回归模型&#xff08;Linear Regression&#xff09;:预测连续数值 寻找自变量&#xff08;解释变量&#xff09;与因变量&#xff08;被解释变量&#xff09;之间的线性关联关系&#xff0c;通过构建线性方程来对数据进行拟合和预测。即两个变量之间是一次函…

【渗透测试】Vulnhub靶机-FSoft Challenges VM: 1-详细通关教程

下载地址&#xff1a;https://www.vulnhub.com/entry/fsoft-challenges-vm-1,402/ 目录 前言 信息收集 目录扫描 wpscan扫描 修改密码 反弹shell 提权 思路总结 前言 开始前注意靶机简介&#xff0c;当第一次开机时会报apache错误&#xff0c;所以要等一分钟后重启才…

【区块链+ 房产建筑】山东省建筑产业互联网平台 | FISCO BCOS 应用案例

山东省建筑产业互联网平台&#xff08;山东省弘商易盟平台&#xff09;是基于区块链技术构建的分布式产业互联网平台&#xff0c; 旨在把各企业内部的供应链协同管理系统&#xff08;包括采购或者SRM 系统&#xff0c; 以及销售或CRM 系统&#xff09;利用区块链技术链接起来&a…

国家天文台携手阿里云,发布国际首个太阳大模型“金乌”

2025年4月1日&#xff0c;中国科学院国家天文台与阿里云共同宣布推出全球首个太阳物理大模型“金乌”&#xff0c;在太阳活动预测领域实现颠覆性突破——其针对破坏性最强的M5级太阳耀斑预报准确率高达91%&#xff0c;远超传统数值模型&#xff0c;标志着人类对太阳的认知迈入“…

数据结构(5)——栈

目录 前言 一、栈的概念及其结构 二、栈的实现 2.1说明 2.2动态栈结构体定义 2.3初始化 2.4销毁 2.5进&#xff08;压&#xff09;栈 2.6检验栈是否为空 2.7弹&#xff08;出&#xff09;栈 2.8栈的元素个数 2.9访问栈顶元素 三、运行 总结 前言 栈是一种常见的…