【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT)

这篇具有很好参考价值的文章主要介绍了【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT)

资料要求

·
资料包含:毕业设计全套资料(精品)
原理图工程文件
原理图截图
搭建视频
答辩论文低重复率文档,25354字
英文文献及翻译
答辩PPT
实物操作图

任务书

设计说明书

摘要

对于如何实现家庭防盗这一问题,传统机械锁由于构造简单,被撬事件屡见不鲜;电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。本设计以单片机STC89C52作为密码锁监控装置的检测和控制核心,采用矩阵键盘输入的电子密码和指纹密码解锁两种解锁方式。系统采用LCD12864液晶显示屏实时更新显示信息,并设有修改密码功能,在解锁或修改密码时如果在未确定时发现自己按错了可以进行退格或重输的操作,如果发现旁边有人看着或者不想输入密码了可以进行退出输入的操作,从一定程度上将确保安全性。测试结果表明,本系统各项功能已达到本设计的所有要求。

设计框架架构

前 言… 1

第一章 绪论… 2

第一节 研究背景与研究意义… 2

第二节 指纹识别应用及前景… 3

第三节 本文的主要研究内容… 4

第四节 本章小结… 4

第二章 基于单片机的指纹识别系统设计系统方案分析… 5

第一节 系统设计方案需求… 5

第二节 系统元器件方案选择… 5

一、主控芯片选择… 5

二、指纹模块选择… 6

三、显示器选择… 6

四、数据存储芯片选择… 7

五、人机交互按键选择… 7

第三节 系统结构总框图… 7

第四节 本章小结… 8

第三章 基于单片机的指纹识别系统硬件设计… 9

第一节 单片机最小系统电路设计… 9

一、单片机介绍… 9

二、单片机最小系统电路设计… 10

第二节 电源电路设计… 11

第三节 按键电路设计… 12

第四节 LED显示模块电路… 12

第五节 LCD液晶显示模块电路… 13

一、LCD12864介绍… 13

二、LCD12864电路设计… 13

第六节 指纹识别电路设计… 14

第七节 蜂鸣器报警模块电路… 15

第八节 24C02存储电路设计… 16

一、24C02芯片介绍… 16

二、24C02电路设计… 16

第九节 继电器电路设计… 17

第十节 系统总电路图… 18

第十一节 本章小结… 18

第四章 基于单片机的指纹识别系统软件设计… 19

第一节 Keil软件介绍… 19

第二节 主函数设计… 19

一、主函数流程… 19

二、主函数程序源码… 21

第三节 按键程序设计… 22

一、按键程序流程… 22

二、按键程序源码… 23

第四节 LCD程序设计… 25

一、LCD程序流程… 25

二、LCD程序源码… 26

第五节 蜂鸣器及LED程序设计… 26

一、蜂鸣器及LED程序流程… 26

二、蜂鸣器及LED程序源码… 27

第六节 本章小结… 28

第五章 基基于单片机的指纹识别系统的实现… 29

第一节 系统调试及遇到的问题… 29

第二节 系统功能测试… 31

第三节 本章小结… 34

总 结… 35

致 谢… 36

参考文献… 37

附 录… 39

一、英文原文… 39

二、英文翻译… 44

三、工程图纸… 48

四、源代码… 49

设计说明书及设计文件

【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT),课程设计,单片机,嵌入式硬件
【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT),课程设计,单片机,嵌入式硬件
【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT),课程设计,单片机,嵌入式硬件
【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT),课程设计,单片机,嵌入式硬件
【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT),课程设计,单片机,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-797124.html

源码展示

