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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8602|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

AS608指紋模塊STM32驅(qū)動源碼等資料下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
AS608指紋模塊電路原理圖如下:




ATK-AS608 指紋識別模塊常見問題和疑問
Q1:如何通過上位機(jī)修改波特率?
A:使用USB轉(zhuǎn)串口設(shè)備連接模塊后按照下圖操作即可,數(shù)據(jù)包、安全等級也是這樣修改。

Q2:為什么不建議設(shè)置口令?
A:口令和地址一旦修改就和上位機(jī)通訊不成功,口令忘記了就無法找回了。模塊只能變成
磚頭了!
Q3:觸摸屏觸摸虛擬按鍵沒有反應(yīng)或錯位(2.8’\3.5’LCD)?
A:觸摸屏沒校準(zhǔn),需復(fù)位進(jìn)行觸摸校準(zhǔn)。


單片機(jī)源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "lcd.h"
  5. #include "key.h"
  6. #include "touch.h"         
  7. #include "malloc.h"
  8. #include "usmart.h"  
  9. #include "MMC_SD.h"   
  10. #include "ff.h"  
  11. #include "exfuns.h"   
  12. #include "fontupd.h"
  13. #include "text.h"        
  14. #include "usart2.h"
  15. #include "AS608.h"
  16. #include "timer.h"


  17. #define usart2_baund  57600//串口2波特率,根據(jù)指紋模塊波特率更改

  18. SysPara AS608Para;//指紋模塊AS608參數(shù)
  19. u16 ValidN;//模塊內(nèi)有效模板個數(shù)
  20. u8** kbd_tbl;
  21. const  u8* kbd_menu[15]={"del_fp"," : ","add_fp","1","2","3","4","5","6","7","8","9","DEL","0","Enter",};//按鍵表
  22. const  u8* kbd_delFR[15]={"BACK"," : ","del_all","1","2","3","4","5","6","7","8","9","DEL","0","Enter",};//按鍵表

  23. void Add_FR(void);        //錄指紋
  24. void Del_FR(void);        //刪除指紋
  25. void press_FR(void);//刷指紋
  26. void ShowErrMessage(u8 ensure);//顯示確認(rèn)碼錯誤信息
  27. void AS608_load_keyboard(u16 x,u16 y,u8 **kbtbl);//加載虛擬鍵盤
  28. u8  AS608_get_keynum(u16 x,u16 y);//獲取鍵盤數(shù)
  29. u16 GET_NUM(void);//獲取數(shù)值  

  30. int main(void)
  31. {                 
  32.         u8 ensure;
  33.         u8 key_num;
  34.         char *str;        

  35.   Stm32_Clock_Init(9);        //系統(tǒng)時鐘設(shè)置
  36.         delay_init(72);                          //延時初始化
  37.         uart_init(72,115200); //串口1初始化,用于支持USMART            
  38.         LCD_Init();                                                //初始化液晶
  39.         KEY_Init();                                                //按鍵初始化                                                                                                                     
  40.         usmart_dev.init(72);        //usmart初始化        
  41.          usart2_init(36,usart2_baund);        //初始化串口2,用于與指紋模塊通訊
  42.         PS_StaGPIO_Init();          //初始化FR讀狀態(tài)引腳        
  43.         tp_dev.init();                                //觸摸屏初始化
  44.          mem_init();                                                //初始化內(nèi)存池            
  45.          exfuns_init();                                //為fatfs相關(guān)變量申請內(nèi)存  
  46.          f_mount(fs[1],"1:",1); //掛載FLASH.
  47.         POINT_COLOR=RED;
  48.         while(font_init())                         //檢查字庫
  49.         {            
  50.                 LCD_ShowString(60,50,240,16,16,"Font Error!");
  51.                 delay_ms(200);                                 
  52.                 LCD_Fill(60,50,240,66,WHITE);//清除顯示
  53.                 delay_ms(200);               
  54.         }
  55.         if(!(tp_dev.touchtype&0x80))//如果是電阻屏
  56.         {
  57.                 Show_Str_Mid(0,30,"Adjust the touch screen?",16,240);
  58.                 POINT_COLOR=BLUE;
  59.                 Show_Str_Mid(0,60,"YES: KEY1   NO: KEY0",16,240);        
  60.                 while(1)
  61.                 {
  62.                         key_num=KEY_Scan(0);
  63.                         if(key_num==KEY0_PRES)
  64.                                 break;
  65.                         if(key_num==KEY1_PRES)
  66.                         {
  67.                                 LCD_Clear(WHITE);
  68.                                 TP_Adjust();           //屏幕校準(zhǔn)
  69.                                 TP_Save_Adjdata();//保存校準(zhǔn)參數(shù)
  70.                                 break;                                
  71.                         }
  72.                 }
  73.         }
  74.         /*加載指紋識別實(shí)驗(yàn)界面*/
  75.         LCD_Clear(WHITE);
  76.         POINT_COLOR=RED;
  77.         Show_Str_Mid(0,0,"AS608 Fingerprint module test",16,240);                                                
  78.         Show_Str_Mid(0,20,"Author: @ALIENTEK",16,240);                                             
  79.          POINT_COLOR=BLUE;
  80.         Show_Str_Mid(0,40,"Connect with AS608....",16,240);        
  81.         while(PS_HandShake(&AS608Addr))//與AS608模塊握手
  82.         {
  83.                 LCD_Fill(0,40,240,80,WHITE);
  84.                 Show_Str_Mid(0,40,"Cannot connect with AS608!",16,240);
  85.                 delay_ms(1000);
  86.                 LCD_Fill(0,40,240,80,WHITE);
  87.                 Show_Str_Mid(0,40,"Try to connect again....",16,240);        
  88.                 delay_ms(1000);         
  89.         }
  90.         LCD_Fill(0,40,240,320,WHITE);
  91.         Show_Str_Mid(0,40,"Connect success!",16,240);//通訊成功
  92.         str=mymalloc(30);
  93.         sprintf(str,"Baudrate:%d   Addr:%x",usart2_baund,AS608Addr);//顯示波特率
  94.         Show_Str(0,60,240,16,(u8*)str,16,0);
  95.         delay_ms(100);
  96.         ensure=PS_ValidTempleteNum(&ValidN);//讀庫指紋個數(shù)
  97.         if(ensure!=0x00)
  98.                 ShowErrMessage(ensure);//顯示確認(rèn)碼錯誤信息        
  99.         ensure=PS_ReadSysPara(&AS608Para);  //讀AS608模塊參數(shù)
  100.         if(ensure==0x00)
  101.         {
  102.                 mymemset(str,0,50);
  103.                 sprintf(str,"RemainNum:%d    Level:%d",AS608Para.PS_max-ValidN,AS608Para.PS_level);//顯示剩余指紋數(shù)量和安全等級
  104.                 Show_Str(0,80,240,16,(u8*)str,16,0);
  105.         }
  106.         else
  107.                 ShowErrMessage(ensure);        
  108.         myfree(str);
  109.         AS608_load_keyboard(0,170,(u8**)kbd_menu);//加載虛擬鍵盤
  110.         while(1)
  111.         {
  112.                 key_num=AS608_get_keynum(0,170);        
  113.                 if(key_num)
  114.                 {
  115.                         if(key_num==1)Del_FR();                //刪指紋
  116.                         if(key_num==3)Add_FR();                //錄指紋                                                                        
  117.                 }
  118.                 if(PS_Sta)         //檢測PS_Sta狀態(tài),如果有手指按下
  119.                 {
  120.                         press_FR();//刷指紋                        
  121.                 }                                 
  122.         }         
  123. }


  124. //加載按鍵界面(尺寸x,y為240*150)
  125. //x,y:界面起始坐標(biāo)(240*320分辨率的時候,x必須為0)
  126. void AS608_load_keyboard(u16 x,u16 y,u8 **kbtbl)
  127. {
  128.         u16 i;
  129.         POINT_COLOR=RED;
  130.         kbd_tbl=kbtbl;
  131.         LCD_Fill(x,y,x+240,y+150,WHITE);
  132.         LCD_DrawRectangle(x,y,x+240,y+150);                                                   
  133.         LCD_DrawRectangle(x+80,y,x+160,y+150);         
  134.         LCD_DrawRectangle(x,y+30,x+240,y+60);
  135.         LCD_DrawRectangle(x,y+90,x+240,y+120);
  136.         POINT_COLOR=BLUE;
  137.         for(i=0;i<15;i++)
  138.         {
  139.                 if(i==1)//按鍵表第2個‘:’不需要中間顯示
  140.                         Show_Str(x+(i%3)*80+2,y+7+30*(i/3),80,30,(u8*)kbd_tbl[i],16,0);        
  141.                 else
  142.                         Show_Str_Mid(x+(i%3)*80,y+7+30*(i/3),(u8*)kbd_tbl[i],16,80);
  143.         }
  144. }
  145. //按鍵狀態(tài)設(shè)置
  146. //x,y:鍵盤坐標(biāo)
  147. //key:鍵值(0~14)
  148. //sta:狀態(tài),0,松開;1,按下;
  149. void AS608_key_staset(u16 x,u16 y,u8 keyx,u8 sta)
  150. {                  
  151.         u16 i=keyx/3,j=keyx%3;
  152.         if(keyx>16)return;
  153.         if(sta &&keyx!=1)//按鍵表第2個‘:’不需要清除
  154.                 LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,GREEN);
  155.         else if(keyx!=1)
  156.                 LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,WHITE);
  157.         if(keyx!=1)//不是‘:’
  158.                 Show_Str_Mid(x+j*80,y+7+30*i,(u8*)kbd_tbl[keyx],16,80);        
  159. }
  160. //得到觸摸屏的輸入
  161. //x,y:鍵盤坐標(biāo)
  162. //返回值:(1~15,對應(yīng)按鍵表)
  163. u8 AS608_get_keynum(u16 x,u16 y)
  164. {
  165.         u16 i,j;
  166.         static u8 key_x=0;//0,沒有任何按鍵按下
  167.         u8 key=0;
  168.         tp_dev.scan(0);                  
  169.         if(tp_dev.sta&TP_PRES_DOWN)//觸摸屏被按下
  170.         {        
  171.                 for(i=0;i<5;i++)
  172.                 {
  173.                         for(j=0;j<3;j++)
  174.                         {
  175.                                  if(tp_dev.x[0]<(x+j*80+80)&&tp_dev.x[0]>(x+j*80)&&tp_dev.y[0]<(y+i*30+30)&&tp_dev.y[0]>(y+i*30))
  176.                                 {        
  177.                                         key=i*3+j+1;         
  178.                                         break;                           
  179.                                 }
  180.                         }
  181.                         if(key)
  182.                         {           
  183.                                 if(key_x==key)key=0;
  184.                                 else
  185.                                 {
  186.                                         AS608_key_staset(x,y,key_x-1,0);
  187.                                         key_x=key;
  188.                                         AS608_key_staset(x,y,key_x-1,1);
  189.                                 }
  190.                                 break;
  191.                         }
  192.           }  
  193.         }else if(key_x)
  194.         {
  195.                 AS608_key_staset(x,y,key_x-1,0);
  196.                 key_x=0;
  197.         }
  198.         return key;
  199. }
  200. //獲取鍵盤數(shù)值
  201. u16 GET_NUM(void)
  202. {
  203.         u8  key_num=0;
  204.         u16 num=0;
  205.         while(1)
  206.         {
  207.                 key_num=AS608_get_keynum(0,170);        
  208.                 if(key_num)
  209.                 {
  210.                         if(key_num==1)return 0xFFFF;//‘返回’鍵
  211.                         if(key_num==3)return 0xFF00;//               
  212.                         if(key_num>3&&key_num<13&&num<99)//‘1-9’鍵(限制輸入3位數(shù))
  213.                                 num =num*10+key_num-3;               
  214.                         if(key_num==13)num =num/10;//‘Del’鍵                        
  215.                         if(key_num==14&&num<99)num =num*10;//‘0’鍵
  216.                         if(key_num==15)return num;  //‘Enter’鍵
  217.                 }
  218.                 LCD_ShowNum(80+15,170+7,num,6,16);
  219.         }        
  220. }
  221. //顯示確認(rèn)碼錯誤信息
  222. void ShowErrMessage(u8 ensure)
  223. {
  224.         LCD_Fill(0,120,lcddev.width,160,WHITE);
  225.         Show_Str_Mid(0,120,(u8*)EnsureMessage(ensure),16,240);
  226. }
  227. //錄指紋
  228. void Add_FR(void)
  229. {
  230.         u8 i=0,ensure ,processnum=0;
  231.         u16 ID;
  232.         while(1)
  233.         {
  234.                 switch (processnum)
  235.                 {
  236.                         case 0:
  237.                                 i++;
  238.                                 LCD_Fill(0,100,lcddev.width,160,WHITE);
  239.                                 Show_Str_Mid(0,100,"Pleas touch finger!",16,240);//請按手指
  240.                                 ensure=PS_GetImage();
  241.                                 if(ensure==0x00)
  242.                                 {
  243.                                         ensure=PS_GenChar(CharBuffer1);//生成特征
  244.                                         if(ensure==0x00)
  245.                                         {
  246.                                                 LCD_Fill(0,120,lcddev.width,160,WHITE);
  247.                                                 Show_Str_Mid(0,120,"Fingerprint correct",16,240);//指紋正確
  248.                                                 i=0;
  249.                                                 processnum=1;//跳到第二步                                                
  250.                                         }else ShowErrMessage(ensure);                                
  251.                                 }else ShowErrMessage(ensure);                                                
  252.                                 break;
  253.                         
  254.                         case 1:
  255.                                 i++;
  256.                                 LCD_Fill(0,100,lcddev.width,160,WHITE);
  257.                                 Show_Str_Mid(0,100,"Pleas touch finger again!",16,240);//再按一次手指
  258.                                 ensure=PS_GetImage();
  259.                                 if(ensure==0x00)
  260.                                 {
  261.                                         ensure=PS_GenChar(CharBuffer2);//生成特征                        
  262.                                         if(ensure==0x00)
  263.                                         {
  264.                                                 LCD_Fill(0,120,lcddev.width,160,WHITE);
  265.                                                 Show_Str_Mid(0,120,"Fingerprint correct",16,240);//指紋正確
  266.                                                 i=0;
  267.                                                 processnum=2;//跳到第三步
  268.                                         }else ShowErrMessage(ensure);        
  269.                                 }else ShowErrMessage(ensure);               
  270.                                 break;

  271.                         case 2:
  272.                                 LCD_Fill(0,100,lcddev.width,160,WHITE);
  273.                                 Show_Str_Mid(0,100,"Compare twice fingerprint",16,240);//對比兩次指紋
  274.                                 ensure=PS_Match();
  275.                                 if(ensure==0x00)
  276.                                 {
  277.                                         LCD_Fill(0,120,lcddev.width,160,WHITE);
  278.                                         Show_Str_Mid(0,120,"Twice fingerprint are same",16,240);//兩次指紋是一樣的
  279.                                         processnum=3;//跳到第四步
  280.                                 }
  281.                                 else
  282.                                 {
  283.                                         LCD_Fill(0,100,lcddev.width,160,WHITE);
  284.                                         Show_Str_Mid(0,100,"Compare fail,pleas touch again!",16,240);//對比失敗,請重新按手指
  285.                                         ShowErrMessage(ensure);
  286.                                         i=0;
  287.                                         processnum=0;//跳回第一步               
  288.                                 }
  289.                                 delay_ms(1000);
  290.                                 break;

  291.                         case 3:
  292.                                 LCD_Fill(0,100,lcddev.width,160,WHITE);
  293.                                 Show_Str_Mid(0,100,"Generate fingerprint template",16,240);//產(chǎn)生一個指紋模板
  294.                                 ensure=PS_RegModel();
  295.                                 if(ensure==0x00)
  296.                                 {
  297.                                         LCD_Fill(0,120,lcddev.width,160,WHITE);
  298.                                         Show_Str_Mid(0,120,"Generate fingerprint success",16,240);//生成指紋模板成功
  299.                                         processnum=4;//跳到第五步
  300.                                 }else {processnum=0;ShowErrMessage(ensure);}
  301.                                 delay_ms(1000);
  302.                                 break;
  303.                                 
  304.                         case 4:        
  305.                                 LCD_Fill(0,100,lcddev.width,160,WHITE);
  306.                                 Show_Str_Mid(0,100,"Intput ID and save with ENTER!",16,240);//輸入ID并按“Enter”保存
  307.                                 Show_Str_Mid(0,120,"0=< ID <=299",16,240);        
  308.                                 do
  309.                                         ID=GET_NUM();
  310.                                 while(!(ID<300));//輸入DI必須小于300
  311.                                 ensure=PS_StoreChar(CharBuffer2,ID);//儲存模板
  312.                                 if(ensure==0x00)
  313.                                 {                        
  314.                                         LCD_Fill(0,100,lcddev.width,160,WHITE);                                       
  315.                                         Show_Str_Mid(0,120,"Add fingerprint success!!!",16,240);//添加指紋成功
  316.                                         PS_ValidTempleteNum(&ValidN);//讀庫指紋個數(shù)
  317.                                         LCD_ShowNum(80,80,AS608Para.PS_max-ValidN,3,16);//顯示剩余指紋個數(shù)
  318.                                         delay_ms(1500);//延時后清除顯示        
  319.                                         LCD_Fill(0,100,240,160,WHITE);
  320.                                         return ;
  321.                                 }else {processnum=0;ShowErrMessage(ensure);}                                       
  322.                                 break;                                
  323.                 }
  324.                 delay_ms(800);
  325.                 if(i==5)//超過5次沒有按手指則退出
  326.                 {
  327.                         LCD_Fill(0,100,lcddev.width,160,WHITE);
  328.                         break;        
  329.                 }                                
  330.         }
  331. }

  332. //刷指紋
  333. void press_FR(void)
  334. {
  335.         SearchResult seach;
  336.         u8 ensure;
  337.         char *str;
  338.         ensure=PS_GetImage();
  339.         if(ensure==0x00)//獲取圖像成功
  340.         {        
  341.                 ensure=PS_GenChar(CharBuffer1);
  342.                 if(ensure==0x00) //生成特征成功
  343.                 {               
  344.                         ensure=PS_HighSpeedSearch(CharBuffer1,0,300,&seach);
  345.                         if(ensure==0x00)//搜索成功
  346.                         {                                
  347.                                 LCD_Fill(0,100,lcddev.width,160,WHITE);
  348.                                 Show_Str_Mid(0,100,"Search fingerprint success",16,240);//搜索指紋成功                                
  349.                                 str=mymalloc(50);
  350.                                 sprintf(str,"Match ID:%d  Match score:%d",seach.pageID,seach.mathscore);//顯示匹配指紋的ID和分?jǐn)?shù)
  351.                                 Show_Str_Mid(0,140,(u8*)str,16,240);
  352.                                 myfree(str);
  353.                         }
  354.                         else
  355.                                 ShowErrMessage(ensure);                                       
  356.           }
  357.                 else
  358.                         ShowErrMessage(ensure);
  359.          delay_ms(1000);//延時后清除顯示
  360.          LCD_Fill(0,100,lcddev.width,160,WHITE);
  361.         }
  362.                
  363. }

  364. //刪除指紋
  365. void Del_FR(void)
  366. {
  367.         u8  ensure;
  368.         u16 num;
  369.         LCD_Fill(0,100,lcddev.width,160,WHITE);
  370.         Show_Str_Mid(0,100,"Delete fingerprint",16,240);//顯示刪除指紋
  371.         Show_Str_Mid(0,120,"Input ID and touch Enter!",16,240);//顯示輸入ID并按下“Enter”
  372.         Show_Str_Mid(0,140,"0=< ID <=299",16,240);
  373.         delay_ms(50);
  374.         AS608_load_keyboard(0,170,(u8**)kbd_delFR);
  375.         num=GET_NUM();//獲取返回的數(shù)值
  376.         if(num==0xFFFF)
  377.                 goto MENU ; //返回主頁面
  378.         else if(num==0xFF00)
  379.                 ensure=PS_Empty();//清空指紋庫
  380.         else
  381. ……………………

  382. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
2.0 AS608指紋模塊贈送配套資料.rar (13.99 MB, 下載次數(shù): 146)


評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:405112 發(fā)表于 2018-10-18 23:30 | 只看該作者
資料不錯哦
回復(fù)

使用道具 舉報

板凳
ID:423361 發(fā)表于 2018-11-9 00:02 | 只看該作者
作業(yè)是這個關(guān)于指紋的,看下資料學(xué)習(xí)下
回復(fù)

使用道具 舉報

地板
ID:719701 發(fā)表于 2020-5-6 23:07 | 只看該作者
請問除了單片機(jī)其他的電路是啥
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av在线播放免费 | 成人av一区二区三区 | 免费亚洲一区二区 | h肉视频| 黄色大片网站 | 亚洲精品一区二区网址 | 嫩草网| 国产成人免费视频网站视频社区 | 久久九九免费 | 涩爱av一区二区三区 | 日本精品一区二区三区在线观看视频 | a级在线免费观看 | 亚洲欧美国产精品一区二区 | 精品久久久久久久人人人人传媒 | 午夜精品| 国产综合第一页 | 精品一区二区三区在线观看 | 成人性视频在线播放 | 亚洲国产精品一区二区第一页 | 国产97视频在线观看 | 免费一级黄 | 91麻豆精品国产91久久久久久久久 | 国内自拍视频在线观看 | 久久国产精品免费一区二区三区 | 午夜视频免费在线 | 91精品久久久久 | 日韩美香港a一级毛片免费 国产综合av | 毛色毛片免费看 | 国产99热 | 亚洲人成人一区二区在线观看 | 国产精品一区二区在线播放 | 国产精品久久久久久久久久久久冷 | 久草网址 | 69av在线视频 | av网站在线免费观看 | 亚洲视频欧美视频 | 欧美一级片在线观看 | 天堂国产 | 精品国产欧美一区二区三区成人 | av免费看片 | 成人免费在线 |