UART 单片机与音乐播放模块通信

2019-07-15 13:09发布

最近在学UART串口通信。我想通过51单片机通过二线串口通讯控制音乐播放器模块。
选用的是JQ8400模块。 搜狗截图16年08月31日2142_1.png

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

void UART1_SendByte(unsigned char dat);
void ConfigUART(unsigned int baud);
void Music_play();
void Flash_swtich();
void delay(unsigned int i);

void main()
{
        EA = 1; //使能总中断
        ConfigUART(9600);
        Flash_swtich();
        Music_play();
        while (1);
}
/* 串口配置函数,baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
        SCON = 0x50; //配置串口为模式 1
        TMOD &= 0x0F; //清零 T1 的控制位
        TMOD |= 0x20; //配置 T1 为模式 2

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

void UART1_SendByte(unsigned char dat)
{

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

void Music_play()                  
{
    UART1_SendByte(0xAA);
    UART1_SendByte(0x02);
    UART1_SendByte(0x00);
    UART1_SendByte(0xAC);
}

void Flash_swtich()
{
    UART1_SendByte(0xAA);
    UART1_SendByte(0x0B);
    UART1_SendByte(0x01);
    UART1_SendByte(0x02);
        UART1_SendByte(0xB8);
}

void delay(unsigned int i)
{
unsigned char j;
for(i;i>0;i--)
  for(j=200;j>200;j--);

}

/* UART 中断服务函数 */
void InterruptUART() interrupt 4
{
        unsigned char temp;
        if (RI) //接收到字节
        {
                RI = 0; //手动清零接收中断标志位
                temp = SBUF;
        }
        if (TI) //字节发送完毕
        {
                TI = 0; //手动清零发送中断标志位
        }
}


我的程序有问题。所以请问各位大虾多多指点。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
面包君2
1楼-- · 2019-07-15 14:15
 精彩回答 2  元偷偷看……
蓝色星光
2楼-- · 2019-07-15 18:50
首先,你模块是怎么驱动的,你是一下直接通过IO口驱动模块,在来实验串口通信,因为我们这行是软硬结合的,没有人为了一个具体电路都没有的程序去看代码,找BUG.
chenwei6991627
3楼-- · 2019-07-15 22:39
先把串口调试通了,在说把

一周热门 更多>