指纹识别模块录入程序Word格式.docx

上传人:b****8 文档编号:22672661 上传时间:2023-02-05 格式:DOCX 页数:50 大小:28.07KB
下载 相关 举报
指纹识别模块录入程序Word格式.docx_第1页
第1页 / 共50页
指纹识别模块录入程序Word格式.docx_第2页
第2页 / 共50页
指纹识别模块录入程序Word格式.docx_第3页
第3页 / 共50页
指纹识别模块录入程序Word格式.docx_第4页
第4页 / 共50页
指纹识别模块录入程序Word格式.docx_第5页
第5页 / 共50页
点击查看更多>>
下载资源
资源描述

指纹识别模块录入程序Word格式.docx

《指纹识别模块录入程序Word格式.docx》由会员分享,可在线阅读,更多相关《指纹识别模块录入程序Word格式.docx(50页珍藏版)》请在冰豆网上搜索。

指纹识别模块录入程序Word格式.docx

Inputfingerprint"

uchartable3[]="

Thendooris"

uchartable4[]="

alreadyopen"

uchartable5[]="

ErrorWaring"

uchartable8[]="

Doorsecurity"

//门禁系统

bitmodeflag=0,clearallflag=0,changeflag=0;

//默认为识别模式,如果为1为录入指纹模式,每录入一次SaveNumber++

//////////////////////////////////////常用指令定义/////////////////////////////

//VerifyPassword:

验证设备握手口令

unsignedcharcodeVPWD[16]={16,0X01,0Xff,0xff,0xff,0xff,0x01,0,7,0x13,0x00,0x00,0x00,0x00,0x00,0x1b};

//回送12个

//设置设备握手口令

unsignedcharcodeSTWD[16]={16,0X01,0Xff,0xff,0xff,0xff,0x01,0,7,0x12,0x00,0x00,0x00,0x00,0x00,0x1a};

//GetImage:

探测手指并从传感器上读入图像

unsignedcharcodeGIMG[14]={12,0X01,0Xff,0xff,0xff,0xff,0x01,0,3,1,0x00,0x05};

//GenTemplet1:

根据原始图像生成指纹特征1

unsignedcharcodeGENT1[14]={13,0X01,0Xff,0xff,0xff,0xff,0x01,0,4,2,1,0x00,0x08};

//GenTemplet2:

根据原始图像生成指纹特征2

unsignedcharcodeGENT2[14]={13,0X01,0Xff,0xff,0xff,0xff,0x01,0,4,2,2,0x00,0x09};

//回送12个

//SearchFinger:

以CharBufferA或CharBufferB中的特征文件搜索整个或部分指纹库

unsignedcharcodeSEAT[18]={17,0X01,0Xff,0xff,0xff,0xff,0x01,0,8,4,1,0,0,0,0x65,0x00,0x73};

//回送16个

//MergeTemplet;

将CharBufferA与CharBufferB中的特征文件合并生成模板,结果存于ModelBuffer。

unsignedcharcodeMERG[14]={12,0X01,0Xff,0xff,0xff,0xff,0x01,0,3,5,0x00,0x09};

//回送12个

//StoreTemplet:

将ModelBuffer中的文件储存到flash指纹库中

unsignedcharcodeSTOR[16]={15,0X01,0Xff,0xff,0xff,0xff,0x01,0,6,6,2,0x00,0x00,0x00,0x0f};

//ReadNote

unsignedcharcodeRDNT[14]={13,0X01,0Xff,0xff,0xff,0xff,0x01,0,4,0x19,0,0x00,0x1e};

//ClearNote

unsignedcharcodeDENT[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};

//DELonetemplet

unsignedcharcodeDELE_one[16]={16,0X01,0Xff,0xff,0xff,0xff,0x01,0,7,0x0c,0x00,0x00,0,1,0x00,0x15};

//DELtemplet;

清空指纹库

unsignedcharcodeDELE_all[12]={12,0X01,0Xff,0xff,0xff,0xff,0x01,0,3,0x0d,0x00,0x11};

//////////////////////////////////////常用指令定义-------结束///////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////宏定义////////////////////////////////////////////////////////////////////////

#defineFALSE0

#defineTURE1

//状态定义表

#defineon1

#defineoff0

#defineMAX_NUMBER63

#define_Nop()_nop_()

//////////////////////////////////////宏定义------------结束////////////////////////////////////////////////////////

unsignedcharFifoNumber=0;

xdataunsignedcharFIFO[MAX_NUMBER+1]={0};

/*********1毫秒延时程序**********/

voiddelay1ms(unsignedintt)

{

unsignedinti,j;

for(i=0;

i<

t;

i++)

for(j=0;

j<

120;

j++)

;

}

voidTxdByte(unsignedchardat)//串口发送信息,通过查询方式发送一个字符

TI=0;

//让TI=0

SBUF=dat;

//读入数据

while(!

TI);

//等待发送完毕

//清零

bitCommand(unsignedchar*p,unsignedcharMaxTime)//命令解析,给模块发送一个命令

unsignedcharcount=0,tmpdat=0,temp=0,i=0,package=0,flag=0,checksum=0;

bitresult=0,start=0,stop=0;

TxdByte(0xef);

//数据包包头识别码

TxdByte(0x01);

i=*p;

//数组的第“0”个元素、里面存放了本数组的长度,把这个长度给变量i,方便进行操作

p++;

p++;

for(count=i-1;

count!

=1;

count--)//SentcommandString

{

temp=*p++;

//取第个“1”个元素的内容,然后发送

TxdByte(temp);

//将数据发送出去

}

result=TURE;

//发送完成,结果为真(真为1)

FifoNumber=0;

for(count=MAX_NUMBER+1;

=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;

goto

restart0;

}

//如果成功接收到0xef01,可以开始接收数据