#include<reg52.h>			//头文件
#include<LCD12864.h>
#include<AT24C02.h>
#include<KEY.h>
#include<FPM10A.h>
#define uchar unsigned char	//宏定义
#define uint unsigned int
#define ulong unsigned long
#define MAX 5          //指纹最大数量
#define ID_MAX 3//输入ID最大位数
sbitjdq=P3^6;
sbit buzz=P3^7;
sbit led=P0^0;
uint T0_num=0;
uchar mode=0;   //0正常打卡,1管理界面,2注册模式,3删除模式,4查询模式,5修改密码,6校准时钟,7工作时间
uchar mode_num=0;
uint ID=0;		 //存储输入编号ID
uchar n=0;	     //输入的位数
bit zhiwen_f=0;	 //1=标记进入指纹采集
uchar shu;
uchar a;										//存储按键值
uchar num;										//记录输入的密码位数
bit   in_f;										//输入密码的标志
bit   reset_f;									//重设密码的标志
bit   input_f;									//六位密码按完的标志
uchar reset_num;								//标记修改密码阶段,=1输入旧密码,=2输入新密码,=3再次输入新密码
ulonglow_mima=0;//系统密码
ulongin_mima=0; //暂存输入的密码
ulongnew_mima=0;//暂存输入新密码
uchar set_f=0;
uchar temp[5]="    \0";  
/********************************************************
函数名称:void delayms(uintms)
函数作用:毫秒延时函数
参数说明:
********************************************************/ 
void delayms(uintms)
{
	unsigned char i=100,j;
	for(;ms;ms--)
	{
		while(--i)
		{
			j=10;
			while(--j);
		}
	}
}
/********************************************************
函数名称:void didi(uchar i)
函数作用:蜂鸣器鸣叫
参数说明:i为鸣叫次数
********************************************************/ 
void didi(uchar i)
{
	uchar j;
	for(j=0;j<i;j++)
	{
		led=0;
		buzz=0;
		delayms(20);
		led=1;
		buzz=1;
		delayms(15);
	}
}
/********************************************************
函数名称:void diaplay_mode0()
函数作用:显示打卡主界面
参数说明:
********************************************************/
void diaplay_mode0()
{
	LCD12864_display_string(1,1,"指纹密码锁");
	LCD12864_display_string(0,2,"编号: ");	
	LCD12864_display_string(0,3,"状态: ");
}
/********************************************************
函数名称:void xunzhiwen()
函数作用:查找指纹
参数说明:
********************************************************/
void xunzhiwen()
{
	searchnum=search();
	if((searchnum>=1&&searchnum<=MAX)||searchnum==255)//最多是N个指纹
	{	
		if(searchnum>=1&&searchnum<=MAX)//指纹识别成功
		{
			temp[0]=searchnum%1000/100+0x30;
			temp[1]=searchnum%100/10+0x30;
			temp[2]=searchnum%10+0x30;
			temp[3]=' ';
			LCD12864_display_string(3,2,temp);
			LCD12864_display_string(3,3,"指纹解锁");
			LCD12864_display_string(1,4,"            ");
			in_mima=0;
			num=0;
			input_f=0;
			jdq=0;
			T0_num=0;	
		}
		else//不正确的指纹
		{
			LCD12864_display_string(3,3,"无效指纹");
			didi(3);
		}
		delay1ms(500);
		LCD12864_display_string(3,2,"    ");
		LCD12864_display_string(3,3,"        ");
	}										
}

/********************************************************
函数名称:void cunchu()
函数作用:存储指纹
参数说明:
********************************************************/
void cunchu()
{
	LCD12864_display_string(0,3,"状态: ");
	if(ID>0&&ID<=MAX)
	{
		if(enroll()==1)//采集两次,生成1个指纹模板成功
		{
			if(savefingure(ID)==1)//保存也成功
			{
				LCD12864_display_string(3,3,"录入成功");
				AT24C02_write_date(ID,1);
			} 
			else
				LCD12864_display_string(3,3,"存储失败");	
		}
		else
			LCD12864_display_string(3,3,"采集失败");	
	}
	else
		LCD12864_display_string(3,3,"编号错误");
	n=0;
	ID=0;
	zhiwen_f=0;
}
/********************************************************
函数名称:void shanchu()
函数作用:删除指纹
参数说明:
********************************************************/
void shanchu()
{
	uinti;
	LCD12864_display_string(0,3,"状态: ");
	if(ID>0&&ID<=MAX)
	{
		if(dellfingure(ID)==1)
		{
			LCD12864_display_string(3,3,"删除成功");
			AT24C02_write_date(ID,0);
		}
		else
			LCD12864_display_string(3,3,"删除失败");	
	}
	else
	{
		if(ID==999)
		{
			if(Clear_All()==1)
			{
				for(i=1;i<6;i++)
					AT24C02_write_date(i,0); 
				LCD12864_display_string(3,3,"清空指纹");
			}
			else
				LCD12864_display_string(3,3,"清空失败");	
		}
		else
			LCD12864_display_string(3,3,"编号错误");
	}		
	n=0;
	ID=0;
	zhiwen_f=0;									
}

