基于stm32单片机的智能门禁系统设计

news2024/9/23 3:20:17

一.硬件方案

基于stm32单片机的智能门禁系统设计的整体电路主要由采用STM32F103单片机,4*4矩阵按键电路,电子锁继电器驱动电路,开锁LED指示灯,LCD1602显示屏电路,蜂鸣器报警电路,RFID感应电路,指纹识别模块;原理图如图:

在这里插入图片描述

PCB图如下:
在这里插入图片描述

二.设计功能

1.采用矩阵按键、指纹或者RFID输入、1602液晶显示、继电器模拟开锁、发光二极管为开锁指示灯,继电器是可以外接电锁的。
2.有报警、锁定键盘功能,如果密码输入错误3次,系统会直接锁住键盘并有蜂鸣器声音报警提示。
3.可以设置修改密码(6位数的密码)(0-9之间任意数字),修改密码之前必须输入原始密码,在输入新密码时要输入两次确认并相同才可以修改成功,否则修改不成功,防止误操作。
4.密码支持掉电保存功能,保存在STM32内部FLASH,可以随时修改密码,密码输入过程中,可按清除键删除已输入的数字。
5.可注册或者注销开锁的IC卡或者指纹。

三.软件设计

主程序源码

int main(void)
{	
		delay_init();	    //延时函数初始化	  
	  NVIC_Configuration();
		KEY_GPIO_Init();    //按键初始化
		BEEP_AND_RELAY_GPIO_Init();//蜂鸣器继电器初始化
		delay_ms(500);       //上电瞬间加入一定延时在初始化
	  DataInit();
		LCD_Init();         //屏幕初始化
	  LCD_Write_String(0,0,"   Loading...   ");
	  LCD_Write_String(0,1,"                ");
//	  CHECK_NEW_MCU();//单片机校验
	  PS_StaGPIO_Init();
	  RC522_Init();
		PcdReset (); //复位RC522 
		M500PcdConfigISOType ( 'A' );//设置工作方式	
	  uart1_Init(57600);   //串口初始化
	  TIM2_Init(999,719);    //以100Hz计数,定时10ms
		//Tout = ((arr+1)*(psc+1))/Tclk ;  
		//Tclk:定时器输入频率(单位MHZ)
		//Tout:定时器溢出时间(单位us)
		while(1)
		{  
          if(InitDisplay==1)
					{
							InitDisplay = 0;
						  BEEP = 0;
						  DataInit();
						  CorrectCont=0;									//正确计数器清零
						  RELAY = 0; //继电器关闭
				    	LCD_Write_String(0,0,"===Coded Lock===");
						  LCD_Write_String(0,1,"password:       ");
							LCD_Write_Com(0x80+0x40+9);
							LCD_Write_Com(0x0F);//光标闪烁
					}	
					finger_ctrl();//指纹处理函数
					if(Delete == 0&&Register==0)
					COMPER_ID_MODE();	
					ADD_ID_MODE();	
					DEL_ID_MODE();					
					//获取按键
					keycode = KEYSCAN();
					//有效键值0-15
					if ((keycode<16)&&(FlagKeyPress==0))
					{
							FlagKeyPress = 1;
							KeyPress(keycode);
							FlagKeyPress = 0;
					}
					delay_ms(10);
		}
		
}

资料链接:https://pan.baidu.com/s/1uAV37SRnQtrCt_lAIKpe1w?pwd=ch93
提取码:ch93

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

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

相关文章

如何查看 当前安装的vue版本

目录 1 实现 1 实现 要查看当前安装的 Vue 版本&#xff0c;可以使用以下方法&#xff1a; 在终端或命令提示符中运行以下命令&#xff1a; vue --version如果你使用的是 Vue CLI 创建的项目&#xff0c;可以在项目的根目录中找到 package.json 文件。在该文件中&#xff0c…

【CSS】悬浮动画

