一文详解AS608指纹识别模块

描述

一. 简介

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芯片规定的通讯协议格式来发送和处理串口数据,整个模块各个功能的实现也是围绕该协议格式进行的。

指纹识别模块

控制指令有三类,指令包、数据包、结束包; 一般指令包是由单片机发送到模块上,模块接收到指令包后,返回对应的数据包;

  • 指令包主要包括:包头、芯片地址、包标识、包长度、控制参数和校验和;
  • 数据包主要包括:包头、芯片地址、包标识、包长度、数据和校验和 ;
  • 数据包与结束包的区别在于包标识,02H:数据包,且有后续包。 08H:最后一个数据包,即结束包。

四. 控制程序

以指纹密码锁为例,

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();
}

只要实现以上几个指令,就可以实现一个指纹密码锁的基本功能了。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分