STM32项目分享:智能门禁锁系统

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

1.PCB图

2.PCB板及元器件图

五、程序设计

六、实验效果

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1Sg4y1X7Ex/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末)

二、项目简介

1.功能详解

基于STM32智能门禁锁系统。

功能如下:

  1. 按键解锁:系统通过4×4矩阵键盘模块输入密码进入主菜单
  2. 门禁刷卡:通过RFID模块刷卡进入主菜单,卡片可以添加或者覆盖删除
  3. 指纹识别:通过AS608指纹识别模块识别指纹开锁
  4. 蓝牙APP解锁:通过蓝牙APP输入密码解锁
  5. 实时时间显示:OLED屏幕显示当前时间,可通过按键修改
  6. 步进电机:步进电机模拟门锁开关
  7. OLED显示:显示用户解锁界面,主菜单以及各项功能界面
  8. 蜂鸣器报警:密码输入错误蜂鸣器报警

2.主要器件

  • STM32F103C8T6最小系统板
  • OLED显示屏(7针SPI协议)
  • 4×4矩阵键盘
  • RFID门禁模块(加卡片)
  • AS608指纹模块
  • 蓝牙模块(BT04-A)
  • 蜂鸣器

三、原理图设计

四、PCB硬件设计

1.PCB图

2.PCB板及元器件图

五、程序设计

cpp 复制代码
 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);	 //串口初始化为9600
	printf("串口功能正常\r\n");
	Button4_4_Init();          //初始化与按键连接的硬件接口
	OLED_Init();    			//显示初始化
    Walkmotor_Init();
	BEEP_Init();			//蜂鸣器初始化
	usart2_init(usart2_baund);           //初始化指纹模块
	PS_StaGPIO_Init();
	OLED_Clear(); 
	starting();//开机信息  logo
	err = 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);//锁
				}
				//手机蓝牙解锁密码1
				Error=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 {}
				//手机蓝牙解锁密码2
				Error=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);
		}	
	}
 }

六、实验效果

七、资料内容

项目分享

相关推荐
scan130 分钟前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
Qingniu011 小时前
【青牛科技】应用方案 | RTC实时时钟芯片D8563和D1302
科技·单片机·嵌入式硬件·实时音视频·安防·工控·储能
Mortal_hhh2 小时前
VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)
ide·vscode·stm32·编辑器
深圳市青牛科技实业有限公司3 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比3 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie4 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
鹿屿二向箔4 小时前
STM32外设之SPI的介绍
stm32
西瓜籽@4 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
远翔调光芯片^138287988726 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源
极客小张7 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