[原创] 基于CH554开发板的MP3语音播放

jennyzhaojie   2017-10-20 10:50 楼主
Mini MP3 Player是一款小巧的MP3播放模块,可以直接通过扬声器发出声音。该模块完美集成了MP3WAVWMA的硬解码,同时支持TF卡驱动及FAT16FAT32文件系统。在播放时,它无需繁琐的底层操作,具有使用方便,稳定可靠的特点。
该模块可采用电池供电,并带配有2中播放模式,即按键方式和串口控制方式。通过简单的串口指令即可完成对指定音乐的播放。
该模块的引脚分布如图1所示。
图片2.png
1 引脚分布
这里我们仅使用到以下引脚:
1--Vcc 模块电源输入引脚,使用时接5V电源。
2--RX UART程序数据输入端,接CH554TX引脚。
6--SPK2 喇叭+
7--GND 模块电源输入引脚,使用时接电源地。
8--SPK1 喇叭-
图片3.png
在串行通讯模式下,该模块共提供了下一首、上一首、播放、暂停、停止、音量设置及播放指定乐曲7种指令。在本人预定的制作题目智能语音展板中,主要涉及的指令有:音量设置和指定播放2个指令,即使用触摸键选择后,就播放指定的语种进行讲解。后面有时间的话,再配上感知功能,以便具有一定的智能性并达到节能的目的。
指定播放指令格式:
uint8_t cmd3[] = {0X7E, 0xFF, 0x06, 0X03, 00, 00, 01, 0xFE, 0xF7, 0XEF};
音量设置指令格式:
uint8_t cmd6[] = {0X7E, 0xFF, 0x06, 0X06, 00, 00, 10, 0xFE, 0xE5, 0XEF};
由于这2个指令均含有参数,故在指令中需变更其校验码,以音量设置为例,其校验码的计算函数如下,其中参数index为设置的音量值。
  1. void setVolume(uint8_t index)
  2. {
  3. uint8_t checksum = 0;
  4. cmd6[6] = (uint8_t)(index);
  5. for (int i=2; i<8; i++)
  6. {
  7. checksum += cmd6[i];
  8. }
  9. cmd6[8] = (uint8_t)~checksum; //计算校验码
  10. }
执行语音播放的主函数如下,其运行状态如图3所示。
  1. void main( )
  2. {
  3. UINT16 i = 0;
  4. CfgFsys( );
  5. mDelaymS(20);
  6. mInitSTDIO( );
  7. #if GPIO_INTERRUPT
  8. GPIOInterruptCfg();
  9. EA = 1;
  10. CH554UART0SendByte(0x7f);
  11. setVolume(15);
  12. for(i=0;i<10;i++)
  13. {
  14. CH554UART0SendByte(cmd6[i]);
  15. }
  16. mDelaymS(80);
  17. playn(2);
  18. for(i=0;i<10;i++)
  19. {
  20. CH554UART0SendByte(cmd3[i]);
  21. }
  22. #endif
  23. while(1);
  24. }
图片1.png
3 播放状态图
此内容由EEWORLD论坛网友jennyzhaojie原创,如需转载或用于商业用途需征得作者同意并注明出处
本帖最后由 jennyzhaojie 于 2017-10-20 10:57 编辑

回复评论 (4)

如果拍个播放的视频就更直观了
单价1元含税的USB和Touchkey单片机CH551G已大批量出货,试样QQ:1258305301
点赞  2017-10-20 11:33
用CH554控制MP3不错
点赞  2017-10-20 16:52
引用: 沁恒USB单片机 发表于 2017-10-20 11:33
如果拍个播放的视频就更直观了

回头试一试。
点赞  2017-10-21 10:42
CH554系列USB实用例程请参考:https://bbs.eeworld.com.cn/thread-571344-1-1.html
单价1元含税的USB和Touchkey单片机CH551G已大批量出货,试样QQ:1258305301
点赞  2017-10-23 11:53
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复