一. 簡介
AS608 指紋識別模塊主要是指采用了杭州晟元芯片技術(shù)有限公司(Synochip)的 AS608 指紋識別芯片 而做成的指紋模塊,模塊廠商只是基于該芯片設(shè)計外圍電路,集成一個可供2次開發(fā)的指紋模塊; 所以,只要是基于AS608芯片的指紋模塊,其控制電路及控制協(xié)議幾乎是一樣的,只是廠家和性能不同而已。
二. 硬件原理圖介紹
1.硬件接口
AS608模塊采用8pin的控制接口,供電電壓為3.3V(不能使用5V供電),通信總線有兩種,分別為串口通訊(TX、RX)和USB通訊(D+、D-); 采用串口通訊,編程相對簡單,也是比較常用的一種,但是兼容性不好; 采用USB通訊,編程相對較難,但USB作為最常用的總線接口,有很好的兼容性。

2.控制電路圖
以51單片機為例,AS608模塊touch引腳接到單片機的普通IO上,當(dāng)有指紋按下,該引腳觸發(fā)一個高電平信號; TX、RX引腳分別接到單片機的P30、P31串口引腳上。
注:AS608只能用+3.3V供電,不可用+5V供電。

三. 通訊協(xié)議格式
單片機要實現(xiàn)對AS608指紋模塊的控制,就需要根據(jù)AS608芯片規(guī)定的通訊協(xié)議格式來發(fā)送和處理串口數(shù)據(jù),整個模塊各個功能的實現(xiàn)也是圍繞該協(xié)議格式進(jìn)行的。

控制指令有三類,指令包、數(shù)據(jù)包、結(jié)束包; 一般指令包是由單片機發(fā)送到模塊上,模塊接收到指令包后,返回對應(yīng)的數(shù)據(jù)包;
- 指令包主要包括:包頭、芯片地址、包標(biāo)識、包長度、控制參數(shù)和校驗和;
 - 數(shù)據(jù)包主要包括:包頭、芯片地址、包標(biāo)識、包長度、數(shù)據(jù)和校驗和 ;
 - 數(shù)據(jù)包與結(jié)束包的區(qū)別在于包標(biāo)識,02H:數(shù)據(jù)包,且有后續(xù)包。 08H:最后一個數(shù)據(jù)包,即結(jié)束包。
 
四. 控制程序
以指紋密碼鎖為例,
1.常用控制指令
一般要實現(xiàn)一個指紋密碼鎖的功能,只需用到以下指令:
錄入圖像、生成特征、搜索指紋、自動驗證指紋、自動注冊模板、刪除指紋。
2.錄入指紋
首先要是實現(xiàn)開鎖,需要在系統(tǒng)里面錄入指紋信息,需要:
錄入圖像->生成特征->快速查找圖像->自動注冊模板
(1)錄入圖像指令

(2)生成特征指令
存入指紋圖像,存入單片機給定的緩沖區(qū)號BufferID中;

(3)快速查找圖像
生成圖像后要驗證是否有在Buffer里面;

(4)自動注冊模板
最后將Buffer里面的圖像存入Flash里面


(5)錄入指紋程序
void addfinger()    //錄入指紋
{
  uchar IDa1,IDa2,IDa3;     //指紋圖像存放地址
  LcmClearTXT();
  PutStr(1,2,"請按手指");    
  SFG_getimage();
  while(querenma!=0)       //指令接收不成功,重新發(fā)送
  SFG_getimage();
  SFG_genchar(buffer1ID);
  while(querenma!=0)       //指令接收不成功,重新發(fā)送
  SFG_genchar(buffer1ID);
  UART_Init();
  SFG_fastsearch(buffer1ID);
  while(querenma==1)      //指令接收不成功,重新發(fā)送
  SFG_fastsearch(buffer1ID);
  SBUF = querenma;
  while(TI==0);
  TI=0;
  if(querenma==0)
  {
    LcmClearTXT();
    PutStr(1,1,"該指紋已存儲");
    PutStr(3,0,"  按任意鍵繼續(xù)"); 
      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,"  按任意鍵繼續(xù)"); 
      while(Keycan()==0);
       }
  LcmClearTXT();
}
2.自動驗證指紋
錄入指紋后,就可以匹配本人的指紋實現(xiàn)開鎖,只需要發(fā)送自動驗證指紋指令,返回的確認(rèn)碼為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.刪除指紋
管理員如果需要刪除系統(tǒng)中錄入的指定指紋信息,需要寫入刪除所要刪除指紋的ID號,然后發(fā)送刪除指紋指令即可刪除相應(yīng)的指紋。
(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,"  按任意鍵繼續(xù)"); 
  while(Keycan()==0);
  LcmClearTXT();
}
只要實現(xiàn)以上幾個指令,就可以實現(xiàn)一個指紋密碼鎖的基本功能了。
- 
                                原理圖
                                +關(guān)注
關(guān)注
1337文章
6419瀏覽量
243886 - 
                                單片機
                                +關(guān)注
關(guān)注
6072文章
45273瀏覽量
661623 - 
                                接口
                                +關(guān)注
關(guān)注
33文章
9350瀏覽量
155808 - 
                                usb
                                +關(guān)注
關(guān)注
60文章
8345瀏覽量
280541 - 
                                指紋識別模塊
                                +關(guān)注
關(guān)注
0文章
6瀏覽量
1442 
發(fā)布評論請先 登錄
AS608指紋考勤系統(tǒng)上位機工作統(tǒng)計
怎樣去開發(fā)一種AS608指紋模塊
求一種指紋識別方案
基于STC89C52單片機的指紋識別設(shè)計資料分享
怎樣去設(shè)計一種基于stm32VE的AS608指紋解鎖模塊呢
如何去實現(xiàn)基于AS608指紋+STM32串口通信的指紋錄入設(shè)計呢
ATK-AS608指紋識別模塊用戶手冊資料免費下載
    
ATK-AS608指紋識別模塊測試實驗的程序和工程文件免費下載
基于51單片機AS608指紋自動識別電路設(shè)計(畢業(yè)設(shè)計)
    
ATK-AS608 指紋識別模塊常見問題和疑問
    
          
        
        
一文詳解AS608指紋識別模塊
                
 
    
    
    
           
            
            
                
            
評論