【STM32設計】基于STM32的智能門禁管理系統(指紋+密碼+刷卡+蜂鳴器報警)(代碼+資料+論文)


??本課題為基于單片機的智能門禁系統,整個系統由AS608指紋識別模塊,矩陣鍵盤,STM32F103單片機,OLED液晶,RFID識別模塊,繼電器,蜂鳴器等構成,在使用時,用戶可以錄入新的指紋信息,注冊新的IC卡,修改新的密碼,也可以刪除舊的指紋,注銷舊的IC卡,用戶可以通過密碼,IC卡或者指紋三種方式打開門禁,當輸入信息正確時繼電器會動作打開門禁,如果信息錯誤蜂鳴器會進行報警提示。本系統從原理圖設計,C語言編寫等多個角度完成了整個系統的設計,并最終通過制作實物完全了目標,經過測試達到了預期效果。

??資料下載:待更新。。。。


1、實現功能


(1)用戶管理需求
注冊新用戶:系統需要提供注冊新用戶的功能,包括錄入新的指紋信息、注冊新的IC卡和設置新的密碼。用戶可以通過其中一種或多種方式進行身份驗證。刪除用戶:系統需要提供刪除舊用戶的功能,允許管理員刪除指紋信息、注銷IC卡或重置密碼。
(2)身份驗證需求
密碼驗證:系統需要支持用戶通過輸入正確的密碼來驗證身份。IC卡驗證:系統需要支持用戶通過刷卡的方式進行身份驗證。指紋驗證:系統需要支持用戶通過指紋識別模塊進行身份驗證。
(3)門禁控制需求
繼電器控制:系統需要通過繼電器實現對門禁的控制。當用戶通過正確的身份驗證方式后,繼電器應該動作,打開門禁。報警提示:系統需要通過蜂鳴器進行報警提示,當用戶輸入的信息不正確時,蜂鳴器應該發出警報。
(4)用戶界面需求
顯示屏:系統需要配備OLED液晶屏幕,用于顯示用戶信息、菜單選項和操作結果等。用戶可以通過液晶屏幕進行交互和操作。
(5)安全性需求
數據保護:系統需要保護用戶數據的安全性,包括指紋信息、IC卡數據和密碼。數據應該被加密存儲,并采取相應的措施防止未經授權的訪問。防止暴力破解:系統應該設置安全機制,如密碼輸入錯誤次數限制、防止暴力破解的策略。
(6)擴展性需求
RFID識別模塊支持:系統需要支持RFID識別模塊,允許用戶通過刷卡方式進行身份驗證。多用戶管理:系統需要支持多個用戶的管理,包括新增用戶、刪除用戶和權限設置等功能。

可增加的功能:

主要元器件:

??STM32F103C8T6最小系統板、

目錄

    • ??資料下載:待更新。。。。
  • 1、實現功能
  • 2、硬件
  • 3、代碼
  • 4、原理圖/PCB
  • 5、論文


2、硬件

硬件框圖
本課題為基于單片機的智能門禁系統,整個系統由AS608指紋識別模塊,矩陣鍵盤,STM32F103單片機,OLED液晶,RFID識別模塊,繼電器,蜂鳴器等構成,在使用時,用戶可以錄入新的指紋信息,注冊新的IC卡,修改新的密碼,也可以刪除舊的指紋,注銷舊的IC卡,用戶可以通過密碼,IC卡或者指紋三種方式打開門禁,當輸入信息正確時繼電器會動作打開門禁,如果信息錯誤蜂鳴器會進行報警提示。
在這里插入圖片描述

實物

3、代碼

?? STM32代碼采用C語言,標準庫編寫,軟件是keil5,關鍵代碼有中文注釋,看不懂可以VX問我

