久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16192|回復: 8
收起左側

AS608指紋模塊的單片機源碼與資料

  [復制鏈接]
ID:378428 發表于 2018-7-24 12:57 | 顯示全部樓層 |閱讀模式
附件里都有,感興趣可以自己看
0.png

1.1 概述
JM-101 指紋模塊為集成了光路和指紋處理部分的一體化指紋處理模塊,具有體積小、功耗低、接口簡單的特點,可靠性高、識別速度快、干濕手指適應性好,指紋搜索速度快。指紋圖像讀取時,對干濕手指都有靈敏的反應和判斷,獲得最佳的成像質量,適用人群廣泛。也可定制自學習適應功能,根據使用者的習慣、氣候等的變化自動調整參數,做到更好的匹配。具備自學習功能,指紋識別過程中,提取新的指紋特征值識別成功后將該特征值融合到之前的指紋特征中,實際使用過程中越用越好用。
JM-101 模塊還具備感應手指功能,當手指按壓到指紋采集面時,模塊 Touch 腳輸出高電平。
JM-101 模塊通訊接口為 USB 和 UART 兩種通信接口, 本模塊作為從設備,由主設備發送相關命令對其進行控制

0.png

Uart主機例程單片機源程序如下:
  1. #include "Prtype.h"
  2. #include "Uartport.h"
  3. #include "Protocol.h"


  4. /***************************************************************************************************
  5. ** Subroutine  : FunHandshakeModule
  6. ** Function    : 注冊指紋例程
  7. ** Author      : yf
  8. ** Input       : UINT8 nTime  --   注冊時需要按幾次手指
  9. **               UINT16 wID   --   指紋ID號   
  10. ** Output      : 成功:CMD_OK  失敗:CMD_ERR,超時:CMD_TIMEOUT  
  11. ** Description :   
  12. ** Date        : 2016/10/26
  13. ** ModifyRecord:
  14. ***************************************************************************************************/
  15. /*
  16. 1.主機->從機:發送采圖命令采指紋命令
  17. 2.從機->主機:返回采集指紋結果。
  18. 3.如果沒有采集到指紋循環1.2步驟直到采集到指紋 或超時
  19. 4.提取特征
  20. 5.重復1到4,如果要求注冊3次需要重復5操作
  21. 6.合成模板
  22. 8.保存指紋
  23. */
  24. UINT8 ExampleErollFp(UINT8 nTime,UINT16 wID)
  25. {
  26.     UINT8 cRet, ERR, nErrTime, n;
  27.     UINT8 Buf[128];
  28.     UINT16 lenPkg;

  29. //0.先握手一下,看模塊是否工作正常
  30.     cRet = FunHandshakeModule(1);
  31.     if (cRet != CMD_OK)
  32.     {
  33.             //模塊不正常,再次嘗試一下
  34.          cRet = FunHandshakeModule(1);
  35.         if (cRet != CMD_OK)
  36.         {
  37.                 //模塊不正常
  38.             return  RT_OVERTIME;   
  39.         }
  40.     }  
  41.    
  42.     n = 0;   
  43.     while(n < nTime)
  44.     {
  45.         //1.采指紋          指令代碼 29H
  46.         nErrTime = 0;
  47.         do
  48.         {
  49.             SY_memset(Buf, 0, 128);
  50.             lenPkg = 0;
  51.             cRet=CommSingleInstruction(MASK_INS, PS_GetEnrollImage, NULL,&lenPkg, Buf,&ERR,500);        
  52.                 if (cRet==CMD_OK&&ERR==0)//采集到指紋
  53.                 {
  54.                         break;
  55.                 }               
  56.                 else if (cRet==CMD_TIMEOUT)
  57.                 {
  58.                         return CMD_TIMEOUT;
  59.                 }       
  60.                 else //CMD_SUM_ERR
  61.                 {
  62.                        
  63.                 }
  64.             //超時判斷
  65.             if (0)//超時退出
  66.             {
  67.                 return CMD_TIMEOUT;       
  68.             }                          
  69.         }while (1);
  70.         //1.提取特征          指令代碼 02H
  71.         Buf[0]= n+1;
  72.         lenPkg=1;
  73.         cRet=CommSingleInstruction(MASK_INS, PS_GenChar, Buf,&lenPkg, Buf,&ERR,1000);      
  74.         if (cRet==CMD_OK)
  75.             {           
  76.             if (ERR==0)    //取特征成功
  77.             {       
  78.             }
  79.             else  if (ERR==1)    //表示收包有錯
  80.             {       
  81.                 continue;
  82.             }
  83.             else  if (ERR==0x06)    //表示指紋圖像太亂而生不成特征
  84.             {       
  85.                 continue;
  86.             }
  87.             else  if (ERR==0x07)    //表示指紋圖像正常,但特征點太少而生不成特征
  88.             {       
  89.                 continue;
  90.             }
  91.             else  if (ERR==0x28)    //表示當前指紋模板與之前模板之間有關聯
  92.             {       
  93.             }      
  94.             else  if (ERR==0x15)    //表示圖像緩沖區內沒有有效原始圖而生不成圖像
  95.             {       
  96.                 continue;
  97.             }        
  98.             }
  99.             else //提取特征失敗
  100.             {
  101.                     return  CMD_STEP_ERR;
  102.             }           
  103.             n++;
  104.     }  
  105.     //合并模板 指令代碼 05H
  106.     lenPkg=0;
  107.     cRet=CommSingleInstruction(MASK_INS, PS_RegModel, NULL,&lenPkg, Buf,&ERR,50);
  108.     if (cRet==CMD_OK&&ERR==0) //合并模板成功
  109.         {               
  110.         }
  111.         else //合并模板失敗
  112.         {
  113.                 return  CMD_STEP_ERR;
  114.         }
  115.          //存儲模板 指令代碼 06H
  116.         Buf[0]= 1; //默認為1
  117.     Buf[1]= (wID>>8);
  118.     Buf[2]= (wID&0xff);
  119.     lenPkg=3;
  120.     cRet=CommSingleInstruction(MASK_INS,0x06, Buf,&lenPkg, Buf,&ERR,100);
  121.     if (cRet==CMD_OK&&ERR==0) //注冊成功
  122.         {               
  123.         return CMD_OK;
  124.         }
  125.         else //注冊失敗
  126.         {
  127.                 return  CMD_STEP_ERR;
  128.         }   
  129. }




  130. /***************************************************************************************************
  131. ** Subroutine  : ExampleSeachFp
  132. ** Function    : 注冊指紋例程
  133. ** Author      : yf
  134. ** Input       : UINT8 nTime  --   注冊時需要按幾次手指
  135. **               UINT16 wID   --   指紋ID號   
  136. ** Output      : 成功:CMD_OK  失敗:CMD_ERR,超時:CMD_TIMEOUT  
  137. ** Description :   
  138. ** Date        : 2016/10/26
  139. ** ModifyRecord:
  140. ***************************************************************************************************/
  141. /*
  142. 1.主機->從機:發送采圖命令采指紋命令
  143. 2.從機->主機:返回采集指紋結果。
  144. 3.如果沒有采集到指紋循環1.2步驟直到采集到指紋 或超時
  145. 4.提取特征
  146. 5.搜索
  147. */
  148. UINT8 ExampleSeachFp(UINT16 *wID)
  149. {
  150.     UINT8 cRet,ERR,nErrTime,n;
  151.     UINT8 Buf[128];
  152.     UINT16 lenPkg,sSoucre,FpId;
  153.     //1.采指紋          指令代碼 29H
  154.     nErrTime=0;
  155.     do
  156.     {
  157.         SY_memset(Buf,0,128);
  158.         lenPkg=0;
  159.         cRet=CommSingleInstruction(MASK_INS,0x29, NULL,&lenPkg, Buf,&ERR,500);
  160.    
  161.             if (cRet==CMD_OK&&ERR==0)//采集到指紋
  162.             {
  163.                     break;
  164.             }               
  165.             else if (cRet==CMD_TIMEOUT)
  166.             {
  167.                     return CMD_TIMEOUT;
  168.             }       
  169.             else //CMD_SUM_ERR
  170.             {
  171.                    
  172.             }
  173.         //超時判斷
  174.         if (0)//超時退出
  175.         {
  176.             return CMD_TIMEOUT;       
  177.         }                          
  178.     }while (1);
  179.     //1.提取特征          指令代碼 02H
  180.     Buf[0]= 1;
  181.     lenPkg=1;
  182.     cRet=CommSingleInstruction(MASK_INS,0x02, Buf,&lenPkg, Buf,&ERR,1000);      
  183.     if (cRet==CMD_OK&&ERR==0) //取特征成功
  184.         {               
  185.         }
  186.         else //提取特征失敗
  187.         {
  188.                 return  CMD_STEP_ERR;
  189.         }           

  190.     //搜索 指令代碼 1BH
  191.     Buf[0]= 1;
  192.     Buf[1]= 0;
  193.     Buf[2]= 0;
  194.     Buf[3]= (1024>>8);
  195.     Buf[4]= (1024&0xff);
  196.     lenPkg=5;
  197.     cRet=CommSingleInstruction(MASK_INS,0x1B, Buf,&lenPkg, Buf,&ERR,2000);
  198.     if (cRet==CMD_OK&&ERR==0) //搜索成功
  199.         {
  200.         if (lenPkg==16)
  201.         {
  202.                 sSoucre=(Buf[12]<<8)+Buf[13];
  203.                 FpId=(Buf[10]<<8)+Buf[11];
  204.                 *wID=FpId;
  205.                 return  CMD_OK;
  206.         }                    
  207.         return CMD_LOGIC_ERR ;  
  208.         }
  209.         else //合并模板失敗
  210.         {
  211.                 return  CMD_STEP_ERR;
  212.         }

  213. }

  214. /***************************************************************************************************
  215. ** Subroutine  : FptEx_SaveChar
  216. ** Function    : 傳感器獲取指紋并生成特征上傳給上位機
  217. ** Author      : Comon
  218. ** Input       : UINT8 nTime  --   注冊時需要按幾次手指
  219. **               UINT16 wID   --   指紋ID號   
  220. ** Output      : 成功:CMD_OK  失敗:CMD_ERR,超時:CMD_TIMEOUT  
  221. ** Description :   
  222. ** Date        : 2016/11/9
  223. ** ModifyRecord:
  224. ***************************************************************************************************/
  225. /*
  226. 1.主機->從機:發送采圖命令采指紋命令
  227. 2.從機->主機:返回采集指紋結果。
  228. 3.如果沒有采集到指紋循環1.2步驟直到采集到指紋 或超時
  229. 4.提取特征
  230. 5.搜索
  231. */
  232. UINT8 FptEx_SaveChar()
  233. {
  234.     UINT8 cRet, cRerr;
  235.     UINT8 nOverTime, n;
  236.     UINT8 Buf[128];
  237.     UINT16 nInBufLen = 0;
  238.     UINT16 i;
  239. //    UINT16 sSoucre, FpId;
  240.    
  241.     memset(Buf, 0, sizeof(Buf));
  242.     nOverTime = 500;     //設定范圍如何確定
  243.     while(1)
  244.     {
  245.         cRet = CommSingleInstruction(MASK_INS, PS_GetImage, NULL, &nInBufLen, Buf, &cRerr, nOverTime);
  246.         if(cRet == CMD_TIMEOUT)
  247.             return cRet;
  248.         else if((cRet != CMD_OK) || (cRerr != 0))
  249.             continue;
  250.         
  251.         Buf[0] = 1;
  252.         nInBufLen = 1;   
  253.         cRet = CommSingleInstruction(MASK_INS, PS_GenChar, Buf, &nInBufLen, Buf, &cRerr, nOverTime);
  254.         if(cRet == CMD_TIMEOUT)
  255.             return cRet;
  256.         else if((cRet != CMD_OK) || (cRerr != 0))
  257.             continue;
  258.         else
  259.             break;          
  260.     }   

  261.     do{
  262.         Buf[0] = 1;
  263.         nInBufLen = 1;
  264.         cRet = CommSingleInstruction(MASK_INS, PS_UpChar, Buf, &nInBufLen, Buf, &cRerr, nOverTime);
  265.         if(cRet == CMD_TIMEOUT)
  266.             return cRet;
  267.         else if((cRet != CMD_OK) || (cRerr != 0))
  268.             continue;
  269.         else
  270.             break;   
  271.     }while(1);
  272.     //1.order如何定義;2.數據分包大小;3.發包數據總長度;4.
  273. //    for(i = 0; i < tLen/padLen; i++)
  274. //    {
  275. //        CommUpDataInstruction(MASK_DAT, MASK_DAT, Buf, &padLen, Buf, &cRerr, nOverTime);
  276. //           
  277. //    }   
  278. //    CommUpDataInstruction(MASK_DAT_LAST, MASK_DAT_LAST, Buf, &(tLen % padLen), );
  279.    
  280.    
  281. //接收后續數據包?
  282. }   

  283. UINT8 FptEx_AutoEnroll()
  284. {
  285.     UINT8 cRet, cRerr;
  286.     UINT8 Buf[128];
  287.     UINT16 nBufLen = 0;
  288.     UINT16 n = 0, nLevel = 10;
  289.     UINT16 nOutTimeMS = 500;
  290.     //指令合法性,是否握手?
  291.     cRet = FunHandshakeModule(1);
  292.     if(cRet != CMD_OK)
  293.         return CMD_ERR;       
  294.    
  295.     while(n < nLevel)
  296.     {
  297.         n++;
  298.             cRet = CommSingleInstruction(MASK_INS, PS_GetEnrollImage, Buf, &nBufLen, Buf, &cRerr, nOutTimeMS);
  299.             if(cRet == CMD_TIMEOUT)
  300.             return cRet;
  301.         else if((cRet != CMD_OK) || (cRerr != 0))
  302.             continue;
  303.         
  304.         Buf[0] = n;
  305.         nBufLen = 1;
  306.         cRet = CommSingleInstruction(MASK_INS, PS_GenChar, Buf, &nBufLen, Buf, &cRerr, nOutTimeMS);
  307.         if(cRet == CMD_TIMEOUT)
  308.             return cRet;
  309.         else if((cRet != CMD_OK) || (cRerr != 0))
  310.             continue;
  311.       
  312.        Buf[0] = n;  //BuffID 取值規則,范圍
  313.        Buf[1] = n & 0xff;       //PageID取值規則,范圍
  314.        Buf[2] = (n>>8) & 0xff;
  315.        nBufLen = 3;
  316.        cRet = CommSingleInstruction(MASK_INS, PS_StoreChar, Buf, &nBufLen, Buf, &cRerr, nOutTimeMS);
  317.        if(cRet == CMD_TIMEOUT)
  318.        {
  319.                    return cRet;
  320.        }      
  321.        else if((cRet != CMD_OK) || (cRerr != 0))
  322.             continue;            
  323.     }
  324.    
  325.     cRet = CommSingleInstruction(MASK_INS, PS_RegModel, Buf, &nBufLen, Buf, &cRerr, nOutTimeMS);
  326.     if((cRet != CMD_OK) || (cRet != 0))
  327.         return cRet;
  328.         
  329.     //指紋重復檢測成功???GetEnroll指令?
  330.     cRet = CommSingleInstruction(MASK_INS, PS_GetEnrollImage, Buf, &nBufLen, Buf, &cRerr, nOutTimeMS);
  331.     if((cRet != CMD_OK) || (cRerr != 0))
  332. ……………………

  333. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
模塊資料及例程.zip (2.33 MB, 下載次數: 250)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:390243 發表于 2018-9-5 10:31 | 顯示全部樓層
終于找到了,非常感謝呀。
回復

使用道具 舉報

ID:413080 發表于 2019-2-18 01:09 來自觸屏版 | 顯示全部樓層
能提供一下完整的51代碼嗎?謝謝郵箱1337173140@qq.com
回復

使用道具 舉報

ID:360887 發表于 2019-3-11 23:59 | 顯示全部樓層
學習了,謝謝!
回復

使用道具 舉報

ID:657254 發表于 2019-12-6 08:47 | 顯示全部樓層
請問    cRet = FunHandshakeModule(1);  這個握手函數具體是怎么實現握手呀?
回復

使用道具 舉報

ID:299054 發表于 2019-12-6 10:47 | 顯示全部樓層
謝謝分享!
回復

使用道具 舉報

ID:636603 發表于 2019-12-26 08:00 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:460337 發表于 2019-12-26 13:59 | 顯示全部樓層

謝謝分享
回復

使用道具 舉報

ID:452950 發表于 2020-2-17 11:18 | 顯示全部樓層
請問這個JM101是屬于AS608指紋模塊的嗎,是只支持JM101手冊里的八條指令還是支持AS60X通訊手冊里的所有三十多條指令呀
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年人视频在线免费观看 | 亚洲日本一区二区三区四区 | 国内自拍视频在线观看 | 2022国产精品 | 成人午夜免费在线视频 | 日本三级在线网站 | 国产一区在线看 | 久久精品国产清自在天天线 | 免费视频一区二区三区在线观看 | 精品国产精品一区二区夜夜嗨 | 一区二区免费在线视频 | 美人の美乳で授乳プレイ | 一区二区久久精品 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 中文字幕国产在线 | 91久久爽久久爽爽久久片 | 欧美一级www片免费观看 | 日韩www| 国产成人免费视频网站高清观看视频 | 一区二区三区小视频 | 欧美成人一区二区三区 | 日日操夜夜操天天操 | 国产成人99久久亚洲综合精品 | 久久久久久综合 | 亚洲九色 | 亚洲电影中文字幕 | 亚洲激精日韩激精欧美精品 | 国产精品中文字幕在线 | 午夜爱爱网 | 青青草网 | 一区二区三区免费 | 亚洲日本激情 | 久久国产精品一区二区三区 | 日韩成人影院 | 亚洲一区在线日韩在线深爱 | 精品视频一区二区 | 国产日韩精品在线 | 一级黄色毛片子 | 男人的天堂在线视频 | 欧美涩涩网| 欧美久久精品一级黑人c片 91免费在线视频 |