📄 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 + -