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

📄 main.c

📁 ISD4004芯片的语音录放程序
💻 C
字号:
#include "SM8958k.H"

#define OSC_FREQ                11059600L	
#define RCAP2_10ms             65536L - OSC_FREQ/1200L
#define uchar                   unsigned char
#define uint                    unsigned int
sfr16   RCAP2LH                = 0xCA;
sfr16   T2LH                   = 0xCC;

sbit led=P0^6;

sbit SS = P1^1;				//片选
sbit SCLK = P1^0;			//ISD4004时钟
sbit MOSI = P1^2;			//数据输入
sbit MISO = P1^3;			//数据输出
sbit LED = P1^7;			//指示灯
sbit AN = P2^2;				//执行
sbit STOP = P1^5;			//复位
sbit PR = P2^3;				//PR = 0录音,PR = 1放音
sbit INT = P1^4;				//中断
bit reccon;


void 	delay_10ms (unsigned int _10ms)
{
  RCAP2LH = RCAP2_10ms;
  T2LH    = RCAP2_10ms;
  ET2 = 0; 	// Disable timer2 interrupt
  T2CON = 0x04;	// 16-bit auto-reload, clear TF2, start timer

  while (_10ms--)
  { 
	while (!TF2)
	{

	}
	TF2 = 0;
  }
  TR2 =0;

}

void putbyte(unsigned char c)
{
SBUF=c;
while(!TI);TI=0;
}

urtinit()
{  TMOD = 0x21;			
   PCON = 0x80; 		
   SCON = 0x50; 		
   TH1=0xFD; TL1=0xFD; TR1=1;
   IP =	0x10;//0x04;
  // EA=1;
   putbyte(1);
   putbyte(2);
   putbyte(3);
   putbyte(4);
   putbyte(5);
}
void ledflash(uint k,uchar h)
	{
	while(h--)
		{
		led=1;
	       delay_10ms(k);
		led=0;
	      delay_10ms(k);
		}
	}


/* ISD4004 SPI 写入程序 */

void ISDX( unsigned char d)
{
	unsigned char i,j;
	SS = 0;						//开片选
	SCLK = 0;					//时钟 SCLK = 0 
	j = d;
	for( i = 0;i < 8;i++)
	{
		if( j & 0x01 )				//数据写 MOSI 
		{
			MOSI = 1;
		}
		else
		{
			MOSI = 0;
		}
		SCLK = 1;				//时钟 SCLK = 1
		j = j >> 1;
		SCLK = 0;				//时钟 SCLK = 0
	}
}



/* ISD 上电 */

void powerup( )
{
	ISDX(0x20 );					//发 00100XXXXXXXXXXX
	SS = 1;						//关片选

}
//停止当前操作<< STOP >>  8位
void STOPP( )
{
	ISDX(0x30 );					//发 0X110XXX
	SS = 1;						//关片选
}

//;停止当前操作掉电<< STOPPWRDN >>   8位
void DSTOP( )
{
	ISDX(0x10 );					//发 0X010XXXXXXXXXX				
	SS = 1;						//关片选
	delay_10ms(5);					//延时 50 ms
	delay_10ms(5);					//延时 50 ms
}



void record4004() //录音 address--录音地址 0---2400
{
powerup(); //发送上电命令
delay_10ms(5); //延时50ms
powerup();//发送上电命令
delay_10ms(5);//上电延时
delay_10ms(5);//上电延时
ISDX(0);  //从00开始录音
ISDX(0);
ISDX(0xB0); //发送录音命令

}

checkanjian()
{if(AN==0)
 delay_10ms(20);
 if(AN==0)
 {
  if(reccon==1)
  {reccon=0;
   //led=0;
  }
  else 
  {reccon=1;
  // led=1;
  }
  
 }
}

main()
{ 

  
	unsigned char delay;		//延时参数
	unsigned char isdl,isdh;	//ISD高、低位
	unsigned char n1;
    urtinit();
    reccon=1;
	DSTOP();			//ISD掉电
   delay_10ms(50);
   checkanjian();
   if(reccon==1)
   {led=1;//亮灯 放音
    powerup(); //发送上电命令
    delay_10ms(5); //延时50ms
	ISDX(0);  
    ISDX(0);
    ISDX(0);
    delay_10ms(5);
	ISDX(0xf0);
    }
    else 
    {led=0;//灭灯  录音
      
     delay_10ms(5);
	 powerup(); //发送上电命令
            delay_10ms(5); //延时50ms
            powerup();//发送上电命令
            delay_10ms(5);//上电延时
            delay_10ms(5);//上电延时
            ISDX(0);  //从00开始录音
            ISDX(0);
            ISDX(0);
            ISDX(0xB0 );
	      //  if( INT )
	      //  {LED = 1;		//指示灯
	      //   STOPP();		//停止当前操作
	      //   reccon=1;
	      //  }

       }

	while(1)
	{;
       
	  }

}






⌨️ 快捷键说明

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