找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 29476|回复: 39
打印 上一主题 下一主题
收起左侧

AS608光学指纹模块程序源码与入门资料(51单片机版51hei首发)

  [复制链接]
跳转到指定楼层
楼主
本帖最后由 超神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

单片机源程序如下:
  1. /*
  2.         作者:超神NK
  3.         发处:51黑论坛
  4.         时间:2018年8月3号        

  5.         ps:纯个人整理,都是根据手册命名的函数,帮助小白学习,本人纯手打,绝对没有任何抄袭。(全网可查)
  6. */

  7. #include "AS608.h"


  8. uchar xdata Data_buff[MAX];


  9. void SendOneByte(unsigned char c)
  10. {
  11.     SBUF = c;
  12.     while(!TI);
  13.     TI = 0;
  14. }

  15. /* putchar 函数重写 */
  16. char putchar(char c)
  17. {
  18.         SendOneByte(c);
  19.         return c;
  20. }

  21. //*******************************************  
  22. //函数名:Send_Bytes
  23. //功能:发送多个字节
  24. //参数:*c:首地址    len:长度
  25. //指令代码:无
  26. //返回值:  无
  27. //*******************************************
  28. void Send_Bytes(uchar *c,uchar len)
  29. {
  30.         uchar i=0;
  31.         for(i=0;i<len;i++)
  32.         {
  33.             SBUF = *(c+i);
  34.             while(!TI);
  35.             TI = 0;
  36.         }
  37. }

  38. //*******************************************  
  39. //函数名:Send_Bytes
  40. //功能:接收多个字节
  41. //参数:*c:首地址    len:长度
  42. //指令代码:无
  43. //返回值:  无
  44. //*******************************************
  45. void Receive_Bytes(uchar *c,uchar len)
  46. {
  47.         uchar i=0;
  48.         for(i=0;i<len;i++)
  49.         {
  50.                 while(!RI);
  51.             *(c+i)=SBUF;
  52.                 RI=0;
  53.     }        
  54. }




  55. //*******************************************  
  56. //函数名:PS_GetImage
  57. //功能:从传感器上读入图像存于图像缓冲区
  58. //参数:无
  59. //指令代码:01H
  60. //返回值:有
  61. //*******************************************
  62. char PS_GetImage()
  63. {

  64.         uchar *ps2=     "\xef\x01\xff\xff\xff\xff\x01\x00\x03\x01\x00\x05";         //指令码
  65.         
  66.         Send_Bytes(ps2,12);                       //发送指令码
  67.         Receive_Bytes(Data_buff,12);   //接收应答包
  68.         
  69.         if(Data_buff[9]==0x00&&Data_buff[11]==0x0a)                   //判断确认码是否成功          后面为校验和判断
  70.         {                                                           
  71.                 return MI_OK;        
  72.         }
  73.         
  74.         return (-1);        
  75. }



  76. //*******************************************  
  77. //函数名:PS_GenChar
  78. //功能:将 ImageBuffer(图像缓冲区) 中的原始图像生成指纹特征文件存于 CharBuffer1 或 CharBuffer2
  79. //参数:BufferID(特征缓冲区号)
  80. //指令代码:02H
  81. //返回值:有
  82. //*******************************************
  83. char PS_GenChar(uchar BufferID)
  84. {

  85.         uchar *ps1=     "\xef\x01\xff\xff\xff\xff\x01\x00\x04\x02\x01\x00\x08";         //存放CharBuffer1的指令码
  86.         uchar *ps2=     "\xef\x01\xff\xff\xff\xff\x01\x00\x04\x02\x02\x00\x09";         //存放CharBuffer1的指令码
  87.         if(BufferID==0x01)
  88.         {
  89.                 Send_Bytes(ps1,13);                       //发送指令码
  90.         }
  91.         else
  92.         {
  93.                 Send_Bytes(ps2,13);                       //发送指令码
  94.         }
  95.         
  96.         Receive_Bytes(Data_buff,12);   //接收应答包
  97.         
  98.         if(Data_buff[9]==0x00&&Data_buff[11]==0x0a)                   //判断确认码是否成功          后面为校验和判断
  99.         {                                                           
  100.                 return MI_OK;        
  101.         }
  102.         
  103.         return (-1);        
  104. }



  105. //*******************************************  
  106. //函数名:PS_Match
  107. //功能:精确比对 CharBuffer1 与 CharBuffer2 中的特征文件
  108. //参数:NULL
  109. //指令代码:03H
  110. //返回值:有
  111. //*******************************************
  112. char PS_Match()
  113. {

  114.         uchar *ps1=     "\xef\x01\xff\xff\xff\xff\x01\x00\x03\x03\x00\x07";         //存放CharBuffer1的指令码

  115.         Send_Bytes(ps1,12);                       //发送指令码

  116.         
  117.         Receive_Bytes(Data_buff,14);   //接收应答包
  118.         
  119.         if(Data_buff[9]==0x00)                   //判断确认码是否成功         
  120.         {                                                           
  121.                 return MI_OK;        
  122.         }
  123.         
  124.         return (-1);        
  125. }



  126. //*******************************************  
  127. //函数名:PS_Search
  128. //功能:以 CharBuffer1 或 CharBuffer2 中的特征文件搜索整个或部分指纹库。若搜索到,则返回页码
  129. //参数:BufferID, (StartPage(起始页),PageNum(页数))(默认从0到300全局搜索)
  130. //指令代码:04H
  131. //返回值:确认码、页码(ID)
  132. //*******************************************
  133. char PS_Search(uchar BufferID)
  134. {

  135.         uchar *ps1=     "\xef\x01\xff\xff\xff\xff\x01\x00\x08\x04\x01\x00\x00\x01\x2b\x00\x3a";         //存放CharBuffer1的指令码
  136.         uchar *ps2=     "\xef\x01\xff\xff\xff\xff\x01\x00\x08\x04\x02\x00\x00\x01\x2b\x00\x3b";
  137.         

  138.         if(BufferID==0x01)
  139.         {
  140.                 Send_Bytes(ps1,17);                       //发送指令码
  141.         }
  142.         else
  143.         {
  144.                 Send_Bytes(ps2,17);                       //发送指令码
  145.         }
  146.         

  147.                
  148.         Receive_Bytes(Data_buff,16);   //接收应答包
  149.         
  150.         write_com(0x8a);
  151.         wstring("应答成功...");

  152.         if(Data_buff[9]==0x00)                   //判断确认码是否成功         
  153.         {                                                           
  154.                 return MI_OK;        
  155.         }
  156.         
  157.         return (1);        
  158. }



  159. //*******************************************  
  160. //函数名:PS_RegModel
  161. //功能:将 CharBuffer1 与 CharBuffer2 中的特征文件合并生成模板,结果存于 CharBuffer1 与 CharBuffer2
  162. //参数:NULL
  163. //指令代码:05H
  164. //返回值:确认码
  165. //*******************************************
  166. char PS_RegModel()
  167. {

  168.         uchar *ps1=     "\xef\x01\xff\xff\xff\xff\x01\x00\x03\x05\x00\x09";         //存放CharBuffer1的指令码
  169.         

  170.         Send_Bytes(ps1,12);                       //发送指令码

  171.         
  172.         Receive_Bytes(Data_buff,12);   //接收应答包
  173.         
  174.         if(Data_buff[9]==0x00)                   //判断确认码是否成功         
  175.         {                                                           
  176.                 return MI_OK;        
  177.         }
  178.         
  179.         return (-1);        
  180. }



  181. //*******************************************  
  182. //函数名:PS_StoreChar
  183. //功能:将 CharBuffer1 或 CharBuffer2 中的模板文件存到 PageID 号flash 数据库位置
  184. //参数:BufferID(缓冲区号),PageID(指纹库位置号)
  185. //指令代码:06H
  186. //返回值:确认码
  187. //*******************************************
  188. char PS_StoreChar(uchar BufferID,uint PageID)
  189. {

  190.         uint sum=0x000d;
  191.         uchar ps1[]="\xef\x01\xff\xff\xff\xff\x01\x00\x06\x06\x01\x00\x00\x00\x00";         //存放CharBuffer1的指令码
  192.         uchar ps2[]="\xef\x01\xff\xff\xff\xff\x01\x00\x06\x06\x02\x00\x00\x00\x00";

  193.         if(BufferID==0x01)
  194.         {
  195.                 sum+=0x01;
  196.                 ps1[11]=PageID/256;
  197.                 ps1[12]=PageID%256;
  198.                 sum+=ps1[11];
  199.                 sum+=ps1[12];
  200.                 ps1[13]=sum/256;
  201.                 ps1[14]=sum%256;
  202.                 Send_Bytes(ps1,15);                       //发送指令码
  203.         }
  204.         else
  205.         {
  206.                 sum+=0x02;
  207.                 ps2[11]=PageID/256;
  208.                 ps2[12]=PageID%256;
  209.                 sum+=ps2[11];
  210.                 sum+=ps2[12];
  211.                 ps2[13]=sum/256;
  212.                 ps2[14]=sum%256;
  213.                 Send_Bytes(ps2,15);                       //发送指令码
  214.         }

  215.         
  216.         Receive_Bytes(Data_buff,12);   //接收应答包
  217.         
  218.         if(Data_buff[9]==0x00&&Data_buff[11]==0x0a)                   //判断确认码是否成功         
  219.         {        
  220. //                Send_Bytes(Data_buff,12);                                                   
  221.                 return MI_OK;                        
  222.         }

  223.         return 1;        
  224. }



  225. //*******************************************  
  226. //函数名:PS_LoadChar
  227. //功能:将 flash 数据库中指定 ID 号的指纹模板读入到模板缓冲区 CharBuffer1 或 CharBuffer2
  228. //参数:BufferID(缓冲区号),PageID(指纹库模板号)
  229. //指令代码:07H
  230. //返回值:确认码
  231. //*******************************************
  232. char PS_LoadChar(uchar BufferID,uint PageID)
  233. {
  234.         uint sum=0x000e;
  235.         uchar ps1[]="\xef\x01\xff\xff\xff\xff\x01\x00\x06\x07\x01\x00\x00\x00\x09";         //存放CharBuffer1的指令码
  236.         uchar ps2[]="\xef\x01\xff\xff\xff\xff\x01\x00\x06\x07\x02\x00\x00\x00\x09";

  237.         if(BufferID==0x01)
  238.         {
  239.                 sum+=0x01;
  240.                 ps1[11]=PageID/256;
  241.                 ps1[12]=PageID%256;
  242.                 sum+=ps1[11];
  243.                 sum+=ps1[12];
  244.                 ps1[13]=sum/256;
  245.                 ps1[14]=sum%256;
  246.                
  247.                 Send_Bytes(ps1,15);                       //发送指令码
  248.         }
  249.         else
  250.         {
  251.                 sum+=0x02;
  252.                 ps2[11]=PageID/256;
  253.                 ps2[12]=PageID%256;
  254.                 sum+=ps2[11];
  255.                 sum+=ps2[12];
  256.                 ps2[13]=sum/256;
  257.                 ps2[14]=sum%256;
  258.                
  259.                 Send_Bytes(ps2,15);
  260.         }
  261.         
  262.         Receive_Bytes(Data_buff,12);   //接收应答包
  263.         
  264.         if(Data_buff[9]==0x00)                   //判断确认码是否成功         
  265.         {                                                           
  266.                 return MI_OK;        
  267.         }
  268.         
  269.         return (-1);        
  270. }



  271. //*******************************************  
  272. //函数名:PS_Empty
  273. //功能:删除 flash 数据库中所有指纹模板
  274. //参数:NULL
  275. //指令代码:0dH
  276. //返回值:确认码
  277. //*******************************************
  278. char PS_Empty()
  279. {
  280.         uchar ps1[]="\xef\x01\xff\xff\xff\xff\x01\x00\x03\x0d\x00\x11";         //存放CharBuffer1的指令码


  281.         Send_Bytes(ps1,12);                       //发送指令码

  282.         
  283.         Receive_Bytes(Data_buff,12);   //接收应答包
  284.         
  285.         if(Data_buff[9]==0x00)                   //判断确认码是否成功         
  286.         {                                                           
  287.                 return MI_OK;        
  288.         }
  289.         
  290.         return (-1);        
  291. }



  292. //*******************************************  
  293. //函数名:PS_VfyPwd
  294. //功能: 验证模块握手口令
  295. //参数:NULL
  296. //指令代码:13H
  297. //返回值:确认码
  298. //*******************************************
  299. char PS_VfyPwd()
  300. {
  301.         uchar ps1[]="\xef\x01\xff\xff\xff\xff\x01\x00\x07\x13\x00\x00\x00\x00\x1b";         //存放CharBuffer1的指令码


  302.         Send_Bytes(ps1,16);                       //发送指令码

  303.         Receive_Bytes(Data_buff,12);   //接收应答包
  304.         
  305.         if(Data_buff[9]==0x00)                   //判断确认码是否成功         
  306.         {                                
  307.                                    
  308.                 return MI_OK;        
  309.         }
  310.         
  311.         return (-1);        
  312. }





  313. //*******************************************  
  314. //函数名:PS_Enroll
  315. //功能: 采集一次指纹注册模板,在指纹库中搜索空位并存储,返回存储ID
  316. //参数:NULL
  317. //指令代码:10H
  318. //返回值:确认码  页码(相配指纹模板)
  319. //*******************************************
  320. char PS_Enroll()
  321. {
  322.         uchar ps1[]="\xef\x01\xff\xff\xff\xff\x01\x00\x03\x10\x00\x14";         //存放CharBuffer1的指令码

  323. ……………………

  324. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
  1. /*
  2.         作者:超神NK
  3.         发处:51黑论坛
  4.         时间:2018年8月3号        

  5.         ps:纯个人整理,都是根据手册命名的函数,帮助小白学习,本人纯手打,绝对没有任何抄袭。(全网可查)
  6. */


  7. #ifndef _AS608_H_


  8. #include "stc12c5a60s2.h"
  9. #include "intrins.h"
  10. #include "stdio.h"

  11. #ifndef uchar
  12. #define uchar unsigned char
  13. #endif

  14. #ifndef uint
  15. #define uint  unsigned int
  16. #endif
  17.         
  18.         
  19. #define MAX 64      //定义最大接收多少字节数据
  20. /*错误码*/
  21. #define MI_OK                          0
  22. #define MI_NOTAGERR                    (-1)
  23. #define MI_ERR                         (-2)


  24. /*确认码*/         /*
  25. 1. 00h:表示指令执行完毕或 OK;
  26. 2. 01h:表示数据包接收错误;
  27. 3. 02h:表示传感器上没有手指;
  28. 4. 03h:表示录入指纹图像失败;
  29. 5. 04h:表示指纹图像太干、太淡而生不成特征;
  30. 6. 05h:表示指纹图像太湿、太糊而生不成特征;
  31. 7. 06h:表示指纹图像太乱而生不成特征;
  32. 8. 07h:表示指纹图像正常,但特征点太少(或面积太小)而生不成特征;
  33. 9. 08h:表示指纹不匹配;
  34. 10. 09h:表示没搜索到指纹;
  35. 11. 0ah:表示特征合并失败;
  36. 12. 0bh:表示访问指纹库时地址序号超出指纹库范围;
  37. 13. 0ch:表示从指纹库读模板出错或无效;
  38. 14. 0dh:表示上传特征失败;
  39. 15. 0eh:表示模块不能接受后续数据包;
  40. 16. 0fh:表示上传图像失败;
  41. 17. 10h:表示删除模板失败;
  42. 18. 11h:表示清空指纹库失败;
  43. 19. 12h:表示不能进入低功耗状态;
  44. 20. 13h:表示口令不正确;
  45. 21. 14h:表示系统复位失败;
  46. 22. 15H:表示缓冲区内没有有效原始图而生不成图像;
  47. 23. 16H:表示在线升级失败;
  48. 24. 17H:表示残留指纹或两次采集之间手指没有移动过;
  49. 25. 18H:表示读写 FLASH 出错;
  50. 26. 0xf0:有后续数据包的指令,正确接收后用 0xf0 应答;
  51. 27. 0xf1:有后续数据包的指令,命令包用 0xf1 应答;
  52. 28. 0xf2:表示烧写内部 FLASH 时,校验和错误;
  53. 29. 0xf3:表示烧写内部 FLASH 时,包标识错误;
  54. 30. 0xf4:表示烧写内部 FLASH 时,包长度错误;
  55. 31. 0xf5:表示烧写内部 FLASH 时,代码长度太长;
  56. 32. 0xf6:表示烧写内部 FLASH 时,烧写 FLASH 失败;
  57. 33. 0x19:未定义错误;
  58. 34. 0x1a:无效寄存器号;
  59. 35. 0x1b:寄存器设定内容错误号;
  60. 36. 0x1c:记事本页码指定错误;
  61. 37. 0x1d:端口操作失败;
  62. 38. 0x1e:自动注册(enroll)失败;
  63. 39. 0x1f:指纹库满
  64. 40. 0x20—0xefh:Reserved。
  65. */


  66. /**/
  67. void SendOneByte(unsigned char c);
  68. void Send_Bytes(uchar *c,uchar len);
  69. char PS_GetImage();
  70. char PS_GenChar(uchar BufferID);
  71. char PS_Match();
  72. char PS_Search(uchar BufferID);
  73. char PS_RegModel();
  74. char PS_StoreChar(uchar BufferID,uint PageID);
  75. char PS_LoadChar(uchar BufferID,uint PageID);
  76. char PS_Empty();
  77. char PS_VfyPwd();
  78. char PS_Enroll();
  79. char PS_Identify();


  80. char PS_StoreChar(uchar BufferID,uint PageID);

  81. #endif
复制代码

所有资料51hei提供下载:
AS608相关资料与程序.rar (467.7 KB, 下载次数: 636)


AS608(新).rar

4.87 KB, 下载次数: 473, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏11 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:393814 发表于 2018-9-6 23:00 | 只看该作者
认真学习!感觉楼主分享!
回复

使用道具 举报

板凳
ID:52915 发表于 2018-9-19 18:02 | 只看该作者
正在学习AS608,非常好,多谢!
回复

使用道具 举报

地板
ID:333834 发表于 2018-9-25 17:44 | 只看该作者
楼主您好!请问AS608怎么读取ImageBuffer中的指纹原图像呢?
回复

使用道具 举报

5#
ID:242606 发表于 2018-10-1 22:59 | 只看该作者
正在学习as608
回复

使用道具 举报

6#
ID:384234 发表于 2018-10-9 21:59 | 只看该作者
as680集成模块好用么
回复

使用道具 举报

7#
ID:99693 发表于 2018-10-10 15:40 | 只看该作者
好东西拿出分享是一种美德
回复

使用道具 举报

8#
ID:170892 发表于 2018-10-20 14:55 | 只看该作者
yingjiehan 发表于 2018-10-9 21:59
as680集成模块好用么

个人用是没什么问题的,采样要多对比几次,要不有时候手指不识别。(采样的时候最好采样5次,手指偏上、偏下,中间,偏左,偏右)
回复

使用道具 举报

9#
ID:420816 发表于 2018-11-4 23:28 | 只看该作者
最近准备写写指纹的课程设计,参考一下,谢了
回复

使用道具 举报

10#
ID:420816 发表于 2018-11-4 23:29 | 只看该作者
最近准备写相关的课程设计,参考一下先
回复

使用道具 举报

11#
ID:428969 发表于 2018-11-19 01:43 | 只看该作者
谢谢楼主的热情分享
回复

使用道具 举报

12#
ID:459659 发表于 2019-1-7 16:59 | 只看该作者
好东西
回复

使用道具 举报

13#
ID:468545 发表于 2019-1-15 15:04 | 只看该作者
AS608上位机提示校验和错,怎么处理
回复

使用道具 举报

14#
ID:375732 发表于 2019-1-15 19:43 | 只看该作者
正需要呢 谢谢楼主分享
回复

使用道具 举报

15#
ID:220421 发表于 2019-1-21 08:41 | 只看该作者
谢谢分享
回复

使用道具 举报

16#
ID:292518 发表于 2019-1-25 14:58 | 只看该作者
好东西拿出分享是一种美德
回复

使用道具 举报

17#
ID:390243 发表于 2019-1-26 13:13 | 只看该作者
楼主,请问在使用as608和51通信的时候是直接连在单片机的30.31口的吗?为什么我使用的时候单片机接收模块返回的指令时,单片机无法识别这个指令?造成程序陷在死循环了。
回复

使用道具 举报

18#
ID:473525 发表于 2019-1-29 10:49 | 只看该作者
正在学习,参考下
回复

使用道具 举报

19#
ID:355095 发表于 2019-3-2 23:32 | 只看该作者
我想问问代码里面的 TI RT 是什么
回复

使用道具 举报

20#
ID:485297 发表于 2019-3-6 00:38 | 只看该作者
谢谢分享
回复

使用道具 举报

21#
ID:290578 发表于 2019-4-2 23:52 | 只看该作者
感谢楼主分享,我参考一下。
回复

使用道具 举报

22#
ID:507944 发表于 2019-4-10 12:47 | 只看该作者
好东西一起分享
回复

使用道具 举报

23#
ID:516808 发表于 2019-4-19 22:42 | 只看该作者
正在学习AS608,非常好,多谢!
回复

使用道具 举报

24#
ID:495929 发表于 2019-5-15 17:15 | 只看该作者
正在学习AS608,非常好,多谢!
回复

使用道具 举报

25#
ID:128880 发表于 2019-7-31 13:33 | 只看该作者
谢谢分享
回复

使用道具 举报

26#
ID:503167 发表于 2019-8-19 09:51 | 只看该作者
感谢楼主提供思路
回复

使用道具 举报

27#
ID:602079 发表于 2019-8-20 18:32 | 只看该作者
好东西,下载来学习一下
回复

使用道具 举报

28#
ID:334202 发表于 2019-10-14 19:17 | 只看该作者
可以可以很不错
回复

使用道具 举报

29#
ID:297735 发表于 2019-10-15 21:26 | 只看该作者
好东西呀  看看  谢谢楼主
回复

使用道具 举报

30#
ID:297735 发表于 2019-10-15 21:27 | 只看该作者
好东西哦  谢谢楼主分享
回复

使用道具 举报

31#
ID:691724 发表于 2020-4-16 21:27 | 只看该作者
程序很完整,值得参考
回复

使用道具 举报

32#
ID:733567 发表于 2020-4-20 15:15 | 只看该作者
认真学习!感觉楼主分享!
回复

使用道具 举报

33#
ID:726311 发表于 2020-4-22 08:23 | 只看该作者
下载下来头文件都没
回复

使用道具 举报

34#
ID:469448 发表于 2020-5-10 14:43 | 只看该作者
感谢分享
回复

使用道具 举报

35#
ID:691724 发表于 2020-5-10 22:41 | 只看该作者
正在学习AS608,非常好,多谢!
回复

使用道具 举报

36#
ID:744356 发表于 2020-5-11 12:42 | 只看该作者
感谢,非常好
回复

使用道具 举报

37#
ID:703680 发表于 2020-5-27 12:44 来自手机 | 只看该作者
楼主可以加个联系方式请教一下吗?
回复

使用道具 举报

38#
ID:842343 发表于 2021-12-25 16:19 | 只看该作者
LOGLOG6 发表于 2019-1-26 13:13
楼主,请问在使用as608和51通信的时候是直接连在单片机的30.31口的吗?为什么我使用的时候单片机接收模块返 ...

兄弟解决这个问题了么,我也遇到了这个问题
回复

使用道具 举报

39#
ID:1003116 发表于 2022-1-22 18:59 | 只看该作者

正在学习as608
回复

使用道具 举报

40#
ID:1009187 发表于 2022-3-9 13:56 | 只看该作者
感谢楼主,正在尝试学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表