📄 tts_send.c
字号:
/*************************************************
******文字转语音芯片驱动程序
******波特率 9600
******1位起始位 8位数据 1位停止位 无效验
*************************************************/
//sbit TTSTXD = P2^1 ;
// 11.0592 MHZ晶振 0xff 0xa0
// 22.1184 MHZ晶振 0xff 0x40
#define T1BAUDH 0xa0 //波特率 9600
#define T1BAUDL 0xa0
#define TTS_MAXSENDBUFLEN 60
uchar idata TTS_SendBitIndex ; //发送一字节中的N位 位索引
uchar idata TTS_SendBitData ; //正在发送的数据字节缓存
uchar idata TTS_Sendbuf[TTS_MAXSENDBUFLEN] ; //要发送的命令 发送缓存
uchar idata TTS_Sendbuflen ; //发送缓存的长度
uchar idata TTS_SendbufOutIndex ; //指向出数据地址
//bit Sended_flag ; //正在发送状态标志 1 表示发送 0 表示空闲
extern bit ToneFlag ;
/***************************************************
Name : TTS_Timer_Enable
Descrip : 开启定时器 使能发送
Input : flag 1 使能 0 禁止
Output : no
****************************************************/
void TTS_Timer_Enable(uchar flag)
{
EA = 0 ; // CPU Close all INT
TR1 = 0 ; // Close T1
TMOD = (TMOD & 0x0f) | 0x20 ; //方式2
TH1 = T1BAUDH ;
TL1 = T1BAUDL ;
// Sended_flag = 0 ;
TTS_SendBitIndex = 0 ;
TTS_SendbufOutIndex = 0 ;
TF1 = 0 ; // Reset
PT1 = flag ; // High Priority
ET1 = flag ; // Permit T1 INT
TR1 = flag ; // Start T1
ES = !flag ; // Close or start ES
ET0 = !flag ; // Close or start ET0
EA = 1 ; // CPU Open INT
}
/***************************************************
Name : TTS_Send_BIT
Descrip : 发送一字符中的1位 到 TTS
每波特率时间到时调用此函数
Input : no
Output : no
****************************************************/
void TTS_Send_BIT()
{
if(TTS_SendBitIndex == 0)
{
if(TTS_SendbufOutIndex == TTS_Sendbuflen) //SerialSBuf Empty
{
TTS_Sendbuflen = 0 ;
TTS_Timer_Enable(0) ;
Phone_ToneCtrl(TRUE) ;
return ;
}
TTS_SendBitData = TTS_Sendbuf[TTS_SendbufOutIndex] ;
TTS_SendbufOutIndex++ ;
TTS_SendBitIndex = 1 ;
}
if(TTS_SendBitIndex == 1) //send start bit
{
TTSTXD = 0 ; TTSTXD = 0 ; //out low
TTS_SendBitIndex = 2 ;
}
else if(TTS_SendBitIndex == 10) //send stop bit
{
TTSTXD = 1 ; TTSTXD = 1 ; //out high
TTS_SendBitIndex = 0 ;
}
else //send data bit
{
if(TTS_SendBitData&0x01 == 1) //out from low bit start
{
TTSTXD = 1 ; TTSTXD = 1 ; //out high
}
else
{
TTSTXD = 0 ; TTSTXD = 0 ; //out low
}
TTS_SendBitData >>= 1 ;
TTS_SendBitIndex++ ;
}
}
/***************************************************
Name : TTS_SendString
Descrip : 发送一字符串到TTS
Input : sendbuf 发送的字符串首地址
len 发送的字符串长度
Output : TRUE 发送成功
FLASE 发送失败
****************************************************/
uchar TTS_SendString(uchar *sendbuf,uchar len)
{
uchar i ;
for(i=0;i<len;i++)
{
TTS_Sendbuf[TTS_Sendbuflen++] = *(sendbuf+i) ;
}
return TRUE ;
}
/***************************************************
Name : TTS_Send_Timer_INT
Descrip : 发送波特率定时器中断程序
Input : no
Output : no
****************************************************/
void TTS_Send_Timer_INT() interrupt 3 using 3
{
EA = 0 ;
// TH1 = T1BAUDH ;
// TL1 = T1BAUDL ;
TTS_Send_BIT() ;
EA = 1 ;
}
/***************************************************
Name : Send_Play_Play
Descrip : 发送放音命令
Input : indata 要放音的内容
len 放音内容长度
Output : TRUE 发送成功
FLASE 发送失败
****************************************************/
uchar Send_Play_Play(uchar len,uchar *indata)
{
uchar buf[5] ;
EA = 0 ;
buf[0] = 0xfe ;
buf[1] = 0x01 ;
buf[2] = 0x00 ;
buf[3] = len ;
TTS_Sendbuflen = 0 ;
TTS_SendString(buf,4) ;
TTS_SendString(indata,len) ;
ToneFlag = FALSE ;
TTS_Timer_Enable(1) ;
EA = 1 ;
return TRUE ;
}
/***************************************************
Name : Send_Stop_Play
Descrip : 发送停止放音命令
Input : no
Output : TRUE :发送成功
FLASE :发送失败
****************************************************/
uchar Send_Stop_Play()
{
uchar buf[2] ;
EA = 0 ;
TTS_Sendbuflen = 0 ;
buf[0] = 0xfe ;
buf[1] = 0x02 ;
TTS_SendString(buf,2) ;
TTS_Timer_Enable(1) ;
EA = 1 ;
return TRUE ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -