女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于CW32的AS608指紋模塊的應用

jf_qE49KoVBr8 ? 來源:CW32生態社區 ? 2023-08-28 11:30 ? 次閱讀

一、簡介

AS608是一款集成了指紋圖像采集和指紋比對算法的指紋識別模塊。它采用了高質量的光學傳感器,能夠實時采集人體指紋圖像,并通過指紋比對算法進行指紋識別。AS608具有高精度、快速、可靠的特點,廣泛應用于各種指紋識別場景,如門禁系統、安防系統、考勤系統等。

本實驗用到了CW32-48F大學計劃板、0.96寸OLED顯示屏模塊、AS608指紋模塊及Keil5開發環境。

二、AS608指紋模塊使用說明

(1)引腳說明(該模塊共8個引腳,只使用前6個引腳)

da28dd24-4552-11ee-a2ef-92fbcf53809c.png

(2)通訊方法

通過給AS608串口發送特定的指令調用模塊內置的算法進行相應的操作。

常用的指令有:

da47356c-4552-11ee-a2ef-92fbcf53809c.png

da6b01c2-4552-11ee-a2ef-92fbcf53809c.png

指令格式有三種:命令包格式、數據包格式結束包格式。

da9979f8-4552-11ee-a2ef-92fbcf53809c.png?

以命令包格式為例,包頭是2個字節的數據,固定為0xEF01;芯片地址4個字節,默認是0xFFFFFFFF;包識別用來區分指令類型,如命令包固定為0x01,數據包格式固定為0x02;包長度指這一條指令有多少個重要的數據,包長度=包長度至校驗和(指令、參數或數據)的總字節數,包含校驗和,但不包含包長度本身的字節數;指令就是需要AS608執行的操作,參數和具體的指令有關,不同的指令,參數的長度和數值都有所不同;校驗和是為了確保串口通訊正確。

模塊接收到命令后會產生應答,將有關命令執行情況與結果上報給上位機,上位機只有在收到模塊的應答包后才能確認模塊收包情況與指令執行情況。模塊應答包中包含一個參數:確認碼。確認碼表示執行指令完畢的情況。

dac88f72-4552-11ee-a2ef-92fbcf53809c.png

確認碼定義:

00H:表示指令執行完畢或 OK;

01H:表示數據包接收錯誤;

02H:表示傳感器上沒有手指;

03H:表示錄入指紋圖像失敗;

...

(3)指紋錄入實現流程

錄入指紋圖像

當手指放在光學指紋窗口時,模塊自動拍下指紋圖像。

生成特征

記錄圖像中的指紋特征,并將該特征存入緩存區。

再次錄入圖像

當手指放在光學指紋窗口時,再次拍下指紋圖像。

再次生成特征

記錄二次圖像中的指紋特征,并將該特征存入另一緩存區。

精確比對兩枚指紋特征

對錄入的兩個指紋特征進行比對。

合并特征(生成模板)

比對成功無誤后,將兩個特征合并成一個指紋模板。

儲存模板

將生成的模板存儲到到AS608內部Flash,存儲時需指定存儲地址,即指紋ID。

上面以指紋錄入功能為例,簡要介紹了功能實現的基本流程,更多詳情請參考AS60x指紋識別SOC用戶手冊和ATK-AS608指紋識別模塊用戶手冊。

三、核心代碼

main.c:
#include  "main.h"
#include  "Uart.h"
#include  "LED.h"
#include  "AS608.h"
#include  "OLED.h"
#include  "Delay.h"
#include  "BTIM.h"
#include  "Key.h"


uint8_t flag_add=0;          //指紋錄制標識位
uint8_t flag_passport=0;     //密碼輸入標識位
uint8_t flag_key_function=0; //按鍵功能標識位
const uint16_t passpot=123;  //管理員密碼


