STM32项目分享:智能门禁锁系统
目录
一、前言
二、项目简介
1.功能详解
2.主要器件
三、原理图设计
四、PCB硬件设计
1.PCB图
2.PCB板及元器件图
五、程序设计
六、实验效果
七、资料内容
项目分享
一、前言
项目成品图片:

哔哩哔哩视频链接:
https://www.bilibili.com/video/BV1Sg4y1X7Ex/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2
(资料分享见文末)
二、项目简介
1.功能详解
基于STM32智能门禁锁系统。
功能如下:
- 按键解锁:系统通过4×4矩阵键盘模块输入密码进入主菜单
- 门禁刷卡:通过RFID模块刷卡进入主菜单,卡片可以添加或者覆盖删除
- 指纹识别:通过AS608指纹识别模块识别指纹开锁
- 蓝牙APP解锁:通过蓝牙APP输入密码解锁
- 实时时间显示:OLED屏幕显示当前时间,可通过按键修改
- 步进电机:步进电机模拟门锁开关
- OLED显示:显示用户解锁界面,主菜单以及各项功能界面
- 蜂鸣器报警:密码输入错误蜂鸣器报警
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项目分享:智能门禁锁系统
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…...
PostgreSQL中有没有类似Oracle的dba_objects系统视图
PostgreSQL中有没有类似Oracle的dba_objects系统视图 在PostgreSQL中,没有一个完全集成了所有对象信息的视图(类似于Oracle中的DBA_OBJECTS)。但是,PostgreSQL提供了一些系统目录表和视图,可以用来获取数据库对象的信…...
【kubernetes】探索k8s集群的配置资源(secret和configma)
目录 一、Secret 1.1Secret 有四种类型 1.2Pod 有 3 种方式来使用 secret 1.3应用场景:凭据 1.4创建 Secret 1.4.1用kubectl create secret命令创建Secret 1.4.2内容用 base64 编码,创建Secret 1.4.2.1Base64编码 1.4.2.2创建YAML文件 1.4.2.3…...
基于springboot实现社区养老服务系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现社区养老服务系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本社区养老服务系统就是在这样的大环境下诞生,其可以帮助…...
用linux 1分钟部署一台文件上传/下载的http/https服务器
安装包官网:GitHub - codeskyblue/gohttpserver: The best HTTP Static File Server, write with golangvue 1、官网下载或本文章的资源链接下载gohttpserver; 2、将gohttpserver、cacert.pem、cakey.pem三个文件放在linux一个目录下 启动gohttpserver服…...
机器学习ML.NET
适用于 .NET 的机器学习 ML.NET 是用于 .NET 的跨平台开源机器学习 (ML) 框架。 ML.NET 允许开发人员在其 .NET 应用程序中轻松构建、训练、部署和使用自定义模型,而无需开发机器学习模型的专业知识或使用 Python 或 R 等其他编程语言的经验。该框架提供从文件和数据库加载…...
爬取基金收盘价并用pyecharts进行展现
爬取基金收盘价并用pyecharts进行展现 一、用到的第三方包 因为使用到了一些第三方的包,包还是比较大的如果直接从社区下载比较费劲,所以建议配置国内镜像源,这里以清华的镜像源为例。 pip config set global.index-url https://pypi.tuna…...
各平台对象存储
一、阿里云对象存储 官方文档:https://help.aliyun.com/zh/oss/getting-started/getting-started-with-oss?spma2c4g.11186623.0.0.299a646c6nWWcW 1.引入maven 官网:https://help.aliyun.com/zh/oss/developer-reference/java-installation?spma2c…...
C# 中提取方法进行重构
文章目录 1、什么是提取方法重构技术?2、提取方法重构 C# 代码示例3、提取方法重构技术的好处4、提取方法重构有用的场景5、总结 C# 中的提取方法重构技术 1、什么是提取方法重构技术? 重构代码是软件工程师的一项重要技能,因为它有助于提高…...
每天一个数据分析题(三百四十三)
同环比是帮助阅读者了解维度项表现水平有没有随着时间的推移而得以增长提升,以下对于同环比的说法正确的是? A. 同环比计算方法一般适用于对长周期业务行为结果的观测 B. 若产品具备季节属性特征,则应优先使用同比计算方法 C. 上期值一般指…...
【leetcode--统计优美子数组】
解题思路 一、滑动窗口 不断右移 right 指针来扩大滑动窗口,使其包含 k 个奇数; 若当前滑动窗口包含了 k 个奇数,则如下「计算当前窗口的优美子数组个数」: 统计第 1 个奇数左边的偶数个数 leftEvenCnt。 这 leftEvenCnt 个偶数…...
开源模型应用落地-LangChain高阶-LCEL-表达式语言(二)
一、前言 尽管现在的大语言模型已经非常强大,可以解决许多问题,但在处理复杂情况时,仍然需要进行多个步骤或整合不同的流程才能达到最终的目标。然而,现在可以利用langchain来使得模型的应用变得更加直接和简单。 LCEL是什么? LCEL是一种非常灵活和强大的语言,可以帮助您更…...
shell脚本对编码和行尾符敏感吗
问题 我正在 macOS 上制作一个 NW.js 应用程序,并想通过双击图标在开发模式下运行该应用程序。在第一步中,我试图使我的 shell 脚本正常工作。 在 Windows 上使用 VS Code,我在项目的根目录下创建了一个 run-nw 文件,包含以下内…...
神经网络----现有网络的下载和使用(vgg16)
以下两种方法已经用不了 vgg16_false torchvision.models.vgg16(pretrainedFalse) vgg16_true torchvision.models.vgg16(pretrainedTrue) 改为 vgg16_model0 vgg16(weightsNone) #vgg16_false vgg16_model1 vgg16(weightsVGG16_Weights.DEFAULT) # pretrained vgg16_…...
Java 异常处理 - 自定义异常
在Java中,自定义异常是一种创建新异常类的方式,这些异常类继承自Throwable类或其子类Exception(或RuntimeException,如果它是运行时异常的话)。自定义异常通常用于描述特定于应用程序的错误情况,以便为调用…...
Excel 交叉表的格转成列,行转成格
Excel里交叉表的左表头是卡车号,上表头是工作,交叉格是工作编号。 ABCD1Truck NumberJob1Job2Job3271592859285928372395859282971473297159282971 要求:将交叉格转为列,左表头转为格。 ABC1297139585928272727137371473715726…...
【C++软件调试技术】什么是pdb文件?如何使用pdb文件?哪些工具需要使用pdb文件?
目录 1、什么是pdb文件? 2、如何配置生成pdb文件? 3、pdb文件的时间戳和文件名称 3.1、pdb文件的时间戳 3.2、pdb文件的文件名称 4、有pdb文件才能在Visual Studio中调试代码 5、在Windbg中使用pdb文件 5.1、使用lm命令查看二进制文件的时间戳,去查找对应版本的pdb文…...
如何搭建一台永久运行的个人服务器?
一、前言 由于本人在这段时候,看到了一个叫做树莓派的东东,初步了解之后觉得很有意思,于是想把整个过程记录下来。 二、树莓派是什么? Raspberry Pi(中文名为树莓派,简写为RPi,(或者RasPi / RPI) 是为学习计算机编程…...
Ant Design+react 表单只读
表单禁用,样式不好看,不符合甲方标准,看了一下文档,select、radio等都不支持只读状态。 解决方法: 利用css3的point-events属性,设置为none 在查看弹窗时,传入一个变量,当变量为true…...
推荐系统三十六式学习笔记:原理篇.近邻推荐07|人以群分,你是什么人就看到什么世界
目录 协同过滤基于用户的协同过滤背后的思想原理实践1、构造矩阵2、相似度计算3、推荐计算4、一些改进 应用场景:总结 谈及推荐系统,不得不说大名鼎鼎的协同过滤。协同过滤的重点在于协同,所谓协同,也就是群体互帮互助,…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...
Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...
