SYN6288语音播放模块终极版Word文件下载.docx
- 文档编号:18523675
- 上传时间:2022-12-19
- 格式:DOCX
- 页数:13
- 大小:295.65KB
SYN6288语音播放模块终极版Word文件下载.docx
《SYN6288语音播放模块终极版Word文件下载.docx》由会员分享,可在线阅读,更多相关《SYN6288语音播放模块终极版Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
3、硬件电路搭建:
3.1外接电源组接法
3.2复位电路及状态指示电路
备注:
Ready/Busy此STATUS引脚信号为低电平时说明芯片正在等待接收数据。
在系统设计时可以将此引脚接
在MCU的中断输入源上,产生一个下降沿中断请求发送数据,以示上位机MCU可以向语音合成芯片发送数据。
3.3SYN6288的扬声器输出
(1)为了在用户应用中输出声音,SYN6288内置了推挽
式(Push-Pull)的DAC,可直接驱动喇叭,进行
声音播报。
并且SYN6288内置的DAC电路模块,
使用了VDDPP/VSSPP供电电源模块,具体电路说
明部分请参见(10.1)和(10.2)节,其供电电压值可独
立于其它电源组的供电。
(见右图)
3.4SYN6288外接高速晶振
3.5SYN6288串口通信的参考电路
上位机发送数据给SYN6288时,中间须加有反向器。
在实际电路中,我们用三极管做了一个反向器,电路如下图:
该电路的原理是:
MCU的TXD输出电平为0时,NPN三极管截止,RXD收到的电平为1。
MCU的TXD输出电平为1时,NPN三极管导通,RXD收到的电平为0。
3.6Res引脚(即第5引脚)的接法
3.7总体电路原理图:
4、程序的编写:
4.1命令帧格式:
芯片支持以下命令帧格式:
“帧头FD+数据区长度+数据区”格式。
(最大206个字节)
注意:
数据区(含命令字,命令参数,待发送文本,异或校验)的实际长度必须与帧头后定义的数据区长度严格一致,否则芯片会报接收失败。
4.2语音合成播放命令举例:
上位机发送给SYN6288芯片的所有命令和数据都需要用“帧”的方式进行封装后传输。
其它命令请自行参考SYN6288芯片手册:
4.3文本程序发送:
中文系统电脑的文本编码格式一般为:
ANSI即GB2312编码体系,这个可以用二进制文本编辑器(如BinaryEditor)打开并对照GB2312编码表察看。
参考程序:
//speaker.c
#include<
reg51.h>
string.h>
math.h>
#include"
typedef.h"
SPEAKER.h"
voiddelayMs(uint16xms){
uint16i,j;
for(i=0;
i<
xms;
i++)
for(j=0;
j<
123;
j++);
}
//语音模块初始化
voidSpeakerInit(){
/**************串口的初始化*****************/
TL1=0XFA;
//在11.0592MHZ下,设置波特率9600bps,工作方式2
TH1=0XFA;
TMOD=0X20;
SCON=0X50;
//串口工作方式1,允许接收
PCON=0X80;
EA=0;
REN=1;
TI=0;
//发生中断标志位置零
RI=0;
//接收中断标志位置零
TR1=1;
//定时器1用做波特率发生
//语音播报程序
uint8Speaker(char*pString){
uint8headOfFrame[5];
uint8length;
//定义字符串长度
uint8ecc=0;
//定义校验字节
uint16i=0;
if(pString==NULL)//空字符串
return-1;
/*****************发送过程**********************/
headOfFrame[0]=0XFD;
//构造帧头FD
headOfFrame[1]=0X00;
//构造数据区长度的高字节
length=strlen(pString);
//需要发送文本的长度
headOfFrame[2]=length+3;
//构造数据区长度的低字节
headOfFrame[3]=0X01;
//构造命令字:
合成播放命令
headOfFrame[4]=0X00;
//构造命令参数:
编码格式为GB2312
for(i=0;
5;
i++)//依次发送构造好的5个帧头字节
{
ecc=ecc^(headOfFrame[i]);
//对发送的字节进行异或校验
SBUF=headOfFrame[i];
while(TI==0){;
}//等待发送中断标志置位
TI=0;
//发送中断标志位清零
}
length;
i++)//依次发送待合成的文本数据
ecc=ecc^(*pString);
SBUF=(*pString);
pString++;
while(TI==0){;
SBUF=ecc;
while(TI==0){;
return0;
//成功返回0
//语音读整数
uint8SpeakerInt(intida){
uint8i;
uint8negative=0;
//负数标志位
uint8intLen=5;
charcdat[6]={0};
if(ida<
0){//若为负数取绝对值
ida=abs(ida);
negative=1;
cdat[0]=(char)(ida/10000);
cdat[1]=(char)((ida%10000)/1000);
cdat[2]=(char)((ida%1000)/100);
cdat[3]=(char)((ida%100)/10);
cdat[4]=(char)((ida%10)/1);
i++){
cdat[i]=cdat[i]+48;
if(cdat[0]=='
0'
){
intLen=4;
if(cdat[1]=='
intLen=3;
if(cdat[2]=='
intLen=2;
if(cdat[3]=='
)
intLen=1;
}
}
if(negative==1){
Speaker("
零下"
);
delayMs(1000);
Speaker(&
cdat[5-intLen]);
//语音读小数
uint8SpeakerFloat(floatfda,uint8dNum){//fda为传入的小数,dNum为其小数位数
intida;
//整数部分
floatdec;
//小数部分
longidec;
//转化后的小数部分
if(fda<
fda=fabs(fda);
ida=floor(fda);
dec=fda-ida;
idec=(long)(dec*pow(10,dNum+1));
//这里多取一位数,用于处理有可能出现x999的情况
Speaker("
[n2]"
delayMs(200);
SpeakerInt(-ida);
}else{
SpeakerInt(ida);
delayMs(3000);
点"
delayMs(1000);
[n1]"
if(idec%10>
=5){//如果是尾数x999的情况
idec+=10;
idec/=10;
SpeakerInt(idec);
voidmain(){
SpeakerInit();
while
(1){
现在的室外温度是"
delayMs(3000);
SpeakerInt(-37);
delayMs(1500);
SpeakerFloat(-32.23,3);
度"
//Speaker.h
#ifndef_SPEAKER_H_
#define_SPEAKER_H_
externvoidSpeakerInit();
//语音初始化程序
externuint8Speaker(char*pString);
//语音播放程序
externuint8SpeakerInt(intida);
//语音读整数
#endif
//typedef.h
#ifndefTYPEDEF_H_
#defineTYPEDEF_H_
typedefunsignedcharuint8;
typedefunsignedintuint16;
typedefunsignedlonguint32;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SYN6288 语音 播放 模块 终极