51单片机控制语音芯片进行播报怎么做,另外PC机通过无线给单片机传输命令

本设计中PC机上的串口助手发出需要播放的语音路数指令,通过232串口传输给单片机。本题采用三线串口模式,三线串口模式其实是标准的SPI通信方式。当单片机收到指令后通过三根IO线发送控制命令给语音播放模块,模块到后就播放某一段音频文件。音频输出后需要进行音频放大处理,音频放大后送到喇叭进行播放。本设计主要是进行语音播放芯片、音频放大芯片以及单片机的选取、电路搭建和单片机编程、仿真等工作。
具体是采用AT91C2051(和AT89C2051应该差不多 )单片机作为MCU,通过三线制控制WT588D-U模块,并通过放大电路对语音进行放大处理。单片机连接一个按钮,按钮按一次就播放第一段语音,再按一次就播放第二段语音,依次类推。

提问不明确。语音芯片型号很多,大多数都可以处理多段语音信息,所以,原理上都可以被51去控制。因为语音芯片,实际是语音存储芯片,所以每个信息段都必须有一个地址码,如果你想播放哪段语音,就用51去调用这个地址,就能实现语音播放。
第二部分问题:PC通过什么制式的无线信号给单片机传输命令,这个需要说清楚。无线信号类型也很多的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-13
这个要看语音芯片的datasheet,datasheet上有应用电路,及寄存器格式等。单片机不外乎,定时器,AD,中断,串口,输出高低电平等几个功能。其他应用都要通过其他芯片,所以读英语的datasheet非常重要
第2个回答  2011-05-17
#include<reg51.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rst= P1^0;
sbit clk= P1^1;
sbit sda= P1^2;
sbit sbt= P1^3;
sbit key0=P2^0;
sbit key1=P2^1;
sbit key2=P2^2;
sbit key3=P2^3;
uchar addr;
/*void delay_10us(uchar n)
{
do
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}while(--n);

}
void delay_ms(uchar m)
{
do
{
delay_10us(131);
}while(--m);
} */
void delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void delay_10us(uint xus)
{
uint i,j;
for(i=xus;i>0;i--)
for(j=10;j>0;j--);
}
void Voice_On(uchar addr,uchar addr0) //2线发地址和数据的程序
{
uchar i;
// rst=0;
// delay_ms(5);
// rst=1;
// delay_ms(300);
clk=0;
delay_ms(2);
for(i=0;i<8;i++)
{
clk=0;
sda=addr&0x80;
delay_10us(15);
clk=1;
delay_10us(15);
addr<<=1;
}
clk=0;
for(i=0;i<8;i++)
{
clk=0;
sda=addr0&0x80;
delay_10us(15);
clk=1;
delay_10us(15);
addr0<<=1;
}
// rst=1;
clk=1;
sda=1;
}
void key()
{
if(key0==0)
{
delay_ms(10);
if(key0==0)
{
while(!key0);
addr++;
if(addr==2)
addr=0;
Voice_On(0,addr);
}
}
if(key1==0)
{
delay_ms(10);
if(key1==0)
{
while(!key1);
addr--;
if(addr==-1)
addr=1;
Voice_On(0,addr);
}
}
if(key2==0)
{
delay_ms(10);
if(key2==0)
{
while(!key2);
Voice_On(0xff,0xfe);
}
}
if(key3==0)
{
delay_ms(10);
if(key3==0)
{
while(!key3);
Voice_On(0xff,0xff);
}
}
}
void main()
{
P1=0xff;
P2=0xff;
Voice_On(0,0x01);
// Voice_On(0xff,0xfe);
//Voice_On(0x00,0x01);
// Voice_On(0,0x00);
// Voice_On(0xff,0xfe);
// Voice_On(0x00,0x01);
while(1)
{
//key();
}
}
我这有个竞赛做过的程序,你改一下试试好使不追问

我现在有程序了,但编译出现了问题
语音播报.C(46): error C100: unprintable character 0xA3 skipped
语音播报.C(46): error C100: unprintable character 0xA9 skipped
网上说是在拼音状态下输入了字符,按//可以显示,我不知道怎么回事

相似回答