201 基于51单片机AS608指纹自动识别电路设计

本设计是基于STC89C52单片机的指纹识别设计,采用AS608指纹模块做为传感器,LCD1602显示屏显示信息。具有指纹添加,指纹识别,删除指纹功能。是一款简单的指纹识别毕业设计设计,电路原理图和PCB以及程序完整。添加简单的电路可以拓展为其他的设计。

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/144H6VtNfigvOPzfQlcunPQ?pwd=8888

部分代码展示

/*****************************************
基于单片机的指纹识别系统
   AS608模块
   STC89C52
******************************************/
#include<reg51.h>
#include"lcd.h"
sbit D3= P1^3;
sbit D4= P1^4;
sbit k3=P1^0; 
sbit k4=P1^1;
sbit k5=P1^2;
#define FALSE 0
#define TURE  1
#define MAX_NUMBER    30 
#define _Nop()  _nop_()

unsigned char  code	jiemian[16]	=	"Fingerprint lock";
unsigned char code	success[15]	=	"Add finger OK";
unsigned char code	faild[16]	=	"Add finger faild";
unsigned char  code shownum[12]	=	"Finger_NUM:";
unsigned char code	MODE1[16]	=	"Add finger mode";
unsigned char  code MODE2[16]	=	"Identify   mode";
unsigned char code	MODE3[16]	=	"Connection OK";
unsigned char code  MODE4[16]	=	"Connection Faild";
unsigned char code	shibie1[16]	=	"Identify OK";
unsigned char code  shibie2[16]	=	"Identify Faild";
unsigned char code  del[16]  	=	"DEL success";
unsigned char   strnum[3]={0};
unsigned char 	SaveNumber=0,searchnum=0;
unsigned int  	SearchNumber=0,clk0=0;
bit modeflag= 0 ,  clearallflag=0, changeflag=0;
unsigned char 	num_char[10]={'0','1','2','3','4','5','6','7','8','9'};
//定义密码,实际上密码需要存在eeprom中,可以通过程序更改。请用户自行添加
unsigned char 		 FifoNumber=0; 
unsigned char idata  FIFO[MAX_NUMBER+1]={0};
//常用指令定义/

//Verify  Password   :验证设备握手口令
unsigned char code VPWD[16]={16,0X01 ,0Xff,0xff,0xff,0xff, 0x01,0,7,0x13,0x00,0x00,0x00,0x00,0x00,0x1b};	 //回送12个

//设置设备握手口令
unsigned char code STWD[16]={16,0X01 ,0Xff,0xff,0xff,0xff, 0x01,0,7,0x12,0x00,0x00,0x00,0x00,0x00,0x1a};	 //回送12个

//GetImage           :探测手指并从传感器上读入图像
unsigned char code GIMG[14]={12, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,3,1,0x00,0x05};	//回送12个

//Gen Templet1        :根据原始图像生成指纹特征1
unsigned char code GENT1[14]={13,0X01 ,0Xff,0xff,0xff,0xff,0x01,0,4,2,1,0x00,0x08};	//回送12个

//Gen Templet2        :根据原始图像生成指纹特征2
unsigned char code GENT2[14]={13,0X01 ,0Xff,0xff,0xff,0xff,0x01,0,4,2,2,0x00,0x09}; //回送12个	

	
//Search Finger      :以CharBufferA或CharBufferB中的特征文件搜索整个或部分指纹库
unsigned char code SEAT[18]={17,  0X01 ,0Xff,0xff,0xff,0xff, 0x01,   0,8, 4,1,0,0,    0,0x65,  0x00,0x73};	//回送16个


//Merge Templet      ;将CharBufferA与CharBufferB中的特征文件合并生成模板,结果存于ModelBuffer。
unsigned char code MERG[14]={12,  0X01 ,0Xff,0xff,0xff,0xff, 0x01,  0,3,5 , 0x00,0x09};//回送12个	

