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

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni