找回密码
 立即注册

QQ登录

只需一步,快速开始

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

UART 二线串口通信 单片机控制语音模块

[复制链接]
跳转到指定楼层
楼主
最近在学UART串口通信。我想通过51单片机通过二线串口通讯控制音乐播放器模块。
[size=14.1666660308838px]选用的是JQ8400模块。

通过下载在单片机的程序,然后通过二线串口控制语音模块。程序如下(然而并没有驱动模块播放。。。)
  1. #include

  2. void UART1_SendByte(unsigned char dat);
  3. void ConfigUART(unsigned int baud);
  4. void Music_play();
  5. void Flash_swtich();
  6. void delay(unsigned int i);

  7. void main()
  8. {
  9.         EA = 1; //使能总中断
  10.         ConfigUART(9600);
  11.         Flash_swtich();
  12.         Music_play();
  13.         while (1);
  14. }
  15. /* 串口配置函数,baud-通信波特率 */
  16. void ConfigUART(unsigned int baud)
  17. {
  18.         SCON = 0x50; //配置串口为模式 1
  19.         TMOD &= 0x0F; //清零 T1 的控制位
  20.         TMOD |= 0x20; //配置 T1 为模式 2

  21.         TH1 = 256 - (11059200/12/32)/baud; //计算 T1 重载值
  22.         TL1 = TH1; //初值等于重载值
  23.         ET1 = 0; //禁止 T1 中断
  24.         ES = 1; //使能串口中断
  25.         TR1 = 1; //启动 T1
  26. }

  27. void UART1_SendByte(unsigned char dat)
  28. {

  29.           SBUF = dat;
  30.         while(!TI);        
  31.         TI = 0;
  32.         delay(1000);
  33. //        SBUF=dat; //将数据写入到串口缓冲
  34. //        sending=1;         //设置发送标志
  35. //        while(sending); //等待发送完毕
  36. }        

  37. void Music_play()                  
  38. {
  39.     UART1_SendByte(0xAA);
  40.     UART1_SendByte(0x02);
  41.     UART1_SendByte(0x00);
  42.     UART1_SendByte(0xAC);
  43. }

  44. void Flash_swtich()
  45. {
  46.     UART1_SendByte(0xAA);
  47.     UART1_SendByte(0x0B);
  48.     UART1_SendByte(0x01);
  49.     UART1_SendByte(0x02);
  50.         UART1_SendByte(0xB8);
  51. }

  52. void delay(unsigned int i)
  53. {
  54. unsigned char j;
  55. for(i;i>0;i--)
  56.   for(j=200;j>200;j--);

  57. }

  58. /* UART 中断服务函数 */
  59. void InterruptUART() interrupt 4
  60. {
  61.         unsigned char temp;
  62.         if (RI) //接收到字节
  63.         {
  64.                 RI = 0; //手动清零接收中断标志位
  65.                 temp = SBUF;
  66.         }
  67.         if (TI) //字节发送完毕
  68.         {
  69.                 TI = 0; //手动清零发送中断标志位
  70.         }
  71. }
复制代码


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2016-9-4 15:26 | 只看该作者
这个很好,是赠送版?
回复

使用道具 举报

板凳
ID:124745 发表于 2016-9-22 22:10 | 只看该作者
admin 发表于 2016-9-4 15:26
这个很好,是赠送版?

不是啊 啊。我用电脑上位机跟模块可以通讯,但是下载程序到单片机,让单片机控制语音模块,现在程序还没写好,
回复

使用道具 举报

地板
ID:108298 发表于 2016-9-23 16:59 | 只看该作者
没有看懂
回复

使用道具 举报

5#
ID:157748 发表于 2017-1-5 16:38 | 只看该作者
1025263254 发表于 2016-9-22 22:10
不是啊 啊。我用电脑上位机跟模块可以通讯,但是下载程序到单片机,让单片机控制语音模块,现在程序还没 ...

上位机怎么和语音模块连线
回复

使用道具 举报

6#
ID:406568 发表于 2018-10-8 15:59 | 只看该作者
你好,可以问一下你以前做的单片机控制语音模块最终怎么样了
回复

使用道具 举报

7#
ID:393452 发表于 2019-5-1 15:10 | 只看该作者
请问您有单片机串口控制语音模块播放的完整程序吗
回复

使用道具 举报

8#
ID:301791 发表于 2019-5-2 12:20 | 只看该作者
#include "JQ8900CMD.h"

uint8_t code Cmd_02[] = {0xAA, 0x0B, 0x01, 0x01, 0xB7};        //从SD卡播放
uint8_t code Cmd_03[] = {0xAA, 0x0B, 0x01, 0x02, 0xB8};        //从FLASH播放

uint8_t code Cmd_QMUp[] = {0xAA, 0x05, 0x00, 0xAF};                        //上一曲指令
uint8_t code Cmd_QMDow[] = {0xAA, 0x06, 0x00, 0xB0};                //下一曲指令

uint8_t code Cmd_Run[] = {0xAA, 0x02, 0x00, 0xAC};                        //播放指令
uint8_t code Cmd_Stop[] = {0xAA, 0x04, 0x00, 0xAE};                        //停止指令

uint8_t code Cmd_VoltUp[] = {0xAA, 0x14, 0x00, 0xBE};                //音量加
uint8_t code Cmd_VoltDow[] = {0xAA, 0x15, 0x00, 0xBF};                //音量减

