ISD4004语音芯片驱动(C51源程序)

来源:互联网 发布:荣耀9比8好在哪里知乎 编辑:程序博客网 时间:2024/04/30 15:14

/*spi isd4004.h*/
 #i nclude "reg51.h"
 #i nclude "intrins.h"

 

 sbit _cs  = p0^0;
 sbit _sclk= p0^3;
 sbit _mosi= p0^1;
 sbit _miso= p0^2;
 sbit _rac = p0^4;
 sbit _int = p0^5;


 void delay(unsigned int i)  //延时程序
 {
   while(i--);
 }

void stopmode()   //停止
{
   unsigned char m,i,j;
   _cs=1;
   _sclk=0;
   _cs=0;

   m=0x30;
   for(i=0;i<8;i++)
   {
      m=_cror_(m,1);
      j=m<<1;
      _mosi=cy;
      _sclk=0;
      _sclk=1;
   }
   _cs=1;
}
void powerdown()   //下电
{
    unsigned char m,i,j;
    _cs=1;
   _sclk=0;
   _cs=0;

   m=0x10;
   for(i=0;i<8;i++)
   {
      m=_cror_(m,1);
      j=m<<1;
      _mosi=cy;
      _sclk=0;
      _sclk=1;
   }
   _cs=1;
}

void powerup()   上电
{
   unsigned char m,i,j;
   _cs=1;
   _sclk=0;
   _cs=0;

   m=0x20;
   for(i=0;i<8;i++)
   {
      m=_cror_(m,1);
      j=m<<1;
      _mosi=cy;
      _sclk=0;
      _sclk=1;
   }
   _cs=1;
}
void record4004(unsigned int address)  录音  address--录音地址 0---2400
{
     unsigned char i,m,j;
     unsigned int datasoute=0;


      powerup();
      delay(5118);//上电延时
      powerup();
      delay(5118);//上电延时
      delay(5118);//上电延时
      _cs=1;
      _sclk=0;
      m=0xa0;
      _cs=0;
       for(i=0;i<16;i++)
     {
         address=_iror_(address,1);
         datasoute=address<<1;
         _mosi=cy;
         _sclk=0;
         _sclk=1;
     }
      for(i=0;i<8;i++)
     {
         m=_cror_(m,1);
         j=m<<1;
         _mosi=cy;
         _sclk=0;
         _sclk=1;
     }
     _cs=1;
     _sclk=0;
     m=0xb0;
     _cs=0;

     for(i=0;i<8;i++)
     {
        m=_cror_(m,1);
        j=m<<1;
        _mosi=cy;
        _sclk=0;
        _sclk=1;
     }
     _cs=1;
     p0=0xff;
     datasoute=0;
  while(_int==1)       //存储地址换行标志
  {
   if(_rac) {delay(20000); datasoute++; }  //记录本次录音所占的行数(也就是本次录音有多大)
   //
   //  在这里应该加上自己的程序,就是录音退出程序
  //
   }
  }//while end;

void audioout(unsigned int address)  //放音程序
{
    unsigned char i,m,j;
    unsigned int datasoute;


    powerup();
    _cs=1;
    _sclk=0;
    _cs=0;
    m=0xe0;
      for(i=0;i<16;i++)
    {
        address=_iror_(address,1);
        datasoute=address<<1;
        _sclk=0;
        _mosi=cy;
        _sclk=1;
    }
    for(i=0;i<8;i++)
    {
         m=_cror_(m,1);
         j=m<<1;
         _sclk=0;
         _mosi=cy;
         _sclk=1;
    }

    _cs=1;
     _sclk=0;
     m=0xf0;
    _cs=0;
    for(i=0;i<8;i++)
    {
       m=_cror_(m,1);
       j=m<<1;
       _sclk=0;
       _mosi=cy;
       _sclk=1;
    }
    _cs=1;

     p0=0xff;
    while(_int==1)
    {
    }//while end;
}

main()
{
  record4004(0);
   audioout(0);
   while(1);
}

<!--mstheme-->

原创粉丝点击