/********************************************************
函数名称:void display_guanli()
函数作用:显示管理界面
参数说明:
********************************************************/
void display_guanli()
{
	LCD12864_display_string(0,1,"  管理系统界面  ");
	LCD12864_display_string(0,2,"    录入指纹    ");
	LCD12864_display_string(0,3,"    删除指纹    ");
	LCD12864_display_string(0,4,"    修改密码    ");
	switch(mode_num)		
	{
	   case 0: LCD12864_display_string(0,2," >> "); break;
	   case 1: LCD12864_display_string(0,3," >> "); break;
	   case 2: LCD12864_display_string(0,4," >> "); break;
	   default: break;
	}
}
/*********************************************************
函数名称:void chuli()
函数作用:对所按下的按键进行处理
参数说明:
*********************************************************/
void chuli()
{
	if(key_f==1)	//先判断是否有按键按下
	{	
		if(a==11&&mode==0&&in_f==0)
		{
			shu++;
			if(shu>=4)
			{
				AT24C02_write_date(200,0);
				AT24C02_write_date(201,0);
				AT24C02_write_date(202,0);
				low_mima=0;
				shu=0;	
			}
		}	
		else
			shu=0;
		if((mode==2||mode==3)&&a<10)  //如果输入ID状态,并且按下的是数字键
		{
	if(n<ID_MAX)//判断是否为输入状态,并且输入未满最大整数位数,才可以继续输入
			{
				if(n==0)   //判断为编号第1位		
				{	
					LCD12864_display_string(3,2,"        ");
					LCD12864_display_string(0,3,"              ");				
				} 
				LCD12864_display_char(3+n,2,a+0x30);//显示出输入的数字  ASCII[a]
				ID=ID*10+a;//编号计算
				n++;	   //编号输入位数+1
			}										
		}
		if((mode==0||mode==4)&&input_f==0&&a<10)//如果在in_f=1(输入密码状态),并且按下的是数字键
		{			
			if(in_f==1||mode==4)
			{	
				if(num==0)                  //清除显示后、显示输入新密码
					LCD12864_display_string(1,3,"           ");	
				if(reset_f==1&&reset_num>1)
				    LCD12864_display_char(num+1,2,a+0x30);//ASCII[a]
				else
					LCD12864_display_char(num+1,2,'*');//显示“*”
			}
			else
				LCD12864_display_char(num+1,4,'*');//显示“*”
			in_mima=in_mima*10+a;//读入密码	
			num++;			//密码输入次数加一			
			if(num==6)		//六位密码输入完成																				
				input_f=1;	//标记六位密码输入完成						
		}
		if(a==10)
		{
			if(mode==0&&in_f==0)//输入密码
			{
				num=0;
				in_f=1;
				in_mima=0;
				input_f=0;  //清除确定标志
				write_com(0x01);
				LCD12864_display_string(0,1,"请输入管理密码: ");//显示输入密码
			}
		}
		if(a==15) //返回上一级菜单
		{
			if(mode>1)			  //在管理操作中
			{	
				write_com(0x01);
				LCD12864_clear12864(); 
				mode=1;		//回到管理选择界面
			}
			else
			{
				if(mode!=0||in_f==1)
				{
					write_com(0x01);
					mode=0;
					diaplay_mode0();
					in_f=0;
					num=0;
					input_f=0;	
				}
			}			
			if(jdq==0)
			{
				jdq=1;
				T0_num=0;
			}			
		}				
		if(a==11)//选择上一项
		{
			if(mode==1)//选择上一项管理	
			{
				if(mode_num==0)
					mode_num=2;	
				else
					mode_num--;	
			}
		}
		if(a==12)//选择下一项
		{
			if(mode==1)//选择下一项管理
			{
				if(mode_num>=2)
					mode_num=0;	
				else
					mode_num++;		
			}	
		}
		if(a==13) //退格
		{										
			 if(mode==0||mode==4)//在输入密码状态
			 {
				if(num!=0)
				{			 //输入密码个数减1
					num--;
					if(in_f==1||mode==4)
						LCD12864_display_char(num+1,2,' ');	
					else
						LCD12864_display_char(num+1,4,' ');					
					in_mima=in_mima/10;
					input_f=0;
				}
			 }
			 if(mode==2||mode==3)//在ID编号输入状态
			 {
				if(n!=0)
				{
					LCD12864_display_char(2+n,2,' ');
					n--;
					ID=ID/10;
					zhiwen_f=0;
				}
			 }
		}
		if(a==14)//确定
		{
			if(mode==1)		    //确定选择管理操作
			{	
				write_com(0x01);
				mode=mode_num+2;
				n=0;
				ID=0;
				zhiwen_f=0; 
				input_f=0;   //清除确定标志
				num=0;
				in_mima=0;
				new_mima=0;
				switch(mode_num)		
				{
				   case 0:  	
								LCD12864_display_string(0,1,">>录入指纹");
								LCD12864_display_string(0,2,"编号: ");
								break;
				   case 1:  	
								LCD12864_display_string(0,1,">>删除指纹");
								LCD12864_display_string(0,2,"编号: ");
								break;
				   case 2:  	
								reset_f=1;
								reset_num=1;
								LCD12864_display_string(0,1,"请输入旧密码: "); 
								break;	
				   default: break;
				}	
			}
			else 
			{
				if(input_f==1)//密码输入完成确定
				{
					if(reset_f==1/*&&num==6*/) //修改密码区间
					{
						if(reset_num==3)
						{	
							if(new_mima==in_mima)
							{	
								low_mima=new_mima;
								AT24C02_write_date(200,low_mima/10000);
								AT24C02_write_date(201,low_mima%10000/100);
								AT24C02_write_date(202,low_mima%100);
								write_com(0x01);
								LCD12864_display_string(1,1,"密码修改成功");
								LCD12864_display_string(1,3,"请妥善保管好");
							}
							else
							{
								LCD12864_display_string(1,3,"密码修改失败");
							}
							reset_num=0;
							reset_f=0;	
						} 
						if(reset_num==2)
						{	
							write_com(0x01);
							LCD12864_display_string(0,1,"请再次输入新密码");		
							new_mima=in_mima;
							reset_num++;	
						} 
						if(reset_num==1)
						{
							if(low_mima==in_mima)
							{	
								write_com(0x01);
								reset_num++;
								LCD12864_display_string(0,1,"请输入新密码: ");//显示输入新密码
							}
							else
							{
								LCD12864_display_string(2,3,"密码错误");//显示密码错误
								reset_num=1;
								LCD12864_display_string(1,2,"            ");	
							}
						}
					}
					if(in_f==1)		   //进入管理输入密码时候
					{
						if(low_mima==in_mima)
						{						
							mode=1;
							write_com(0x01);
							in_f=0;
						}
						else
						{
							LCD12864_display_string(2,3,"密码错误");	//显示密码错误
							LCD12864_display_string(1,2,"            ");	
						}
					} 
					if(mode==0&&in_f==0)
					{
						if(low_mima==in_mima)
						{					
							LCD12864_display_string(3,3,"解锁成功");
							jdq=0;
							T0_num=0;
						}
						else
						{
							LCD12864_display_string(3,3,"密码错误");	//显示密码错误
							didi(3);
						}
						LCD12864_display_string(1,4,"            ");
						delay1ms(500);
						LCD12864_display_string(3,3,"        ");	
					}
					in_mima=0;
					num=0;		//清除密码计数。重新计算输入的密码个数
					input_f=0;  //清除确定标志
				}
				if((mode==2||mode==3)&&n==ID_MAX)
				{
					zhiwen_f=1;		
				}
			}			
		}						
		key_f=0;        //清除按键标志	
	}
}

