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

描述

 

项目成品图片:

 

pcb

 

 

 

01

项目简介

 

 

1.功能详解


 

基于STM32智能门禁锁系统。

功能如下:


 

按键解锁:系统通过4×4矩阵键盘模块输入密码进入主菜单

门禁刷卡:通过RFID模块刷卡进入主菜单,卡片可以添加或者覆盖删除

指纹识别:通过AS608指纹识别模块识别指纹开锁

蓝牙APP解锁:通过蓝牙APP输入密码解锁

实时时间显示:OLED屏幕显示当前时间,可通过按键修改

步进电机:步进电机模拟门锁开关

OLED显示:显示用户解锁界面,主菜单以及各项功能界面

蜂鸣器报警:密码输入错误蜂鸣器报警

 

2.材料清单 


 

STM32F103C8T6最小系统板

OLED显示屏(7针SPI协议)

4×4矩阵键盘

RFID门禁模块(加卡片)

AS608指纹模块

蓝牙模块(BT04-A)

蜂鸣器

 

02


 

原理图设计

 

pcb

 

 

03


 

PCB硬件设计

 

1.PCB图

pcb

 

pcb

 

2.PCB板焊接实物及元器件图

pcb

 

 

04


 

程序设计

 

  •  

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

 

05


 

实验效果


 

pcb

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分