LQ_TTS6288語音模組

來源:互聯網
上載者:User

標籤:syn6388   語音   

//注意:51單片機使用12M晶振串口發送資料會有誤差而不能工作

// 所以只能使用11.0592M的晶振

main.c

#include <reg52.h>    
#include <string.h> 
#include "uart.h"
void syn6288(char*  tex,unsigned  char changdu);
/****************************************************************************
 * 函  數:void  main(void)
 * 功  能:主函數
 * 參  數:無
 * 返回值:無
 * 更  新:無
 * 備  註:無
****************************************************************************/ 
void  main(void) 
{        
/****************需要發送的文本**********************************/ 
char code text[] =  {"[v10][m10]前方距離100米 "};
char code hubei[] =  {"[v9][m9]hello world!"};
/****************串口的初始化************************************/ 
        
  uartinit();
syn6288(text,sizeof(text));
uart_delay(200000); //延時很重要
syn6288(hubei,sizeof(hubei));
uart_delay(100000); //延時很重要
  while(1);
}
/****************************************************************************
 * 函  數:void syn6288(char*  tex,unsigned  char changdu)
 * 功  能:語音讀取字串
 * 參  數:tex--------字串的地址
 *         changdu----字串tex的長讀
 * 返回值:無
 * 更  新:無
 * 備  註:無
****************************************************************************/ 
void syn6288(char*  tex,unsigned  char changdu)
{
unsigned  char  headOfFrame[5];
  unsigned  char  length;  
unsigned  char  ecc  = 0;  //定義校正位元組
unsigned  int i=0; 
length =changdu; //需要發送文本的長度


/*****************發送過程**************************************/           
headOfFrame[0] = 0xFD ; //構造幀頭FD
headOfFrame[1] = 0x00 ; //構造資料區長度的高位元組
headOfFrame[2] = length + 3; //構造資料區長度的低位元組
headOfFrame[3] = 0x01 ; //構造命令字:合成播放命令
/*****************帶背景音樂**************************************/   
headOfFrame[4] = 0x21 ; //構造命令參數:編碼格式為GBK
/*****************不帶背景音樂**************************************/   
//headOfFrame[4] = 0x01 ; //構造命令參數:編碼格式為GBK


for(i = 0; i<5; i++)   //依次發送構造好的5個幀頭位元組
{  
   ecc=ecc^(headOfFrame[i]); //對發送的位元組進行異或校正
   SBUF = headOfFrame[i]; 
   while (TI== 0) {;}   //等待發送中斷標誌位置位
   TI = 0; //發送中斷標誌位清零
}


for(i = 0; i<length; i++)   //依次發送待合成的文本資料
{  
   ecc=ecc^(tex[i]); //對發送的位元組進行異或校正
   SBUF = tex[i]; 
   while (TI== 0) {;} 
   TI = 0; 
//uart_delay(10);
}
//uart_delay(1000);
SBUF=ecc; //最後發送校正位元組
while(TI== 0);
TI=0;

}

uart.c

#include <reg52.H>
#include <stdio.h>
#include <string.h>
#include "uart.h"


/****************************************************************************
 * 函  數:void uartinit(void)
 * 功  能:串口中斷初始化
 * 參  數:無
 * 返回值:無
 * 更  新:無
 * 備  註:無
****************************************************************************/
void uartinit(void)     //定時器工作方式2                     
{
PCON|= 0x80;
SCON = 0x50;      //REN=1允許串列接受狀態,串口工作模式1           
TMOD|= 0x20;                                                          
//TH1  = 0xFD;     //baud*2  /* reload value 19200、資料位元8、停止位1。效驗位無 (11.0592) 
TH1 = 0xFA; //baud*2  /*  傳輸速率4800、資料位元8、停止位1。效驗位無 (110.592M) 
TL1 = 0xFA;      
TR1  = 1; 
RI = 0;
TI = 0;                                                            
ES   = 1;        //開串口中斷                  
EA   = 1;        // 開總中斷 
}
/****************************************************************************
 * 函  數:void USART_Send_Byte(unsigned char Data)
 * 功  能:串口發送一個字串
 * 參  數:Data--發送的位元組
 * 返回值:無
 * 更  新:無
 * 備  註:無
****************************************************************************/
void USART_Send_Byte(unsigned char Data)

SBUF=Data;
    while (!TI);
TI=0;
      
}
/****************************************************************************
 * 函  數:void USART_Send_Enter(void)
 * 功  能:串口發送字串
 *   串口發送0d 0a ,即斷行符號換行
 * 註:此函數就是發送0d 0a這兩個位元組,在“超級終端”上會有斷行符號換行的效果
 * 參  數:Data--發送的位元組
 * 返回值:無
 * 更  新:無
 * 備  註:無
****************************************************************************/
void USART_Send_Enter(void)
{
USART_Send_Byte(0x0d);
USART_Send_Byte(0x0a);
}
/****************************************************************************
 * 函  數:void USART_Send_Str(char *Data)
 * 功  能:串口發送字串
 * 參  數:Data--發送的字串指標
 * s:指向字串的指標 
 * 註:如果在字串中有‘\n‘,則會發送一個斷行符號換行
 * 返回值:無
 * 更  新:無
 * 備  註:無
****************************************************************************/
void USART_Send_Str(char *Data)
{
unsigned char i;
unsigned char len = strlen(Data)-1;
for (i=0; i<len; i++)
{
USART_Send_Byte(Data[i]);
}
if(Data[i]==‘\n‘) 
{
USART_Send_Enter();
}
else
{
USART_Send_Byte(Data[i]);
}
}
/****************************************************************************
 * 函  數:void numtostr(unsigned int dat,char *str)
 * 功  能:將一個32位的變數dat轉為字串,比如把1234轉為"1234"
 * 參  數:dat:帶轉的long型的變數
 *            str:指向字元數組的指標,轉換後的位元組串放在其中
 * 返回值:無
 * 更  新:無
 * 備  註:無
****************************************************************************/
void numtostr(unsigned int dat,char *str) 
{
  char temp[20];
  unsigned int i=0,j=0;
  i=0;
  while(dat)
  {
  temp[i]=dat%10+0x30;
  i++;
  dat/=10;
  }
  j=i;
  for(i=0;i<j;i++)
  {
  str[i]=temp[j-i-1];
  }
  if(!i) {str[i++]=‘0‘;}
  str[i]=0;
}
/****************************************************************************
 * 函  數:void USART_Put_Num(unsigned int dat)
 * 功  能:串口發送數值
 * 函數中會將數值轉為相應的字串,發送出去。比如 4567 轉為 "4567" 
 * 參  數:無
 * 返回值:無
 * 更  新:無
 * 備  註:無
****************************************************************************/
void USART_Put_Num(unsigned int dat)
{
  char temp[20];
  numtostr(dat,temp);
  USART_Send_Str(temp);
}
/****************************************************************************
 * 函  數: void delay(unsigned int i)
 * 功  能: 延時子程式 
 * 參  數:無
 * 返回值:無
 * 更  新:無
 * 備  註:無
****************************************************************************/
void uart_delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 500; j > 0; j--) ;


}
uart.h

#ifndef __UART_H__
#define __UART_H__
void uartinit(void);
void USART_Send_Byte(unsigned char Data);
void USART_Send_Enter(void);
void USART_Send_Str(char *Data);
void numtostr(unsigned int dat,char *str);
void USART_Put_Num(unsigned int dat);
void uart_delay(unsigned int i);
#endif

P3.1介面RXD

只需一個就串口接收可以發送問蹦轉成語音



LQ_TTS6288語音模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.