资讯专栏INFORMATION COLUMN

毕业设计 - 题目:基于单片机的指纹识别考勤系统 - 嵌入式 物联网

antz / 2471人阅读

摘要:本文在充分理解考勤系统原则和目标的基础上,采用单片机对考勤进行硬件设计并采用面向对象的思想进行上位机管理系统的设计。该芯片共内置个中文汉字,个字符的码字符库及点阵显示。单片机指纹考勤系统参数设定流程如图所示。


1 简介

Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目

基于单片机的指纹识别考勤系统

大家可用于 课程设计 或 毕业设计

技术解答、毕设帮助、开题指导print("Q 746876041") 

2 指纹考勤的背景意义

指纹识别是成熟的生物识别技术,生物识别技术是全球科研机构和企业的研究热点,得以应用与推广的许多技术都已经成熟,多种生物识别技术例如发音识别也是一项关键的技术,面部识别和指纹识别也得到了全面的发展。人的身份特征可以根据这些生物特征辨识得到,是因为每个人的这些特征都有很大的不同之处。人的指纹和掌纹都具有特征的唯一性,这样的例子在人体内还有视网膜、虹膜、发音和面孔,在人类的特征中,骨架也具有唯一的特征 [4]。在系统安全面临全方位现实挑战的现在,科学技术把目光转向了具有唯一性的生物识别技术,这些不可复制的人体身体特征,为科学实践的进步增加了关键技术核心竞争力。因此,采用人体特征技术对企业人员进行合理的管理,能使企业人力资源的利用率得到很好的提高。

3 课题目标

为最大程度上满足当前企业的需要,本文有效的结合了当前最先进的生物特征识别技术和互联网关键技术,构建了实现考勤报表管理、个人考勤信息查询、员工终端考勤管理和总部考勤管理等功能的考勤系统。本文在充分理解考勤系统原则和目标的基础上,采用单片机对考勤进行硬件设计并采用面向对象的思想进行上位机管理系统的设计。

4 系统设计

4.1 硬件电路设计

系统结构设计实现过程中,是要以系统的功能性需求和非功能性需求为基础的。

学长设计的单片机指纹考勤系统,不仅要实现硬件设计和完成上位机管理软件的设计,还要保证系统在完成后使用稳定,便于维护并且容易扩展,在满足系统的功能性需求基础上满足系统的非功能性需求。

系统的硬件设计包括人机交互功能的显示和键盘模块、通信模块、指纹识别模块、时钟模块和存储模块等,其硬件设计结构如图所示。

4.1.1 单片机主控

ATMEL 公司生产的单片机 AT89C51RC2,是单片机指纹考勤机必要的硬件设备,其 CPU 具有高性能 CMOS 8 位微处理器和低电压功能。

4.1.2 LCD 显示屏

这里学长采用中文图形控制芯片 ST7920 来实现用户信息交互,它是一种内置128×64-12 汉字图形点阵的液晶显示控制模块,用于显示汉字及图形。该芯片共内置 8192 个中文汉字,128 个字符的 ASCLL 码字符库及 64×256 点阵显示RAM。

ST7920 与 单片机接口

4.1.3 实时时钟

勤时必备的要素除了指纹就是时间日期,因此,实时时钟在本系统中是重要的部件,它必须具备准确可靠和断电时正常工作的性能。因此需要选择带有双电源的时钟芯片,本系统采用的是时钟芯片 DS1302。DS1302 与单片机的接口电路如图所示。

4.1.4 指纹识别模块

指纹识别模块包括指纹采集器和指纹处理单元,它起着关键性的作用。因此,好的指纹识别模块能保证本系统在使用过程中的稳定性,具有 32 位处理器的VFDA02 指纹识别模块就是本系统选择的关键模块,指纹识别模块如图所示。

4.2 软件设计

单片机指纹考勤系统的下位机软件功能图如图所示,整个设计由 7 部分组成,指纹考勤模块将采集到的指纹信息反馈到单片机进行数据分析和处理,主程序将信息反馈到显示屏同时进行数据的存储和传输,时间由时钟提供。各个模块相对独立又互相联系,可以分别设计,便于软件的调试。

4.2.1 系统工作流程

