STM32项目分享:智能门禁锁系统

2024-06-08 13:44

本文主要是介绍STM32项目分享:智能门禁锁系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板及元器件图

五、程序设计 

六、实验效果 

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1Sg4y1X7Ex/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末) 

二、项目简介

1.功能详解

基于STM32智能门禁锁系统。

功能如下:

  1. 按键解锁:系统通过4×4矩阵键盘模块输入密码进入主菜单
  2. 门禁刷卡:通过RFID模块刷卡进入主菜单,卡片可以添加或者覆盖删除
  3. 指纹识别:通过AS608指纹识别模块识别指纹开锁
  4. 蓝牙APP解锁:通过蓝牙APP输入密码解锁
  5. 实时时间显示:OLED屏幕显示当前时间,可通过按键修改
  6. 步进电机:步进电机模拟门锁开关
  7. OLED显示:显示用户解锁界面,主菜单以及各项功能界面
  8. 蜂鸣器报警:密码输入错误蜂鸣器报警

2.主要器件

  • STM32F103C8T6最小系统板
  • OLED显示屏(7针SPI协议)
  • 4×4矩阵键盘
  • RFID门禁模块(加卡片)
  • AS608指纹模块
  • 蓝牙模块(BT04-A)
  • 蜂鸣器

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板及元器件图

五、程序设计 

 int main(void){			u16 set=0;u8 err=0;int key_num;int time1;int time2;		//锁屏时间char arrow=0;  //箭头位子delay_init();	    	 //延时函数初始化	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(9600);	 //串口初始化为9600printf("串口功能正常\r\n");Button4_4_Init();          //初始化与按键连接的硬件接口OLED_Init();    			//显示初始化Walkmotor_Init();BEEP_Init();			//蜂鸣器初始化usart2_init(usart2_baund);           //初始化指纹模块PS_StaGPIO_Init();OLED_Clear(); starting();//开机信息  logoerr = RTC_Init();	  			//RTC初始化if(err){OLED_Clear(); Show_Str(12,13,128,20,"RTC CRY ERR!",12,0); OLED_Refresh_Gram();//更新显示delay_ms(3000);}SysPartInit();   //系统参数初始化 while(1){
//锁屏界面MAIN:OLED_Clear(); OLED_Show_Font(56,48,0);//显示锁图标while(1){time1++;  Display_Data();//时间显示:每1000ms更新一次显示数据if(DisFlag == 1){DisFlag = 0;OLED_Fill(0,24,16,63,0);OLED_Refresh_Gram();//更新显示}if((time1%100)==1){//MFRC522解锁time1=0;MFRC522_Initializtion();			Error=MFRC522_lock();if(Error==0){goto MENU;	}else {OLED_Show_Font(56,48,0);//锁}//手机蓝牙解锁密码1Error=usart1_cherk((char*)sys.passwd1);         if(Error==0){ OLED_Clear_NOupdate();Show_Str(12,13,128,20,"蓝牙密码1:正确",12,0); OLED_Refresh_Gram();//更新显示delay_ms(800);DisUnLock();goto MENU;	}else {}//手机蓝牙解锁密码2Error=usart1_cherk((char*)sys.passwd2);         if(Error==0){sys.errCnt = 0;OLED_Clear_NOupdate();Show_Str(12,13,128,12,"蓝牙密码2:正确",12,0); OLED_Refresh_Gram();//更新显示delay_ms(800);DisUnLock();goto MENU;	}else {}}//指纹解锁if(PS_Sta)	 //检测PS_Sta状态,如果有手指按下{while(PS_Sta){Error=press_FR();//刷指纹if(Error==0){goto MENU;   //跳到解锁界面}								else {OLED_Show_Font(56,48,0);//锁}}}//密码锁key_num=Button4_4_Scan();	//按键扫描if(key_num!=-1){Error=password();//密码解锁函数if(Error==0){goto MENU;	//跳到解锁界面}else {OLED_Show_Font(56,48,0);//锁}}delay_ms(1);				}
/********************主界面**************************/MENU:OLED_Clear();MENUNOCLR:OLED_Fill(0,0,20,48,0);//主页菜单显示if(arrow<3){Show_Str(5,arrow*16,128,16,"->",16,0);//显示箭头set=0;}else {Show_Str(5,(arrow-3)*16,128,16,"->",16,0);set=3;}Show_Str(25,0,128,16,setup[set],16,0);Show_Str(25,16,128,16,setup[set+1],16,0);Show_Str(25,32,128,16,setup[set+2],16,0);Show_Str(0,52,128,12,"上    下     确定",12,0);OLED_Refresh_Gram();//更新显示time2=0;while(1){//超时锁屏time2++;if(time2>100 | key_num==4){  OLED_Clear();DisLock();if(time2>100) beep_on_mode2();time2 =0;OLED_Clear();goto MAIN;}//手机蓝牙锁定if(memcmp(USART_RX_BUF,"lock",4)==0)	{DisLock();goto MAIN;}			//功能选项选择key_num=Button4_4_Scan();	if(key_num){if(key_num==13){if(arrow>0)arrow--;goto MENUNOCLR;}if(key_num==15){if(arrow<5)arrow++;goto MENUNOCLR;}if(key_num==16){switch(arrow){case 0:Add_FR();		break;//录指case 1:Del_FR();		break;//删指纹case 2:SetPassworld();break;//修改密码case 3:Set_Time(); break;  //设置时间case 4:Add_Rfid(); break;  //录入卡片case 5:Massige(); break;  //显示信息			}goto MENU;}		}delay_ms(1);}	}}

六、实验效果 

七、资料内容

项目分享

这篇关于STM32项目分享:智能门禁锁系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1042351

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重