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

相关文章

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二