//Store Templet      :将ModelBuffer中的文件储存到flash指纹库中
unsigned char code STOR[16]={15,  0X01 ,0Xff,0xff,0xff,0xff, 0x01,  0,6,6,2,     0x00,0x00,     0x00,0x0f}; //回送12个

//Read Note
unsigned char code RDNT[14]={13,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,4,0x19,  0, 0x00,0x1e};

//Clear Note
unsigned char code DENT[46]={45,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,36,0x18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x00,0x3d};

//DEL one templet
unsigned char code DELE_one[16]={16, 0X01 ,0Xff,0xff,0xff,0xff, 0x01,   0,7,  0x0c,    0x00,0x00, 0,1, 0x00,0x15};

//DEL templet      ;清空指纹库
unsigned char code DELE_all[12]={12,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,3,  0x0d,0x00,0x11};
void dokey();
/*******************************************************************************
串口发送函数
*******************************************************************************/
void TxdByte(unsigned char dat)//串口发送信息,通过查询方式发送一个字符
{
    TI = 0;		 //让TI=0
    SBUF = dat;	 //读入数据
    while(!TI);	 //等待发送完毕
    TI = 0;		 //清零
}
/*******************************************************************************
	 命令解析,给模块发送一个命令
*******************************************************************************/
bit Command(unsigned char *p,unsigned char MaxTime) //命令解析,给模块发送一个命令
{
  	unsigned char count=0,tmpdat=0,temp=0,i=0,package=0,flag=0,checksum=0;	
	bit result=0, start=0,stop=0;
  	TxdByte(0xef);//数据包包头识别码
   	TxdByte(0x01);//数据包包头识别码
  	i=*p;         //数组的第“0”个元素、里面存放了本数组的长度,把这个长度给变量i,方便进行操作
  	p++; 
	p++;
  	for (count=i-1; count!=1;count--)  //Sent command String
  	{
 		temp=*p++;//取第个“1”个元素的内容,然后发送 
    	TxdByte(temp);//将数据发送出去
	}  
  	result=TURE;//发送完成,结果为真 (真为1)   	
  	FifoNumber=0;
  	for (count=MAX_NUMBER+1; count!=0; count--)//清空所有FIFO[]数组里面的内容,写入0X00
	{
	  FIFO[count-1]=0x00; 
	}	  	
  	if (result)   
   	{		
     	result=FALSE;
      	start =FALSE;
   		stop  =FALSE;
       	count=0;
       	clk0=0;	//清零CL0计数
       	do /do的内容
		{	
			restart0:				
	         	if (RI==1)//如果接收到数据
		      	{ 				
			  		tmpdat=SBUF;//先把接收到的数据放到tmpdat中
	            	RI=0;
	            	if ((tmpdat==0xef)&&(start==FALSE))//这个数据为第一个传回来的数据,也就是“指令应答”的第一个字节
	            	{ 
						count=0;
				    	FIFO[0]=tmpdat;//读入第一个应答字节(0XEF),存在第“0”个元素中    
						flag=1;	
						goto 
							restart0;//可以用中断方式进行		
	             	}

					if(flag==1)//第一个字节已经回来,所以flag==1成立
					{  
						if(tmpdat!=0x01)  //接收数据错误,将重新从缓冲区接收数据
						{  	
							flag=0;//接收应答失败
							result=FALSE;
	      					start =FALSE;
	   						stop=FALSE;
	       					count=0;
							goto 
								restart0;					
						}
						//如果成功接收到0xef01,可以开始接收数据
						flag=2;//flag=2;表示应答成功,可以开始接收数据了
						count++;//现在count=1;
						FIFO[count]=tmpdat;//读入第二个应答字节(0X01),存在第“1”个元素中    
						start=TURE;	//应答成功可以开始接收数据
						    goto 
								restart0;	
					}

 完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/144H6VtNfigvOPzfQlcunPQ?pwd=8888

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值