单片机指纹考勤系统控制软件主流程如图 4.8 所示。主控制程序包含系统循环和初始化程序,初始化参数设置,其中主要有各个 I/O 口,串口和显示屏的初始化,设置无线通信模块为发射模式,启动看门狗电路,时钟,配置扩展芯片通道。初始化完成后,用户按下手指或键盘,中断程序完成指纹识别和键盘检测,再反馈给单片机主程序。

管理人员通过系统管理模块设定参数和管理指纹信息,单片机指纹考勤系统管理功能如图

不同部门的系统参数设定不同,管理人员可以通过指纹管理模块设定系统时间、考勤机号、波特率、管理员人数等各种参数。系统参数设定通过 LCD 屏幕与管理人员进行信息交互。参数修改首先要用系统管理员的身份进入,按下
MENU 键后,管理员验证指纹,比对成功即可进入系统管理菜单,如果要修改系统时间设定,可通过键盘中的数字键和方向键将光标移至相应的位置进行修改,最后按 OK 键完成修改,退出管理菜单。其他参数的修改方式与此相同。单片机指纹考勤系统参数设定流程如图 所示。

5 实现效果

6 部分关键代码

// 作者:丹成学长 Q746876041#include "sys.h"#include "delay.h"#include "usart.h" #include "led.h" 		 	 #include "lcd.h"  #include "key.h"  #include "key1.h"#include "beep.h"	   #include "malloc.h"#include "sdio_sdcard.h"  #include "w25qxx.h"   #include "ff.h"  #include "exfuns.h"   		#include "usart3.h"#include "common.h" #include "rtc.h" #include "sql.h"#include "usart2.h"#include "AS608.h"#include "timer.h"#include "touch.h"#include "ezio.h"#include "text.h"#include "admin.h"#include "fontupd.h"#include "usmart.h"#include "fattester.h"#include "stmflash.h"#include "mqtt.h"#define usart2_baund  9600//串口2波特率,根据指纹模块波特率更改#define usart3_baund 11500FIL fill;UINT bw_2;u8 cun[10]={" "," ","0","0"," "," "," "," "," "," "};u8 cun_1[10]={" "," ","0","0"," "," "," "," "," "," "};#define FLASH_SAVE_ADDR 0X08070000#define SIZE sizeof(number_3)u8 number_1[30];u8 number_2[30];u8 number_3[120];u8 number_4[30];int member_num;u8** kbd_tbl;const  u8* kbd_menu[15]={"delete"," : ","input","1","2","3","4","5","6","7","8","9"," ","0"," "};//按键表SysPara AS608Para;//指纹模块AS608参数u16 ValidN;//模块内有效指纹个数	u8 s_1=0;u8 IDnum;u8 shu_flag;u8 shu_flag_1;u8 flag_1=0;u8 flag_2=1;u8 flag3;u8 flag4=0;u8 flag5;u8 e=1;u8 f=1;u8 min_five=0;u8 count;u8 depart_flag;u8 data_flag;u8 z_1=1;   //签到人数void Add_FR(void);	//录指纹void Del_FR(void);	//删除指纹void press_FR(void);//刷指纹void ShowErrMessage(u8 ensure);//显示确认码错误信息void keyboard(u16 x,u16 y,u8 **kbtbl);void Show_Str(u16 x,u16 y,u16 width,u16 height,u8*str,u8 size,u8 mode);void Show_Str_Mid(u16 x,u16 y,u8*str,u8 size,u8 len);void AS608_key_staset(u16 x,u16 y,u8 keyx,u8 sta);u8 jiemian(void );void IDentity(){	SearchResult seach;	u8 key;	u8 ensure_1;	u8 z_2=0;	flag_1=1;		TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE );	LCD_Clear(WHITE);//清屏	Show_Str(20,40,200,16,"请识别指纹:",16,1); 	Show_Str(20,300,200,16,"密码",16,1); 	Show_Str(200,300,200,16,"返回",16,1);		while(flag_1)	{		ensure_1=PS_GetImage();		if(ensure_1==0x00)//获取图像成功 		{				BEEP=1;//打开蜂鸣器				ensure_1=PS_GenChar(CharBuffer1);			if(ensure_1==0x00) //生成特征成功			{						BEEP=0;//关闭蜂鸣器					ensure_1=PS_HighSpeedSearch(CharBuffer1,0,AS608Para.PS_max,&seach);				if(ensure_1==0x00)//搜索成功				{									LCD_Fill(0,100,lcddev.width,160,WHITE);					Show_Str_Mid(0,100,"刷指纹成功",16,240);									if(flag_1==1)					{						if(seach.pageID==99)							z_2=1;						else							z_2=0;					}					min_five=0;				}				else 					ShowErrMessage(ensure_1);								}			else				ShowErrMessage(ensure_1);		 BEEP=0;//关闭蜂鸣器		 delay_ms(600);		 LCD_Fill(0,100,lcddev.width,160,WHITE);		}			if(z_2==1)		{			LCD_Clear (WHITE );			jiemian();			flag_1=0;		}		key=KEY_Scan(0);				if(key==KEY0_PRES)			flag_1=0;					if(key==KEY2_PRES)		{			if(password_input()==1)           //输密码			{				LCD_Clear (WHITE );				jiemian();				flag_1=0;			}			else				flag_1=0;		}	}	return_time_flag=1;	LCD_Clear (WHITE );	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );}int main(void){	     	u8 ensure;	char *str;	  	u8 key;	u8 fontok=0; //用于字库校准		u8 i;	u8 b=0;	u8 j=0;	count=1;		delay_init();	    	 //延时函数初始化	    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组22位抢占优先级,2位响应优先级	usmart_dev.init(72);		//初始化USMART			uart_init(115200);	 	//串口初始化为115200	usart2_init(usart2_baund);//初始化串口2	usart3_init(usart3_baund);		//初始化串口3 	LED_Init();		  			//初始化与LED连接的硬件接口	KEY_Init();					//初始化按键	LCD_Init();			   		//初始化LCD 	TP_Init();     //触摸屏初始化,注意这里用到了24C02来存储校准数据,因此需要24C02的驱动支持,移植的时候注意	W25QXX_Init();				//初始化W25Q128	PS_StaGPIO_Init();	//初始化FR读状态引脚	BEEP_Init();  			//初始化蜂鸣器	Key_init1();	 	TIM3_Int_Init(1999,7199);	RTC_Init();	  			  //	RTC_Set(2020,4,12,19,07,50);  //设置时间		STMFLASH_Read(FLASH_SAVE_ADDR,(u16 *)number_3,SIZE);/*SD卡检测及文件系统挂载*/	while(SD_Init())//检测不到SD卡	{		LCD_ShowString(30,150,200,16,16,"SD Card Error!");		delay_ms(500);							LCD_ShowString(30,150,200,16,16,"Please Check! ");		delay_ms(500);		LED0=!LED0;//DS0闪烁	} 	exfuns_init();							//为fatfs相关变量申请内存				   f_mount(fs[0],"0:",1); 		//挂载SD卡  	f_mount(fs[1],"1:",1); 		//挂载FLASH.				  			    		while(PS_HandShake(&AS608Addr))//与AS608模块握手	{		delay_ms(300);		LCD_Fill(0,40,240,80,WHITE);//		Show_Str_Mid(0,40,"未检测到模块!!!",16,240);		delay_ms(700);		LCD_Fill(0,40,240,80,WHITE);//		Show_Str_Mid(0,40,"尝试连接模块...",16,240);		  	}	/*字库校准*/		fontok=font_init();			//检查字库是否OK	if(fontok||key==KEY1_PRES)	//需要更新字库				 	{		LCD_Clear(WHITE);		//清屏 		POINT_COLOR=RED;		//设置字体为红色	 						    		key=update_font(20,110,16,"0:");//从SD卡更新		while(key)//更新失败				{			 		  			LCD_ShowString(60,110,200,16,16,"Font Update Failed!");			delay_ms(200);			LCD_Fill(20,110,200+20,110+16,WHITE);			delay_ms(200);		       		} 		  		LCD_ShowString(60,110,200,16,16,"Font Update Success!");		LCD_Clear(WHITE);//清屏	       	}  	/*指纹模块操作*/	ensure=PS_ValidTempleteNum(&ValidN);//读库指纹个数	if(ensure!=0x00)		ShowErrMessage(ensure);//显示确认码错误信息		ensure=PS_ReadSysPara(&AS608Para);  //读参数 	myfree(SRAMIN,str);		POINT_COLOR=BLUE;	LCD_Clear(WHITE);//清屏	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );	zhuanhua(0);	if(number_3[0]!=0)		z_1=number_3[0];		while(1)	{		key=KEY_Scan(0);		flag_1=0;		flag_2=1; 				if(key==KEY2_PRES)		{				count=1;			j=0;			b=0;			TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE );			LCD_Clear(WHITE);//			mqtt_sendmassage();						while(count)			{				LCD_LED=1;						Show_Str(10,10,240,320,"已签到人员:",16,1);  //a=5				LCD_ShowNum(130,10,(number_3[0]-1)/3,2,16);				STMFLASH_Read(FLASH_SAVE_ADDR,(u16 *)number_3,SIZE);					if(count==1)				{										for(i=1;i<120;i++)					{						if(number_3[i]!=0)						{							if(i%30==1&&i!=1)							{								j=0;								b=0;								LCD_Fill (10,30,220,300,WHITE);							}							LCD_ShowNum(40+50*j,60+20*b,number_3[i],2,16);							if(i%3==1)								LCD_ShowString(60,60+20*b,240,320,16," :  ");							}						j++;						if(i%3==0)						{							b++;							j=0;						}											}					count=2;				}				key=KEY_Scan(0);				if(key==KEY0_PRES||key==KEY1_PRES||key==KEY2_PRES)				{					count=0;					LCD_LED=1;							LCD_Clear(WHITE);					TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );					return_time_flag=1;				}			}		}		if(flag4==1)		{			number_3 [0]=0;			for(i=1;i<120;i++)			{				number_3 [i]=0;			}			flag4=0;			z_1=1;			STMFLASH_Write(FLASH_SAVE_ADDR,(u16 *)number_3,SIZE );					}		if(key==KEY0_PRES)		{							TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE );						jiemian();			LCD_LED=1;				//点亮背光		}		press_FR(
                 
               
              

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124730.html

