欢迎哈哈哈3 发表于 2024-6-15 18:11:21

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

本帖最后由 欢迎哈哈哈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, "你好啊");//循环发送数据
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)
{
      /****************需要发送的文本**********************************/
      u8Frame_Info;
      u8HZ_Length;
      u8ecc= 0;                        //定义校验字节
      u16 i = 0;
      HZ_Length = strlen((u8*)HZdata);                         //需要发送文本的长度

      /*****************帧固定配置信息**************************************/
      Frame_Info = 0xFD ;                         //构造帧头FD
      Frame_Info = 0x00 ;                         //构造数据区长度的高字节
      Frame_Info = HZ_Length + 3;               //构造数据区长度的低字节
      Frame_Info = 0x01 ;                         //构造命令字:合成播放命令
      Frame_Info = 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, HZdata, HZ_Length);
      Frame_Info = 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);
}


zhangshiwei 发表于 2024-7-2 14:36:52

麻烦发一下你的电路原理图看看哈

zhangshiwei 发表于 2024-7-2 15:10:46

串口初始化这里调整一下

zhangshiwei 发表于 2024-7-2 15:11:41

zhangshiwei 发表于 2024-7-2 15:10
串口初始化这里调整一下

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

欢迎哈哈哈3 发表于 2024-7-3 18:00:25

zhangshiwei 发表于 2024-7-2 15:10
串口初始化这里调整一下

{:5_332:} 好的试一下,谢谢了
页: [1]
查看完整版本: 哪位大佬能指点下,用STC8A8K64D4单片机驱动SYN6288语音模块,始终不出声音。