标题: 单片机+JQ6500语音模块使用代码 [打印本页]

作者: aa2962985    时间: 2020-1-30 17:05
标题: 单片机+JQ6500语音模块使用代码
最近在家无聊做东西玩,要用一个模块驱动喇叭放提示音,一开始买的是WT588DM01图的就是自带8M Flash省心,结果TM还要另外买30几块钱的烧写器才能用。
后来又咬咬牙买了个JQ6500语音模块,插USB连电脑就能烧写mp3进去,果然还是深圳厂商洞察需求。
买是买来了,但是厂家配的资料还分3个版本,PCB外观都改了,PDF没更新,只好自己捣鼓,按着参考资料用个51试试手。

这是PDF里面的模块外面图,实际买来的长下面的样子


芯片是24脚,模块16脚。引出来的16个脚没变,就是模块PCB板上面有略微变化,但是不影响对模块引出来的16个脚直接使用。


模块接线原理图,SPK+和SPK-实测可以直接接无源蜂鸣器。

单片机源程序如下:
  1. #include <reg51.h>//头文件
  2. #include <intrins.h>
  3. /*
  4. 本模块的第九脚也就是RX脚连接到单片机的P3^1
  5.         第十脚也就是TX脚连接到单片机的P3^0(如果你不处理本模块返回的数据可以不连接)
  6.                                 同时本模块和单片机还要共地急GND连接GND
  7.                                 本模块五伏供电也可以直接由单片机上的电源供电
  8. */

  9. typedef   unsigned char  uint8;
  10. typedef   unsigned int   uint16;
  11. sbit KEY1=P3^2;//第一曲键
  12. sbit KEY2=P3^3;//第一曲循环键
  13. sbit KEY3=P3^4;//暂停键
  14. sbit KEY4=P3^5;//进入睡眠键


  15. uint8 First[]={0x7E,0x04,0x03,0x00,0X01,0xEF};//第一曲指令
  16. uint8 Next[]={0x7E,0x03,0x11,0x01,0xEF};                                    //            第一首循环
  17. uint8 Add[]={0x7E ,0x02, 0x0E, 0xEF};                                        //                          0x0e暂停
  18. uint8 Sub[]={0x7E ,0x02 ,0x0A, 0xEF};         //                                     0x0a进入睡眠

  19. void delay150ms(void)   //误差 -0.000000000047us
  20. {
  21.     unsigned char a,b,c;
  22.     for(c=6;c>0;c--)
  23.         for(b=52;b>0;b--)
  24.             for(a=220;a>0;a--);
  25.     _nop_();  //if Keil,require use intrins.h
  26. }




  27. /*
  28. * UART初始化
  29. * 波特率:9600
  30. */
  31. void UART_init(void)
  32. {
  33.     SCON = 0x50;        // 10位uart,允许串行接受

  34.     TMOD = 0x20;        // 定时器1工作在方式2(自动重装)                        0010 0000
  35.     TH1 = 0xFD;
  36.     TL1 = 0xFD;         //设置波特率为9600

  37.     TR1 = 1;
  38. }

  39. /*
  40. * UART 发送一字节
  41. 入口参数uint8的数据类型 即要发送的数据
  42. */
  43. void UART_send_byte(uint8 dat)
  44. {
  45.         SBUF = dat;
  46.         while (TI == 0);
  47.         TI = 0;
  48. }

  49. /*
  50. * UART 发送字符串
  51.   第一个参数要发送字符串或数据的首地址
  52.   第二个参数是要发送的数据或字符串的长度
  53. */
  54. void UART_send_string(uint8 *buf,uint8 len)
  55. {  uint8 i;
  56.         for(i=0;i<len;i++)
  57.                 UART_send_byte(*buf++);
  58. }

  59. main()
  60. {
  61.         UART_init();//串口初始化
  62.         
  63.         while (1)   //一个大循环一直在检测按键和发送指令
  64.         {  if(KEY1==0)//如果第一个键被按下播放第一段

  65.     {                while(!KEY1);//等待按键松开
  66.                          UART_send_string(First,6);
  67.     }               
  68.                 else if(KEY2==0)//如果第二个按键按下循环第一曲

  69.     {                while(!KEY2);//等待按键松开
  70.                          UART_send_string(Next,5);
  71.                          delay150ms();                           //经测试,两个指令之间延时150ms效果最好
  72.                          UART_send_string(First,6);
  73.     }               
  74.                 else if(KEY3==0)//如果第三个按键按下暂停播放
  75.                         {                while(!KEY3);//等待按键松开
  76.                          UART_send_string(Add,4);
  77.     }        
  78. else if(KEY4==0)//如果第四个按键按下进入睡眠状态

  79.     {                while(!KEY4);//等待按键松开
  80.                          UART_send_string(Sub,4);
  81.     }                        
  82.         }

  83. }
复制代码
用到了四个按键,还有一个串口,每检测到一个按键的按下就利用单片机给模块JQ6500发串口指令,两个指令之间不少于150ms(实测),不然会没反应。

顺手画了AD 的原理图库和PCB库
JQ6500原理图库和PCB库.zip (544.78 KB, 下载次数: 66)



作者: qq2166    时间: 2020-3-12 19:22
只有按键控制的程序吗?有没有串口控制的自动播放制定曲目的
作者: Lprong    时间: 2020-3-13 17:47
写得很棒,赞一个
作者: man1234567    时间: 2020-3-14 21:22
JQ6500语音模块貌似九块九包邮至于咬咬牙买
作者: 老小怪    时间: 2020-4-10 17:54
如果一线串口要怎么写程序呢
作者: 疯了的单片机    时间: 2020-4-11 13:38
JQ6500能实现语音报警吗?
作者: super彡宸    时间: 2020-5-8 14:36
为什么我用单片机开发板,5V电源供电,jQ8400模块只闪烁一下就熄灭再也不工作,这是怎么回事,怎么解决求
作者: wuyu666    时间: 2024-4-23 16:36
写的很好,已学习,谢谢大佬




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1