文章目录 效果展示代码实现 效果展示 代码实现 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>一颗不甘坠落的流星</title></head><style type"text/css">.bth {/* 添加背景颜色 */backgr…

2023-7-7-第十三式模板方法模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

代码随想录算法训练营第60天/最后一天 | 84.柱状图中最大的矩形

今日任务 目录 84.柱状图中最大的矩形 - Hard 84.柱状图中最大的矩形 - Hard 题目链接&#xff1a;力扣-84. 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够…

Android之Handler分析与理解

Android中的Handler是一个用于处理消息和线程间通信的机制。它可以将Runnable对象或Message对象发送到特定的线程中进行处理。 使用Handler的主要目的是在不同的线程之间进行通信&#xff0c;特别是在后台线程中执行一些任务后&#xff0c;将结果发送到UI线程进行更新。 流程图…

pearsonr 报错:numpy.float64 can not be interpreted as an integer

【1】 模型求出pred&#xff0c;pearsonr(pred,true&#xff09; 出现以下报错&#xff1a; 【2】解释&#xff1a; 当在计算皮尔逊相关系数&#xff08;Pearson correlation coefficient&#xff09;时出现"numpy.float64 can not be interpreted as an integer"的…

7.7~7.8学习总结

StringBuider&#xff1a;线程不安全&#xff0c;效率高 StringBuffer&#xff1a;线程安全&#xff0c;效率低&#xff1b; 用法举例&#xff1a; class TWC {public static void main(String []args){StringBuilder sbnew StringBuilder("小麻子爱吃粑粑");Syst…

C语言学习(三十六)---文件操作

上节内容中&#xff0c;我们学习了练习了动态内存的练习题&#xff0c;并且学习了柔性数组的相关内容&#xff0c;大叫要好好掌握&#xff0c;今天&#xff0c;我们将学习文件操作的相关内容&#xff0c;这部分内容实际上很多&#xff0c;我们以点代面&#xff0c;好了&#xf…

windows已有mysql的情况下 mysql8 安装

安装前先停掉本地已有的mysql服务https://dev.mysql.com/downloads/mysql/ 下载mysql压缩包解压创建 my.init 文件 [mysqld] port 3307 basedirF:\mysql-8.0.33-winx64\mysql-8.0.33-winx64 datadirF:\mysql-8.0.33-winx64\mysql-8.0.33-winx64\data max_connections200 cha…

3.3.内存的学习,pinnedmemory,内存效率问题

目录 前言1. Memory总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习精简 CUDA 教程-内存模型&#xff0c;pinned memory&am…

2023.7.08

#include "widget.h"void Widget::my_slot() {if((edit1->text()"admin")&&(edit2->text()"123456")){qDebug()<<"登陆成功";emit jump();close();}else{qDebug()<<"登陆失败";} }void Widget::b…

OSPFv2基础02_工作原理

目录 1.OSPF接口状态 2.OSPF邻居状态 2.1 OSPF邻居状态类型 2.2 广播网络OSPF邻接关系建立 3.Router ID&#xff08;路由器ID&#xff09;选举 4.DR和BDR选举 4.1 为什么引入DR和BDR&#xff1f; 4.2 DR和BDR的作用 4.3 DR和BDR选举过程 4.4 DR和BDR选举原则 5.OSPF路…

基于单片机指纹考勤系统的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;利用指纹采集模块存储打卡信息&#xff1b;12864显示当前考勤信息&#xff0c;时间 &#xff1b;如果迟到 语音播报 您已迟到&#xff1b;按键进行注册指纹、删除指纹、设置当前时间和签到时间、查询打卡等&#xff1b;具有掉电保存…

【YOLOv7调整detect.py】1.调整检测框粗细,2.设定标签颜色,3.只显示与标签数目相同的检测结果

目录 1. 调整检测框粗细2. 设定标签颜色3. 只显示与标签数目相同的检测结果 1. 调整检测框粗细 在detect.py中按住CtrlF检索line_thickness定位过去&#xff0c;在129行左右&#xff0c;更改line_thickness的大小即可&#xff0c;例如改为line_thickness3 2. 设定标签颜色 在…

Spring核心 and 创建使用

Spring核心 and 创建使用 文章目录 Spring核心 and 创建使用一、Spring的定义1.1什么是IoC1.1.1 理解控制反转&#xff08;IoC&#xff09;1.1.2 控制反转式程序开发 1.2 使用Spring IoC核心功能2.1 DI的概念说明 二、Spring的创建和使用2.1 创建一个Maven项目2.2 添加Spring框…

解决在jupyter notebook中找不到pip安装后的库

解决在jupyter notebook中找不到已安装的库

Todo-List案例版本二

(160条消息) Todo-List案例版本一_bubbleJessica的博客-CSDN博客 引入了localStorage&#xff0c;让案例更加完善 src/App.vue <template><div id"root"><div class"todo-container"><div class"todo-wrap"><MyHe…

pycharm 打开终端,安装第三方程序

鼠标移动到左下角 弹出列表&#xff0c;选择终端&#xff0c;当然也可以用快捷键唤出&#xff0c; 可以输入命令进行第三方库的安装

Redis实战案例14-分布式锁的基本原理、不同实现方法对比以及基于Redis进行实现思路

1. 分布式锁基本原理 基于数据库的分布式锁&#xff1a;这种方式使用数据库的特性来实现分布式锁。具体流程如下&#xff1a; 获取锁&#xff1a;当一个节点需要获得锁时&#xff0c;它尝试在数据库中插入一个特定的唯一键值&#xff08;如唯一约束的主键&#xff09;&#xff…

vue 进阶---动态组件 插槽 自定义指令

目录 动态组件 如何实现动态组件渲染 使用 keep-alive 保持状态 keep-alive 对应的生命周期函数 keep-alive 的 include 属性和exclude属性 插槽 插槽的基础用法 具名插槽 作用域插槽 自定义指令 自定义指令的分类 私有自定义指令 全局自定义指令 了解 eslint 插件…