指纹考勤机的设计与实现(2)

2018-12-02 14:10

TxdByte(0x01);//数据包包头识别码

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

p++; //不知道为什么它命令中定义了一个无效字节,所以挪了两次 for (count=i-1; count!=1;count--) //Sent command String { }

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;

//清零CL0计数

temp=*p++;

TxdByte(temp);//将命令发送出去

{

count=0; clk0=0;

{

restart0:

{

do /////////////////////////////do的内容////////////////////////////////

if (RI==1)//如果接收到数据

tmpdat=SBUF;//先把接收到的数据放到tmpdat中

RI=0;

{

count=0; flag=1; goto

restart0;

//继续接受收

FIFO[0]=tmpdat;//读入第一个应答字节(0XEF),存在第“0”个元素中

if ((tmpdat==0xef)&&(start==FALSE))//这个数据为第一个传回来的数据,也就是“指令应答”的第一个字节

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; start=TURE; goto

restart0;

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

FIFO[count]=tmpdat;//读入第二个应答字节(0X01),存在第“1”个元素中

}

if((flag==2)&&(start==TURE))

{

count++; //数据元素下标++ if(count>=6)

{ } {

//计算包长度,这是帧格式规定的

} { }

stop= TURE;

FIFO[count]=tmpdat;//依次存入

checksum=FIFO[count]+checksum; //从这里才是计算校验和,这与帧格式有关

if(count==8)

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

if(stop)

if(count==package+8)

{ //校验不完全正确,因为没有比对第二个校验码 }

checksum=checksum-FIFO[count-1]; if(checksum!=FIFO[count]&0xff)

result=FALSE; //校验失败,置结果标志为0 result=TURE; else flag=0; break;

} }

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

while ((clk0<=MaxTime)&&(count<=MAX_NUMBER) && ( changeflag == 0 ));

FifoNumber=count; }

}

return (result);

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

其它的重要函数: bit VefPSW(void)

//验证设备握手口令,成功返回1,通过发送VPWD指令来进行的。通过判断FIFO中的响应帧中的确认码和响应帧字节数来知道是否成功执行。具体如下:

while (1) {

if(Command(VPWD,20) && (FifoNumber==11) && (FIFO[9]==0x00)) {

return (1) ; }

count++;

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

{

return(0); }

}

void Clear_All(void) //清空所有指纹信息,清空前首先验证和指纹模块通讯是否正常

{ }

if( VefPSW() == 1 ) //验证成功 { }

Command(DELE_all,50); //清空指纹库

unsigned char ImgProcess(unsigned char BUFID) //发获取图像并生成特征文件,存入BUFID中//输入参数为缓冲区号,1为生成特征文件1,2是生成特征文件2,这是通过发送GEN1和GEN2命令完成的。在录入指纹的时候需要进行两次采集和成模版再存储。在识别的时候只需要用这个函数采集一个特征文件去指纹库做比对。

bit Searchfinger(void)//搜索指纹(发送搜索命令、以及根据返回值确定是否存在) ,应该是默认使用特征文件1进行比对,如果比对成功,则结果放在Searchnum中。

unsigned char search(void)//先获取一次特征文件,调用上一个函数,如果比对成功则返回searchnum,如果不成功则返回255。 bit savefingure(unsigned char ID)//保存指纹

unsigned char enroll(void) //采集两次指纹,生成1个 指纹模板 void numshow(unsigned char num)//指纹号显示函数 {

strnum[0]= num/100+48; //+48是为了转换在ASCII码 百 strnum[1]= (num0)/10+48;//+48是为了转换在ASCII码 十

strnum[2]= num+48; //+48是为了转换在ASCII码 个 Display_HZ_Line(3,0,\指纹号:\ Display_HZ_Line(3,4,strnum);

}

void modecheck(void)//模式指示函数 {

if(modeflag==0)

{ } else { }

numshow(0);

red=0; green=1;

Display_HZ_Line(1,0,\ 录入模式 \green=0; red=1;

Display_HZ_Line(1,0,\ 识别模式 \

}

void shakehands(void)//握手函数,其实就是调用了若干次bit VefPSW(void) 主函数分析

void main(void) {

timer_init();//定时器初始化 uart_init();//串口初始化 Display_Init();//12864初始化 Lcd_ClrScreen();//清屏

externalint_init();//外部中断初始化

Display_HZ_Line(0,0,\ 指纹识别系统 \ shakehands();//与模块握手 {

if( modeflag == 1 )//为录入指纹模式

{

if(k2==0)//按一次按键,录入一个指纹

{

delay1ms(10); {

while(k2==0);//等待松手

if( SaveNumber<162 )//还没有超过录入上限 {

if(enroll()==1)//采集两次,生成1个指纹模板成功

if(k2==0)//如果仍为低电平,表示按键有效

while(1)//查询四个标志

{ if(savefingure(SaveNumber+1)==1)//保存也成功 { SaveNumber++;//加一次

Display_HZ_Line(2,0,\ 录入成功 \delay1ms(800);

Display_HZ_Line(2,0,\ \ numshow(SaveNumber);

}

} else { Display_HZ_Line(2,0,\ 录入失败 delay1ms(800);

Display_HZ_Line(2,0,\ }

}

}

} }

if( modeflag==0 )//为识别模式 {

searchnum=search();

if(searchnum>=1 && searchnum <= 162 ) { numshow(searchnum);//显示搜索到的指纹 buzzer=0;delay1ms(100);buzzer=1;//蜂鸣器响三声 relay=0;delay1ms(3000); relay=1;//继电器打开3秒

}

if(searchnum==255)//识别指纹失败 {

//蜂鸣器响三声 numshow(0);

buzzer=0;delay1ms(100);buzzer=1;delay1ms(100); buzzer=0;delay1ms(100);buzzer=1;delay1ms(100); buzzer=0;delay1ms(100);buzzer=1;delay1ms(100); } }

if(clearallflag==1) {

\\


指纹考勤机的设计与实现(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:易燃易爆物品的管理制度

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: