文章目录
1 简介
Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目
基于单片机的指纹识别门禁系统设计
大家可用于 课程设计 或 毕业设计
🧿 毕设项目分享:见文末!
2 绪论
2.1 课题背景
人们在生活中需要安全的门禁设施,来保证自己的财产安全,各种各样的门禁系统随之而生。但随着数字化和网络化的不断发展,以前的门禁方式在鉴别方式、速度和性能方面越来越不能满足人们的需要,比如射频卡、数字密码等方式,其安全性不够高。在新的方式开发的过程中,由于人的身体特点具有不可复制性,所以人们把目光转移到这上面来,开始了生物识别的门禁系统的开发。指纹识别作为生物特征识别,它是独特的,它的特点是不易伪造,以为它的这些特点目前已被广泛应用于安全访问。
2.2 项目内容
本项目基于对指纹识别技术和指纹识别系统的发展研究的意义的分析,给出指纹识别门禁系统总体框架,阐述了各子模块的硬件和软件资源。
首先简要介绍了指纹识别算法,重点介绍了指纹识别模块(FM-180)的使用方法,包括它的硬件连接和软件指令的使用方法。
在此基础上,设计了以STC89C52单片机为核心的指纹识别门禁系统,指纹识别模块负责识别指纹,并传输给单片机结果,单片机根据结果来控制液晶显示和蜂鸣器的声音提示,再控制继电器的开闭,单片机还能通过网络模块与上位机实现远程通讯。
之后,介绍了软件部分的设计,包括单片机、液晶屏、指纹识别模块和上位机的软件设计。
通过对系统的模型样机的测试表明,系统能够完成基本功能并具有较好的稳定性,初步达到了预期的设计目标。
3 系统设计
3.1 系统架构
以系统主要分为上位机和下位机两部分,上位机作为主要的控制部分,通过网络对多个下位机进行控制,并且实现用户等级的设定。指纹录入端位于大楼的入口处,对进入者进行指纹录入工作。下位机则是门禁的实际控制端,通过指纹识别模块,对用户进行识别,进而控制门锁的开闭。整体框架可以为如下图所示:
上位机与下位机各自分工,上位机与下位机通过网络模块进行通讯。下位机是与门直接相连的部分,通过指纹识别模块对用户的指纹进行识别,并将结果传输给单片机,单片机再进一步控制液晶显示结果,并通过蜂鸣器发出声音提示,用户还能够进行按键调节。下位机的框架如下所示
本系统的主要功能特点:
- (1) 拥有高效的指纹识别模块, 可以十分快捷的利用指纹开锁, 高效方便,且安全性高。
- (2) 上位机部分由科学的管理软件, 能够实现门禁的科学化管理。
- (3) 上位机与下位机的通信采用以太网模块, 可以实现远距离的控制。
- (4) 门禁系统的用户采用权限分割, 不同的用户拥有的权限不同, 能够进入的门也不同, 从而实现用户的逐级权限管理。
3.2 硬件设计
指纹识别门禁系统的硬件部分需要完成一系列复杂的任务,包括图像采集、图像处理、图像对比等,还需要在与上位机通信时上传指纹模板,以及控制外围器件等工作。所以要实现这样一个复杂的任务,需要处理器具有比较强的计算能力和控制能力,并且储存器资源要大。
3.3 指纹识别模块的程序设计
指纹识别模块需要完成的工作有:获取指纹图像,生成指纹特征模板,储存指纹特征模板和匹配指纹等工作,单片机根据模块的指令系统,给模块发送指令信息,来控制模块完成相应的工作。
3.3.1 指纹录入
指纹录入过程, 用于新用户的注册, 当有新用户需要注册时, 就先在指纹头处获取用户的指纹图像, 在将之生成指纹特征模板, 在储存起来, 这样就完成了新用户的注册。
3.3.2 指纹识别代码流程
3.4 显示屏程序设计
3.5 整体业务逻辑代码流程
软件使用 Keil C51 版本, 主程序采用 c 语言编写。 单片机对指纹识别模块发送命令, 得到识别结果, 在根据这个结果来控制显示模块、 语音模块和电子锁模块。 程序的主流程图如下所示:
3.6 实现效果
3.7 部分相关代码
/************************************************
************************************************/#include"stm32f10x.h"#include"sys.h"#include"FPM10A.h"//#include "usart.h" #include"usart1.h"#include"usart4.h"#include"usart5.h"#include"sys.h"#include"stdio.h"#include"string.h"#include"delay.h"#include"deal_fg.h"#include"pwm_config.h"#include"Run.h"#include"led.h"#include"bsp_i2c_ee.h"#include"Computer.h"#include"bsp_rtc.h"#include"key.h"#include"finger.h"externunsignedchar si[11];unsignedchar yanz[6]={0x01,0x00,0x03,0x11,0x00,0x15};unsignedchar id_table[4];int Dump_flag =0;structrtc_time systmtime;externunsignedchar FG_Key[10];externunsignedchar FP_Pack_Head[6];//协议包头externunsignedchartest_fig(void);externunsignedchar dat[18];externvoiduart_init(u32 bound);externvoidMy_USART2_Init(void);externvoidMy_USART3_Init(void);externvoidUSART_SendStr(USART_TypeDef* USARTx,unsignedchar*data1);externvoidUSART_SendByte(USART_TypeDef* USARTx,unsignedchar temp);externunsignedcharUSART_ReceivByte(USART_TypeDef* USARTx);externvoidUSART_ReceiveStr(USART_TypeDef* USARTx,unsignedchar ucLength);externvoidDelete_FG(void);unsignedchar yi[12];externvolatileunsignedchar USART_ReceStr[24];externunsignedchar san[11];externunsignedchar er[10];unsignedchar deal_dd[11]={0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};unsignedchar cal_p[16]="abcdeadffasdfdas";unsignedchar cal_test[16]={0};unsignedint Times11[8];int Flag =0;//void cleck_FG(void);unsignedchar sss[11];structrtc_time systmtime;intmain(void){NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);My_USART2_Init();//串口2初始化 My_USART3_Init();//串口3初始化usart4_Configuration(9600);//串口4使能pwm_config();//pwm使能delay_init();//延时初始化uart_init(9600);//串口初始化使能KEY_Init();//按键初始化LED_Init();//led灯初始化RTC_NVIC_Config();//时钟使能 RTC_CheckAndConfig(&systmtime);//全局时钟使能delay_ms(1000);if(ee_CheckOk()==0)//没有检测到EEPROM {printf("没有检测到串行EEPROM!\r\n");while(1);/* 停机 */}do//通讯{unsignedchar i;for(i=0;i<6;i++)//包头USART_SendByte(USART1,FP_Pack_Head[i]);for(i=0;i<10;i++)//命令合并指纹模版USART_SendByte(USART1,FG_Key[i]);}while(yi[9]!=0x00&&yi[2]!=0xff);delay_ms(1000);// san[1]=0x00;while(1){
LED0=1;if(san[0]==0xef&&san[10]==0xff){unsignedchar i;
san[1]=san[1]+'0';for(i=0;i<11;i++)USART_SendByte(USART2,san[i]);
san[0]=0x00;}if(er[0]==0xef)//来自上位机的指令{delay_ms(5);switch(er[1]){case0xcc:Join_in();break;//注册case0xdd:Delete_P();break;//删除单个用户case0xee:Cortrol();break;//控制舵机case0xbb:Send_Zigbee();break;//控制终端节点case0xda:Delete_ALL();break;//清空所有数据库case0xab:Reser();break;//查询default:break;}
er[0]=0;}cleck_FG();// siz = 0;// siz = usart4_Receive(buff, sizeof(buff));// if(siz)// {// usart4_Send((u8 *)"usart4 recv:",strlen("usart4 recv:"));// usart4_Send(buff,siz);// }}// while(1)// {// unsigned char i;// ee_WriteBytes((void*)cal_p, 1, sizeof(cal_p));// delay_ms(1);// ee_ReadBytes((void*)cal_test,1, sizeof(cal_test));// for(i=0;i<16;i++) //命令合并指纹模版// USART_SendByte(USART2,cal_test[i]);// delay_ms(1000);// // } }//启动指纹识别
🧿 毕设项目分享:见文末!
4 最后
**项目分享: **
https://blog.csdn.net/m0_984093
版权归原作者 Philomena213 所有, 如有侵权,请联系我们删除。