/*-----------------------刷指紋-----------------------*/
void AS608_MatchFingerPrints(void)
{
  if(Is_Press==1)       //有手指按下
  {
    SearchResult seach;
    uint8_t result;
    result=PS_GetImage();
    if(result==0x00)//獲取圖像成功 
    {  
      result=PS_GenChar(CharBuffer1);
      OLED_Clear();
      if(result==0x00) //生成特征成功
      {  
        result=PS_HighSpeedSearch(CharBuffer1,0,6,&seach);  //自定義檢索ID為0~6的指紋庫,最大范圍為0~300
        if(result==0x00)//搜索成功
        {      
          OLED_ShowString(2,1,"      ID=      ");  //指紋識別成功后自定義顯示內容
          OLED_ShowNum(2,10,seach.pageID,1);
          OLED_ShowString(3,1,"    Welcome!    ");
          /*
                    指紋識別成功后的自定義功能
                                                  */
        }
        else 
        {
          OLED_ShowString(1,1,"    Refuse!    ");  //指紋識別失敗,遭到系統拒絕
        }        
      }
      else
      {
        OLED_ShowString(1,1,"    Error!     ");  //指紋識別過程出現錯誤,3秒后重啟識別功能可再次識別
        OLED_ShowString(2,1,"      3       ");
        Delay_s(1);
        OLED_ShowString(2,1,"      2       ");
        Delay_s(1);
        OLED_ShowString(2,1,"      1       ");
      }
      Delay_s(1);
    }
    Display_Meum(); 
    flag_passport=0;
  }  
}


/*-----------------------錄指紋-----------------------*/
void AS608_AddFingerPrints(void)
{
  uint8_t result,steps=0;
  flag_add=1;
  OLED_Clear();
  OLED_ShowString(1,1,"AddFingerPrints");
  while(1)  //在指紋錄制環節中循環
  {
    switch (steps)
    {
      case 0:          //錄制環節0
        flag_key_function=1;
        OLED_ShowString(2,1,"Choose ID:");  //指紋ID選擇界面
        OLED_ShowNum(2,11,Finger_ID,1);
        OLED_ShowString(3,1,"               ");
        OLED_ShowString(4,1,"back");
        OLED_ShowString(4,8,"+");
        OLED_ShowString(4,13,"ok");
        switch(Key_Scan())
        {
          case 1:         //退出指紋錄制,返回主界面,
            Display_Meum();
            return ;
          case 2:      //選擇錄入的指紋對應的ID
            if(Finger_ID!=6)  Finger_ID++;
            else              Finger_ID=1;
            break;
          case 3:              //進入下一個環節
            steps=1;
            break;
        }
      break;
      
      case 1:          //錄制環節1
        if(Key_Scan()!=0){Display_Meum();return ;};  //按任意鍵退出
        OLED_ShowString(2,1,"               ");
        OLED_ShowString(3,1,"Please press...");     //操作提示
        OLED_ShowString(4,1,"               ");
        result=PS_GetImage();        //首次獲取指紋圖像
        if(result==0x00) 
        {
          result=PS_GenChar(CharBuffer1);//生成特征1
          if(result==0x00)
          {
            OLED_ShowString(3,1," OK! Get it... ");
            Delay_s(1);
            OLED_ShowString(2,1,"               ");
            steps=2;        //進入下一個環節            
          }        
        }        
      break;
      
      case 2:          //錄制環節2
        if(Key_Scan()!=0){Display_Meum();return ;};  //按任意鍵退出
        OLED_ShowString(3,1,"Press Again...");      //操作提示
        result=PS_GetImage();         //再次獲取指紋圖像
        if(result==0x00) 
        {
          result=PS_GenChar(CharBuffer2);//生成特征2
          if(result==0x00)
          {
            OLED_ShowString(3,1," OK! Get it... ");
            Delay_s(1);
            steps=3;        //進入下一個環節  
          }    
        }    
        break;


      case 3:          //錄制環節3
        result=PS_Match();    //特征1與特征2進行匹配
        if(result==0x00)      //匹配成功
        {
          steps=4;          //進入下一個環節
          OLED_ShowString(3,1,"  Matching...  ");
        }
        else                  //匹配失敗
        {
          OLED_ShowString(2,1,"     Fail!     ");
          OLED_ShowString(3,1,"       3       ");
          Delay_s(1);
          OLED_ShowString(3,1,"       2       ");
          Delay_s(1);
          OLED_ShowString(3,1,"       1       ");
          steps=0;          //回到錄制環節0  
        }
        Delay_s(1);
        break;


      case 4:          //錄制環節4
        result=PS_RegModel();  //合并特征,生成指紋模板
        if(result==0x00)   
        {
          steps=5;          //進入下一個環節
          OLED_ShowString(3,1,"      OK!      ");
        }
        else               
        {
          OLED_ShowString(2,1,"     Fail!     ");
          OLED_ShowString(3,1,"       3       ");
          Delay_s(1);
          OLED_ShowString(3,1,"       2       ");
          Delay_s(1);
          OLED_ShowString(3,1,"       1       ");
          steps=0;
        }
        Delay_s(1);
        break;
        
      case 5:  
        result=PS_StoreChar(CharBuffer2,Finger_ID);   //儲存指紋
        if(result==0x00) 
        {          
          flag_key_function=0;
          OLED_ShowString(3,1,"AddSuccessfully");
          Delay_s(1);
          Display_Meum();        //回到主頁面
          return ;
        }          
        break;        
    }    
  }
}


