⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msin.c

📁 ISD400X系列语音录音芯片大全驱动代码
💻 C
字号:
//=================================================
//创建者:蔡星      QQ:364444296
//创建日期:2006年11月12日
//项目:ISD4004语音芯片的录放
//=================================================
#include<reg51.h>
#include<intrins.h>
#include<head.h>

#define uchar unsigned char
#define uint  unsigned int
//uint count;
uint count=0;

sbit sclk_4004=P3^5;
sbit rac_4004=P3^3;
sbit _int_4004=P3^4;
sbit ss_4004=P3^0;
sbit sda_4004=P3^1;
//sbit sda_4004_=P3^1;

sbit stop_4004=P1^0;//这是51板上的按键
sbit Luyin_4004=P1^1;
sbit play_4004=P1^2;
sbit hang_4004=P1^3;//

void delay_ISD4004(int i)
{
 while(--i);
} 

void stop()
{
 uchar number,i;
 number=0x30;
 ss_4004=1;
 sclk_4004=0;
 ss_4004=0;
 for(i=0;i<8;i++)
 {
  if(number&0x01)  sda_4004=1;
  else             sda_4004=0;
  sclk_4004=0;
  sclk_4004=1;
  number=number>>1;
  //number>>=1;
 }
 ss_4004=1;
}

void power_down()
{
 uchar num,i;
 num=0x10;
 ss_4004=1;
 sclk_4004=0;
 ss_4004=0;
 for(i=0;i<8;i++)
 {
 
  if(num&0x01)   sda_4004=1;
  else            sda_4004=0;
  sclk_4004=0;
  sclk_4004=1;
  num=num>>1;
 }
 ss_4004=1;
}

void power_up()
{
 uchar bult,_data_,i;
 bult=0x20;
 ss_4004=1;
 sclk_4004=0;
 ss_4004=0;
 _data_=bult;
 for(i=0;i<8;i++)
 {
  
  if(_data_&0x01)    sda_4004=1;
  else               sda_4004=0;
  sclk_4004=0;
  sclk_4004=1;
  //bult=bult>>1;
  _data_>>=1;
 }
 ss_4004=1;
}

void record_4004(uint address)//address:0-2400
{
 uchar data_4004,numb,i;
 uint data_mode=0;
 numb=0xa0;

 power_up();
 delay_ISD4004(5200);//大于25ms
 power_up();
 delay_ISD4004(10400);//是上面延时的两倍

 ss_4004=1;
 sclk_4004=0;
 ss_4004=0;
 data_mode=address;
 for(i=0;i<16;i++)//16位地址控制位
 {
 
  if(data_mode&0x01)   sda_4004=1;
  else                 sda_4004=0;
  sclk_4004=0;
  sclk_4004=1;
  //address=address>>1;
  data_mode>>=1;
  }
  data_4004=numb;
 for(i=0;i<8;i++)
 {
  if(data_4004&0x01)   sda_4004=1;
  else                 sda_4004=0;
  sclk_4004=0;
  sclk_4004=1;
  //numb=numb>>1;
  data_4004>>=1;
 }

 numb=0xb0;
 ss_4004=1;
 sclk_4004=0;
 ss_4004=0;
 for(i=0;i<8;i++)
 {
  if(numb&0x01)   sda_4004=1;
  else                 sda_4004=0;
  sclk_4004=0;
  sclk_4004=1;
  //numb=numb>>1;
  numb>>=1;
 }
 ss_4004=1;
 P3=0xff;
 data_mode=0;
 while(_int_4004==1) //存储地址换行标志
 {
  if(rac_4004)
  {
   delay_ISD4004(20000);
   data_mode++; //记录本次录音所占的行数 就是本次录音有多大
  }
   if(stop_4004==0){stop();return;}
 }
}

