打印

求救,语音芯片ISD4003问题

[复制链接]
1680|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 wongk2009 于 2012-6-4 22:52 编辑




ISD4003问题,电路图按如上接法,
编程也试过了,就是不能放音。
我也不知道究竟是录音没有录进去还是放音放不出来。

我用2个指示灯来显示录音和放音状态
2个指示灯显示能正常录音放音,放音完毕之后也能触发单片机中断。
可就是放不出音。

而硬件我按上图所接,电路经过我反复检验是没有接错的。

现在我也不知道到底是我软件问题还是原理图本来就有问题。
已经搞了2天2夜,实在头晕。
在此请教一下各位,有没有人用过这个芯片,看看是什么问题。



下面是我编写的程序:
功能只是按键录一段声音,按键放音。

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit ss=P1^0;//
sbit scl=P1^1;//
sbit mosi=P1^2;
sbit miso=P1^3;
sbit lu=P1^6;//录音按键
sbit led=P2^5; //录音指示灯
sbit fang=P3^0;  //放音按键
sbit ISD_INT=P3^2;
sbit led1=P2^6; // 放音指示灯
void delayms(uint ms)
{
TMOD=0X01;
for(ms;ms>0;ms--)
{
  TH0=0XFC;
  TL0=0X18;
  TR0=1;
  while(TF0!=1)
  {;}
  TF0=0;
  TR0=0;
}
}
void delayus(uint us)
{
while(us!=0)
  us--;
}
void spi_send(uchar dat)
{
uint i;
ss=0;//
scl=0;
for(i=0;i<8;i++)
{
  if(dat&0x01)
   mosi=1;
  else
  mosi=0;
  dat=dat>>1;
  scl=1;
  delayus(2);
  scl=0;
  delayus(2);
}
}
void isd_stop()
{
delayus(10);
spi_send(0x30);
ss=1;
delayms(50);
}
void isd_pu()//上电
{
delayus(10);
ss=0;
spi_send(0x20);
ss=1;
delayms(50);
}
void isd_pd()  //掉电
{
delayus(10);
spi_send(0x10);
ss=1;
delayms(50);
}
void isd_play()
{
led1=0;
spi_send(0xf0);
ss=1;
}
void isd_rec()  //当前地址开始录音指令
{
led=0;
spi_send(0xb0);
ss=1;
}
void isd_setplay(uchar adress_l,uchar address_h)
{
spi_send(adress_l);
address_h=address_h|0xe0;
spi_send(address_h);
ss=1;
}
void isd_setrec(uchar adress_l,uchar address_h)
{
spi_send(adress_l);
address_h=address_h|0xa0;
spi_send(address_h);
ss=1;
}
void isd_overflow()   // 灯闪烁
{
while(lu==0)
{
  led=1;
  delayms(200);
  led=0;
  delayms(200);
}
}
bit check_isdovf()
{
ss=0;
delayus(2);
scl=0;
delayus(2);
scl=1;
scl=0;
delayus(2);
if(miso==1)
{
  scl=0;
  ss=1;
  isd_stop();
  return 1;
}
else
{
  scl=0;
  ss=1;
  isd_stop();
  return 0;
}
}
/****************************************************************************
按住lu键录音,led灯亮,松开lu 键led灭;按下fang键放音,led1灯亮,播放完led1灭;
******************************************************************************/
void main()
{
while(1)
{
  P1=0XFF;
  P2=0XFF;
  P3=0XFF;
  if(lu==0)   //录音键按下
  {
   delayms(11);
   if(lu==0)
   {
     isd_pu();//an键按下,isd上电并延时50ms
     isd_pd();
     isd_pu();
     delayms(50);
     isd_setrec(0x00,0x00);
     while(lu==0)
     {
      isd_rec();
     delayus(20);
     if(ISD_INT==0)//如果芯片溢出,led闪烁
      isd_overflow();
     }
     led=1;
     isd_stop();
   }  
  }
  if(fang==0)   //放音键按下
  {
   delayms(11);
   if(fang==0)
   {
    while(!fang);
    isd_pu();
    isd_setplay(0x00,0x00);   
    isd_play();
    delayus(20);
    while(ISD_INT==1 )//等待放音完毕的EOM中断信号
    {;}     
    isd_stop();
    if(check_isdovf()) //检查芯片是否溢出,如溢出则停止放音
    break;   
    led1=1;   
   }
  }
  isd_stop();
  isd_pd();
}
}





















I

相关帖子

沙发
rodger_br| | 2012-6-6 22:40 | 只看该作者
没用过ISD,不过问一下LZ,录下来数据存在哪里?

使用特权

评论回复
板凳
chen3bing| | 2012-6-7 07:24 | 只看该作者
你的话筒在哪里?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

22

帖子

1

粉丝