項(xiàng)目成品圖片:
01
—
項(xiàng)目簡(jiǎn)介
1.功能詳解
功能如下:
按鍵解鎖:系統(tǒng)通過(guò)4×4矩陣鍵盤模塊輸入密碼進(jìn)入主菜單
門禁刷卡:通過(guò)RFID模塊刷卡進(jìn)入主菜單,卡片可以添加或者覆蓋刪除
指紋識(shí)別:通過(guò)AS608指紋識(shí)別模塊識(shí)別指紋開鎖
藍(lán)牙APP解鎖:通過(guò)藍(lán)牙APP輸入密碼解鎖
實(shí)時(shí)時(shí)間顯示:OLED屏幕顯示當(dāng)前時(shí)間,可通過(guò)按鍵修改
步進(jìn)電機(jī):步進(jìn)電機(jī)模擬門鎖開關(guān)
OLED顯示:顯示用戶解鎖界面,主菜單以及各項(xiàng)功能界面
蜂鳴器報(bào)警:密碼輸入錯(cuò)誤蜂鳴器報(bào)警
2.材料清單
STM32F103C8T6最小系統(tǒng)板
OLED顯示屏(7針SPI協(xié)議)
4×4矩陣鍵盤
RFID門禁模塊(加卡片)
AS608指紋模塊
藍(lán)牙模塊(BT04-A)
蜂鳴器
02
—
原理圖設(shè)計(jì)
03
—
PCB硬件設(shè)計(jì)
1.PCB圖
2.PCB板焊接實(shí)物及元器件圖
04
—
程序設(shè)計(jì)
int main(void){ u16 set=0; u8 err=0; int key_num; int time1; int time2; //鎖屏?xí)r間 char arrow=0; //箭頭位子 delay_init(); //延時(shí)函數(shù)初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí) 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();//開機(jī)信息 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(); //系統(tǒng)參數(shù)初始化 while(1) {//鎖屏界面 MAIN: OLED_Clear(); OLED_Show_Font(56,48,0);//顯示鎖圖標(biāo) while(1) { time1++; Display_Data();//時(shí)間顯示:每1000ms更新一次顯示數(shù)據(jù)
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);//鎖 } //手機(jī)藍(lán)牙解鎖密碼1 Error=usart1_cherk((char*)sys.passwd1); if(Error==0) { OLED_Clear_NOupdate(); Show_Str(12,13,128,20,"藍(lán)牙密碼1:正確",12,0); OLED_Refresh_Gram();//更新顯示 delay_ms(800); DisUnLock(); goto MENU; } else {} //手機(jī)藍(lán)牙解鎖密碼2 Error=usart1_cherk((char*)sys.passwd2); if(Error==0) { sys.errCnt = 0; OLED_Clear_NOupdate(); Show_Str(12,13,128,12,"藍(lán)牙密碼2:正確",12,0); OLED_Refresh_Gram();//更新顯示 delay_ms(800); DisUnLock(); goto MENU; } else {} } //指紋解鎖 if(PS_Sta) //檢測(cè)PS_Sta狀態(tài),如果有手指按下 { 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();//密碼解鎖函數(shù) 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); //主頁(yè)菜單顯示 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) { //超時(shí)鎖屏 time2++; if(time2>100 | key_num==4){ OLED_Clear(); DisLock(); if(time2>100) beep_on_mode2(); time2 =0; OLED_Clear(); goto MAIN; } //手機(jī)藍(lán)牙鎖定
if(memcmp(USART_RX_BUF,"lock",4)==0) { DisLock(); goto MAIN; } //功能選項(xiàng)選擇 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; //設(shè)置時(shí)間 case 4:Add_Rfid(); break; //錄入卡片 case 5:Massige(); break; //顯示信息 } goto MENU; } } delay_ms(1); } } }
05
—
實(shí)驗(yàn)效果
-
pcb
+關(guān)注
關(guān)注
4324文章
23156瀏覽量
399224 -
STM32
+關(guān)注
關(guān)注
2270文章
10923瀏覽量
357035 -
智能門禁鎖
+關(guān)注
關(guān)注
0文章
3瀏覽量
1645
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論