基于51单片机的指纹考勤机密码锁系统

article/2025/6/28 23:04:07

目录
第1章 概述 4
1.1 指纹识别技术的发展 4
1.2 指纹识别原理 5
1.3 系统设计目的及意义 6
1.4 工作流程 6
第2章 硬件介绍和设计 8
2.1 单片机及最小系统 8
2.1.1 STC89C52单片机介绍 8
2.1.2 外部晶振的设计 10
2.1.3 复位电路的设计 11
2.2 液晶显示模块 12
2.2.1 12864系列液晶的引脚功能 12
2.2.2 控制器接口说明 14
2.2.3 指令说明 14
2.2.4 12864引脚与单片机连接图 19
2.3 按键控制部分电路 20
2.4 指纹模块 22
2.4.1 指纹模块简介 22
2.4.2 指纹模块引脚接法 24
2.4.3 指纹模块命令 24
2.5 本章小结 26
第3章 系统软件的设计 28
3.1 系统程序工作分析 28
3.2 串口初始化 28
3.3 主程序流程图 29
3.3.1键盘管理程序设计流程 31
3.3.2 LCD显示模块程序设计流程 31
3.3.3 指纹模块的通信程序设计流程 32
3.4 Keil编程 33
3.5 本章小结 34
第4章 硬件调试 35
4.1 电路的焊接 35
4.2 程序的烧写 36
4.3 小灯、继电器的调试 37
4.4 液晶的调试 37
4.5 指纹模块、按键的调试 38
4.6 本章小结 38
结 论 39
参考文献 40
致 谢 41
1)开机:按下电源,电源指示灯点亮,液晶显示:“请先按键再刷指纹”,按下按键后,液晶显示:“请按指纹”,同时指纹模块绿灯亮起,可以进行指纹识别开锁功能。若指纹识别成功,继电器动作,LED指示灯亮起,开锁成功,人员可以进入,液晶显示:“指纹已找到,请进”; 若指纹识别不成功,继电器不动作,LED指示灯不亮,将不能开锁,人员不能进入,液晶显示:“没有搜索到指纹 请按任意键继续”。
2)管理员模式:按下按键进入管理员模式首先要输入6位密码,密码正确可以进入管理员模式,密码错误不能进入管理员模式,在管理员模式下可以完成录入指纹、删除指纹、应急开锁和修改密码的功能。进入录入指纹模式后,指纹模块绿灯亮起,将手指放到指纹头上,录入同一手指两次,此时液晶显示“指纹采集成功”。在删除指纹模式下,液晶显示“输入删去的指纹号”,输入后按确认键即可完成指定指纹的删除功能,同时液晶显示“删指纹号成功”。在非正常的情况下,如指纹模块不好用或者紧急情况下,可以使用紧急开锁功能。密码修改的功能是指可以修改并保存进入管理员的6位密码。
系统设计的总体框图如图1-3所示。
在这里插入图片描述
图1-3 系统总体框架图
2.4 指纹模块
2.4.1 指纹模块简介
本设计选择的指纹模块型号是ZFM60,指纹模块电路如下所示:
在这里插入图片描述
图2-7 指纹模块接口图
指纹模块里面主要是DSP芯片,型号为AS606,加上外面的CMOS芯片,CMOS芯片主要是对指纹进行“照相”,生成指纹特征,如下图所示就是一个指纹模板,录入两次这样的指纹特征就能生成一个指纹模板。
具体的工作过程是:扫描指纹(录入图像)、生成特征、合成模板(建立一个指纹库文件,成功录入一个指纹)。
在这里插入图片描述
图2-8 指纹模版
指纹模板就是“照一次相”,将指纹模块里面的CMOS芯片采集一次指纹信息,然后进行模糊处理生成0和1两种记录信息,存入指纹模块的FLASH芯片里面。
当切换到识别模式的时候,指纹模块就会先让CMOS芯片采集一次指纹,然后和FLASH芯片的数据进行对比。看是不是存在,如果存在就能返回是几号指纹。这样我们就能通过单片机或者电脑进行指纹识别与登记了。
具体指纹模块介绍如下:此指纹模块型号是:ZFM60,此模块上里面包含了:
1、光学头2、通信连接线3、DSP芯片4、稳压芯片5、FLASH芯片6、CMSO传感器等部件组成。
主要技术指标:
供电电压:DC 3.8~7.0V
背光颜色:绿色
亮灯方式:长亮/闪烁
供电电流:工作电流:<65mA
峰值电流:<95mA
指纹图像录入时间:<0.5秒
窗口面积:14.5×19.4mm
匹配方式:比对方式(1:1)
搜索方式(1:N)
特征文件:256字节
模板文件:512字节
存储容量:1000枚
安全等级:3级(从低到高:1、2、3、4、5)
认假率(FAR):<0.001%(安全等级为3时)
拒真率(FRR):<1.0%(安全等级为3时)
搜索时间:<1.0秒(1:500时,均值)
上位机接口:UART(TTL逻辑电平)
通讯波特率(UART):(9600×N)bps其中N=1~12(默认值N=6,即57600bps)

