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