标题:
51单片机控制syn6288播放汉语音程序
[打印本页]
作者:
heicc
时间:
2015-1-5 22:09
标题:
51单片机控制syn6288播放汉语音程序
//注意:51单片机使用12M晶振串口发送数据会有误差而不能工作
// 所以只能使用11.0592M的晶振
#include <reg51.h>
#include <string.h>
#include "uart.h"
void syn6288(char* tex,unsigned char changdu);
/****************************************************************************
* 函 数:void main(void)
* 功 能:主函数
* 参 数:无
* 返回值:无
* 更 新:无
* 备 注:无
****************************************************************************/
void main(void)
{
/****************需要发送的文本**********************************/
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)
;
}
/****************************************************************************
* 函 数:void syn6288(char* tex,unsigned char changdu)
* 功 能:语音读取字符串
* 参 数:tex--------字符串的地址
* changdu----字符串tex的长读
* 返回值:无
* 更 新:无
* 备 注:无
****************************************************************************/
void syn6288(char* tex,unsigned char changdu)
{
unsigned char headOfFrame[5];
unsigned char length;
unsigned char ecc = 0; //定义校验字节
unsigned int i=0;
length =changdu; //需要发送文本的长度
/*****************发送过程**************************************/
headOfFrame[0] = 0xFD ; //构造帧头FD
headOfFrame[1] = 0x00 ; //构造数据区长度的高字节
headOfFrame[2] = length + 3; //构造数据区长度的低字节
headOfFrame[3] = 0x01 ; //构造命令字:合成播放命令
/*****************带背景音乐**************************************/
headOfFrame[4] = 0x21 ; //构造命令参数:编码格式为GBK
/*****************不带背景音乐**************************************/
//headOfFrame[4] = 0x01 ; //构造命令参数:编码格式为GBK
for(i = 0; i<5; i++) //依次发送构造好的5个帧头字节
{
ecc=ecc^(headOfFrame[i]); //对发送的字节进行异或校验
SBUF = headOfFrame[i];
while (TI== 0) {;} //等待发送中断标志位置位
TI = 0; //发送中断标志位清零
}
for(i = 0; i<length; i++) //依次发送待合成的文本数据
{
ecc=ecc^(tex[i]); //对发送的字节进行异或校验
SBUF = tex[i];
while (TI== 0) {;}
TI = 0;
//uart_delay(10);
}
//uart_delay(1000);
SBUF=ecc; //最后发送校验字节
while(TI== 0)
;
TI=0;
}
复制代码
完整代码下载:
syn6288_2_ok.rar
(50.03 KB, 下载次数: 290)
2015-1-5 22:09 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
l137892652
时间:
2015-7-27 10:01
这个的原理能不能讲讲
作者:
chanyeol
时间:
2015-12-1 17:54
为啥我把你的程序复制粘贴了下编译有错啊?能帮我看看吗
作者:
252622979
时间:
2016-4-28 19:52
下来学习一下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1