STM32项目设计:智能门禁系统核心板版本 4种解锁方式

2023-12-23 12:36

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

文章目录

  • 一、项目简介
  • 二、原理图设计![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/809dd6c70b34425eb42f69187020c717.png)
  • 程序设计

在这里插入图片描述
哔哩哔哩视频链接: https://www.bilibili.com/video/BV1K64y1V7Y9?p=4&spm_id_from=pageDriver&vd_source=e5082ef80535e952b2a4301746491be0
实物购买链接: https://m.tb.cn/h.5NEporx?tk=LsaZWgPDsDb CZ3457

一、项目简介

指纹门禁密码锁是一种既可以通过密码输入,指纹识别也可以通过识别IC卡来实现门禁的开启关闭功能。在日常生活种它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的门禁密码锁是以芯片为核心,通过编程来实现的。
利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性通过软件程序来控制整个系统实现门禁密码锁的基本功能,其主要具有如下功能:
●指纹识别
●手机蓝牙控制
●密码通过键盘输入,若密码正确,则将锁打开
●密码输入错误,蜂鸣器将报警提示
●用户可以自由设定密码
●RC522射频卡识别
●OLED显示
●步进电机控制电路
系统方案
采用一种是用以STM32F103C8T6为核心的单片机控制方案,其原理如图2.1所示:
在这里插入图片描述

二、原理图设计在这里插入图片描述

程序设计


#include "main.h"#include "config.h"
#include <string.h>int main(void)
{int Error;  //密码验证信息int key_num;int time1;int time2;		//锁屏时间char arrow = 0; //箭头位子P_USER p_user;P_RECV_MSG p_msg;//SysHSI_Init();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();USART3_init(115200);   //人脸识别串口初始化OLED_Clear();starting();//开机信息  logoif(RTC_Init())	  			//RTC初始化{OLED_Clear_NOupdate();Show_Str(12, 13, 128, 20, (u8*)"RTC CRY ERR!", 12, 0);OLED_Refresh_Gram();//更新显示delay_ms(3000);}SysPartInit();   //系统参数初始化Cfg_FR1002_State(sysFlag.fr_state);//配置人脸识别模块工作状态while(1){
//锁屏界面
MAIN:OLED_Clear();while(1){time1++;Display_Data();//时间显示:每1000ms更新一次显示数据if(sysFlag.DisFlag == 1){sysFlag.DisFlag = 0;OLED_Refresh_Gram();//更新显示}//密码锁key_num = Button4_4_Scan();	//按键扫描if(key_num){Error = password(); //密码解锁函数if(Error == 0){goto MENU;	//跳到解锁界面}}if((time1 % 500) == 1){//MFRC522解锁MFRC522_Initializtion();Error = MFRC522_lock();if(Error == 0){goto MENU;}//手机蓝牙解锁密码1Error = usart1_cherk((char*)sys.passwd1);if(Error == 0) {OLED_Clear_NOupdate();Show_Str(12, 13, 128, 20, (u8*)"蓝牙密码1:正确", 12, 0);OLED_Refresh_Gram();//更新显示delay_ms(800);Set_UnLock();goto MENU;}//手机蓝牙解锁密码2Error = usart1_cherk((char*)sys.passwd2);if(Error == 0) {sys.errCnt = 0;OLED_Clear_NOupdate();Show_Str(12, 13, 128, 12, (u8*)"蓝牙密码2:正确", 12, 0);OLED_Refresh_Gram();//更新显示delay_ms(800);Set_UnLock();goto MENU;}delay_ms(1);} else {//指纹解锁if(PS_Sta)	 //检测PS_Sta状态,如果有手指按下{while(PS_Sta) {Error = press_FR(); //刷指纹if(Error == 0){//Set_UnLock();goto MENU;   //跳到解锁界面}}}}/********************主界面**************************/MENU:OLED_Clear();Dis_SysSetup(arrow);while(1){//超时锁屏time2++;//功能选项选择key_num = Button4_4_Scan();if(time2 > 10000 | key_num == 4) {OLED_Clear_NOupdate();Set_Lock();if(time2 > 10000)beep_on_mode2();time2 = 0;
//								delay_ms(1000);OLED_Clear_NOupdate();goto MAIN;}//手机蓝牙锁定if(memcmp(USART_RX_BUF, "LOCK", 4) == 0)	{
//							USART_RX_STA=0;
//							memset(USART_RX_BUF,0,USART_REC_LEN);Set_Lock();goto MAIN;}if(key_num){time2 = 0;if(key_num == 13) {if(arrow > 0)arrow--;}if(key_num == 15) {if(arrow < MAX_SYS_PARA_NUM-1)arrow++;}Dis_SysSetup(arrow);if(key_num == 16) {switch(arrow){case ADD_FIG:Add_FR();break;//录指case DEL_FIG:Del_FR();break;//删指纹case MOD_PSWD:SetPassworld();break;//修改密码case MOD_TIMES:Set_Time();break;  //设置时间case ADD_RFID:Add_Rfid();break;  //录入卡片case DEL_RFID:Delt_Rfid();break;case ADD_FACE:Add_Face();break;case DEL_FACE:Delt_Face();break;}goto MENU;}}delay_ms(1);}}
}

这篇关于STM32项目设计:智能门禁系统核心板版本 4种解锁方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

idea设置快捷键风格方式

《idea设置快捷键风格方式》在IntelliJIDEA中设置快捷键风格,打开IDEA,进入设置页面,选择Keymap,从Keymaps下拉列表中选择或复制想要的快捷键风格,点击Apply和OK即可使... 目录idea设www.chinasem.cn置快捷键风格按照以下步骤进行总结idea设置快捷键pyth

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

java敏感词过滤的实现方式

《java敏感词过滤的实现方式》文章描述了如何搭建敏感词过滤系统来防御用户生成内容中的违规、广告或恶意言论,包括引入依赖、定义敏感词类、非敏感词类、替换词类和工具类等步骤,并指出资源文件应放在src/... 目录1.引入依赖2.定义自定义敏感词类3.定义自定义非敏感类4.定义自定义替换词类5.最后定义工具类

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目