一. 簡介
AS608 指紋識別模塊主要是指采用了杭州晟元芯片技術有限公司(Synochip)的 AS608 指紋識別芯片 而做成的指紋模塊,模塊廠商只是基于該芯片設計外圍電路,集成一個可供2次開發的指紋模塊; 所以,只要是基于AS608芯片的指紋模塊,其控制電路及控制協議幾乎是一樣的,只是廠家和性能不同而已。
二. 硬件原理圖介紹
1.硬件接口
AS608模塊采用8pin的控制接口,供電電壓為3.3V(不能使用5V供電),通信總線有兩種,分別為串口通訊(TX、RX)和USB通訊(D+、D-); 采用串口通訊,編程相對簡單,也是比較常用的一種,但是兼容性不好; 采用USB通訊,編程相對較難,但USB作為最常用的總線接口,有很好的兼容性。
2.控制電路圖
以51單片機為例,AS608模塊touch引腳接到單片機的普通IO上,當有指紋按下,該引腳觸發一個高電平信號; TX、RX引腳分別接到單片機的P30、P31串口引腳上。
注:AS608只能用+3.3V供電,不可用+5V供電。
三. 通訊協議格式
單片機要實現對AS608指紋模塊的控制,就需要根據AS608芯片規定的通訊協議格式來發送和處理串口數據,整個模塊各個功能的實現也是圍繞該協議格式進行的。
控制指令有三類,指令包、數據包、結束包; 一般指令包是由單片機發送到模塊上,模塊接收到指令包后,返回對應的數據包;
- 指令包主要包括:包頭、芯片地址、包標識、包長度、控制參數和校驗和;
- 數據包主要包括:包頭、芯片地址、包標識、包長度、數據和校驗和 ;
- 數據包與結束包的區別在于包標識,02H:數據包,且有后續包。 08H:最后一個數據包,即結束包。
四. 控制程序
以指紋密碼鎖為例,
1.常用控制指令
一般要實現一個指紋密碼鎖的功能,只需用到以下指令:
錄入圖像、生成特征、搜索指紋、自動驗證指紋、自動注冊模板、刪除指紋。
2.錄入指紋
首先要是實現開鎖,需要在系統里面錄入指紋信息,需要:
錄入圖像->生成特征->快速查找圖像->自動注冊模板
(1)錄入圖像指令
(2)生成特征指令
存入指紋圖像,存入單片機給定的緩沖區號BufferID中;
(3)快速查找圖像
生成圖像后要驗證是否有在Buffer里面;
(4)自動注冊模板
最后將Buffer里面的圖像存入Flash里面
(5)錄入指紋程序
void addfinger() //錄入指紋
{
uchar IDa1,IDa2,IDa3; //指紋圖像存放地址
LcmClearTXT();
PutStr(1,2,"請按手指");
SFG_getimage();
while(querenma!=0) //指令接收不成功,重新發送
SFG_getimage();
SFG_genchar(buffer1ID);
while(querenma!=0) //指令接收不成功,重新發送
SFG_genchar(buffer1ID);
UART_Init();
SFG_fastsearch(buffer1ID);
while(querenma==1) //指令接收不成功,重新發送
SFG_fastsearch(buffer1ID);
SBUF = querenma;
while(TI==0);
TI=0;
if(querenma==0)
{
LcmClearTXT();
PutStr(1,1,"該指紋已存儲");
PutStr(3,0," 按任意鍵繼續");
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," 按任意鍵繼續");
while(Keycan()==0);
}
LcmClearTXT();
}
2.自動驗證指紋
錄入指紋后,就可以匹配本人的指紋實現開鎖,只需要發送自動驗證指紋指令,返回的確認碼為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.刪除指紋
管理員如果需要刪除系統中錄入的指定指紋信息,需要寫入刪除所要刪除指紋的ID號,然后發送刪除指紋指令即可刪除相應的指紋。
(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," 按任意鍵繼續");
while(Keycan()==0);
LcmClearTXT();
}
只要實現以上幾個指令,就可以實現一個指紋密碼鎖的基本功能了。
-
原理圖
+關注
關注
1297文章
6338瀏覽量
233815 -
單片機
+關注
關注
6035文章
44554瀏覽量
634653 -
接口
+關注
關注
33文章
8575瀏覽量
151021 -
usb
+關注
關注
60文章
7936瀏覽量
264483 -
指紋識別模塊
+關注
關注
0文章
6瀏覽量
1326
發布評論請先 登錄
相關推薦
評論