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

2025-01-25 01:53:01
推荐回答(3个)
回答1:

提问不明确。语音芯片型号很多,大多数都可以处理多段语音信息,所以,原理上都可以被51去控制。因为语音芯片,实际是语音存储芯片,所以每个信息段都必须有一个地址码,如果你想播放哪段语音,就用51去调用这个地址,就能实现语音播放。
第二部分问题:PC通过什么制式的无线信号给单片机传输命令,这个需要说清楚。无线信号类型也很多的。

回答2:

这个要看语音芯片的datasheet,datasheet上有应用电路,及寄存器格式等。单片机不外乎,定时器,AD,中断,串口,输出高低电平等几个功能。其他应用都要通过其他芯片,所以读英语的datasheet非常重要

回答3:

#include
#include
#include
#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();
}
}
我这有个竞赛做过的程序,你改一下试试好使不