指纹识别模块录入程序Word格式.docx
- 文档编号:22672661
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:50
- 大小:28.07KB
指纹识别模块录入程序Word格式.docx
《指纹识别模块录入程序Word格式.docx》由会员分享,可在线阅读,更多相关《指纹识别模块录入程序Word格式.docx(50页珍藏版)》请在冰豆网上搜索。
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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指纹识别 模块 录入 程序