flag=2;

//flag=2;

表示应答成功,可以开始接收数据了

count++;

//现在count=1;

FIFO[count]=tmpdat;

//读入第二个应答字节(0X01),存在第“1”个元素中

start=TURE;

//应答成功可以开始接收数据

}

if((flag==2)&

(start==TURE))//flag=2;

{

//数据元素下标++

FIFO[count]=tmpdat;

//存入数据

if(count>

=6)

{

checksum=FIFO[count]+checksum;

//计算校验和

}

if(count==8)

{

package=FIFO[7]*0X100+FIFO[8];

//计算包长度

stop=TURE;

if(stop)

{

if(count==package+8)

{

checksum=checksum-FIFO[count-1];

if(checksum!

=FIFO[count]&

0xff)

result=FALSE;

//校验失败,置结果标志为0

else

result=TURE;

flag=0;

break;

}

}/////////////////////////////do的内容----------------结束////////////////////////////////

while((clk0<

=MaxTime)&

(count<

=MAX_NUMBER)&

(changeflag==0));

//由定时器以及最大接收数据来控制,保证不会在此一直循环

FifoNumber=count;

//保存接收到的数据个数

}

return(result);

bitVefPSW(void)//验证设备握手口令,成功返回1

unsignedcharcount=0;

while

(1)

if(Command(VPWD,20)&

(FifoNumber==11)&

(FIFO[9]==0x00))

return

(1);

count++;

if(count>

=2)//如果不成功,再验证一次,如果两次不成功,返回失败

{

return(0);

}

voidClear_All(void)//清空指纹库

{

delay1ms(200);

Command(DELE_all,50);

//清空指纹库

unsignedcharImgProcess(unsignedcharBUFID)//发获取图像并生成特征文件,存入BUFID中//输入参数为缓冲区号

{

if(Command(GIMG,89)&

{

if(BUFID==1)

{

if(Command(GENT1,60)&

{

return1;

}

else

return0;

elseif(BUFID==2)

if(Command(GENT2,60)&

}

else

return0;

bitSearchfinger(void)//搜索指纹(发送搜索命令、以及根据返回值确定是否存在)

{

if(Command(SEAT,60)&

(FifoNumber==15)&

(FIFO[9]==0x00))//搜索到指纹

SearchNumber=FIFO[10]*0x100+FIFO[11];

//搜索到的页码

//MatchScore=FIFO[12]*0x100+FIFO[13]可以在此计算得分,从而进行安全级别设定,本程序忽略

return1;

}

else

return0;

unsignedcharsearch(void)//搜索用户

unsignedcharSearchBuf=0,i=0;

while(i<

20)

if(ImgProcess

(1)==1)//首先读入一次指纹

SearchBuf=Searchfinger();

//进行指纹比对,如果搜索到,返回搜索到的指纹序号

if(SearchBuf==1)

{

returnSearchNumber;

else

return255;

//表示搜索到的指纹不正确

i++;

bitsavefingure(unsignedcharID)//保存指纹

unsignedchari=0;

//现在开始进行存储指纹模板的操作

for(i=0;

16;

i++)//保存指纹信息

FIFO[i]=STOR[i];

FIFO[12]=ID;

//把指纹模板存放的PAGE_ID也就是FLASH的位置

FIFO[14]=FIFO[14]+ID;

//校验和

if(Command(FIFO,70)==1)//不成功返回0//此处进行存放指纹模板的命

{return

(1);

{return(0);

}//不成功返回0

unsignedcharenroll(void)//采集两次指纹,生成1个指纹模板

unsignedchartemp=0,count=0;

while

(1)

temp=ImgProcess

(1);

//生成特征1

if(temp==1)//生成特征文件成功

{

break;

else

if(temp==0)//采集指纹没有成功

count++;

if(count>

=40)//如果采集了40次,还不成功,直接采集失败,直接退出enroll函数----返回0

return(0);

//采集第一个特征成功

buzzer=0;

delay1ms(100);

buzzer=1;

delay1ms(2000);

//延时2S开始采集下一个特征

//开始采集第二个特征

temp=ImgProcess

(2);

//生成特征2

if(temp==1)//生成特征文件2成功

if((Command(MERG,40)&

(FIFO[9]==0x00))==0)//合并不成功返回0,成功返回1

return0;

else//特征文件合并生成模板,结果存于ModelBuffer

buzzer=0;

delay1ms(100);

//响两声,表示生成一个模板成功

if(temp==1)//采集指纹没有成功

if(count>

=25)

return(0);

/***********************/

voiddelay(uintx)

uinta,b;

for(a=x;

a>

0;

a--)

for(b=10;

b>

b--);

voidwrite_com(ucharcom)//些命令,RS=0

wr=0;

P0=com;

rs=0;

lcden=0;

delay(10);

lcden=1;

voidwrite_data(uchardat)//写数据,RS=1

P0=dat;

rs=1;

voidinit()

write_com(0x38);

//显示模式设置:

16×

2显示,5×

7点阵,8位数据接口

delay(20);

write_com(0x0f);

//显示模式设置

write_com(0x06);

光标右移,字符不移

write_com(0x01);

//清屏幕指令,将以前的显示内容清除

/************************/

voidzwmm()

uinta;

write_com(0x80);

//设置第二行首字符显示的位置,为第二行,第一列

a=0;

while(table8[a]!

='

)//只要没有写到结束标志,就继续写

{//这是写字符的第一种方法,用while循环。

write_data(table8[a]);

a++;

voidinput()

uchara;

write_com(0x84);

//设置第二行首字符显示的位置,为第二行,第一列

while(table1[a]!

write_data(table1[a]);

write_com(0x80+0x40);

while(table2[a]!

write_data(table2[a]);

voidopen()

//设置第二行首字

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1