/*-----------------------主頁面-----------------------*/
void Display_Meum()   
{
  OLED_Clear();
  flag_add = 0;
  flag_key_function = 0;
  if(PS_ValidTempleteNum(&validFinger_num)==0xff)  //讀取指紋模塊當下信息參數
    OLED_ShowString(2,1,"  ERROR!!!  ");     //提示讀取失敗,原因可能是線沒接好或者模塊損壞
  else 
  {
    OLED_ShowString(1,1,"----Welcome----");  
    OLED_ShowString(2,1,"ValidNum:");
    OLED_ShowNum(2,10,validFinger_num,1);
    OLED_ShowString(4,1,"add   delet   ");
    if(delet_num==0) OLED_ShowString(4,15,"+");
    else OLED_ShowNum(4,15,delet_num,1);
  }
}


/*-----------------------密碼輸入-----------------------*/
void PassportInput()    
{
  static uint8_t i=0;
  flag_key_function=1;
  OLED_ShowString(1,1,"No access!");      //密碼輸入提示 
  OLED_ShowString(2,1,"Input Passport:");
  OLED_ShowNum(3,6,passport_num1,1);
  OLED_ShowNum(3,8,passport_num2,1);
  OLED_ShowNum(3,10,passport_num3,1);
  OLED_ShowString(4,1,"+");
  if(i==0)  OLED_ShowString(4,6,"^");
  OLED_ShowString(4,12,"back");
  switch(Key_Scan())
  {
    case 1://加
      if(i==0) {passport_num1++;if(passport_num1==10) passport_num1=0;}
      if(i==1) {passport_num2++;if(passport_num2==10) passport_num2=0;}
      if(i==2) {passport_num3++;if(passport_num3==10) passport_num3=0;}
      if((passport_num1*100+passport_num2*10+passport_num3)==passpot)
      {
        OLED_ShowNum(3,10,passport_num3,1);
        Delay_ms(500);
        OLED_Clear();
        OLED_ShowString(2,1,"    Access!    ");
        access=1;       //打開指紋錄制/刪除權限
        PA07_SETLOW();  //LED全部點亮,指示權限全開
        PA08_SETLOW();
        PC13_SETLOW();
        Delay_s(2);
        Display_Meum();
        flag_passport=0;  
        passport_num1=0;
        passport_num2=0;
        passport_num3=0;
        i=0;
      }
      break;
    case 2://  切換數字
      if(++i==3) i=0;
      if(i==1)      OLED_ShowString(4,6,"  ^  "); 
      else if(i==2) OLED_ShowString(4,6,"    ^"); 
      else if(i==0) OLED_ShowString(4,6,"^    "); 
      break;
    case 3://退出
      passport_num1=0;
      passport_num2=0;
      passport_num3=0;
      Display_Meum();
      flag_passport=0;
      i=0;
      break ;  
  }
}


