|
本帖最后由 超神NK 于 2018-8-5 20:54 编辑
8月3号更
关于AS608模块,论坛也早有别人发过了,但是那些都是打包好的,我这个就是根据手册把常用的功能都写好,用户根据需要自己选择调用。我这个没有按功能打包,都是一些基础函数,需要用户自行编写打包,函数都有详细注释。
ps:波特率范围手册里面有介绍,还有串口接收最好用串口中断函数,我这边方边调试就没有用中断,如果有其他问题,可留言,看到必回!
再ps一下,管理,求黑币啊!
8月5号更新
压缩包名称后面有新字的,是今天新加了一些功能函数,采用结构体保存返回的数据。
记事本功能额flash没有去写,个人感觉没什么用,都是串口操作好写,明天更新RC522模块的简单说明以及程序,大神勿喷,本人也是一枚小白。
本来写好了一些程序着想演示,无奈hex文件有点大,一缩再缩就没有什么可演示的了。。。所以就不打算公开了!哈~
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)
|
评分
-
查看全部评分
|