uint8_t code Cmd_SJ[] = {0xAA, 0x18, 0x01, 0x05, 0xC8};                                //目录随机播放
uint8_t code Cmd_FLASH[] = {0xAA, 0x08, 0x02, 0x02, 0x2F, 0xE5};        //FLASH 根目录
uint8_t code Cmd_SD[] = {0xAA, 0x08, 0x02, 0x01, 0x2F, 0xE4};                //SD 根目录

static uint8_t CmdData[20];                //控制指令缓冲


//==================================================================================//
//        @ 函数名称:JQ8900_SetVolt
//        @ 功能说明:设置播放音量,0~30级
//==================================================================================//
void JQ8900_SetVolt( uint8_t volt )
{
        if (volt>30)        volt = 30;
        CmdData[0] = 0xAA;
        CmdData[1] = 0x13;
        CmdData[2] = 0x01;
        CmdData[3] = volt;
        CmdData[4] = CmdData[0]+CmdData[1]+CmdData[2]+CmdData[3];
        USART_SendDatas(CmdData,5);
}

//==================================================================================//
//        @ 函数名称:JQ8900_SetQM
//        @ 功能说明:设置曲目
//==================================================================================//
void JQ8900_SetQM( uint8_t volt )
{
        // if (volt>30)        volt = 30;
        CmdData[0] = 0xAA;
        CmdData[1] = 0x07;
        CmdData[2] = 0x02;
        CmdData[3] = 0x00;
        CmdData[4] = volt;
        CmdData[5] = CmdData[0]+CmdData[1]+CmdData[2]+CmdData[3]+CmdData[4];
        USART_SendDatas(CmdData,6);
}

//==================================================================================//
//        @ 函数名称:JQ8900_QMUp
//        @ 功能说明:上一曲
//==================================================================================//
void JQ8900_QMUp( void )
{
        USART_SendDatas(Cmd_QMUp,4);
}

//==================================================================================//
//        @ 函数名称:JQ8900_QMDow
//        @ 功能说明:下一曲
//==================================================================================//
void JQ8900_QMDow( void )
{
        USART_SendDatas(Cmd_QMDow,4);
}

//==================================================================================//
//        @ 函数名称:JQ8900_Run
//        @ 功能说明:播放
//==================================================================================//
void JQ8900_Run( void )
{
        USART_SendDatas(Cmd_Run,4);
}


//==================================================================================//
//        @ 函数名称:JQ8900_Stop
//        @ 功能说明:暂停
//==================================================================================//
void JQ8900_Stop( void )
{
        USART_SendDatas(Cmd_Stop,4);
}



//==================================================================================//
//        @ 函数名称:JQ8900_VoltUp
//        @ 功能说明:音量加
//==================================================================================//
void JQ8900_VoltUp( void )
{
        USART_SendDatas(Cmd_VoltUp,4);
}

//==================================================================================//
//        @ 函数名称:JQ8900_VoltDow
//        @ 功能说明:音量减
//==================================================================================//
void JQ8900_VoltDow( void )
{
        USART_SendDatas(Cmd_VoltDow,4);
}



//==================================================================================//
//        @ 函数名称:JQ8900_FlashFileCBQM
//        @ 功能说明:插播FLASH指定目录  文件字母开头01~99
//==================================================================================//
void JQ8900_FlashFileCBQM( uint8_t Data )
{
        uint8_t Temp1 = Data%100/10 + 0x30;
        uint8_t Temp2 = Data%10 + 0x30;
       
        CmdData[0] = 0xAA;
        CmdData[1] = 0x17;
        CmdData[2] = 0x0E;
        CmdData[3] = 0x02;
        CmdData[4] = 0x2F;
        CmdData[5] = 0xCF;
        CmdData[6] = 0xB5;
        CmdData[7] = 0xCD;
        CmdData[8] = 0xB3;
        CmdData[9] = 0x2A;
        CmdData[10] = 0x2F;
        CmdData[11] = Temp1;
        CmdData[12] = Temp2;
        CmdData[13] = 0x2A;
        CmdData[14] = 0x3F;
        CmdData[15] = 0x3F;
        CmdData[16] = 0x3F;
       
        CmdData[17] = CmdData[0]+CmdData[1]+CmdData[2]+CmdData[3]+CmdData[4]+CmdData[5] \
                                        +CmdData[6]+CmdData[7]+CmdData[8]+CmdData[9]+CmdData[10]+CmdData[11] \
                                        +CmdData[12]+CmdData[13]+CmdData[14]+CmdData[15]+CmdData[16];
        USART_SendDatas(CmdData,18);
}

//==================================================================================//
//        @ 函数名称:JQ8900_ForSDSJBF
//        @ 功能说明:从SD随机播放
//==================================================================================//
void JQ8900_ForSDSJBF( uint8_t Qm )
{
        USART_SendDatas(Cmd_02,5);                        //设置为SD卡磁盘
        USART_SendDatas(Cmd_SD,6);                        //选择SD根目录
        JQ8900_SetQM(Qm);                                                        //设置曲目1
        USART_SendDatas(Cmd_SJ,5);                        //目录随机播放
}

//==================================================================================//
//        @ 函数名称:JQ8900_ForFlashSJBF
//        @ 功能说明:从FLASH随机播放
//==================================================================================//
void JQ8900_ForFlashSJBF( uint8_t Qm )
{
        USART_SendDatas(Cmd_03,5);                        //设置为FLASH磁盘
        USART_SendDatas(Cmd_FLASH,6);                //选择FLASH根目录
        JQ8900_SetQM(Qm);                                                        //设置曲目1
        USART_SendDatas(Cmd_SJ,5);                        //目录随机播放
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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