/*------------------指紋錄制/刪除權限管理-------------------*/
void Permission_Management(void)
{
  if(Key_Scan()==20)   //若返回鍵值為20,則打開密碼輸入標識
  {
    OLED_Clear();
    flag_passport=1; 
  }
  if(flag_passport==1)//若密碼標識打開,則進入密碼輸入界面
    PassportInput();
}


/*--------------------------主函數--------------------------*/
int main()
{
  LED_Init();             //3個LED指示燈
  OLED_Init();           //OLED屏幕顯示
  BTIM_Init();           //啟動定時器配合應答包接收
  UART2_Init();        //與AS608進行串口通信,波特率為57600
  Key_GPIO_Init();       //三個按鍵
  AS608_WAK_GPIO_Init(); //WAK引腳,感應手指按下
  Display_Meum();        //屏幕主界面
  while(1)
  {  
    AS608_MatchFingerPrints();  //指紋識別
    Permission_Management();    //權限管理
  }
}





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2562

    文章

    52526

    瀏覽量

    763595
  • 指紋識別
    +關注

    關注

    43

    文章

    1746

    瀏覽量

    102989
  • 串口通訊
    +關注

    關注

    1

    文章

    264

    瀏覽量

    25384
  • 上位機
    +關注

    關注

    27

    文章

    960

    瀏覽量

    55575
  • OLED顯示
    +關注

    關注

    1

    文章

    57

    瀏覽量

    17225

原文標題:【CW32優秀項目展示】基于CW32的AS608指紋模塊的應用