#include "stm32f10x.h"
#include <stdio.h>
#include <string.h>	
#include "delay.h"
#include "sys.h"
#include "pwm.h"
#include "usart.h"
#include "timer.h"
#include "key4_4.h"
#include "stmflash.h"
#include "OLED.h"
#include "as608.h"
#include "rc522.h"
#include "rc522_user.h"
#include "IO_Init.h"
extern void Beep_Init(void); //蜂鳴器
int key;
u8 open_door_flag=0; 													//開門標志位
u16 user_ID=0;  															//保存指紋模塊返回的用戶ID,用于判斷用戶
u8 Password[6], Password2[6]={"123456"}; 			//六位用戶密碼,管理員密碼
u8 password_eeror,rc522_error,figer_error;		//錯誤次數
u16 Locked_time;
void open_door()  		//開門函數
{u8 i;if(open_door_flag>0)   //ok,就開門{OLED_Clear();Relay=0;for(i=58;i<62;i++)  //門已打開{OLED_ShowCH(32+i*16-16*58,1,i);}delay_ms(1700);delay_ms(1700);OLED_Clear();Relay=1;if(open_door_flag==1) //非管理員密碼,自動回復原始狀態open_door_flag=0;USART1_RX_STA=0;memset(USART1_RX_BUF,0,sizeof(USART1_RX_BUF));}
}void admin_show()			//總管理界面顯示
{int i;OLED_ShowStr(0,0,"A:",2);for(i=9;i<=10;i++)  //指紋{OLED_ShowCH(i*16-16*8,0,i);}for(i=111;i<=112;i++)  //管理{OLED_ShowCH(i*16-16*108,0,i);}OLED_ShowStr(0,4,"C:",2);for(i=17;i<=18;i++)  //密碼{OLED_ShowCH(i*16-16*16,4,i);}for(i=111;i<=112;i++)  //管理{OLED_ShowCH(i*16-16*108,4,i);}OLED_ShowStr(0,6,"D:IC",2);for(i=111;i<=112;i++)  //管理{OLED_ShowCH(i*16-16*108,6,i);}}
void oled_show()			//界面顯示
{u8 i;for(i=42;i<=45;i++)  //歡迎使用{OLED_ShowCH(32+i*16-16*42,0,i);}for(i=115;i<=117;i++) //多功能{OLED_ShowCH(i*16-16*114,2,i);}for(i=39;i<=41;i++) //電子鎖{OLED_ShowCH(i*16-16*35,2,i);}for(i=46;i<=49;i++) //請您開鎖{OLED_ShowCH(32+i*16-16*46,6,i);}
//	u16 i;
//	for(i=116;i<=118;i++)  //實驗室
//	{
//		OLED_ShowCH(40+i*16-16*116,0,i);
//	}
//	for(i=119;i<=124;i++)  //智能門禁系統
//	{
//		OLED_ShowCH(16+i*16-16*119,2,i);
//	}
//	for(i=125;i<=129;i++)  // 設計與實現
//	{
//		OLED_ShowCH(24+i*16-16*125,6,i);
//	}
}
void oled_init_show() //初始化界面顯示
{u8 i;for(i=42;i<=45;i++)  //歡迎使用{OLED_ShowCH(32+i*16-16*42,0,i);}for(i=113;i<=115;i++) //多功能{OLED_ShowCH(i*16-16*112,2,i);}for(i=39;i<=41;i++) //電子鎖{OLED_ShowCH(i*16-16*35,2,i);}for(i=46;i<=49;i++) //請您開鎖{OLED_ShowCH(32+i*16-16*46,6,i);}
}
void finger_check() 	//刷指紋開門驗證
{u16 uid,i;uid=press_FR();if((uid<300)&&(uid>0)){open_door_flag=1;OLED_Clear();           //清屏 for(i=70;i<72;i++)  //用戶{OLED_ShowCH(i*16-16*70,4,i);}OLED_ShowStr(32,4,"ID:",2);figer_error=0;OLED_ShowNum(56,4,uid,3,16);delay_ms(1000);OLED_Clear();           //清屏}else if(uid==0xffff){		OLED_Clear();           //清屏 for(i=66;i<70;i++)  //指紋錯誤{OLED_ShowCH(32+i*16-16*66,1,i);}Beep_Work(500,4);figer_error++;OLED_Clear();           //清屏}
}
void ADD_finger()			//添加指紋
{int i=0;OLED_Clear();for(i=23;i<27;i++)  //請按手指{OLED_ShowCH(16*i-23*16,0,i);}i=Add_FR();if(i>0){for(i=27;i<31;i++)  //添加成功{OLED_ShowCH(16*i-16*27,4,i);}for(i=70;i<72;i++)  //用戶{OLED_ShowCH(i*16-16*70,6,i);}OLED_ShowStr(32,6,"ID:",2);OLED_ShowNum(56,6,user_ID,3,16);delay_ms(1000);}else{	for(i=31;i<35;i++)  //添加失敗{OLED_ShowCH(16*i-16*30,4,i);}delay_ms(1000);}OLED_Clear();
}
void figer_show()			//指紋管理界面顯示
{int i;OLED_ShowStr(0,0,"A:",2);for(i=7;i<=10;i++)  //添加指紋{OLED_ShowCH(i*16-16*6,0,i);}OLED_ShowStr(0,2,"B:",2);for(i=11;i<=14;i++)  //刪除指紋{OLED_ShowCH(i*16-16*10,2,i);}
}
void finger_admin()		//指紋管理
{int i;OLED_Clear();while(key!='*')  //*退出{key=Key44_Scan();switch (key){case'A' :ADD_finger();break;//添加case'B' :PS_Empty();OLED_Clear(); for(i=97;i<103;i++)  { OLED_ShowCH(16+16*i-16*97,2,i);}delay_ms(1800); 	OLED_Clear();break;//刪除default :figer_show();break;//管理顯示界面				}}OLED_Clear();
}void Esp8266_AP_Init() //ESP8266局域網開熱點等待手機APP鏈接
{UsartPrintf(USART1,"AT\r\n"); delay_ms(1000);OLED_Clear();OLED_printf(0,0,"1 AT+CWMODE ");UsartPrintf(USART1,"AT+CWMODE=2\r\n"); 																	//設置路由器模式1 station,模式2 AP,模式3 station+AP混合模式   delay_ms(1000);OLED_Clear();OLED_printf(0,0,"2 AT+CWSAP  ");UsartPrintf(USART1,"AT+CWSAP=\"WIFI\",\"123456789\",11,4\r\n");  	//AT+CWSAP="wifi_yuan","123456789",11,4  設置模塊SSID:WIFI, PWD:密碼 及安全類型加密模式(WPA2-PSK) delay_ms(1000);OLED_Clear();OLED_printf(0,0,"3 AT+CIPMUX ");UsartPrintf(USART1,"AT+CIPMUX=1\r\n");											//開啟多連接模式,允許多個各客戶端接入 delay_ms(1000);OLED_Clear();OLED_printf(0,0,"4 AT+CIPSERVER ");UsartPrintf(USART1,"AT+CIPSERVER=1,5000\r\n");  										//啟動TCP/IP 實現基于網絡//控制 delay_ms(1000);OLED_Clear();OLED_printf(0,0,"5 AT+CIPSTO ");UsartPrintf(USART1,"AT+CIPSTO=0\r\n"); delay_ms(1000);OLED_Clear();
}int main(void) //主函數
{	vu16 falsh,reclen,t;SystemInit();delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //   2組中斷分組Relay_Init(); 						//繼電器初始化Relay=0;Beep_Init();							//蜂鳴器初始化Beep = 0;OLED_Init();          		//OLED初始化Relay=1;Beep =1;usart2_Init(57600);       //串口2初始化 RC522_Init();Key44_Init(); 						//矩陣按鍵初始化oled_show(); 							//界面顯示STMFLASH_Read(FLASH_PASSWORD_SAVE_ADDR,(u16*)Password,6);  //讀取密碼 下載程序后,數據是0XFFSTMFLASH_Read(FLASH_ICcard_SAVE_ADDR,(u16*)ICCard_Name,IC_Card_Num*4);  //讀取密碼 下載程序后,數據是0XFFTIM2_Int_Init(4999,7199);while(1){delay_ms(1);if(pass_cnt==0)		//沒有在密碼輸入的時候{IC_check();if(t++>50){t=0;finger_check();			//指紋檢驗}}password_cheak();		//密碼檢驗oled_show();				//顯示open_door();				//開門函數if(password_eeror>=3){password_eeror=2;Locked_time = 30;while(Locked_time--){OLED_printf(0,4,"   Locked:%d  ",Locked_time);Beep_Work(1000,1);}OLED_printf(0,4,"                ");}while(open_door_flag==2)  //輸入管理員密碼進入設置{key=Key44_Scan();switch (key){case'C' :password_admin();break;						//密碼管理case'A' :finger_admin();	break;						//指紋管理case'D' :rc522_admin();break;						//IC卡管理case'*' :open_door_flag=0;OLED_Clear(); break;//退出default :admin_show();break;								//管理顯示界面}}}
}

4、原理圖/PCB

??原理圖和PCB都使用立創EDA繪制,對新手較為友好。可以導出為AD格式的文件
在這里插入圖片描述

5、論文

本設計基于單片機的智能門禁系統,主要是結合單片機技術立足于產業應用而展開,全文針對目標功能進行關鍵器件的選擇,電路圖繪制,軟件程序編寫等等,在整個文章的章節結構上,大致如下:在第一章緒論對基于單片機的智能門禁系統課題的理論背景進行分析并引申出設計的必要性,在第二章則圍繞基于單片機的智能門禁系統課題進行總體框架設計,確定整個系統中使用到的關鍵器件,在第三章則從硬件設計的角度,對每個模塊完成硬件電路設計,從單片機最小系統到各個傳感器應用電路,在第四章則對各模塊完成程序流程的分析和繪制,在第五章則進行系統測試,針對硬件和軟件進行聯調,并最終完成整個系統的功能和測試。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74430.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74430.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74430.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java學習總結-io流-字節流

io的體系&#xff1a; FlieInputStream(文件字節輸入流) 是什么&#xff1a;磁盤以字節的形式輸入到內存中。 由于不同格式編碼長度&#xff0c;每次讀取一個或幾個字節&#xff0c;都有可能出現亂碼。 所以官方提供了&#xff0c;一次性讀入全部字節&#xff0c;以數組的形式…

玩轉JUC - 如何優雅的異步處理任務

1、概述 前面我們學習了并發包中的一些核心的基礎類&#xff0c;包括原子類、Lock 、以及線程間通信的一些工具類&#xff0c;相信你已經能夠正確的處理線程同步的問題了&#xff0c;今天我們繼續學習并發包下的工具類&#xff0c;我們本次主要學習線程池和異步計算框架相關的內…

MINIQMT學習課程Day2

如何和聚寬進行綁定交易 目前市場上的方式主要為以下三種方案&#xff1a; 1.聚寬和一創直接綁定&#xff08;現在已經被廢除&#xff09; 2.通過蔣老師所提出的redis方案&#xff0c;進行交易 3.李興果的&#xff0c;網頁發送到服務器數據庫&#xff0c;然后本地讀取數據進行…

【AI視頻】度加視頻測試

目標 前邊&#xff0c;大藏經用AI翻譯成功了&#xff0c;語音也生成了&#xff0c;就想著生成視頻了&#xff0c;然后就發現了這個寶藏工具。 先說結果&#xff1a;速度不是很快&#xff0c;出錯了&#xff0c;提示也不是很清晰&#xff0c;雖然不順利&#xff0c;但過程還是…

SAP CEO引領云端與AI轉型

在現任首席執行官克里斯蒂安克萊因&#xff08;Christian Klein&#xff09;的領導下&#xff0c;德國軟件巨頭 SAP 正在經歷一場深刻的數字化轉型&#xff0c;重點是向云計算和人工智能方向發展。他提出的戰略核心是“RISE with SAP”計劃&#xff0c;旨在幫助客戶從傳統本地部…

《系統分析師-基礎篇-1-6章總結》

第1章 緒論 系統分析師角色 職責&#xff1a;需求分析、系統設計、項目管理、技術協調。 能力要求&#xff1a;技術深度&#xff08;架構設計、開發方法&#xff09; 業務理解&#xff08;企業流程、行業知識&#xff09; 溝通能力。 系統開發生命周期 傳統模型&#xf…

HCIP-12 中間系統到中間系統基礎

HCIP-12 中間系統到中間系統基礎 一、ISIS的區域 1.管理區域&#xff1a;Area ID&#xff08;基于路由器的管理區域&#xff09; 2.算法區域 骨干區域&#xff1a;由連續的L2或者L1/2路由器組成的邏輯區域 非骨干區域&#xff1a;是由連續的L1或者L1/2路由器組成的邏輯區域…

企業管理系統的功能架構設計與實現

一、企業管理系統的核心功能模塊 企業管理系統作為現代企業的中樞神經系統&#xff0c;涵蓋了多個核心功能模塊&#xff0c;以確保企業運營的順暢與高效。這些功能模塊通常包括&#xff1a; 人力資源管理模塊&#xff1a;負責員工信息的錄入、維護、查詢及統計分析&#xff0c…

大語言模型中的嵌入模型

本教程將拆解什么是嵌入模型、為什么它們在NLP中如此重要,并提供一個簡單的Python實戰示例。 分詞器將原始文本轉換為token和ID,而嵌入模型則將這些ID映射為密集向量表示。二者合力為LLMs的語義理解提供動力。圖片來源:[https://tzamtzis.gr/2024/coding/tokenization-by-an…

【從零實現Json-Rpc框架】- 項目實現 - 服務端主題實現及整體封裝

&#x1f4e2;博客主頁&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客倉庫&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01; &…

AI與玩具結合的可行性分析

文章目錄 一、市場需求&#xff1a;教育與陪伴的雙重驅動&#xff08;一&#xff09;教育需求&#xff08;二&#xff09;情感陪伴需求&#xff08;三&#xff09;消費升級 二、技術發展&#xff1a;賦能玩具智能化&#xff08;一&#xff09;AI技術的成熟&#xff08;二&#…

基于 RK3588 的 YOLO 多線程推理多級硬件加速引擎框架設計(代碼框架和實現細節)

一、前言 接續上一篇文章&#xff0c;這個部分主要分析代碼框架的實現細節和設計理念。 基于RK3588的YOLO多線程推理多級硬件加速引擎框架設計&#xff08;項目總覽和加速效果&#xff09;-CSDN博客https://blog.csdn.net/plmm__/article/details/146542002?spm1001.2014.300…

LeetCode Hot100 刷題筆記(7)—— 貪心

目錄 前言 一、貪心 1. 買賣股票的最佳時機 2. 跳躍游戲 3. 跳躍游戲 II 4. 劃分字母區間 前言 一、貪心&#xff1a;買賣股票的最佳時機&#xff0c;跳躍游戲&#xff0c;跳躍游戲 II&#xff0c;劃分字母區間。 一、貪心 1. 買賣股票的最佳時機 原題鏈接&#xff1a;121. …

SQL語句的訓練

DELECT FROM 蜀國 WHEHE name 劉玄德 AND 創業進度<0.5 AND 存活狀態 true&#xff1b; 基礎的sql語句 SELECT >選擇列FROM >確認數據源JOIN >聯合操作WHERE >篩選數據GROUP BY >分組 HAVING >過濾分組的數據DISTINCT >去重ORDEY BY > 排序…

汽車 HMI 設計的發展趨勢與設計要點

一、汽車HMI設計的發展歷程與現狀 汽車人機交互界面&#xff08;HMI&#xff09;設計經歷了從簡單到復雜、從單一到多元的演變過程。2012年以前&#xff0c;汽車HMI主要依賴物理按鍵進行操作&#xff0c;交互方式較為單一。隨著特斯拉Model S的推出&#xff0c;觸控屏逐漸成為…

基于51單片機的模擬條形碼識別系統proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1AtAry19X3BgavLqXcM4scg 提取碼&#xff1a;1234 仿真圖&#xff1a; 芯片/模塊的特點&#xff1a; AT89C52/AT89C51簡介&#xff1a; AT89C51 是一款常用的 8 位單片機&#xff0c;由 Atmel 公司&#xff08;現已被 Microchip 收…

CD22.【C++ Dev】類和對象(13) 流提取運算符的重載和const成員

目錄 1.流提取運算符>>的重載 知識回顧 重載方法 operator<<格式 operator>>格式 使用cin對日期類對象寫入數據 如果想指定格式輸入 方法1:getchar() 方法2:使用臨時變量接收字符 完善operator>>代碼(修bug) 2.類中的權限問題(const成員) …

Spring 核心技術解析【純干貨版】- XIX:Spring 日志模塊 Spring-Jcl 模塊精講

在現代 Java 開發中&#xff0c;日志是調試、監控和維護應用程序的重要工具。Spring 作為企業級框架&#xff0c;提供了 Spring-Jcl 作為日志抽象層&#xff0c;使開發者可以靈活切換不同的日志實現&#xff0c;而無需修改業務代碼。本篇文章將深入解析 Spring-Jcl 模塊&#x…

Hadoop集群---運維管理和技巧

一. daemon 守護進程管理 1. NameNode守護進程管理 hadoop-daemon.sh start namenode 2. DataNode守護進程管理 hadoop-daemon.sh start datanode 3. ResourceManager守護進程管理 yarn-daemon.sh start resourcemanager 4. NodeManager守護進程管理 yarn-daemon.sh st…

ngx_log_init

定義在 src\core\ngx_log.c ngx_log_t * ngx_log_init(u_char *prefix, u_char *error_log) {u_char *p, *name;size_t nlen, plen;ngx_log.file &ngx_log_file;ngx_log.log_level NGX_LOG_NOTICE;if (error_log NULL) {error_log (u_char *) NGX_ERROR_LOG_PATH;}…