?? tts_send_str.c
字號:
/*************************************************
******文字轉(zhuǎn)語音芯片驅(qū)動程序
******波特率 9600
******1位起始位 8位數(shù)據(jù) 1位停止位 無效驗
*************************************************/
//sbit TTSTXD = P2^1 ;
// 11.0592 MHZ晶振 0xff 0xa0
// 22.1184 MHZ晶振 0xff 0x40
#define T1BAUDH 0xa0 //波特率 9600
#define T1BAUDL 0xa0
uchar idata TTS_SendBitIndex ; //發(fā)送一字節(jié)中的N位 位索引
uchar idata TTS_SendBitData ; //正在發(fā)送的數(shù)據(jù)字節(jié)緩存
uchar idata TTS_SendDataIndex ; //要發(fā)送的命令數(shù)據(jù)當前緩存位置
uchar idata TTS_SendDatalen ; //要發(fā)送的命令數(shù)據(jù)總長度
uchar *TTS_SendbufIndex ; //指向出數(shù)據(jù)地址
extern bit ToneFlag ;
/***************************************************
Name : TTS_Timer_Enable
Descrip : 開啟定時器 使能發(fā)送
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_SendDataIndex = 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 : 發(fā)送一字符中的1位 到 TTS
每波特率時間到時調(diào)用此函數(shù)
Input : no
Output : no
****************************************************/
void TTS_Send_BIT()
{
if(TTS_SendBitIndex == 0)
{
if(TTS_SendDataIndex >= TTS_SendDatalen) //SerialSBuf Empty
{
TTS_SendDatalen = 0 ;
TTS_Timer_Enable(0) ;
Phone_ToneCtrl(TRUE) ;
return ;
}
TTS_SendBitData = *(TTS_SendbufIndex+TTS_SendDataIndex) ;
TTS_SendDataIndex++ ;
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 : 發(fā)送一字符串到TTS
Input : sendbuf 發(fā)送的字符串首地址
len 發(fā)送的字符串長度
Output : TRUE 發(fā)送成功
FLASE 發(fā)送失敗
****************************************************
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 : 發(fā)送波特率定時器中斷程序
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 : 發(fā)送放音命令
Input : indata 要放音的內(nèi)容
len 放音內(nèi)容長度
Output : TRUE 發(fā)送成功
FLASE 發(fā)送失敗
****************************************************/
uchar Send_Play_Play(uchar len,uchar *indata)
{
EA = 0 ;
TTS_SendDatalen = len ;
TTS_SendbufIndex = indata ;
ToneFlag = FALSE ;
TTS_Timer_Enable(1) ;
EA = 1 ;
return TRUE ;
}
/***************************************************
Name : Send_Stop_Play
Descrip : 發(fā)送停止放音命令
Input : no
Output : TRUE :發(fā)送成功
FLASE :發(fā)送失敗
****************************************************/
uchar Send_Stop_Play()
{
EA = 0 ;
TTS_SendDatalen = 2 ;
TTS_SendbufIndex = YuYin_Stop ;
ToneFlag = FALSE ;
TTS_Timer_Enable(1) ;
EA = 1 ;
return TRUE ;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -