?? tts.c
字號:
/*----------------------------------------------------------------
GPS采集及語音控制單元
1.語音控制TTS,串口0 1200波特率,每一包50個字節(jié),長度過大需要分包控制
------------------------------------------------------------------*/
#include<iom162v.h>
#include <macros.h>
//帶有可選回車換行符輸出的MEGA162的雙UART程序
//發(fā)送采用查詢方式,接收采用中斷方式。晶振7.3728M,無分頻。
unsigned char gpsbuf[100];
unsigned char uartrbuffer[100]; //uart接受緩存100字節(jié)
unsigned char uarttbuffer[50]; //uart發(fā)送緩存50字節(jié)
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表示要發(fā)出的數(shù)據(jù);
{
int i=0;
if(upart==0)
{
while(!(UCSR0A & 0x20));
UDR0 = charx;
}
else
{
while(!(UCSR1A & 0x20));
UDR1 = charx;
}
}
//******************************************uart字符輸出函數(shù)結(jié)束***************
//*******************************帶可選回車換行的字符串輸出函數(shù)******
//upart表示發(fā)出數(shù)據(jù)使用的端口號0表示使用UART0,其他表示使用UART1;
//*s表示要發(fā)出數(shù)據(jù)的指針
//senter0表示結(jié)尾是否使用0x0d,0表示使用,其他表示不使用
//senter1表示結(jié)尾是否使用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 + -