一. 简介
AS608 指纹识别模块主要是指采用了杭州晟元芯片技术有限公司(Synochip)的 AS608 指纹识别芯片 而做成的指纹模块,模块厂商只是基于该芯片设计外围电路,集成一个可供2次开发的指纹模块; 所以,只要是基于AS608芯片的指纹模块,其控制电路及控制协议几乎是一样的,只是厂家和性能不同而已。
二. 硬件原理图介绍
1.硬件接口
AS608模块采用8pin的控制接口,供电电压为3.3V(不能使用5V供电),通信总线有两种,分别为串口通讯(TX、RX)和USB通讯(D+、D-); 采用串口通讯,编程相对简单,也是比较常用的一种,但是兼容性不好; 采用USB通讯,编程相对较难,但USB作为最常用的总线接口,有很好的兼容性。
2.控制电路图
以51单片机为例,AS608模块touch引脚接到单片机的普通IO上,当有指纹按下,该引脚触发一个高电平信号; TX、RX引脚分别接到单片机的P30、P31串口引脚上。
注:AS608只能用+3.3V供电,不可用+5V供电。
三. 通讯协议格式
单片机要实现对AS608指纹模块的控制,就需要根据AS608芯片规定的通讯协议格式来发送和处理串口数据,整个模块各个功能的实现也是围绕该协议格式进行的。
控制指令有三类,指令包、数据包、结束包; 一般指令包是由单片机发送到模块上,模块接收到指令包后,返回对应的数据包;
四. 控制程序
以指纹密码锁为例,
1.常用控制指令
一般要实现一个指纹密码锁的功能,只需用到以下指令:
录入图像、生成特征、搜索指纹、自动验证指纹、自动注册模板、删除指纹。
2.录入指纹
首先要是实现开锁,需要在系统里面录入指纹信息,需要:
录入图像->生成特征->快速查找图像->自动注册模板
(1)录入图像指令
(2)生成特征指令
存入指纹图像,存入单片机给定的缓冲区号BufferID中;
(3)快速查找图像
生成图像后要验证是否有在Buffer里面;
(4)自动注册模板
最后将Buffer里面的图像存入Flash里面
(5)录入指纹程序
void addfinger() //录入指纹
{
uchar IDa1,IDa2,IDa3; //指纹图像存放地址
LcmClearTXT();
PutStr(1,2,"请按手指");
SFG_getimage();
while(querenma!=0) //指令接收不成功,重新发送
SFG_getimage();
SFG_genchar(buffer1ID);
while(querenma!=0) //指令接收不成功,重新发送
SFG_genchar(buffer1ID);
UART_Init();
SFG_fastsearch(buffer1ID);
while(querenma==1) //指令接收不成功,重新发送
SFG_fastsearch(buffer1ID);
SBUF = querenma;
while(TI==0);
TI=0;
if(querenma==0)
{
LcmClearTXT();
PutStr(1,1,"该指纹已存储");
PutStr(3,0," 按任意键继续");
while(Keycan()==0);
}
else if(querenma==9)
{
LcmClearTXT();
PutStr(1,1,"请再次按手指");
SFG_enroll();
while(querenma==2)
SFG_enroll();
LcmClearTXT();
if(querenma==0)
{
IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10;
PutStr(1,1,"指纹采集成功");
PutStr(2,1,"编号为:");
WriteCommand(0x8D);
WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3);
}
else if(querenma!=0)
{
PutStr(1,1,"指纹采集失败");
PutStr(2,1,"请重新操作");
}
PutStr(3,0," 按任意键继续");
while(Keycan()==0);
}
LcmClearTXT();
}
2.自动验证指纹
录入指纹后,就可以匹配本人的指纹实现开锁,只需要发送自动验证指纹指令,返回的确认码为0x00,即为匹配成功,不为0x00即匹配失败;
(1)录入指纹指令
(2)自动验证指纹程序
void shuazhiwen() //验证用户的指纹
{
uchar IDs1,IDs2,IDs3;
LcmClearTXT();
PutStr(1,1,"请按手指开锁");
SFG_identify();
while(querenma==2)
SFG_identify();
if(querenma==0)
{
LcmClearTXT();
PutStr(1,2,"门已打开");
IDs1=PageID/100;
IDs2=PageID/10%10;
IDs3=PageID%10;
PutStr(2,1,"编号为:");
WriteCommand(0x8D); //指定第三行显示位置
WriteData(0x30+IDs1);
WriteData(0x30+IDs2);
WriteData(0x30+IDs3);
jidianqi=0;
delay(2500);
jidianqi=1;
}
else if(querenma==9)
{
LcmClearTXT();
PutStr(1,1,"没搜索到指纹");
PutStr(2,1,"请重新按手指");
}
else
{
LcmClearTXT();
PutStr(1,1,"接收包出错");
}
delay(2000);
// while(Keycan()==0);
}
3.删除指纹
管理员如果需要删除系统中录入的指定指纹信息,需要写入删除所要删除指纹的ID号,然后发送删除指纹指令即可删除相应的指纹。
(1)删除指纹指令
(2)删除指纹程序
void deletfinger()
{
uchar i,j=0;
LcmClearTXT();
PutStr(1,0,"输入删去的指纹号");
for(i=0;i<5;i++)dz[i]=0;
Key=Keycan();
while(Key!=queren) //按键录入用户需要删除的指纹号
{
Key=Keycan();
KeyDeal(Key);
delay(30); //按键有抖动@@@
if(Key==0)K=10;
if((K>=0)&&(K<=9))
{
dz[j]=K;
if(j<3)
{
WriteCommand(0x88+j); //指定第三行显示位置
WriteData(0x30+dz[j]);
}
++j;
if(j==4)
j=3; //@@#yinhuang
} //显示LCD12864并行显示
if(K==34) //按了删除键
{
if(j==0)
{
WriteCommand(0x88); //指定第三行显示位置
WriteData(0x20);
}
else
{
--j;
WriteCommand(0x88+j); //指定第三行显示位置
WriteData(0x20);
}
}
}
if(j>=2)
PageID=dz[2]+dz[1]*10+dz[0]*100;
if(j==1)
PageID=dz[1]+dz[0]*10;
if(j==0)
PageID=dz[0];
SFG_deletchar(PageID);
if(querenma==0)
{
LcmClearTXT();
PutStr(1,1,"删去指纹号成功!");
}
else
{
LcmClearTXT();
PutStr(1,0,"删去指纹号失败!");
}
PutStr(2,0," 按任意键继续");
while(Keycan()==0);
LcmClearTXT();
}
只要实现以上几个指令,就可以实现一个指纹密码锁的基本功能了。
全部0条评论
快来发表一下你的评论吧 !