到了这里,关于【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【单片机毕业设计】【mcuclub-dz-032】基于单片机的智能门禁控制系统设计

    项目名:基于单片机的门禁的设计 单片机:STM32F103C8T6 mcuclub-dz-032 功能简介: 1、通过扫码枪进行扫描二维码,当二维码识别成功,10s内需触发红外避障管,并通过红外测温模块进行测温,如果温度正常,则自动开锁,如果温度异常,则声光报警3次,锁不打开 2、通过RFID进行

    2024年01月18日
    浏览(72)
  • 【单片机毕业设计】【mcuclub-dz-198】基于单片机的车辆安全驾驶预警系统设计

    项目名:基于单片机的车辆安全驾驶预警系统设计 项目名:驾驶检测(实物)(mcuclub-105) 项目编号:mcuclub-dz-198 单片机类型:STM32F103C8T6 具体功能: 1、通过红测速模块管检测当前老年车的速度; 2、通过超声波测距测量车前障碍物的距离,若距离大于设定最大值,绿灯亮;

    2024年02月20日
    浏览(58)
  • 【毕业设计】基于单片机控制的交通灯毕业设计(附源代码)

    目 录 摘   要 Abstract 前   言 一、工程简介 ( 一)、概述 ( 二 ) 、 工艺 流程图 二、工程设计 (一)、控制方案的确定 (二)、硬件部分 ( 1 )、交通灯控制系统的硬件设计 ( 2 )、硬件系统的设计具备以下原则 ( 3 ) 、硬件结构框图 (如图 3 所示) ( 4 ) 、交通灯控

    2024年04月23日
    浏览(80)
  • 【单片机毕业设计】【mcuclub-dz-177】基于32单片机的自动扶梯控制系统设计

    项目名:基于32单片机的自动扶梯控制系统设计 项目名:扶梯(实物) 项目编号:mcuclub-dz-177 单片机类型:STM32F103C8T6 具体功能: 1、通过MX1508驱动两个直流电机模拟上下扶梯(一个正转代表上行,一个反转代表下行) 2、每个扶梯都有两个红外对射管,进行人数计数,如果扶

    2024年02月21日
    浏览(74)
  • 【单片机毕业设计】【mcuclub-dz-112】基于单片机的智能饮水机系统设计与实现

    项目名:基于单片机的智能饮水机系统设计与实现 项目名:基于单片机的饮水机的设计 单片机:STC89C52 功能简介: 1、通过一个按键模拟加热电源的开关 2、通过防水式DS18B20检测水温,当电源打开时,温度小于设置最小值,进行自动加热,直到加热到最大值时停止; 3、通过

    2024年03月09日
    浏览(165)
  • 毕业设计 基于单片机的导盲拐杖设计(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月05日
    浏览(83)
  • 毕业设计 基于51单片机的电子秤设计(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月11日
    浏览(66)
  • 毕业设计 基于51单片机控制LED点阵显示器的设计

    序 🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的

    2024年02月02日
    浏览(71)
  • 毕业设计 基于单片机的GSM智能快递柜设计(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月23日
    浏览(76)
  • 毕业设计 基于51单片机智能停车场管理车位引导系统设计

    选题之前,同学们要弄明白一件事情,做毕业设计是干什么用的! 这里我告诉大家,毕业设计对于你来说,不是让你去搞研究,掌握运用所学知识的,也不是让你去比谁做的毕业设计多么牛逼,多么厉害。 说白点,它的作用就是一个,让你顺利毕业,能够拿到学位证,毕业

    2023年04月15日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包