文章出處:【微信號:武漢芯源半導體,微信公眾號:武漢芯源半導體】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    祝賀武漢芯源半導體CW32生態社區榮獲立創開源硬件平臺"優質合作社區"榮譽!

    5月24日,武漢芯源半導體有限公司CW32生態社區在第三屆立創開源星火會上榮獲立創開源硬件平臺"優質合作社區"榮譽。這一榮譽不僅是對CW32生態社區致力于國產MCU技術發展
    的頭像 發表于 05-27 10:39 ?326次閱讀
    祝賀武漢芯源半導體<b class='flag-5'>CW32</b>生態社區榮獲立創開源硬件平臺&amp;quot;優質合作社區&amp;quot;榮譽!

    回收三星S21指紋排線 適用于三星系列指紋模組

    深圳帝歐電子回收三星S21指紋排線,收購適用于三星S21指紋模組。回收三星指紋排線,收購三星指紋排線,全國高價回收三星指紋排線,專業求購
    發表于 05-19 10:05

    CW32模塊使用】1.8寸彩色觸摸屏

    一、模塊來源 模塊實物展示: ? 資料下載鏈接:https://pan.baidu.com/s/1n_vp38V7ij88PUGpbJPd7Q 資料提取碼:8888 二、規格參數 工作電壓
    的頭像 發表于 05-11 16:14 ?365次閱讀
    【<b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用】1.8寸彩色觸摸屏

    CW32模塊使用】SG90舵機

    我們的目標是將例程移植至CW32F030C8T6開發板上【能夠控制舵機旋轉的功能】。首先要獲取資料,查看數據手冊應如何實現讀取數據,再移植至我們的工程。
    的頭像 發表于 03-29 17:22 ?417次閱讀
    【<b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用】SG90舵機

    代碼+案例+生態:武漢芯源半導體CW32嵌入式開發實戰正式出版

    尊敬的各位電子工程師、嵌入式開發愛好者們:大家好!今天,我們懷著無比激動與自豪的心情,向大家宣布一個重大喜訊——武漢芯源半導體的單片機CW32正式出書啦!《基于ARMCortex-M0+的CW32
    的頭像 發表于 03-03 15:15 ?537次閱讀
    代碼+案例+生態:武漢芯源半導體<b class='flag-5'>CW32</b>嵌入式開發實戰正式出版

    代碼+案例+生態:武漢芯源半導體CW32嵌入式開發實戰正式出版

    尊敬的各位電子工程師、嵌入式開發愛好者們: 大家好!今天,我們懷著無比激動與自豪的心情,向大家宣布一個重大喜訊——武漢芯源半導體的單片機CW32正式出書啦!《基于ARM Cortex-M0+
    發表于 03-03 15:14

    CW32模塊使用 紅外接收模塊

    一、模塊來源 模塊實物展示: ? 資料鏈接:https://pan.baidu.com/s/1dEWVMIFDWb7k1NcsRy5hHA 資料提取碼:uucv 二、規格參數 1.CR2025環保
    的頭像 發表于 01-23 13:16 ?405次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用 紅外接收<b class='flag-5'>模塊</b>

    CW32模塊使用 EC-01G NBIOT+GPS模塊

    一、模塊來源 模塊實物展示: 資料鏈接:https://docs.ai-thinker.com/nb-iot 二、規格參數 工作電壓:3.0V-3.6V 工作電流:IMAX = 170mA 模塊尺寸
    的頭像 發表于 01-23 13:12 ?410次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用 EC-01G NBIOT+GPS<b class='flag-5'>模塊</b>

    CW32模塊使用 紅外解碼編碼模塊

    紅外解碼編碼模塊采用MCU+紅外發射頭+紅外接收頭,引出MCU的串口連接其他需要紅外控制的設備,可作為紅外無線數據通信、數據傳輸等功能。具備NEC格式紅外編碼發射功能,可控制99%的NEC紅外
    的頭像 發表于 01-23 12:56 ?571次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用 紅外解碼編碼<b class='flag-5'>模塊</b>

    CW32模塊使用 BMP180氣壓傳感器

    一、模塊來源 模塊實物展示: ? 資料下載鏈接: https://pan.baidu.com/s/1miTIphm 二、規格參數 工作電壓:1.8~3.6V 工作電流:0.1~1000uA 溫度精度
    的頭像 發表于 12-05 12:06 ?589次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用 BMP180氣壓傳感器

    CW32模塊使用 MS5611氣壓傳感器

    一、模塊來源 模塊實物展示: ? 資料下載鏈接: https://pan.baidu.com/s/1QOrpiggCE6mBpqabJXUufg 提取碼:c2pp 二 、規格參數 工作電壓:1.8
    的頭像 發表于 12-05 12:01 ?505次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用 MS5611氣壓傳感器

    基于CW32模塊的火焰傳感器設計

    我們的目標是將例程移植至CW32F030C8T6開發板上【判斷當前檢測范圍是否有火光的功能】。首先要獲取資料,查看數據手冊應如何實現讀取數據,再移植至我們的工程。
    的頭像 發表于 11-26 17:18 ?879次閱讀
    基于<b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>的火焰傳感器設計

    武漢芯源半導體CW32芯片重慶地區線下技術交流會成功舉辦

    2024年10月19日,武漢芯源半導體授權CW32生態社區主辦的“CW32芯片-重慶地區技術交流會”在重慶市科技工作者眾創之家成功舉辦。此次交流會匯聚重慶地區的嵌入式開發工程師和電子信息類企業代表,共同探討CW32芯片在儀器儀表
    的頭像 發表于 10-24 10:55 ?895次閱讀

    CW32模塊使用 指紋識別傳感器

    光學指紋識別傳感器采用了國內著名指紋識別芯片公司杭州晟元芯片技術有限公司(Synochip) 的 AS608 指紋識別芯片。芯片內置 DSP 運算單元,集成了
    的頭像 發表于 09-18 15:15 ?660次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用 <b class='flag-5'>指紋</b>識別傳感器

    武漢芯源半導體與長春理工大學“CW32嵌入式創新實驗室”揭牌

    2024年6月20日上午,在長春理工大學順利舉辦了“CW32嵌入式創新實驗室”揭牌儀式!武漢芯源半導體與長春理工大學電子信息工程學院的院系領導、師生代表齊聚一堂,共同見證了這一重要時刻,并著重探討了CW32大學計劃在長春理工大學的開展方向與具體內容。
    的頭像 發表于 06-25 14:06 ?946次閱讀