相关文章

  • 毕业设计 - 题目基于RFID门禁系统 - 片机 联网 嵌入

    摘要:门禁系统可有效管理门的开启关闭对出入人员进行监控管理。基于的门禁系统通过对射频卡的识别,保证那些持有相应证件的人员能自由进出,阻止外来人员或无法提供证件的人员进入。 ...

    dingda 评论0 收藏0
  • 毕业设计 - 题目基于片机录音器设计与实现 - 联网 嵌入

    摘要:信息的安全性可控性已成为录音系统的重要研究内容。系统设计系统架构通过单片机与语音功能集成芯片,以及液晶芯片进行设计,由单片机控制来实现语音的录制存储以及播放清除等功能。 ...

    fobnn 评论0 收藏0
  • 毕业设计 - 题目: 基于片机智能小车 - 嵌入 联网 本科毕设

    摘要:基于单片机的智能小车控制就是其中的一个体现。本设计实现了一种基于单片机的自动避障智能模型车系统,通过红外传感器采集路况信息,通过对检测信息的分析,自动控制转向电机转向,改变行驶路径,绕过障碍物,从而实现车稳定避障。 ...

    Genng 评论0 收藏0
  • 毕业设计 - 基于片机智能手环 -计步器 嵌入 联网 stm32

    摘要:老年智能手环主要致力于深入到整个救治老年人环节中,促进几个关键人群的及时反应智能互联信息互通。是一款突出个性与人性的智能化产物。 文章目录 1 简介1 项目背景意...

    不知名网友 评论0 收藏0
  • 基于片机蓝牙控制窗帘电路系统

    摘要:设计简介本设计是基于单片机的蓝牙控制窗帘电路系统,主要实现以下功能可通过显示温湿度光照强度窗帘状态和模式可通过按键调整光照强度最小值可通过蓝牙连接手机进行远程控制可通过获取温湿度可通过光敏电阻获取光照强度。 设计简介: 本设计是基于单片机的蓝牙控制窗帘电路系统,主要实现以下功能: 可通过LC...

    lowett 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<