⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tts.c

📁 AVR MEGA162控制语音芯片控制 OSYNO6188 TTS的代码
💻 C
字号:
/*----------------------------------------------------------------
		GPS采集及语音控制单元
		
	1.语音控制TTS,串口0 1200波特率,每一包50个字节,长度过大需要分包控制
------------------------------------------------------------------*/
#include<iom162v.h>
#include <macros.h>

//带有可选回车换行符输出的MEGA162的双UART程序
//发送采用查询方式,接收采用中断方式。晶振7.3728M,无分频。 
unsigned char gpsbuf[100];

unsigned char uartrbuffer[100];        //uart接受缓存100字节 
unsigned char uarttbuffer[50];                //uart发送缓存50字节 
int stringlon=0; 
unsigned char urflag;
unsigned char tmpchar;

//UART0 initialisation 
// desired baud rate:1200 
// actual baud rate:1200 (0.0%) 
// char size: 8 bit 
// parity: Disabled 
void uart0_init(void) 
{ 
	UCSR0B = 0x00; //disable while setting baud rate 
	UCSR0A = 0x00; //disable while setting baud rate 
	UBRR0L =0x03; //set baud rate 
	UBRR0H=0x00; 
	UCSR0C =(1<<URSEL0)|0b00000110; 
	UCSR0B=0b10011000; //enable 
} 

#pragma interrupt_handler uart0_rx_isr:20 
void uart0_rx_isr(void) 
{ 
//uart has received a character in UDR 
	uartrbuffer[stringlon]=UDR0; 
	stringlon++; 
	urflag=1; 
	if(stringlon>=100) 
  stringlon=0; 
} 

//UART1 initialisation 
// desired baud rate: 19200 
// actual: baud rate:19200 (0.0%) 
// char size: 8 bit 
// parity: NONE 
void uart1_init(void) 
{ 
 UCSR1B = 0x00; //disable while setting baud rate
 UCSR1A = 0x00; //disable while setting baud rate
 UBRR1L  =0x17; //set baud rate
 UBRR1H = 0x00;
 UCSR1C = (1<<URSEL1)|0b00000110;;
 UCSR1A = 0x00; //enable
 UCSR1B = 0x98; //enable
 urflag = 0;
} 


//*******************************************uart字符输出*************************** 
void putchar(int upart,unsigned char charx)            
//upart表示UART标号,0表示UART0,其他表示UART1;char0表示要发出的数据; 
{ 
  int i=0;
if(upart==0) 
  { 
  while(!(UCSR0A & 0x20)); 
      UDR0 = charx; 
  } 
else 
  { 
	while(!(UCSR1A & 0x20)); 
   	UDR1 = charx;
  } 
} 

//******************************************uart字符输出函数结束*************** 


//*******************************带可选回车换行的字符串输出函数****** 
//upart表示发出数据使用的端口号0表示使用UART0,其他表示使用UART1; 
//*s表示要发出数据的指针 
//senter0表示结尾是否使用0x0d,0表示使用,其他表示不使用 
//senter1表示结尾是否使用0x0a,0表示使用,其他表示不使用 
//stringl表示所要输出的字符串长度,0表示无限制 
void puts(unsigned char *s,int upart,int senter0,int senter1,int stringl) 
{ 
unsigned char outchar;
stringlon=0; 
if(upart==0) 
  { 
  if(stringl==0) 
      { 
      while(*s) 
        { 
        outchar=*s;    
        putchar(0,outchar); 
        s++; 
        } 
      if(senter0==0) 
        putchar(0,0x0d); 
      if(senter1==0) 
        putchar(0,0x0a); 
      } 
  else 
      { 
      while(stringlon<=(stringl-1)) 
        { 
        outchar=*(s+stringlon); 
        putchar(0,outchar); 
        stringlon++; 
        } 
      if(senter0==0) 
        putchar(0,0x0d); 
      if(senter1==0) 
        putchar(0,0x0a);      
      } 
  } 
else 
  { 
  if(stringl==0) 
      { 
      while(*s) 
        { 
        outchar=*s; 
        putchar(1,outchar); 
        s++; 
        } 
      if(senter0==0) 
        putchar(1,0x0d); 
      if(senter1==0) 
        putchar(1,0x0a); 
      } 
  else 
      { 
      while(stringlon<=(stringl-1)) 
        { 
        outchar=*(s+stringlon); 
        putchar(1,outchar); 
        stringlon++; 
        } 
      if(senter0==0) 
        putchar(1,0x0d); 
      if(senter1==0) 
        putchar(1,0x0a);      
      } 
  } 
} 

/*---------------------------------------
	语音芯片控制
	OSYNO6188 TTS
	波特率:1200初始,可以在运行过程中更改为4800,9600
	音量控制(放置在EEPROM中)
*----------------------------------------*/
#define TTSCOMMANDMAX	56
void SendComm2TTS(unsigned char *scontent,int size)
{
	unsigned char ttscomm[TTSCOMMANDMAX];
	unsigned char VolLvele=5;
	int nCount=0;
	int nSize;
	unsigned char checksum = 0;
	ttscomm[0]=0x01;
	ttscomm[1]=0x80;	//保持原有速度1200,
	ttscomm[2]=0xC0|0x00;
	ttscomm[3]=0x80|VolLvele;	//音量控制
	nSize=4;
	for(nCount=0;nCount<size;nCount++)
	{
		if((int)scontent[nCount]<0x7f)
			{
				ttscomm[nSize]= ((0xa380+scontent[nCount])>>8)&0xff;
				nSize++;
				ttscomm[nSize]= (0xa380+scontent[nCount])&0xff;
				nSize++;
			}
		else
		ttscomm[nSize++]=scontent[nCount];
	}
	ttscomm[nSize]=0x04;
	checksum=ttscomm[0];
	for(nCount=1;nCount<=nSize;nCount++)
	{
		checksum^=ttscomm[nCount];
	}
	ttscomm[nSize+1]=checksum;
	for(nCount=0;nCount<=nSize+1;nCount++)
	{
		putchar(0,ttscomm[nCount]);
	}
}
void delayms(int nsec)
{
	int i=0;
	int k=0;
	for(k=0;k<nsec;k++)
		for(i=0;i<2000;i++) asm("nop");
}

void main()
{

	SendComm2TTS("初始化GPS完成",13);
 	while(1)
 	{
		;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -