[MM32软件] 【MM32 eMiniBoard测评报告】+驱动JQ8400语音模块

[复制链接]
 楼主| hu9jj 发表于 2020-6-3 14:40 | 显示全部楼层 |阅读模式
    JQ8400是一个语音模块,可以用多种方式来播放事先录制好的wav和mp3文件,其具备一线串口ONE LINE的引脚,单片机可以通过这个引脚发送指令,控制语音模块的工作。一线串口的指令格式如下图:
JQ8400_08.jpg


    由于语音模块使用的是5V电源,但评测板上却没有5V电源的输出引脚(开始未曾想起arduino接口),只好在评测板上查看,结果在电源芯片旁找到一个5V电源焊盘(下图红色箭头所示):
JQ8400_02.jpg


    于是在此焊上了一根排针:
JQ8400_03.jpg


    在调试引脚时序的延时,开始使用的是例程提供的delay_ms函数,测试发现会对系统正常延时产生较大的干扰,最后还是另写了一个延时小函数才测试通过。
    最后通过逻辑分析仪来调整一线串口的时序,将时序调整到协议的要求。高电平的持续时间要求是1200ms,我调整到约1300ms:
JQ8400_05.jpg



    低电平的持续时间是400ms,我调整到432ms,满足了协议要求:
JQ8400_04.jpg


    下图为测试过程:
JQ8400_01.jpg

    测试结束时忽然想起评测板上提供了arduino接口,这个接口标准上应该会有5V电源,于是又将评测板上的杜邦线取下,检查发现其中的VCC就是5V电源接口:
JQ8400_09.jpg


    然后在arduino电源接口上焊上排针,重新将LCD显示屏、DS1307日历模块以及JQ8400语音模块重新连接好:
JQ8400_10.jpg


    下面是JQ8400语音模块添加的代码:

  1. #include "jq8400.h"


  2. extern uint16_t son_buf[10];

  3. /***************************************************
  4. *程 序 名:delayms()
  5. *作    用:毫秒延时程序
  6. *输入参数:延时时间(毫秒)
  7. *返回参数:无
  8. *备    注:
  9. ***************************************************/
  10. void delayms(uint16_t xms)  
  11. {
  12.     uint16_t x,y;
  13.     for(x=xms;x>0;x--)   
  14.     for(y=4;y>0;y--);
  15. }


  16. /***************************************************
  17. *程 序 名:JQ8400_Config()
  18. *作    用:配置引脚
  19. *输入参数:无
  20. *返回参数:无
  21. *备    注:使用PD3作数据通讯
  22. ***************************************************/
  23. void JQ8400_Config(void)
  24. {
  25.     GPIO_InitTypeDef  GPIO_InitStructure;
  26.    
  27.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
  28.    
  29.     GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_0;
  30.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  31.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  32.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  33. }

  34. /***************************************************
  35. *程 序 名:JQ8400Send(uint8_t dat)
  36. *作    用:发送数据到JQ8400(单总线)
  37. *输入参数:dat (要发送的数据)
  38. *返回参数:无
  39. *备    注:低位先,高低电平1:3=0,高低电平3:1=1
  40. ***************************************************/
  41. void JQ8400Send(uint8_t dat)
  42. {
  43.     uint8_t i;

  44.     Dat_H();
  45.     delayms(1000);     //拉高1毫秒
  46.         Dat_L();         //发出引导信号
  47.         delayms(2000);     //拉低2毫秒
  48. //测试情况
  49. //可用   1500:500,1200:400,900:300,750:250
  50. //不可用 300:100,
  51. //不稳定 600:200
  52. //
  53. //
  54.         for ( i=0; i<8; i++ )
  55.     {
  56.         Dat_H();          //拉高,准备延时>2ms

  57.         if( dat & 0x01 )  //高电平,延时3:1表示数据位1
  58.         {
  59.             delayms(1200);  //750(>1.2ms)
  60.             Dat_L();
  61.             delayms(400);  //250(>0.4ms)
  62.         }
  63.         else              //低电平,延时1:3表示数据位0
  64.         {
  65.             delayms(400);
  66.             Dat_L();
  67.             delayms(1200);
  68.         }
  69.         dat >>= 1;
  70.     }

  71.         Dat_H();
  72.         delayms(20);          //间隔>10毫秒

  73. }


  74. /***************************************************
  75. *程 序 名:JQ_Vol(uint8_t vol)
  76. *作    用:设置音量大小(0~30)
  77. *输入参数:vol (1~3)
  78. *返回参数:无
  79. *备    注:
  80. ***************************************************/
  81. void JQ_Vol(uint8_t vol)
  82. {
  83.         uint8_t n;
  84.        
  85.         JQ8400Send(0x0a);
  86.     n = vol / 10;
  87.         JQ8400Send(n);              //十位
  88.         n = vol % 10;
  89.     JQ8400Send(n);              //个位
  90.         JQ8400Send(0x0c);
  91. }


  92. /***************************************************
  93. *程 序 名:JQ_Stop()
  94. *作    用:停止放音
  95. *输入参数:无
  96. *返回参数:无
  97. *备    注:
  98. ***************************************************/
  99. void JQ_Stop(void)
  100. {
  101.     JQ8400Send(0x13);
  102. }


  103. /***************************************************
  104. *程 序 名:JQ_Next()
  105. *作    用:下一曲
  106. *输入参数:无
  107. *返回参数:无
  108. *备    注:
  109. ***************************************************/
  110. void JQ_Next(void)
  111. {
  112.     JQ8400Send(0x15);
  113. }


  114. /***************************************************
  115. *程 序 名:JQ_All(uint16_t nb)
  116. *作    用:播放指定语音
  117. *输入参数:文件名(序号)
  118. *返回参数:无
  119. *备    注:文件名应为全数字字符
  120. ***************************************************/
  121. void JQ_All(uint16_t nb)
  122. {
  123.     uint8_t n,b;          //当前位数字,b=1 有效数字开始
  124.        
  125.         JQ8400Send(0x0a);     //清零数字
  126.         n = nb / 10000;       //万位
  127.         if(n>0){
  128.         JQ8400Send(n);
  129.             b = 1;
  130.         }
  131.         n = nb % 10000 / 1000;//千位
  132.         if(n > 0 | b > 0){
  133.             JQ8400Send(n);
  134.                 b = 1;
  135.         }
  136.         n = nb % 1000 / 100;  //百位
  137.         if(n > 0 | b > 0){
  138.             JQ8400Send(n);
  139.                 b = 1;
  140.         }
  141.         n = nb % 100 / 10;    //十位
  142.         if(n > 0 | b > 0){
  143.             JQ8400Send(n);
  144.         }
  145.         n = nb % 10;          //个位
  146.     JQ8400Send(n);
  147.        
  148.         JQ8400Send(0x0b);     //选曲确认
  149.         JQ8400Send(0x11);     //开始播放
  150. }