void audio_out_4004(uint address)
{
 uchar _data_4004,_numb,i;
 uint _data_mode;
 _numb=0xe0;

 power_up();
 delay_ISD4004(5200);
 ss_4004=1;
 sclk_4004=0;
 ss_4004=0;
 _data_mode=address;
 for(i=0;i<16;i++)//16位地址控制位
 {
  
  sclk_4004=0;
  if(_data_mode&0x01)   sda_4004=1;
  else                 sda_4004=0;
  //sclk_4004=0;
  sclk_4004=1;
  //address=address>>1;
   _data_mode>>=1;
 }
 _data_4004=_numb;
 for(i=0;i<8;i++)
 {
  
  sclk_4004=0;
  if(_data_4004&0x01)   sda_4004=1;
  else                 sda_4004=0;
   //sclk_4004=0;
  sclk_4004=1;
  //_numb=_numb>>1;
  _data_4004>>=1;
 }

 _numb=0xfe;
 ss_4004=1;
 sclk_4004=0;
 ss_4004=0;
 _data_4004=_numb;
 for(i=0;i<8;i++)
 {
  sclk_4004=0;
  if(_data_4004&0x01)   sda_4004=1;
  else                 sda_4004=0;
  //sclk_4004=0;
  sclk_4004=1;
  //_numb=_numb>>1;
  _data_4004>>=1;
 }
 ss_4004=1;
 P3=0xff;
 while(_int_4004==1)
 {
  if(stop_4004==0){stop();return;}
 }
}



main()
{
 //uint count=0;
 //delay_ISD4004(100000);
 while(1)
 {
  /*if(Luyin_4004==0) 
  { 
   P2=0x0f;
   delay_ISD4004(10000);
   record_4004(0);
   P2=0xfd;
   delay_ISD4004(10000);
  }
  if(play_4004==0)
  {
   P2=0xf0;
   delay_ISD4004(10000);
   audio_out_4004(0);
    P2=0xdf;
   delay_ISD4004(10000);
  }*/
  if(hang_4004==0)
  {
   //while(hang_4004==0) delay_ISD4004(100);
   //delay_ISD4004(500);
   count=count++;
   display(count);
   //while(hang_4004);
   //delay_ISD4004(1000);	 co
   if(count>5) 
   {
    count=0;
	display(count);
   //delay_ISD4004(1000);
   }
   //while(stop_4004);
  }
 

  if((Luyin_4004==0)&&(count==0))
  {
   display(count);delay_ISD4004(1000);record_4004(0);
  }
  if((play_4004==0)&&(count==0))
  {
   display(count);delay_ISD4004(1000);audio_out_4004(0);
  }
  
   if((Luyin_4004==400)&&(count==1))
  {
   display(count);delay_ISD4004(1000);record_4004(0);
  }
  if((play_4004==400)&&(count==1))
  {
   display(count);delay_ISD4004(1000);audio_out_4004(0);
  }
   
  
  if((Luyin_4004==800)&&(count==2))
  {
   display(count);delay_ISD4004(1000);record_4004(0);
  }
  if((play_4004==800)&&(count==2))
  {
   display(count);delay_ISD4004(1000);audio_out_4004(0);
  }

   if((Luyin_4004==1200)&&(count==3))
  {
   display(count);delay_ISD4004(1000);record_4004(0);
  }
  if((play_4004==1200)&&(count==3))
  {
   display(count);delay_ISD4004(1000);audio_out_4004(0);
  }

   if((Luyin_4004==1600)&&(count==4))
  {
   display(count);delay_ISD4004(1000);record_4004(0);
  }
  if((play_4004==1600)&&(count==4))
  {
   display(count);delay_ISD4004(1000);audio_out_4004(0);
  }

   if((Luyin_4004==2000)&&(count==5))
  {
   display(count);delay_ISD4004(1000);record_4004(0);
  }
  if((play_4004==2000)&&(count==5))
  {
   display(count);delay_ISD4004(1000);audio_out_4004(0);
  }


 }
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -