項目成品圖片:
01
—
項目簡介
1.功能詳解
功能如下:
按鍵解鎖:系統通過4×4矩陣鍵盤模塊輸入密碼進入主菜單
門禁刷卡:通過RFID模塊刷卡進入主菜單,卡片可以添加或者覆蓋刪除
指紋識別:通過AS608指紋識別模塊識別指紋開鎖
藍牙APP解鎖:通過藍牙APP輸入密碼解鎖
實時時間顯示:OLED屏幕顯示當前時間,可通過按鍵修改
OLED顯示:顯示用戶解鎖界面,主菜單以及各項功能界面
蜂鳴器報警:密碼輸入錯誤蜂鳴器報警
2.材料清單
STM32F103C8T6最小系統板
OLED顯示屏(7針SPI協議)
4×4矩陣鍵盤
RFID門禁模塊(加卡片)
AS608指紋模塊
藍牙模塊(BT04-A)
蜂鳴器
02
—
原理圖設計
03
—
PCB硬件設計
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
+關注
關注
4358文章
23442瀏覽量
407691 -
STM32
+關注
關注
2290文章
11018瀏覽量
362939 -
智能門禁鎖
+關注
關注
0文章
3瀏覽量
1679
發布評論請先 登錄
基于STM32的智能門禁系統
stm32項目搭建基礎
STM32項目開發中超級實用技巧分享
基于HAL庫的STM32項目問題描述
STM32項目設計:基于STM32F4的mp3、wav音樂播放器 (UCOSIII操作系統、GUI控件)

STM32項目實戰:基于STM32U5的火災報警系統(LVGL),附項目教程/源碼

評論