基于STM32的智能门禁系统(指纹、蓝牙、刷卡、OLED、电机)

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于STM32单片机,六个按键,分别代表指纹、蓝牙、刷卡的正确进门与错误进门;
比如第一个按键按下,表示指纹正确,OLED显示指纹正确,开门,
第二个按键按下的话,则指纹错误,OLED显示指纹错误,请重试,
第二个按键连续按三次以上,则OLED显示开门失败,此时启动报警系统,
即蜂鸣器报警。同理,蓝牙与刷卡的操作同样如此。

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

三、程序编程

#include "main.h"
#include "gpio.h"
#include "./HAL/key/key.h"
#include "./HAL/OLED/OLED_NEW.H"void Key_function(void);								//按键函数
void Display_function(void); //显示函数
void Manage_function(void);							//处理函数#define LED(a) (a?HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET):HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET)) #define BEEP(a) (a?HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET):HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET)) uint8_t key_num,flag_display;         //按键与显示变量
static int flag=0;uint8_t flag_led,flag_beep;						//灯、报警标志位
uint16_t time_num;
static int flag1=0;void SystemClock_Config(void);/****
*******按键设置函数
*****/
void Key_function(void)
{key_num = Chiclet_Keyboard_Scan();	//按键扫描if(key_num != 0)										//有按键按下{switch(key_num){case 1:flag=1;break;case 2:flag=3;break;case 3:flag=5;break;case 4:flag=2;flag1++;break;case 5:flag=4;flag1++;break;case 6:flag=6;flag1++;break;}}
}/****
*******显示函数
*****/
void Display_function(void)
{switch(flag){case 1:Oled_ShowCHinese(0,0,"指纹正确");Oled_ShowString(64,0,",");Oled_ShowCHinese(80,0,"请开门");break;case 2:Oled_ShowCHinese(0,0,"指纹错误");Oled_ShowString(64,0,",");Oled_ShowCHinese(80,0,"请重试");break;case 3:Oled_ShowCHinese(0,0,"蓝牙正确");Oled_ShowString(64,0,",");Oled_ShowCHinese(80,0,"请开门");break;case 4:Oled_ShowCHinese(0,0,"蓝牙错误");Oled_ShowString(64,0,",");Oled_ShowCHinese(80,0,"请重试");break;case 5:Oled_ShowCHinese(0,0,"刷卡正确");Oled_ShowString(64,0,",");Oled_ShowCHinese(80,0,"请开门");break;case 6:Oled_ShowCHinese(0,0,"刷卡错误");Oled_ShowString(64,0,",");Oled_ShowCHinese(80,0,"请重试");break;}}/****
*******处理函数
*****/
void Manage_function(void)
{if(flag1 == 3){flag_beep=1;flag_led=1;Oled_ShowCHinese(0,2,"开门失败");Oled_ShowCHinese(0,4,"报警");}else{flag_beep=0;flag_led=0;}if(flag_beep==1)BEEP(1);elseBEEP(0);if(flag_led==1)LED(1);elseLED(0);
}int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();OLED_Init();									//OLED初始化OLED_Clear();									//OLED清屏while (1){Key_function();							//按键函数Display_function();					//显示函数Manage_function();					//处理函数}}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL4;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){Error_Handler();}PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 */
/* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

四、实现现象

具体动态效果看B站演示视频:

基于STM32的智能门禁系统(指纹、蓝牙、刷卡、OLED、电机)

全部资料(源程序、仿真文件、安装包、演示视频):

链接:https://pan.baidu.com/s/1B3YvL6RwC3TdHNIVC0yLSw?pwd=xl3o 
提取码:xl3o 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144740.html

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

相关文章

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【内核启动】

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核(LiteOS-M) 轻量系统内核&#…

faiss安装 (CPU版本)

faiss版本 faiss-v1.7.4 cd faiss-v1.7.4cmake -B build . -DBUILD_TESTINGOFF -DFAISS_ENABLE_GPUOFF -DFAISS_ENABLE_PYTHONOFFmake -C build -j faiss; 默认安装路径如下 -- Installing: /usr/local/lib64/libfaiss.a -- Installing: /usr/local/include/faiss…

跨境平台通用测评技巧:解锁Temu、亚马逊等平台的销量密码

在当今竞争激烈的跨境电商行业,测评补单虽被视为“公开的秘密”,但无论是消费者还是平台方对此普遍持有反感态度。对于新手店铺而言,若缺乏价格和运营等方面的绝对优势,要在市场中生存下去尤为困难。因此,合理使用测评…

深入探讨IDSIPS:信息安全的未来趋势与应用

引言 在信息技术飞速发展的今天,网络安全问题愈发突出。随着数据泄露、网络攻击等事件频发,企业和个人对信息安全的重视程度不断提高。IDSIPS(Intrusion Detection System and Intrusion Prevention System)作为信息安全领域的重…

PowerShell install 一键部署Oracle12c

Oracle12c前言 Oracle 12c是甲骨文公司推出的一款关系数据库管理系统,它引入了多项创新特性,如多租户架构、大数据处理和云部署,适用于企业级应用。以下是Oracle 12c的详细介绍: Oracle 12c的主要特点 高性能:通过多线程处理、自动优化等技术,提高了数据库的查询和处理…

非标工业模型评审不再难,3D一览通助力高效协同

在当今工业领域,非标设备设计正成为满足特定客户需求的关键。这类设计服务涉及为特定应用场景量身定制的设备或机器,它们通常不是市场上现成的标准化产品,而是根据客户的独特需求进行个性化设计和制造。 这种定制化过程要求设计团队与客户进…

Abp vNext(五)集成MQTTnet,可收发消息

一 前言 MQTT的相关理论内容这里不做过多介绍,请看下面两篇文章: Introduction MQTT协议中文版 MQTT协议-CSDN博客 这篇文章只做代码实现,文章中使用MQTTnet作为MQTT开发的组件。 MQTT分为服务端和客户端,一个服务端对应多个…

Python和C++及R相关系数数学统计学可视化和神经模型及评估指标

🎯要点 较少统计样本显著性评估和变量关系梳理功能磁共振成像一致性分析检测非单调关联性结构随机变量动力学相关性热图和矩阵图基因疫苗非线性变量相关性 Python相关矩阵 相关矩阵 n n n 个随机变量 X 1 , … , X n X_1, \ldots, X_n X1​,…,Xn​ 的相关矩阵…

视频去噪技术分享

视频去噪是一种视频处理技术,旨在从视频帧中移除噪声和干扰,提高视频质量。噪声可能由多种因素引起,包括低光照条件、高ISO设置、传感器缺陷等。视频去噪对于提升视频内容的可视性和可用性至关重要,特别是在安全监控、医疗成像和视…

迅为3A6000_7A2000开发板龙芯全国产处理器LoongArch架构核心主板

龙芯 3A6000 处理器完全自主设计、性能优异,代表了我国自主桌面 CPU 设计领域的最新里程碑成果。龙芯 3A6000 处理器的推出,说明国产 CPU 在自主可控程度和产品性能上已双双达到新高度,也证明了国内有能力在自研 CPU 架构上做出一流的产品。 …

聊聊AUTOSAR:基于Vector MICROSAR的TC8测试开发方案

技术背景 车载以太网技术作为汽车智能化和网联化的重要组成部分,正逐步成为现代汽车网络架构的核心,已广泛应用于汽车诊断(如OBD)、ECU软件更新、智能座舱系统、高清摄像头环视泊车系统等多个领域。 在这个过程中,ET…

SpringCloud 基于 web 的只会养老平台

摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计…

Django SQL注入-漏洞分析

1.进入项目界面 图1 项目主界面 2.访问任意不存在的目录路径报错,提示存在demo接口 图2 提示存在接口 3.访问/demo/,提示有一个name参数 图3 发现隐藏参数 4.对接口参数进行fuzz(实战思路),vulfocus已经给出了/demo?…

Cypress安装与启动(开始学习记录)

一 Cypress安装 使用npm安装 1.查看node.js npm的版本,输入 npm --version 和 node --version,node.js没安装的可以去中文网下载最新稳定版安装,npm不建议升级到最新版本,会导致安装Cypress时Error: Cannot find module ansi-st…

一篇文章解决ComfyUI常见的故障报错!

前言 学习和使用ComfyUI最痛苦的是什么?就是这满屏的红色方框和和[报错信息] “报错信息”),处理完一批又一批,很多人玩了一两个流程就搞不下去了,很多初学者因此就放弃了。 有道是:配置流程大半天,跑通出…

C++速通LeetCode中等第9题-合并区间

排序后迭代&#xff0c;遇到符合条件的就删除前一项&#xff0c;合并到后一项。 class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {int left 0,right 0;sort(intervals.begin(), intervals.end());vector&…

YOLOv5模型部署教程

一、介绍 YOLOv5模型是一种以实时物体检测闻名的计算机视觉模型&#xff0c;由Ultralytics开发&#xff0c;并于2020年年中发布。它是YOLO系列的升级版&#xff0c;继承了YOLO系列以实时物体检测能力而著称的特点。 二、基础环境 系统&#xff1a;Ubuntu系统&#xff0c;显卡…

妙笔生花,扩散模型技术探索与分享

一、引言 扩散模型因其强大的图像生成能力引发了巨大的关注,一度达到取代人类插画师的地步。在这个创意无界、视觉为王的时代,扩散模型正悄然带来一场前所未有的视觉盛宴,受到业界广泛关注。OpenAI轰动一时的“Sora”、淘宝AI制图工具“绘蛙”、京东内容创作平台“京点点”…

ATE自动化测试系统集成:软件与硬件的技术结合

ate测试系统集成通常是指将测试软件、测试硬件(如示波器、数字万用表、矢网等)与通信技术组合起来&#xff0c;从而满足产品的测试需求。ATE测试系统集成已经成为提高电子产品测试效率和精度的必要手段。它将多种测试工具与自动化技术相结合&#xff0c;以满足不断升级的测试标…

坦白了,因为这个我直接爱上了 FreeBuds 6i

上个月&#xff0c;华为发布的 FreeBuds 6i 联名了泡泡玛特真的超级惊艳&#xff0c;不少宝子被这款耳机的颜值所吸引&#xff0c;而它的实力更是不容小觑的。FreeBuds 6i 是一款性能强大的降噪耳机&#xff0c;它一直在强调平均降噪深度&#xff0c;但是应该很多人对这个概念很…