JQ8400_07.jpg
Betty996 发表于 2021-1-10 12:45 | 显示全部楼层
感谢楼主分享,这个语音芯片我还是很感兴趣的,搜了一下,原来可以串口操作,还可以一线操作,很棒
wahahaheihei 发表于 2021-1-11 22:19 | 显示全部楼层
楼主DIY的板子真棒
 楼主| hu9jj 发表于 2021-1-12 09:28 | 显示全部楼层
Betty996 发表于 2021-1-10 12:45
感谢楼主分享,这个语音芯片我还是很感兴趣的,搜了一下,原来可以串口操作,还可以一线操作,很棒 ...

是的,主要是可以播放自己录制的声音文件,方便用于各种家电或控制装置中。
 楼主| hu9jj 发表于 2021-1-12 09:31 | 显示全部楼层

这只是初期用洞洞板制作的扩展板,现在都用自己设计的PCB板,比买洞洞板更方便。
chenqianqian 发表于 2021-1-15 07:54 来自手机 | 显示全部楼层
不错,学习了。
lidi911 发表于 2021-1-15 12:40 来自手机 | 显示全部楼层
这个语音模块是在某宝上买的?
 楼主| hu9jj 发表于 2021-1-15 14:05 | 显示全部楼层
lidi911 发表于 2021-1-15 12:40
这个语音模块是在某宝上买的?

是的,现在网购真方便。
嵌入小菜菜 发表于 2021-1-15 17:08 | 显示全部楼层
用的是什么软件测试的,可以分享一下吗?
 楼主| hu9jj 发表于 2021-1-15 17:52 | 显示全部楼层
嵌入小菜菜 发表于 2021-1-15 17:08
用的是什么软件测试的,可以分享一下吗?

就是移植的商家提供的代码,已经全文发布在一楼。
里面有晴雨 发表于 2021-1-15 17:53 | 显示全部楼层
这是谁家的语音模块?分享一下。
 楼主| hu9jj 发表于 2021-1-15 19:52 | 显示全部楼层
里面有晴雨 发表于 2021-1-15 17:53
这是谁家的语音模块?分享一下。

JQ8400,某宝搜索一下,会有很多的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:Microchip
简介:让我们来为您提供帮助。我们可提供各种资源来帮助您解决一切问题。是否需要与我们的客户支持团队联系?您可以通过电话、在线聊天功能或电子邮件与他们联系。

151

主题

1063

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部