加入收藏 | 设为首页 | 会员中心 | RSS
您当前的位置:首页 > 文章中心 > 单 片 机 > 51单片机

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

时间:2008-08-03 09:38:41  来源:  作者: 点击:13

/*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);
}

来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
音乐程序的设计原理之单片机
音乐程序的设计原理之
FPGA的可编程全数字锁相环路实现
FPGA的可编程全数字锁
单片机音乐演奏
单片机音乐演奏
AVR单片机的ISP下载线
AVR单片机的ISP下载线
相关文章
栏目更新
栏目热门