基于STM32的多功能门禁系统(AS608指纹识别、密码解锁、刷卡解锁)

目录

一、项目功能

二、视频

三、原理图

4、材料选择

5、部分程序

资料下载地址:基于STM32的多功能门禁系统

一、项目功能

1、AS608指纹解锁;可以录入、删除、验证指纹;

2、密码解锁;可以密码验证、修改密码和保存密码;

3、刷卡解锁;

4、OLED液晶显示;

二、视频

基于STM32的多功能门禁系统(AS608指纹识别、密码解锁、刷卡解锁)

三、原理图

4、材料选择

AS608指纹模块 

RC522刷卡模块

OLED液晶显示模块

矩阵按键模块

5、部分程序


#include "sys.h"
#include "delay.h"
#include "oled_iic.h"
#include "stdio.h"
#include "key.h"
#include "timer.h"
#include "as608.h"
#include "usart3.h"
#include "stmflash.h"
#include "key_driver.h"
#include "RFID_RC522.h"
//要写入到STM32 FLASH的字符串数组
 u8 TEXT_Buffer[10]={"1234"};
#define SIZE sizeof(TEXT_Buffer)		//数组长度


u8 datatemp[SIZE];
u8 PassFlag = 0;// 1 :更改密码     2:验证密码
u8 inputidx = 0;
u8 setidx = 0;
u8 cardidx = 0;
u8 delidx = 0;
u16 errcnts = 0;
int main(void)
{		
	extern const u8 BMP1[];
	int i = 0,m = 0,temp = 0;
	u8 data[16]={0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,255,255,255,255,255,255,255}; //写入的金额;
	HZ= GB16_NUM();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	delay_init();
	TIM3_Int_Init(71,999);
	Init_Key_Driver();
	usart3_init(57600);
	KEY_Init();
	delay_ms(100);
	OLED_Init();
	
	//delay_ms(1000);
	OLED_Clear();
	//delay_ms(500);
	OLED_ShowCH(16, 0,  "指纹解锁");
	OLED_ShowCH(16, 2, "K1添加指纹");
	OLED_ShowCH(16, 4, "K3删除指纹");
	OLED_ShowCH(16, 6, "K5验证指纹");
	STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)TEXT_Buffer,4);//获取密码
	delay_ms(50);
	RC522_Init();		 //RC522
	while(1)
	{		
		Main_Key_Ack();
		if(SysMenu.menuidx == 0)
		{
			if(SysMenu.ID == 0)
			{
				OLED_ShowCH(16, 0,  "指纹解锁");
				OLED_ShowCH(16, 2, "K1添加指纹");
				OLED_ShowCH(16, 4, "K3删除指纹");
				OLED_ShowCH(16, 6, "K5验证指纹");
				
			}
			PassFlag = 0;
			if(SysMenu.ID==1)
			{
				
				OLED_Clear();
				//
				Add_FR();
				
			}
			if(SysMenu.ID==3)
			{
				
				OLED_Clear();
				Del_FR();
			}
			if(SysMenu.ID==5)
			{
				
					OLED_Clear();
				
				OLED_ShowCH(32,2,"请按手指");
				
				press_FR();
				
			}	
		}
		else if(SysMenu.menuidx == 1)
		{
			
			if(SysMenu.ID == 0)
			{
				
				OLED_ShowCH(16, 0,  "密码解锁");
				OLED_ShowCH(16, 2, "K1更改密码");
				OLED_ShowCH(16, 4, "K2验证密码");
				//Main_Key_Ack();
			}
			if(SysMenu.ID == 1)
			{
				switch(setidx)
				{
					case 0://输入新密码
						Syspass.flag = 1;
						OLED_ShowCH(16, 2, "输入新密码");
						OLED_ShowCH(16, 4, "              ");
						setidx = 1;
					break;
					case 1://显示****
						for( i = 0 ; i < Syspass.changenum;i++)
						{
							OLED_ShowCH(16 + i *16, 4, "*");
						}
						if(Syspass.changenum == 4)
							setidx = 2;
					break;
					case 2://密码更改
						if(Syspass.isok == 1)
						{
							Syspass.isok = 0;
							ChangePass();
							delay_ms(1000);
							setidx = 0;
							SysMenu.ID = 0;
							Syspass.flag = 0;
						}
					break;	
					
				}
				
			}
			
			if(SysMenu.ID == 2)
			{
				switch(inputidx)
				{
					case 0://输入密码
						Syspass.flag = 2;
						OLED_ShowCH(16, 2, "请输入密码");
						OLED_ShowCH(16, 4, "              ");
						inputidx = 1;
					break;
					case 1://显示****
						for( i = 0 ; i < Syspass.verifynum;i++)
						{
							OLED_ShowCH(16 + i *16, 4, "*");
						}
						if(Syspass.verifynum == 4)
							inputidx = 2;
					break;
					case 2://密码匹配
						if(Syspass.isok == 1)
						{
							Syspass.isok = 0;
							MatchPass();
							delay_ms(1000);
							inputidx = 0;
							SysMenu.ID = 0;
							Syspass.flag = 0;
						}
					break;
				}
				
				
			}
		}
		else if(SysMenu.menuidx == 2)
		{
			if(SysMenu.ID == 0)
			{
				OLED_ShowCH(16, 0,  "刷卡解锁");
				OLED_ShowCH(16, 2,  "K1请刷卡");
				//OLED_ShowCH(16, 4,  "K2验证密码");
			}
			if(SysMenu.ID == 1)
			{
				switch (cardidx)
				{
					
					case 0:
						OLED_ShowCH(16, 2,  "请刷卡  ");
						//OLED_ShowCH(16, 4,  "              ");
						temp = read_card_data();
					if(temp == 0)
					{
	
						cardidx = 1;
					}
					else 
						OLED_ShowCH(16, 4,  "        ");
						errcnts++;
						if(errcnts > 200)
						{
							errcnts = 0;
							cardidx = 0;
							SysMenu.ID = 0;
							OLED_ShowCH(16, 4,  "          ");
						}
					break;
					case 1:
						OLED_ShowCH(16, 4,  "刷卡成功");
						delay_ms(1500);
						delay_ms(1500);
						cardidx = 0;
						SysMenu.ID = 0;
						OLED_ShowCH(16, 4,  "        ");
					break;
					
					case 2:
						
					break;
					
				}
				
				
			}
			
			
		}
	}
}


  • 3
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
人脸识别门禁系统是一种现代化的门禁管理方式,它可以通过摄像头对人脸进行识别,从而实现门禁的自动控制。基于STM32的人脸识别门禁系统可以实现高效、精准的人脸识别,同时也具有较低的成本和资源消耗。 下面是一个基于STM32的人脸识别门禁系统的设计思路: 1. 系统硬件设计:系统主要由STM32单片机、摄像头模块、LCD显示屏、继电器等组成。其中,STM32单片机作为系统的主控制器,摄像头模块用于采集人脸图像,LCD显示屏用于显示门禁状态,继电器用于控制门禁的开关。 2. 系统软件设计:系统软件主要包括人脸识别算法和门禁控制程序。人脸识别算法采用深度学习技术,通过对人脸图像进行特征提取和比对,实现对人脸的准确识别。门禁控制程序通过与继电器的配合,实现对门禁的自动开关控制。 3. 系统测试和优化:在系统开发完成后,需要进行系统测试和优化,以确保系统的可靠性和稳定性。测试过程中需要模拟实际使用场景,对系统进行多方位测试,并对测试结果进行分析和优化。 基于STM32的人脸识别门禁系统具有以下优点: 1. 高效、精准的人脸识别能力,提高门禁管理的便捷性和安全性。 2. 硬件成本低,资源消耗少,适合小型门禁系统的应用。 3. 可以根据实际需求进行灵活的扩展和优化,具有很好的可拓展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森旺电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值