|
本帖最后由 超神NK 于 2018-8-5 20:54 編輯
8月3號(hào)更
關(guān)于AS608模塊,論壇也早有別人發(fā)過了,但是那些都是打包好的,我這個(gè)就是根據(jù)手冊(cè)把常用的功能都寫好,用戶根據(jù)需要自己選擇調(diào)用。我這個(gè)沒有按功能打包,都是一些基礎(chǔ)函數(shù),需要用戶自行編寫打包,函數(shù)都有詳細(xì)注釋。
ps:波特率范圍手冊(cè)里面有介紹,還有串口接收最好用串口中斷函數(shù),我這邊方邊調(diào)試就沒有用中斷,如果有其他問題,可留言,看到必回!
再ps一下,管理,求黑幣啊!
8月5號(hào)更新
壓縮包名稱后面有新字的,是今天新加了一些功能函數(shù),采用結(jié)構(gòu)體保存返回的數(shù)據(jù)。
記事本功能額flash沒有去寫,個(gè)人感覺沒什么用,都是串口操作好寫,明天更新RC522模塊的簡(jiǎn)單說明以及程序,大神勿噴,本人也是一枚小白。
本來寫好了一些程序著想演示,無奈hex文件有點(diǎn)大,一縮再縮就沒有什么可演示的了。。。所以就不打算公開了!哈~
0.png (45.29 KB, 下載次數(shù): 145)
下載附件
2018-8-3 15:38 上傳
0.png (24.34 KB, 下載次數(shù): 118)
下載附件
2018-8-3 15:38 上傳
AS60x 指紋模塊 SOC 掛接必要的外圍電路(傳感器、晶振、電源等)后即可構(gòu)成完整的指紋識(shí)別模塊,模塊始終處于從屬地位(Slave mode),主機(jī)(Host)需要通過不同的指令讓模塊完成各種功能。主機(jī)的指令、模塊的應(yīng)答以及數(shù)據(jù)交換都是按照規(guī)定格式的數(shù)據(jù)包來進(jìn)行的。主機(jī)必須按照下述格式封裝要發(fā)送的指令或數(shù)據(jù),也必須按下述格式解析收到的數(shù)據(jù)包。
1. 指令包/數(shù)據(jù)包格式
指令/數(shù)據(jù)包共分為三類:
包標(biāo)識(shí)=01 命令包
包標(biāo)識(shí)=02 數(shù)據(jù)包,且有后續(xù)包
包標(biāo)識(shí)=08 最后一個(gè)數(shù)據(jù)包,即結(jié)束包
所有的數(shù)據(jù)包都要加包頭:0xEF01
單片機(jī)源程序如下:
- /*
- 作者:超神NK
- 發(fā)處:51黑論壇
- 時(shí)間:2018年8月3號(hào)
- ps:純個(gè)人整理,都是根據(jù)手冊(cè)命名的函數(shù),幫助小白學(xué)習(xí),本人純手打,絕對(duì)沒有任何抄襲。(全網(wǎng)可查)
- */
- #include "AS608.h"
- uchar xdata Data_buff[MAX];
- void SendOneByte(unsigned char c)
- {
- SBUF = c;
- while(!TI);
- TI = 0;
- }
- /* putchar 函數(shù)重寫 */
- char putchar(char c)
- {
- SendOneByte(c);
- return c;
- }
- //*******************************************
- //函數(shù)名:Send_Bytes
- //功能:發(fā)送多個(gè)字節(jié)
- //參數(shù):*c:首地址 len:長(zhǎng)度
- //指令代碼:無
- //返回值: 無
- //*******************************************
- void Send_Bytes(uchar *c,uchar len)
- {
- uchar i=0;
- for(i=0;i<len;i++)
- {
- SBUF = *(c+i);
- while(!TI);
- TI = 0;
- }
- }
- //*******************************************
- //函數(shù)名:Send_Bytes
- //功能:接收多個(gè)字節(jié)
- //參數(shù):*c:首地址 len:長(zhǎng)度
- //指令代碼:無
- //返回值: 無
- //*******************************************
- void Receive_Bytes(uchar *c,uchar len)
- {
- uchar i=0;
- for(i=0;i<len;i++)
- {
- while(!RI);
- *(c+i)=SBUF;
- RI=0;
- }
- }
- //*******************************************
- //函數(shù)名:PS_GetImage
- //功能:從傳感器上讀入圖像存于圖像緩沖區(qū)
- //參數(shù):無
- //指令代碼:01H
- //返回值:有
- //*******************************************
- char PS_GetImage()
- {
- uchar *ps2= "\xef\x01\xff\xff\xff\xff\x01\x00\x03\x01\x00\x05"; //指令碼
-
- Send_Bytes(ps2,12); //發(fā)送指令碼
- Receive_Bytes(Data_buff,12); //接收應(yīng)答包
-
- if(Data_buff[9]==0x00&&Data_buff[11]==0x0a) //判斷確認(rèn)碼是否成功 后面為校驗(yàn)和判斷
- {
- return MI_OK;
- }
-
- return (-1);
- }
- //*******************************************
- //函數(shù)名:PS_GenChar
- //功能:將 ImageBuffer(圖像緩沖區(qū)) 中的原始圖像生成指紋特征文件存于 CharBuffer1 或 CharBuffer2
- //參數(shù):BufferID(特征緩沖區(qū)號(hào))
- //指令代碼:02H
- //返回值:有
- //*******************************************
- char PS_GenChar(uchar BufferID)
- {
- uchar *ps1= "\xef\x01\xff\xff\xff\xff\x01\x00\x04\x02\x01\x00\x08"; //存放CharBuffer1的指令碼
- uchar *ps2= "\xef\x01\xff\xff\xff\xff\x01\x00\x04\x02\x02\x00\x09"; //存放CharBuffer1的指令碼
- if(BufferID==0x01)
- {
- Send_Bytes(ps1,13); //發(fā)送指令碼
- }
- else
- {
- Send_Bytes(ps2,13); //發(fā)送指令碼
- }
-
- Receive_Bytes(Data_buff,12); //接收應(yīng)答包
-
- if(Data_buff[9]==0x00&&Data_buff[11]==0x0a) //判斷確認(rèn)碼是否成功 后面為校驗(yàn)和判斷
- {
- return MI_OK;
- }
-
- return (-1);
- }
- //*******************************************
- //函數(shù)名:PS_Match
- //功能:精確比對(duì) CharBuffer1 與 CharBuffer2 中的特征文件
- //參數(shù):NULL
- //指令代碼:03H
- //返回值:有
- //*******************************************
- char PS_Match()
- {
- uchar *ps1= "\xef\x01\xff\xff\xff\xff\x01\x00\x03\x03\x00\x07"; //存放CharBuffer1的指令碼
- Send_Bytes(ps1,12); //發(fā)送指令碼
-
- Receive_Bytes(Data_buff,14); //接收應(yīng)答包
-
- if(Data_buff[9]==0x00) //判斷確認(rèn)碼是否成功
- {
- return MI_OK;
- }
-
- return (-1);
- }
- //*******************************************
- //函數(shù)名:PS_Search
- //功能:以 CharBuffer1 或 CharBuffer2 中的特征文件搜索整個(gè)或部分指紋庫(kù)。若搜索到,則返回頁(yè)碼
- //參數(shù):BufferID, (StartPage(起始頁(yè)),PageNum(頁(yè)數(shù)))(默認(rèn)從0到300全局搜索)
- //指令代碼:04H
- //返回值:確認(rèn)碼、頁(yè)碼(ID)
- //*******************************************
- char PS_Search(uchar BufferID)
- {
- uchar *ps1= "\xef\x01\xff\xff\xff\xff\x01\x00\x08\x04\x01\x00\x00\x01\x2b\x00\x3a"; //存放CharBuffer1的指令碼
- uchar *ps2= "\xef\x01\xff\xff\xff\xff\x01\x00\x08\x04\x02\x00\x00\x01\x2b\x00\x3b";
-
- if(BufferID==0x01)
- {
- Send_Bytes(ps1,17); //發(fā)送指令碼
- }
- else
- {
- Send_Bytes(ps2,17); //發(fā)送指令碼
- }
-
-
- Receive_Bytes(Data_buff,16); //接收應(yīng)答包
-
- write_com(0x8a);
- wstring("應(yīng)答成功...");
- if(Data_buff[9]==0x00) //判斷確認(rèn)碼是否成功
- {
- return MI_OK;
- }
-
- return (1);
- }
- //*******************************************
- //函數(shù)名:PS_RegModel
- //功能:將 CharBuffer1 與 CharBuffer2 中的特征文件合并生成模板,結(jié)果存于 CharBuffer1 與 CharBuffer2
- //參數(shù):NULL
- //指令代碼:05H
- //返回值:確認(rèn)碼
- //*******************************************
- char PS_RegModel()
- {
- uchar *ps1= "\xef\x01\xff\xff\xff\xff\x01\x00\x03\x05\x00\x09"; //存放CharBuffer1的指令碼
-
- Send_Bytes(ps1,12); //發(fā)送指令碼
-
- Receive_Bytes(Data_buff,12); //接收應(yīng)答包
-
- if(Data_buff[9]==0x00) //判斷確認(rèn)碼是否成功
- {
- return MI_OK;
- }
-
- return (-1);
- }
- //*******************************************
- //函數(shù)名:PS_StoreChar
- //功能:將 CharBuffer1 或 CharBuffer2 中的模板文件存到 PageID 號(hào)flash 數(shù)據(jù)庫(kù)位置
- //參數(shù):BufferID(緩沖區(qū)號(hào)),PageID(指紋庫(kù)位置號(hào))
- //指令代碼:06H
- //返回值:確認(rèn)碼
- //*******************************************
- char PS_StoreChar(uchar BufferID,uint PageID)
- {
- uint sum=0x000d;
- uchar ps1[]="\xef\x01\xff\xff\xff\xff\x01\x00\x06\x06\x01\x00\x00\x00\x00"; //存放CharBuffer1的指令碼
- uchar ps2[]="\xef\x01\xff\xff\xff\xff\x01\x00\x06\x06\x02\x00\x00\x00\x00";
- if(BufferID==0x01)
- {
- sum+=0x01;
- ps1[11]=PageID/256;
- ps1[12]=PageID%256;
- sum+=ps1[11];
- sum+=ps1[12];
- ps1[13]=sum/256;
- ps1[14]=sum%256;
- Send_Bytes(ps1,15); //發(fā)送指令碼
- }
- else
- {
- sum+=0x02;
- ps2[11]=PageID/256;
- ps2[12]=PageID%256;
- sum+=ps2[11];
- sum+=ps2[12];
- ps2[13]=sum/256;
- ps2[14]=sum%256;
- Send_Bytes(ps2,15); //發(fā)送指令碼
- }
-
- Receive_Bytes(Data_buff,12); //接收應(yīng)答包
-
- if(Data_buff[9]==0x00&&Data_buff[11]==0x0a) //判斷確認(rèn)碼是否成功
- {
- // Send_Bytes(Data_buff,12);
- return MI_OK;
- }
- return 1;
- }
- //*******************************************
- //函數(shù)名:PS_LoadChar
- //功能:將 flash 數(shù)據(jù)庫(kù)中指定 ID 號(hào)的指紋模板讀入到模板緩沖區(qū) CharBuffer1 或 CharBuffer2
- //參數(shù):BufferID(緩沖區(qū)號(hào)),PageID(指紋庫(kù)模板號(hào))
- //指令代碼:07H
- //返回值:確認(rèn)碼
- //*******************************************
- char PS_LoadChar(uchar BufferID,uint PageID)
- {
- uint sum=0x000e;
- uchar ps1[]="\xef\x01\xff\xff\xff\xff\x01\x00\x06\x07\x01\x00\x00\x00\x09"; //存放CharBuffer1的指令碼
- uchar ps2[]="\xef\x01\xff\xff\xff\xff\x01\x00\x06\x07\x02\x00\x00\x00\x09";
- if(BufferID==0x01)
- {
- sum+=0x01;
- ps1[11]=PageID/256;
- ps1[12]=PageID%256;
- sum+=ps1[11];
- sum+=ps1[12];
- ps1[13]=sum/256;
- ps1[14]=sum%256;
-
- Send_Bytes(ps1,15); //發(fā)送指令碼
- }
- else
- {
- sum+=0x02;
- ps2[11]=PageID/256;
- ps2[12]=PageID%256;
- sum+=ps2[11];
- sum+=ps2[12];
- ps2[13]=sum/256;
- ps2[14]=sum%256;
-
- Send_Bytes(ps2,15);
- }
-
- Receive_Bytes(Data_buff,12); //接收應(yīng)答包
-
- if(Data_buff[9]==0x00) //判斷確認(rèn)碼是否成功
- {
- return MI_OK;
- }
-
- return (-1);
- }
- //*******************************************
- //函數(shù)名:PS_Empty
- //功能:刪除 flash 數(shù)據(jù)庫(kù)中所有指紋模板
- //參數(shù):NULL
- //指令代碼:0dH
- //返回值:確認(rèn)碼
- //*******************************************
- char PS_Empty()
- {
- uchar ps1[]="\xef\x01\xff\xff\xff\xff\x01\x00\x03\x0d\x00\x11"; //存放CharBuffer1的指令碼
- Send_Bytes(ps1,12); //發(fā)送指令碼
-
- Receive_Bytes(Data_buff,12); //接收應(yīng)答包
-
- if(Data_buff[9]==0x00) //判斷確認(rèn)碼是否成功
- {
- return MI_OK;
- }
-
- return (-1);
- }
- //*******************************************
- //函數(shù)名:PS_VfyPwd
- //功能: 驗(yàn)證模塊握手口令
- //參數(shù):NULL
- //指令代碼:13H
- //返回值:確認(rèn)碼
- //*******************************************
- char PS_VfyPwd()
- {
- uchar ps1[]="\xef\x01\xff\xff\xff\xff\x01\x00\x07\x13\x00\x00\x00\x00\x1b"; //存放CharBuffer1的指令碼
- Send_Bytes(ps1,16); //發(fā)送指令碼
- Receive_Bytes(Data_buff,12); //接收應(yīng)答包
-
- if(Data_buff[9]==0x00) //判斷確認(rèn)碼是否成功
- {
-
- return MI_OK;
- }
-
- return (-1);
- }
- //*******************************************
- //函數(shù)名:PS_Enroll
- //功能: 采集一次指紋注冊(cè)模板,在指紋庫(kù)中搜索空位并存儲(chǔ),返回存儲(chǔ)ID
- //參數(shù):NULL
- //指令代碼:10H
- //返回值:確認(rèn)碼 頁(yè)碼(相配指紋模板)
- //*******************************************
- char PS_Enroll()
- {
- uchar ps1[]="\xef\x01\xff\xff\xff\xff\x01\x00\x03\x10\x00\x14"; //存放CharBuffer1的指令碼
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼- /*
- 作者:超神NK
- 發(fā)處:51黑論壇
- 時(shí)間:2018年8月3號(hào)
- ps:純個(gè)人整理,都是根據(jù)手冊(cè)命名的函數(shù),幫助小白學(xué)習(xí),本人純手打,絕對(duì)沒有任何抄襲。(全網(wǎng)可查)
- */
- #ifndef _AS608_H_
- #include "stc12c5a60s2.h"
- #include "intrins.h"
- #include "stdio.h"
- #ifndef uchar
- #define uchar unsigned char
- #endif
- #ifndef uint
- #define uint unsigned int
- #endif
-
-
- #define MAX 64 //定義最大接收多少字節(jié)數(shù)據(jù)
- /*錯(cuò)誤碼*/
- #define MI_OK 0
- #define MI_NOTAGERR (-1)
- #define MI_ERR (-2)
- /*確認(rèn)碼*/ /*
- 1. 00h:表示指令執(zhí)行完畢或 OK;
- 2. 01h:表示數(shù)據(jù)包接收錯(cuò)誤;
- 3. 02h:表示傳感器上沒有手指;
- 4. 03h:表示錄入指紋圖像失�。�
- 5. 04h:表示指紋圖像太干、太淡而生不成特征;
- 6. 05h:表示指紋圖像太濕、太糊而生不成特征;
- 7. 06h:表示指紋圖像太亂而生不成特征;
- 8. 07h:表示指紋圖像正常,但特征點(diǎn)太少(或面積太�。┒怀商卣鳎�
- 9. 08h:表示指紋不匹配;
- 10. 09h:表示沒搜索到指紋;
- 11. 0ah:表示特征合并失敗;
- 12. 0bh:表示訪問指紋庫(kù)時(shí)地址序號(hào)超出指紋庫(kù)范圍;
- 13. 0ch:表示從指紋庫(kù)讀模板出錯(cuò)或無效;
- 14. 0dh:表示上傳特征失�。�
- 15. 0eh:表示模塊不能接受后續(xù)數(shù)據(jù)包;
- 16. 0fh:表示上傳圖像失敗;
- 17. 10h:表示刪除模板失敗;
- 18. 11h:表示清空指紋庫(kù)失��;
- 19. 12h:表示不能進(jìn)入低功耗狀態(tài);
- 20. 13h:表示口令不正確;
- 21. 14h:表示系統(tǒng)復(fù)位失敗;
- 22. 15H:表示緩沖區(qū)內(nèi)沒有有效原始圖而生不成圖像;
- 23. 16H:表示在線升級(jí)失�。�
- 24. 17H:表示殘留指紋或兩次采集之間手指沒有移動(dòng)過;
- 25. 18H:表示讀寫 FLASH 出錯(cuò);
- 26. 0xf0:有后續(xù)數(shù)據(jù)包的指令,正確接收后用 0xf0 應(yīng)答;
- 27. 0xf1:有后續(xù)數(shù)據(jù)包的指令,命令包用 0xf1 應(yīng)答;
- 28. 0xf2:表示燒寫內(nèi)部 FLASH 時(shí),校驗(yàn)和錯(cuò)誤;
- 29. 0xf3:表示燒寫內(nèi)部 FLASH 時(shí),包標(biāo)識(shí)錯(cuò)誤;
- 30. 0xf4:表示燒寫內(nèi)部 FLASH 時(shí),包長(zhǎng)度錯(cuò)誤;
- 31. 0xf5:表示燒寫內(nèi)部 FLASH 時(shí),代碼長(zhǎng)度太長(zhǎng);
- 32. 0xf6:表示燒寫內(nèi)部 FLASH 時(shí),燒寫 FLASH 失敗;
- 33. 0x19:未定義錯(cuò)誤;
- 34. 0x1a:無效寄存器號(hào);
- 35. 0x1b:寄存器設(shè)定內(nèi)容錯(cuò)誤號(hào);
- 36. 0x1c:記事本頁(yè)碼指定錯(cuò)誤;
- 37. 0x1d:端口操作失敗;
- 38. 0x1e:自動(dòng)注冊(cè)(enroll)失��;
- 39. 0x1f:指紋庫(kù)滿
- 40. 0x20—0xefh:Reserved。
- */
- /**/
- void SendOneByte(unsigned char c);
- void Send_Bytes(uchar *c,uchar len);
- char PS_GetImage();
- char PS_GenChar(uchar BufferID);
- char PS_Match();
- char PS_Search(uchar BufferID);
- char PS_RegModel();
- char PS_StoreChar(uchar BufferID,uint PageID);
- char PS_LoadChar(uchar BufferID,uint PageID);
- char PS_Empty();
- char PS_VfyPwd();
- char PS_Enroll();
- char PS_Identify();
- char PS_StoreChar(uchar BufferID,uint PageID);
- #endif
復(fù)制代碼
所有資料51hei提供下載:
AS608相關(guān)資料與程序.rar
(467.7 KB, 下載次數(shù): 636)
2018-8-3 09:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
-
-
AS608(新).rar
2018-8-5 20:46 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
4.87 KB, 下載次數(shù): 473, 下載積分: 黑幣 -5
評(píng)分
-
查看全部評(píng)分
|