持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
AS608介绍
AS608指纹识别模块是ALIENTEK推出的一款高性能的光学指纹识别模块。AS608模块采用了国内著名指纹识别芯片公司杭州晟元芯片技术有限公司(Synochip)的 AS608指纹识别芯片。芯片内置DSP运算单元,集成了指纹识别算法,能高效快速采集图像并识别指纹特征。模块配备了串口、USB通讯接口,用户无需研究复杂的图像处理及指纹识别算法,只需通过简单的串口、USB 按照通讯协议便可控制模块。本模块可应用于各种考勤机、保险箱柜、指纹门禁系统、指纹锁等场合。
测试
测试软件
首先下载压缩包:download.csdn.net/download/qq…
之后直接解压即可。
测试流程
-
将模块的 Tx、Rx 连接到 USB 转串口设备。(提示:开发板可使用板载的 CH340)
-
在计算机设备管理器找到识别的串口号,如图 所示。
-
打开"指纹测试软件SYDemo.exe,然后在上位机选择对应串口号。
-
点击“确定”,通讯成功。
-
通讯成功之后可查看硬件信息、波特率等,可以点击面板上按钮等功能操作。
下面我们点击“录入指纹”按钮。并输入 88 为录入指纹 ID。 -
点击“确定”,软件提示“请将手指平放在传感器上”。
-
按照提示将手指平放在传感器上,等待图像上传。提示:
上传时间稍微久一点。波特率越高速度越快,使用 USB 模块测试则会更快。 -
第一次录入图像成功之后,软件会提示“2.请将手指平放在传感器上”表示第
二次录入图像。 -
:当两次录入图像的指纹经过对比匹配之后,如果一致的话指纹就录入成功了,录入成功。
-
前面操作是录入了一个指纹,下面我们测试一下刷指纹(验证指纹)。首先我们点击“搜索”
-
按照提示将手指放在传感器上录入图像成功之后,系统对比录入图像与指纹库,如果对比成功,则提示“找到相同手指,FingerID=88……”
录入功能的实现
指纹录入开发流程
软件开发流程图如图所示:
指纹录入程序
void Add_FR(void)
{
u8 i=0,ensure ,processnum=0;
while(1)
{
switch (processnum)
{
case 0:
i++;
printf("please finger\n"); //请按手指
ensure=PS_GetImage(); //录入图像返回字
if(ensure==0x00)
{
ensure=PS_GenChar(CharBuffer1);//生成特征
if(ensure==0x00)
{
printf("zhengque\n");//指纹正确
i=0;
processnum=1;//跳到第二步
}
else printf("%c\n",ensure);
}
else printf("%c\n",ensure);
break;
case 1:
i++;
printf("please click on the finger\n");//再按一次手指
ensure=PS_GetImage();
if(ensure==0x00)
{
ensure=PS_GenChar(CharBuffer2);//生成特征
if(ensure==0x00)
{
printf("Fingerprint right\n");//指纹正确
i=0;
processnum=2;//跳到第三步
}else
printf("%c",ensure);
}else
printf("%c",ensure);
break;
case 2:
printf("comparing two fingerprints\n"); //对比两次指纹
ensure=PS_Match();//精确比对两枚指纹特征返回字
if(ensure==0x00)
{
printf("Two fingerprints is the same\n");//两次指纹是一样的
processnum=3;//跳到第四步
}
else
{
printf("Comeparative failure,please press fingers again\n");//对比失败,请重新按手指
printf("%c",ensure);
i=0;
processnum=0;//跳回第一步
}
delay_ms(1000);
break;
case 3:
printf("generate a fingerprint template\n");//产生一个指纹模板
ensure=PS_RegModel();
if(ensure==0x00)
{
printf("generate a fingerprint template is successful\n");//生成指纹模板成功
processnum=4;//跳到第五步
}else {processnum=0;printf("%c",ensure);}
delay_ms(1000);
break;
case 4:
printf("input the ID and press Enter to save\n");//输入ID并按“Enter”保存
printf("0=< ID <=299\n");
do //设定指纹号
{
if(anjian(GPIOC,GPIO_Pin_8)==0)
{
ID++;
}
else if(anjian(GPIOC,GPIO_Pin_9)==0)
{
ID--;
}
}
while(!(ID<300));//输入DI必须小于300
ensure=PS_StoreChar(CharBuffer2,ID);//储存模板
if(ensure==0x00)
{
printf("Add the fingerprint successfully\n");//添加指纹成功
PS_ValidTempleteNum(&ValidN);//读库指纹个数
printf("%d\n",AS608Para.PS_max-ValidN);//显示剩余指纹个数
delay_ms(1500);//延时后清除显示
printf ("\n");
return ;
}else {processnum=0; printf("%c\n",ensure);}
break;
}
delay_ms(800);
if(i==5)//超过5次没有按手指则退出
{
printf("\n");
break;
}
}
}