#include"reg52.h"
#include"12864.h"
#include"eeprom.h"
#include"matrixkey.h"
#include"AT24CXX.h"
#include"finger.h"
uchar code table1[]="A:签到  B:添加  ";
uchar code table2[]="C:清空  D:上课  ";
uchar code table3[]=" *查询缺勤人员  ";
uchar code table4[]=" #查询迟到人员  ";
uchar code table5[]="请输入删去密码: ";uchar code table6[]="    开始签到    ";
uchar code table7[]="  请按指纹签到  ";
uchar code table8[]="               ";
uchar code table9[]="按D:  开始上课  ";
uchar code table10[]="请输入密码:     ";
uchar code table11[]="    签到成功    ";
uchar code table12[]="请按任意按键继续";
uchar code table13[]="  编号为:      ";
uchar code table14[]="    请按手指    ";
uchar code table15[]="    请再按一次  ";
uchar code table16[]="  采集指纹成功  ";
uchar code table17[]="输入删去的指纹号";
uchar code table18[]="删去指纹库成功  ";
uchar code table19[]="删去指纹库失败  ";
uchar code table20[]="  请输入新密码  ";
uchar code table21[]="请再次输入新密码";
uchar code table22[]="  密码修改成功  ";
uchar code table23[]="  两次密码不一样";
uchar code table24[]="  输入密码错误  ";
uchar code table25[]="  还有  机会    ";
uchar code table26[]="  该指纹已存储  ";
uchar code table27[]="  采集指纹失败  ";
uchar code table28[]="确定删去指纹库?";
uchar code table29[]="按D:  本节课结束";
uchar code table30[]="当前缺勤      人";
uchar code table31[]="当前迟到      人";
uchar code digital[15]={0x90,0x92,0x94,0x96,0x88,0x8a,0x8c,0x8e,0x98,0x9a,0x9c,0x9e};
uchar  xdata table_qiandao[100];
uchar queqing=0;//缺勤人数
uchar zz;
uchar chidao=0;//迟到人数
uchar code     admin[6]={1,3,1,4,2,0};//管理员的固定密码
uchar code init_code[6]={0,0,0,0,0,0};//上电第一次一般的初始化密码uchar   now_code[6]={0,0,0,0,0,0};//当前存储器中存储的密码
uchar        user[6]={0,0,0,0,0,0};//用户输入的密码
uchar       user2[6]={0,0,0,0,0,0};//输入第二次修改的密码
sbit relay=P3^7;//开锁继电器
sbit wake=P3^6;//检测手指按压,有手指按下就是高电平
uchar jishu=0;
uchar  err_user=3;//用户三次输入错误密码
uchar err_admin=3;//管理员三次输入错误密码
uchar num;//存储矩阵键盘转换的对应按键值
uchar number=0;//输入密码的个数默认0
uchar key_flag=0;//进入手动密码标志
uchar i;
uchar code_flag=0;//密码修改标志第一次输入密码时候是等于0再次输入是等于1
void init_dispay(void)//初始化界面
{PutStr(0,0,table1);PutStr(1,0,table2);PutStr(2,0,table3);PutStr(3,0,table4); 
}
void admin_dispay(void)//管理员界面
{PutStr(0,0,table6);	PutStr(1,0,table7);PutStr(2,0,table8);	PutStr(3,0,table9);				
}
void init_shuju(void)
{uchar i;for(i=0;i<100;i++){table_qiandao[i]=0x00;}
}
void  que_renshu(void)
{  queqing=0;//缺勤人数
//	  WriteCommand(0x80+2);	
//			 WriteData(jishu/10+0x30);
//			 WriteData(jishu%10+0x30);for(i=0;i<jishu;i++){if(table_qiandao[i]==0x00){ queqing++;WriteCommand(digital[queqing-1]);WriteData((i+1)/10+0x30);WriteData((i+1)%10+0x30); }}
}
void  chidao_renshu(void)
{  queqing=0;//缺勤人数
//	 WriteCommand(0x80+2);	
//	 WriteData(jishu/10+0x30);
//	 WriteData(jishu%10+0x30);for(i=0;i<jishu;i++){if(table_qiandao[i]>=2){ queqing++;WriteCommand(digital[queqing-1]);WriteData((i+1)/10+0x30);WriteData((i+1)%10+0x30); }}
}
void key(void)
{    num=keynum();if((num==12)&&(key_flag==0))//查看缺勤人数{LcmClearTXT();//清屏PutStr(0,0,table30);que_renshu();WriteCommand(0x80+6);	WriteData(queqing/10+0x30);WriteData(queqing%10+0x30); while((keynum()>=16));	init_dispay();	 	 }if((num==14)&&(key_flag==0))//查看迟到人数{LcmClearTXT();//清屏PutStr(0,0,table31);chidao_renshu();WriteCommand(0x80+6);	WriteData(queqing/10+0x30);WriteData(queqing%10+0x30);while((keynum()>=16));	init_dispay();	 }if((num==11)&&(key_flag==0))//如果按下C按键进{key_flag=1;//只显示“请输入密码开锁:“LcmClearTXT();//清屏PutStr(0,0,table28);PutStr(1,0,table5);		 }if((num==7)&&(key_flag==0))//如果按下B按键进入添加指纹{LcmClearTXT();//清屏PutStr(1,0,table14);	//显示请按指纹if(regist(0)==1)//如果第一次按手指成功{PutStr(1,0,table15);	//显示请再按一次Delay(10);//延时一会if(regist(1)==1)//两次采集手指成功{PutStr(1,0,table16);	//采集指纹成功PutStr(2,0,table13);	//指纹编号:WriteCommand(0x88+5);//指定第三行显示位置WriteData(' ');id=id+1;WriteData(id/100+0x30);WriteData(id%100/10+0x30);WriteData(id%10+0x30);			SectorErase(0x2200);jishu=id%256;byte_write(0x2200, id%256);}else PutStr(1,0,table27);	//采集指纹失败 }else   if(regist(0)==2)//已经注册过指纹{PutStr(1,0,table26);	//指纹已经存储}PutStr(3,0,table12);	//请按任意键退出while(keynum()>=16);	   init_dispay();//管理员设置界面	key_flag=0;num=0xff;}if((num==3)&&(key_flag==0))//如果按下A按键管理员模式{key_flag=2;//进入输入管理员密码界面//只显示“请输入密码:“LcmClearTXT();//清屏PutStr(1,0,table10);		}if((key_flag==1)&&(num!=0xff))//非管理员模式下输入密码{num=coding(num);//转换成可以识别的if((number<6)&&(num<10)){ user[number]=num;//用户输入的密码进行记忆WriteCommand(0x88+number);		//指定第三行显示位置WriteData('*');//WriteData(num+0x30);//明码显示	number++;}if((num=='B')&&(number>0))//密码删除按键{  number--;WriteCommand(0x88+number);		//指定第三行显示位置WriteData(' ');	}if(number==6)//按下D键确定按键并且输入六位密码之后{  LcmClearTXT();//清屏number=0;key_flag=0;//如果管理员密码正确,进入添加指纹,删除指纹,收到开锁,修改密码界面if((user[0]==now_code[0])&&(user[1]==now_code[1])&&(user[2]==now_code[2])&&(user[3]==now_code[3])&&(user[4]==now_code[4])&&(user[5]==now_code[5])){   if(cancel(0x63)==1){PutStr(0,0,table18);//输入删去的指纹号成功SectorErase(0x2200);byte_write(0x2200, 0x00);			}else{PutStr(0,0,table19);//输入删去的指纹号失败}	Delay(80);}else//密码错误{ PutStr(1,0,table24);//显示输入密码错误}PutStr(3,0,table12);		while((keynum()>=16)&&(err_user!=0));init_dispay();//初始化界面	 }}if((key_flag==2)&&(num!=0xff))//签到模式下输入数字按键{num=coding(num);//转换成可以识别的if((number<6)&&(num<10)){ user[number]=num;//用户输入的密码进行记忆WriteCommand(0x88+number);		//指定第三行显示位置WriteData('*');// WriteData(num+0x30);	//明码显示number++;}if(number==6)//输入六位以后进行密码校验{  //如果管理员密码正确,进入添加指纹,删除指纹,收到开锁,修改密码界面if((user[0]==admin[0])&&(user[1]==admin[1])&&(user[2]==admin[2])&&(user[3]==admin[3])&&(user[4]==admin[4])&&(user[5]==admin[5])){     key_flag=55;admin_dispay();//进入签到页面err_admin=3;num=0XFF;init_shuju();							 }else//管理员密码错误{   PutStr(1,0,table24);//显示输入密码错误PutStr(3,0,table12);										 while((keynum()>=16)&&(err_admin!=0));init_dispay();//初始化界面number=0;key_flag=0;										 }}if((num=='B')&&(number>0)){  number--;WriteCommand(0x88+number);		//指定第三行显示位置WriteData(' ');	}}if(key_flag==55)//进入签到指纹巡查{      num=coding(num);//转换成可以识别的if(num=='D')//按下就进入开始上课{key_flag=56;PutStr(3,0,table29);}if(wake==1)//如果有手指按下{if(check()==1)//进行指纹匹配{   err_admin=3;err_user=3;LcmClearTXT();//清屏PutStr(1,0,table11);PutStr(2,0,table13);WriteCommand(0x88+5);		//指定第三行显示位置WriteData(' ');zz=id%256;table_qiandao[zz]=0x01;id++;WriteData(id/100+0x30);WriteData(id%100/10+0x30);WriteData(id%10+0x30);//	                   WriteData(table_qiandao[zz]%100/10+0x30);
//										 WriteData(table_qiandao[zz]%10+0x30);		 								 relay=0;Delay(80);relay=1;Delay(20);PutStr(3,0,table12);		number=0;key_flag=55;admin_dispay();//回到初始界面num=0xff;}} }if(key_flag==56)//迟到的{      num=coding(num);//转换成可以识别的if(num=='D')//按下就进入开始上课{key_flag=0;number=0;init_dispay();}if(wake==1)//如果有手指按下{if(check()==1)//进行指纹匹配{  LcmClearTXT();//清屏PutStr(1,0,table11);PutStr(2,0,table13);WriteCommand(0x88+5);		//指定第三行显示位置WriteData(' ');zz=id%256;table_qiandao[zz]=table_qiandao[zz]+0x02;id++;WriteData(id/100+0x30);WriteData(id%100/10+0x30);WriteData(id%10+0x30);	//									   WriteData(table_qiandao[zz]%100/10+0x30);
//										 WriteData(table_qiandao[zz]%10+0x30);		 relay=0;Delay(80);relay=1;Delay(20);PutStr(3,0,table12);		number=0;key_flag=56;admin_dispay();//回到初始界面PutStr(3,0,table29);num=0xff;}} }}
void main()	
{  for(i=0;i<6;i++)//读取存储器中的密码{now_code[i]=read_add(20+i);Delay(5);}	for(i=0;i<6;i++){if(now_code[i]>9){i=10;break;}}if(i>9)//设置初始化密码{for(i=0;i<6;i++){now_code[i]=init_code[i];Delay(5);}	}								LcmInit();//初始化12864jishu=byte_read(0x2200);
//	 WriteCommand(0x88);	
//	 WriteData(jishu/10+0x30);
//	 WriteData(jishu%10+0x30); 
//   	Delay(30);
//   	Delay(50);init_dispay();//进入初始化显示界面UART_Init();	//初始化串口9600init_shuju();while(1){  key();}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/mdQea60x.shtml

相关文章

(考勤记录导出教程)指纹考勤机科密C21

0 需求 实验室的指纹考勤机型号是科密C21&#xff0c;需要连接电脑导出考勤记录 1 安装软件 官网下载链接&#xff1a;科密A1考勤管理系统V1.1.0.728安装包数据库 sqlserver 2014 express with advance service with sp3 官网下载链接&#xff1a;https://download.microsof…

九段系统服务器,人力资源一卡通考勤系统

九段人力资源管理系统是一款非常好用的考勤工资管理软件&#xff0c;适合所有企业使用。它的兼容性很不错&#xff0c;可与市面上大多数考勤机兼容&#xff0c;更与钉钉接通&#xff0c;所有数据都会与钉钉同步&#xff0c;员工可用手机登录钉钉查看。 软件功能 1、自定义所需要…

java连接 ZKTeco/中控 -打卡机/考勤机

连接步骤: 1. jacob-1.19版本; 2. 在resources目录下新建lib文件夹, 将jacob.jar 放入项目ib导入; 3. maven里导入本地jar包; 4.将jacob-1.19-x64.dll 放入64位 jre/bin目录下; 5.将中控考勤机sdk 的dll文件全部放入 c:\windows\system32 目录下; 6.运行cmd 注册zkemkeeper.dll…

汉王考勤管理系统教程

&#x1f447;教程&#x1f447; 人脸识别考勤简介 汉王人脸识别考勤系统是由人脸识别考勤机、考勤管理软件两部分组成。电脑驱动程序就是考勤管理软件。 人脸识别考勤机可独立使用&#xff0c;无需连接电脑&#xff0c;即可完成人脸登记、刷脸考勤、存储记录等功能。 考勤机…

钉钉考勤报表生成工具

钉钉考勤报表生成工具---考勤助手 概述 考勤助手是一款针对钉钉考勤、企业微信考勤报表统计工具软件。用户导入钉钉考勤数据&#xff0c;自动生成企业组织结构图&#xff0c;自动生成员工每月考勤打卡明细表、月度考勤汇总表等。软件具有员工生日提醒、劳动合同续签到期提醒、…

java连接带通讯密码的中控考勤机 iface702

java连接带通讯密码的中控考勤机 iface702 java连接中控考勤机导入jacob.jar 1.19版本jacob-1.19-x86.dllzkemkeeper.dll考勤机连接代码iFace系列脱机通讯开发包开发手册 java连接中控考勤机 jdk1.8 32位 文章资源 https://download.csdn.net/download/weixin_47881155/161…

得力人脸识别考勤机密码设置_人脸指纹混合识别考勤机得力怎么使用

展开全部 具体步骤如下: ①安装好设备并给设备通电。 ②进32313133353236313431303231363533e59b9ee7ad9431333365666233入【设置】一栏就可以进行用户登记,人脸指纹登记、设置密码,分配权限。 ③然后进入进行用户验证,确认登记人脸、指纹、密码是否可用。 ④检查设备时间是…

得力考勤机excel密码_可以修改原始考勤记录数据的是哪种人脸指纹考勤机?

目前很多工厂、企业、机关单位、公司、酒店、餐厅、学校、医院、超市等行业都已经安装使用了指纹考勤机、指纹打卡机、以及人脸识别考勤机。指纹考勤机和人脸识别考勤机的使用,规范了公司考勤管理制度,提升了公司整体形象,体现了“公平”“公正”“平等”,提高了企业的工作…

得力考勤机excel密码_考勤机

一、考勤机盛图-T500 ◀点开我了解更多 人脸+指纹+密码三合一,指纹容量3000枚,人脸容量500张,超长兼容,识别速度快,操作简易 二、S600 指纹容量1000枚,记录容量100000条,采用高精度全反光学采集器,识别速度快,高清TFT彩屏,免安装软件,U盘数据上传下载,操…

Version 28 (intended for Android Pie and below) is the last version of the legacy support library, s

刚开始建项目 会出现 Version 28 (intended for Android Pie and below) is the last version of the legacy support library, so we recommend that you migrate to AndroidX libraries when using Android Q and moving forward. The IDE can help with this: Refactor &g…

三星s8android pie,三星修改Galaxy S8的Android Pie更新时间表,并添加M2

原标题&#xff1a;三星修改Galaxy S8的Android Pie更新时间表&#xff0c;并添加M2 玩懂手机网1月25日资讯&#xff0c;三星为Android 9.0 Pie的One UI新系统专有用户界面投入了大量的精力&#xff0c;这也同时表示三星将会为该系统带去更多好用和明显区别于别的系统的功能&am…

android 9 pie公司,谷歌Android 9 Pie,真正的安卓派

IT之家8月7日消息 今天谷歌正式宣布了Android 9 Pie正式版系统&#xff0c;此前的Android P终于定名为Android Pie&#xff0c;该更新首先面向谷歌Pixel设备和Essential Phone手机推送&#xff0c;索尼、小米、HMD、OPPO、vivo、一加等厂商将在今年秋季获得安卓9正式版。每一代…

android9 0正式版,安卓9.0系统正式版|Android Pie 9.0 正式版 - 天天游戏吧

谷歌Android P正式版&#xff0c;其实也是Android 9.0系统&#xff0c;代号为Android Pie&#xff0c;Pie意义为“馅饼”&#xff0c;这是Android的第九个大版本。 Android 9 Pie最大的更新亮点无疑就是原生手势操作和刘海屏深度优化&#xff0c;此外还有Adaptive Battery(自适…

android 5.0 pie,Android各版本份额占比出炉:Android Pie仍未知

据最新的数据显示&#xff0c;有19.2%的设备装载Android8.0 Oreo系统&#xff0c;相比起上个月的数据来说有了不错的提升达到4.6个百分点&#xff0c;甚至还要比去年的安卓7.0要高出3.4个百分点。2016发布Android 7.07.1 Nougat系统的安卓以29.3%占走了安卓Pie的大部分份额。 另…

三星s8android pie,三星更改Galaxy S8的Android Pie更新计划,添加Gala

原标题&#xff1a;三星更改Galaxy S8的Android Pie更新计划&#xff0c;添加Gala 毫无疑问&#xff0c;三星在其简化的安卓9.0版用户界面上投入了大量的精力&#xff0c;这自然意味着三星正式推送Android Pie的最新版本的时间明显迟于其他品牌高端手机的类似更新。 不过事情似…

安卓学习专栏——安卓报错Version 28 (intended for Android Pie and below) is the last version of the legacy suppor

步骤 系列文章前言1.报错效果2.修改方法 总结 系列文章 提示&#xff1a;转到安卓学习专栏&#xff0c;观看更多内容&#xff01; 点我直达–>安卓学习专栏 前言 com.android.support:appcompat-v7:24.2.1’飘红 报错Version 28 (intended for Android Pie and below) is …

2021-08-25 Android studio 编译提示Version 28 (intended for Android Pie and below) is the last version of

一、如下提示 Version 28 (intended for Android Pie and below) is the last version of the legacy support library, so we recommend that you migrate to AndroidX libraries when using Android Q and moving forward. The IDE can help with this: Refactor> Migr…

android 9 pie公司,Android 9.0正式推送 定名Android Pie

【IT168 手机讯】北京时间8月7日早间&#xff0c;谷歌率先面向Pixel系列手机推送了Android P正式版(Essential也第一时间升级)&#xff0c;代号“Pie”&#xff0c;这也是Android的第九代正式更新。 对于Android P的命名在正式发布之前众说纷纭&#xff0c;现在看来&#xff0c…

小米2s Android pie,抢先体验Android Pie 小米MIX 2s已收到推送

原标题&#xff1a;抢先体验Android Pie 小米MIX 2s已收到推送 [ 【IT168 手机讯】就在北京时间8月7日凌晨&#xff0c;谷歌推送了Android 9.0的正式版&#xff0c;并将其命名为“Pie”&#xff0c;首批适配的机型包含Pixel以及Essential Phone两大系列的手机&#xff0c;而在测…

联想z5 android pie,联想z5成功吃上安卓pie

昨天上了趟XDA论坛发现AOSP9.0的通刷包Phh-Treble出来了。(下载地址在最后面) 能吃上屁了 如丝滑般流畅&#xff0c;响应速度比以前快了。 1.网络老毛病 设置成4g只能上网&#xff0c;3g能打电话&#xff0c;发短信&#xff0c;上网(可能是国内外环境不一样) 2.无自动亮度(有通…