AS608指紋模塊電路原理圖如下:
0.png (99.49 KB, 下載次數(shù): 48)
下載附件
2018-7-9 02:26 上傳
0.png (81.53 KB, 下載次數(shù): 36)
下載附件
2018-7-9 02:36 上傳
0.png (16.77 KB, 下載次數(shù): 39)
下載附件
2018-7-9 02:37 上傳
0.png (143.4 KB, 下載次數(shù): 40)
下載附件
2018-7-9 02:37 上傳
ATK-AS608 指紋識別模塊常見問題和疑問
Q1:如何通過上位機(jī)修改波特率?
A:使用USB轉(zhuǎn)串口設(shè)備連接模塊后按照下圖操作即可,數(shù)據(jù)包、安全等級也是這樣修改。
0.png (114.25 KB, 下載次數(shù): 31)
下載附件
2018-7-9 02:27 上傳
Q2:為什么不建議設(shè)置口令?
A:口令和地址一旦修改就和上位機(jī)通訊不成功,口令忘記了就無法找回了。模塊只能變成
磚頭了!
Q3:觸摸屏觸摸虛擬按鍵沒有反應(yīng)或錯位(2.8’\3.5’LCD)?
A:觸摸屏沒校準(zhǔn),需復(fù)位進(jìn)行觸摸校準(zhǔn)。
0.png (154.77 KB, 下載次數(shù): 39)
下載附件
2018-7-9 02:28 上傳
單片機(jī)源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "lcd.h"
- #include "key.h"
- #include "touch.h"
- #include "malloc.h"
- #include "usmart.h"
- #include "MMC_SD.h"
- #include "ff.h"
- #include "exfuns.h"
- #include "fontupd.h"
- #include "text.h"
- #include "usart2.h"
- #include "AS608.h"
- #include "timer.h"
- #define usart2_baund 57600//串口2波特率,根據(jù)指紋模塊波特率更改
- SysPara AS608Para;//指紋模塊AS608參數(shù)
- u16 ValidN;//模塊內(nèi)有效模板個數(shù)
- u8** kbd_tbl;
- const u8* kbd_menu[15]={"del_fp"," : ","add_fp","1","2","3","4","5","6","7","8","9","DEL","0","Enter",};//按鍵表
- const u8* kbd_delFR[15]={"BACK"," : ","del_all","1","2","3","4","5","6","7","8","9","DEL","0","Enter",};//按鍵表
- void Add_FR(void); //錄指紋
- void Del_FR(void); //刪除指紋
- void press_FR(void);//刷指紋
- void ShowErrMessage(u8 ensure);//顯示確認(rèn)碼錯誤信息
- void AS608_load_keyboard(u16 x,u16 y,u8 **kbtbl);//加載虛擬鍵盤
- u8 AS608_get_keynum(u16 x,u16 y);//獲取鍵盤數(shù)
- u16 GET_NUM(void);//獲取數(shù)值
- int main(void)
- {
- u8 ensure;
- u8 key_num;
- char *str;
- Stm32_Clock_Init(9); //系統(tǒng)時鐘設(shè)置
- delay_init(72); //延時初始化
- uart_init(72,115200); //串口1初始化,用于支持USMART
- LCD_Init(); //初始化液晶
- KEY_Init(); //按鍵初始化
- usmart_dev.init(72); //usmart初始化
- usart2_init(36,usart2_baund); //初始化串口2,用于與指紋模塊通訊
- PS_StaGPIO_Init(); //初始化FR讀狀態(tài)引腳
- tp_dev.init(); //觸摸屏初始化
- mem_init(); //初始化內(nèi)存池
- exfuns_init(); //為fatfs相關(guān)變量申請內(nèi)存
- f_mount(fs[1],"1:",1); //掛載FLASH.
- POINT_COLOR=RED;
- while(font_init()) //檢查字庫
- {
- LCD_ShowString(60,50,240,16,16,"Font Error!");
- delay_ms(200);
- LCD_Fill(60,50,240,66,WHITE);//清除顯示
- delay_ms(200);
- }
- if(!(tp_dev.touchtype&0x80))//如果是電阻屏
- {
- Show_Str_Mid(0,30,"Adjust the touch screen?",16,240);
- POINT_COLOR=BLUE;
- Show_Str_Mid(0,60,"YES: KEY1 NO: KEY0",16,240);
- while(1)
- {
- key_num=KEY_Scan(0);
- if(key_num==KEY0_PRES)
- break;
- if(key_num==KEY1_PRES)
- {
- LCD_Clear(WHITE);
- TP_Adjust(); //屏幕校準(zhǔn)
- TP_Save_Adjdata();//保存校準(zhǔn)參數(shù)
- break;
- }
- }
- }
- /*加載指紋識別實(shí)驗(yàn)界面*/
- LCD_Clear(WHITE);
- POINT_COLOR=RED;
- Show_Str_Mid(0,0,"AS608 Fingerprint module test",16,240);
- Show_Str_Mid(0,20,"Author: @ALIENTEK",16,240);
- POINT_COLOR=BLUE;
- Show_Str_Mid(0,40,"Connect with AS608....",16,240);
- while(PS_HandShake(&AS608Addr))//與AS608模塊握手
- {
- LCD_Fill(0,40,240,80,WHITE);
- Show_Str_Mid(0,40,"Cannot connect with AS608!",16,240);
- delay_ms(1000);
- LCD_Fill(0,40,240,80,WHITE);
- Show_Str_Mid(0,40,"Try to connect again....",16,240);
- delay_ms(1000);
- }
- LCD_Fill(0,40,240,320,WHITE);
- Show_Str_Mid(0,40,"Connect success!",16,240);//通訊成功
- str=mymalloc(30);
- sprintf(str,"Baudrate:%d Addr:%x",usart2_baund,AS608Addr);//顯示波特率
- Show_Str(0,60,240,16,(u8*)str,16,0);
- delay_ms(100);
- ensure=PS_ValidTempleteNum(&ValidN);//讀庫指紋個數(shù)
- if(ensure!=0x00)
- ShowErrMessage(ensure);//顯示確認(rèn)碼錯誤信息
- ensure=PS_ReadSysPara(&AS608Para); //讀AS608模塊參數(shù)
- if(ensure==0x00)
- {
- mymemset(str,0,50);
- sprintf(str,"RemainNum:%d Level:%d",AS608Para.PS_max-ValidN,AS608Para.PS_level);//顯示剩余指紋數(shù)量和安全等級
- Show_Str(0,80,240,16,(u8*)str,16,0);
- }
- else
- ShowErrMessage(ensure);
- myfree(str);
- AS608_load_keyboard(0,170,(u8**)kbd_menu);//加載虛擬鍵盤
- while(1)
- {
- key_num=AS608_get_keynum(0,170);
- if(key_num)
- {
- if(key_num==1)Del_FR(); //刪指紋
- if(key_num==3)Add_FR(); //錄指紋
- }
- if(PS_Sta) //檢測PS_Sta狀態(tài),如果有手指按下
- {
- press_FR();//刷指紋
- }
- }
- }
- //加載按鍵界面(尺寸x,y為240*150)
- //x,y:界面起始坐標(biāo)(240*320分辨率的時候,x必須為0)
- void AS608_load_keyboard(u16 x,u16 y,u8 **kbtbl)
- {
- u16 i;
- POINT_COLOR=RED;
- kbd_tbl=kbtbl;
- LCD_Fill(x,y,x+240,y+150,WHITE);
- LCD_DrawRectangle(x,y,x+240,y+150);
- LCD_DrawRectangle(x+80,y,x+160,y+150);
- LCD_DrawRectangle(x,y+30,x+240,y+60);
- LCD_DrawRectangle(x,y+90,x+240,y+120);
- POINT_COLOR=BLUE;
- for(i=0;i<15;i++)
- {
- if(i==1)//按鍵表第2個‘:’不需要中間顯示
- Show_Str(x+(i%3)*80+2,y+7+30*(i/3),80,30,(u8*)kbd_tbl[i],16,0);
- else
- Show_Str_Mid(x+(i%3)*80,y+7+30*(i/3),(u8*)kbd_tbl[i],16,80);
- }
- }
- //按鍵狀態(tài)設(shè)置
- //x,y:鍵盤坐標(biāo)
- //key:鍵值(0~14)
- //sta:狀態(tài),0,松開;1,按下;
- void AS608_key_staset(u16 x,u16 y,u8 keyx,u8 sta)
- {
- u16 i=keyx/3,j=keyx%3;
- if(keyx>16)return;
- if(sta &&keyx!=1)//按鍵表第2個‘:’不需要清除
- LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,GREEN);
- else if(keyx!=1)
- LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,WHITE);
- if(keyx!=1)//不是‘:’
- Show_Str_Mid(x+j*80,y+7+30*i,(u8*)kbd_tbl[keyx],16,80);
- }
- //得到觸摸屏的輸入
- //x,y:鍵盤坐標(biāo)
- //返回值:(1~15,對應(yīng)按鍵表)
- u8 AS608_get_keynum(u16 x,u16 y)
- {
- u16 i,j;
- static u8 key_x=0;//0,沒有任何按鍵按下
- u8 key=0;
- tp_dev.scan(0);
- if(tp_dev.sta&TP_PRES_DOWN)//觸摸屏被按下
- {
- for(i=0;i<5;i++)
- {
- for(j=0;j<3;j++)
- {
- 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))
- {
- key=i*3+j+1;
- break;
- }
- }
- if(key)
- {
- if(key_x==key)key=0;
- else
- {
- AS608_key_staset(x,y,key_x-1,0);
- key_x=key;
- AS608_key_staset(x,y,key_x-1,1);
- }
- break;
- }
- }
- }else if(key_x)
- {
- AS608_key_staset(x,y,key_x-1,0);
- key_x=0;
- }
- return key;
- }
- //獲取鍵盤數(shù)值
- u16 GET_NUM(void)
- {
- u8 key_num=0;
- u16 num=0;
- while(1)
- {
- key_num=AS608_get_keynum(0,170);
- if(key_num)
- {
- if(key_num==1)return 0xFFFF;//‘返回’鍵
- if(key_num==3)return 0xFF00;//
- if(key_num>3&&key_num<13&&num<99)//‘1-9’鍵(限制輸入3位數(shù))
- num =num*10+key_num-3;
- if(key_num==13)num =num/10;//‘Del’鍵
- if(key_num==14&&num<99)num =num*10;//‘0’鍵
- if(key_num==15)return num; //‘Enter’鍵
- }
- LCD_ShowNum(80+15,170+7,num,6,16);
- }
- }
- //顯示確認(rèn)碼錯誤信息
- void ShowErrMessage(u8 ensure)
- {
- LCD_Fill(0,120,lcddev.width,160,WHITE);
- Show_Str_Mid(0,120,(u8*)EnsureMessage(ensure),16,240);
- }
- //錄指紋
- void Add_FR(void)
- {
- u8 i=0,ensure ,processnum=0;
- u16 ID;
- while(1)
- {
- switch (processnum)
- {
- case 0:
- i++;
- LCD_Fill(0,100,lcddev.width,160,WHITE);
- Show_Str_Mid(0,100,"Pleas touch finger!",16,240);//請按手指
- ensure=PS_GetImage();
- if(ensure==0x00)
- {
- ensure=PS_GenChar(CharBuffer1);//生成特征
- if(ensure==0x00)
- {
- LCD_Fill(0,120,lcddev.width,160,WHITE);
- Show_Str_Mid(0,120,"Fingerprint correct",16,240);//指紋正確
- i=0;
- processnum=1;//跳到第二步
- }else ShowErrMessage(ensure);
- }else ShowErrMessage(ensure);
- break;
-
- case 1:
- i++;
- LCD_Fill(0,100,lcddev.width,160,WHITE);
- Show_Str_Mid(0,100,"Pleas touch finger again!",16,240);//再按一次手指
- ensure=PS_GetImage();
- if(ensure==0x00)
- {
- ensure=PS_GenChar(CharBuffer2);//生成特征
- if(ensure==0x00)
- {
- LCD_Fill(0,120,lcddev.width,160,WHITE);
- Show_Str_Mid(0,120,"Fingerprint correct",16,240);//指紋正確
- i=0;
- processnum=2;//跳到第三步
- }else ShowErrMessage(ensure);
- }else ShowErrMessage(ensure);
- break;
- case 2:
- LCD_Fill(0,100,lcddev.width,160,WHITE);
- Show_Str_Mid(0,100,"Compare twice fingerprint",16,240);//對比兩次指紋
- ensure=PS_Match();
- if(ensure==0x00)
- {
- LCD_Fill(0,120,lcddev.width,160,WHITE);
- Show_Str_Mid(0,120,"Twice fingerprint are same",16,240);//兩次指紋是一樣的
- processnum=3;//跳到第四步
- }
- else
- {
- LCD_Fill(0,100,lcddev.width,160,WHITE);
- Show_Str_Mid(0,100,"Compare fail,pleas touch again!",16,240);//對比失敗,請重新按手指
- ShowErrMessage(ensure);
- i=0;
- processnum=0;//跳回第一步
- }
- delay_ms(1000);
- break;
- case 3:
- LCD_Fill(0,100,lcddev.width,160,WHITE);
- Show_Str_Mid(0,100,"Generate fingerprint template",16,240);//產(chǎn)生一個指紋模板
- ensure=PS_RegModel();
- if(ensure==0x00)
- {
- LCD_Fill(0,120,lcddev.width,160,WHITE);
- Show_Str_Mid(0,120,"Generate fingerprint success",16,240);//生成指紋模板成功
- processnum=4;//跳到第五步
- }else {processnum=0;ShowErrMessage(ensure);}
- delay_ms(1000);
- break;
-
- case 4:
- LCD_Fill(0,100,lcddev.width,160,WHITE);
- Show_Str_Mid(0,100,"Intput ID and save with ENTER!",16,240);//輸入ID并按“Enter”保存
- Show_Str_Mid(0,120,"0=< ID <=299",16,240);
- do
- ID=GET_NUM();
- while(!(ID<300));//輸入DI必須小于300
- ensure=PS_StoreChar(CharBuffer2,ID);//儲存模板
- if(ensure==0x00)
- {
- LCD_Fill(0,100,lcddev.width,160,WHITE);
- Show_Str_Mid(0,120,"Add fingerprint success!!!",16,240);//添加指紋成功
- PS_ValidTempleteNum(&ValidN);//讀庫指紋個數(shù)
- LCD_ShowNum(80,80,AS608Para.PS_max-ValidN,3,16);//顯示剩余指紋個數(shù)
- delay_ms(1500);//延時后清除顯示
- LCD_Fill(0,100,240,160,WHITE);
- return ;
- }else {processnum=0;ShowErrMessage(ensure);}
- break;
- }
- delay_ms(800);
- if(i==5)//超過5次沒有按手指則退出
- {
- LCD_Fill(0,100,lcddev.width,160,WHITE);
- break;
- }
- }
- }
- //刷指紋
- void press_FR(void)
- {
- SearchResult seach;
- u8 ensure;
- char *str;
- ensure=PS_GetImage();
- if(ensure==0x00)//獲取圖像成功
- {
- ensure=PS_GenChar(CharBuffer1);
- if(ensure==0x00) //生成特征成功
- {
- ensure=PS_HighSpeedSearch(CharBuffer1,0,300,&seach);
- if(ensure==0x00)//搜索成功
- {
- LCD_Fill(0,100,lcddev.width,160,WHITE);
- Show_Str_Mid(0,100,"Search fingerprint success",16,240);//搜索指紋成功
- str=mymalloc(50);
- sprintf(str,"Match ID:%d Match score:%d",seach.pageID,seach.mathscore);//顯示匹配指紋的ID和分?jǐn)?shù)
- Show_Str_Mid(0,140,(u8*)str,16,240);
- myfree(str);
- }
- else
- ShowErrMessage(ensure);
- }
- else
- ShowErrMessage(ensure);
- delay_ms(1000);//延時后清除顯示
- LCD_Fill(0,100,lcddev.width,160,WHITE);
- }
-
- }
- //刪除指紋
- void Del_FR(void)
- {
- u8 ensure;
- u16 num;
- LCD_Fill(0,100,lcddev.width,160,WHITE);
- Show_Str_Mid(0,100,"Delete fingerprint",16,240);//顯示刪除指紋
- Show_Str_Mid(0,120,"Input ID and touch Enter!",16,240);//顯示輸入ID并按下“Enter”
- Show_Str_Mid(0,140,"0=< ID <=299",16,240);
- delay_ms(50);
- AS608_load_keyboard(0,170,(u8**)kbd_delFR);
- num=GET_NUM();//獲取返回的數(shù)值
- if(num==0xFFFF)
- goto MENU ; //返回主頁面
- else if(num==0xFF00)
- ensure=PS_Empty();//清空指紋庫
- else
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
2.0 AS608指紋模塊贈送配套資料.rar
(13.99 MB, 下載次數(shù): 146)
2018-7-8 22:00 上傳
點(diǎn)擊文件名下載附件
javascript:; 下載積分: 黑幣 -5
|