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);
		}	
	}
 }

六、实验效果

七、资料内容

项目分享

相关推荐
沐欣工作室_lvyiyi16 分钟前
基于单片机的智能家居窗帘控制系统设计(论文+源码)
单片机·嵌入式硬件·毕业设计·智能家居·智能窗帘
嵌入式分享32 分钟前
嵌入式分享#41:RK3576改UART波特率【精简版】
linux·嵌入式硬件·ubuntu·嵌入式
典则1 小时前
STM32FreeRtos入门(四)——任务状态和调度
stm32·单片机·嵌入式硬件
充哥单片机设计1 小时前
【STM32项目开源】基于STM32的智能天然气火灾监控
stm32·单片机·嵌入式硬件
充哥单片机设计1 小时前
【STM32项目开源】基于STM32的智能仓库火灾检测系统
stm32·单片机·嵌入式硬件
就叫飞六吧3 小时前
普中stm32大Dap烧录流程
stm32
A9better4 小时前
嵌入式开发学习日志38——stm32之看门狗
stm32·嵌入式硬件·学习
小莞尔5 小时前
【51单片机】【protues仿真】基于51单片机智能路灯控制系统
c语言·stm32·单片机·嵌入式硬件·51单片机
辰哥单片机设计14 小时前
TT直流减速电机(STM32)
stm32
A9better14 小时前
嵌入式开发学习日志36——stm32之USART串口通信前述
stm32·单片机·嵌入式硬件·学习