项目成品图片:
01
—
项目简介
1.功能详解
功能如下:
按键解锁:系统通过4×4矩阵键盘模块输入密码进入主菜单
门禁刷卡:通过RFID模块刷卡进入主菜单,卡片可以添加或者覆盖删除
指纹识别:通过AS608指纹识别模块识别指纹开锁
蓝牙APP解锁:通过蓝牙APP输入密码解锁
实时时间显示:OLED屏幕显示当前时间,可通过按键修改
OLED显示:显示用户解锁界面,主菜单以及各项功能界面
蜂鸣器报警:密码输入错误蜂鸣器报警
2.材料清单
STM32F103C8T6最小系统板
OLED显示屏(7针SPI协议)
4×4矩阵键盘
RFID门禁模块(加卡片)
AS608指纹模块
蓝牙模块(BT04-A)
蜂鸣器
02
—
原理图设计
03
—
1.PCB图
2.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
+关注
关注
4318文章
23069浏览量
397100 -
STM32
+关注
关注
2270文章
10890浏览量
355641 -
智能门禁锁
+关注
关注
0文章
3浏览量
1630
发布评论请先 登录
相关推荐
评论