|
//注意:51單片機使用12M晶振串口發(fā)送數(shù)據(jù)會有誤差而不能工作 // 所以只能使用11.0592M的晶振 #include <reg51.h> #include <string.h> #include "uart.h" void syn6288(char* tex,unsigned char changdu); /**************************************************************************** * 函 數(shù):void main(void) * 功 能:主函數(shù) * 參 數(shù):無 * 返回值:無 * 更 新:無 * 備 注:無 ****************************************************************************/ void main(void) { /****************需要發(fā)送的文本**********************************/ char code text[] = {"[v10][m10]湖北"}; char code hubei[] = {"[v9][m9]ok"}; /****************串口的初始化************************************/ uartinit(); syn6288(text,sizeof(text)); uart_delay(2000); //延時很重要 syn6288(hubei,sizeof(hubei)); uart_delay(1000); //延時很重要 while(1) ; } /**************************************************************************** * 函 數(shù):void syn6288(char* tex,unsigned char changdu) * 功 能:語音讀取字符串 * 參 數(shù):tex--------字符串的地址 * changdu----字符串tex的長讀 * 返回值:無 * 更 新:無 * 備 注:無 ****************************************************************************/ void syn6288(char* tex,unsigned char changdu) { unsigned char headOfFrame[5]; unsigned char length; unsigned char ecc = 0; //定義校驗字節(jié) unsigned int i=0; length =changdu; //需要發(fā)送文本的長度 /*****************發(fā)送過程**************************************/ headOfFrame[0] = 0xFD ; //構(gòu)造幀頭FD headOfFrame[1] = 0x00 ; //構(gòu)造數(shù)據(jù)區(qū)長度的高字節(jié) headOfFrame[2] = length + 3; //構(gòu)造數(shù)據(jù)區(qū)長度的低字節(jié) headOfFrame[3] = 0x01 ; //構(gòu)造命令字:合成播放命令 /*****************帶背景音樂**************************************/ headOfFrame[4] = 0x21 ; //構(gòu)造命令參數(shù):編碼格式為GBK /*****************不帶背景音樂**************************************/ //headOfFrame[4] = 0x01 ; //構(gòu)造命令參數(shù):編碼格式為GBK for(i = 0; i<5; i++) //依次發(fā)送構(gòu)造好的5個幀頭字節(jié) { ecc=ecc^(headOfFrame[i]); //對發(fā)送的字節(jié)進行異或校驗 SBUF = headOfFrame[i]; while (TI== 0) {;} //等待發(fā)送中斷標(biāo)志位置位 TI = 0; //發(fā)送中斷標(biāo)志位清零 } for(i = 0; i<length; i++) //依次發(fā)送待合成的文本數(shù)據(jù) { ecc=ecc^(tex[i]); //對發(fā)送的字節(jié)進行異或校驗 SBUF = tex[i]; while (TI== 0) {;} TI = 0; //uart_delay(10); } //uart_delay(1000); SBUF=ecc; //最后發(fā)送校驗字節(jié) while(TI== 0) ; TI=0; } |
|