找回密码
 立即注册
查看: 420|回复: 4

哪位大佬能指点下,用STC8A8K64D4单片机驱动SYN6288语音模块,始终不出声音。

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-04-30 10:02:32
已绑定手机

23

主题

175

回帖

878

积分

高级会员

积分
878
发表于 2024-6-15 18:11:21 | 显示全部楼层 |阅读模式
本帖最后由 欢迎哈哈哈3 于 2024-6-15 18:13 编辑

主程序


#include "stc8.h"
#include "main.h"
#include "UART.h"
void setinoutport()
{
        P0M1=0X00;P0M0=0X00;
        P1M1=0X00;P1M0=0X00;
        P2M1=0X00;P2M0=0X00;
        P3M1=0X00;P3M0=0X03;
}
main()
{
        setinoutport();
        Uart1_Init();
        for(;;)
        {
        SYN_FrameInfo(1, "[v5][t5]你好啊");  //循环发送数据
  P10=~P10;
                Delay_ms(1000);
        }
}


串口程序


#include "stc8.h"
#include "string.h"
//函数声明
void Uart1_Init(void);
void Uart1_SendChar(unsigned char Udat);
void Uart1_Send_Data(unsigned char *Buf,u8 j);
void SYN_FrameInfo(u8 Music, u8 *HZdata);
void Delay_ms(u16 t);


/**************芯片设置命令*********************/
u8 SYN_StopCom[] = {0xFD, 0X00, 0X02, 0X02, 0XFD}; //停止合成
u8 SYN_SuspendCom[] = {0XFD, 0X00, 0X02, 0X03, 0XFC}; //暂停合成
u8 SYN_RecoverCom[] = {0XFD, 0X00, 0X02, 0X04, 0XFB}; //恢复合成
u8 SYN_ChackCom[] = {0XFD, 0X00, 0X02, 0X21, 0XDE}; //状态查询
u8 SYN_PowerDownCom[] = {0XFD, 0X00, 0X02, 0X88, 0X77}; //进入POWER DOWN 状态命令

void Delay_ms(u16 s)
{
  unsigned int j;
  while((s--) != 0)
  {
    for(j = 0; j < 850; j++);
  }            
}

void Uart1_Init(void)
{
PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR &= 0xBF;                //定时器时钟12T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设置定时器模式
        TMOD |= 0x20;                //设置定时器模式
        TL1 = 0xFD;                        //设置定时初始值
        TH1 = 0xFD;                        //设置定时重载值
        ET1 = 0;                        //禁止定时器中断
        TR1 = 1;                        //定时器1开始计时
  ES=1;
        EA=1;
}

void Uart1_SendChar(unsigned char Udat)
{
        SBUF=Udat;                //将要发送的数据放入串口数据缓冲区
        while(!TI);                //等待发送完成
  TI=0;                     //清零TI发送完成标记               
}
//
void Uart1_Send_Data(u8 *Buf , u8 len)
{
         unsigned char i;
        for(i=0;i<len;i++)                                          //发送数组数据
        {
        Uart1_SendChar(*(Buf+i)); //发送数据
                Delay_ms(100);                                          //延时,发送数据间隔
        }               
}


//串口1中断
void Uart1_Isr() interrupt 4
{
        if(RI)
        {
                RI=0;
        }

}

//Music:  0:无背景音乐  1~15:选择背景音乐
void SYN_FrameInfo(u8 Music, u8 *HZdata)
{
        /****************需要发送的文本**********************************/
        u8  Frame_Info[50];
        u8  HZ_Length;
        u8  ecc  = 0;                          //定义校验字节
        u16 i = 0;
        HZ_Length = strlen((u8*)HZdata);                         //需要发送文本的长度

        /*****************帧固定配置信息**************************************/
        Frame_Info[0] = 0xFD ;                         //构造帧头FD
        Frame_Info[1] = 0x00 ;                         //构造数据区长度的高字节
        Frame_Info[2] = HZ_Length + 3;                 //构造数据区长度的低字节
        Frame_Info[3] = 0x01 ;                         //构造命令字:合成播放命令
        Frame_Info[4] = 0x01 | Music << 4 ; //构造命令参数:背景音乐设定

        /*******************校验码计算***************************************/
        for(i = 0; i < 5; i++)                                   //依次发送构造好的5个帧头字节
        {
                ecc = ecc ^ (Frame_Info);                //对发送的字节进行异或校验
        }

        for(i = 0; i < HZ_Length; i++)                   //依次发送待合成的文本数据
        {
                ecc = ecc ^ (HZdata);                                 //对发送的字节进行异或校验
        }
        /*******************发送帧信息***************************************/
        memcpy(&Frame_Info[5], HZdata, HZ_Length);
        Frame_Info[5 + HZ_Length] = ecc;
        Uart1_Send_Data(Frame_Info, 5 + HZ_Length + 1);
}


/***********************************************************
* 名    称: YS_SYN_Set(uchar *Info_data)
* 功    能: 主函数        程序入口
* 入口参数: *Info_data:固定的配置信息变量
* 出口参数:
* 说    明:本函数用于配置,停止合成、暂停合成等设置 ,默认波特率9600bps。
* 调用方法:通过调用已经定义的相关数组进行配置。
**********************************************************/
void YS_SYN_Set(u8 *Info_data)
{
        u8 Com_Len;
        Com_Len = strlen((char*)Info_data);
        Uart1_Send_Data(Info_data, Com_Len);
}


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:105
  • 最近打卡:2025-04-30 09:14:19

2

主题

48

回帖

386

积分

中级会员

积分
386
发表于 2024-7-2 14:36:52 | 显示全部楼层
麻烦发一下你的电路原理图看看哈
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:105
  • 最近打卡:2025-04-30 09:14:19

2

主题

48

回帖

386

积分

中级会员

积分
386
发表于 2024-7-2 15:10:46 | 显示全部楼层
串口初始化这里调整一下
截图202407021510215518.jpg

点评

提供关于51单片机的例程http://www.51hei.com/bbs/dpj-235675-1.html  详情 回复 发表于 2024-7-2 15:11
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:105
  • 最近打卡:2025-04-30 09:14:19

2

主题

48

回帖

386

积分

中级会员

积分
386
发表于 2024-7-2 15:11:41 | 显示全部楼层
zhangs*** 发表于 2024-7-2 15:10
串口初始化这里调整一下

提供关于51单片机的例程http://www.51hei.com/bbs/dpj-235675-1.html
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-04-30 10:02:32
已绑定手机

23

主题

175

回帖

878

积分

高级会员

积分
878
发表于 2024-7-3 18:00:25 | 显示全部楼层
zhangs*** 发表于 2024-7-2 15:10
串口初始化这里调整一下

{:5_332:} 好的试一下,谢谢了
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 13:10 , Processed in 0.163115 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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