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

📄 sta013.c

📁 单片机+ST013A+CH375读写U盘播放MP3
💻 C
📖 第 1 页 / 共 3 页
字号:

unsigned  char Iic_Read(void)
{
    unsigned char a;
	unsigned char b;		
	
	for(a=8;a!=0;a--)
	{
	    b<<=1;
	    IIC_SCL_HIG();
		DELAY1();
        if(IIC_SDA){b|=1;}
		IIC_SCL_LOW();
		DELAY1();
	}		
	return(b);	
}


void Iic_Byte_Write(unsigned  char address,unsigned  char dat)
{
	Iic_Star();
	Iic_Write(0x86);					//选中设备地址
	Iic_Write(address);					//选择寄存器地址
	Iic_Write(dat);						//写入数据
	Iic_Stop();
}

unsigned  char Iic_Byte_Read(unsigned  char address)
{
	unsigned  char dat;
	Iic_Star();
	Iic_Write(0x86);
	Iic_Write(address);		
	Iic_Star();
	Iic_Write(0x87);
	
	DDRD&=0xdf;	
	dat=Iic_Read();
	DDRD|=0x20;
    Iic_Stop();	
	return dat;
}

//*************************************************************
//串行数据流出
//

void STA013DownloadSetUp(void)
{
	unsigned int i;
	unsigned char reg, dat;
	i=0;
	do
	{
		reg = STA013_SetUp[i++];
		dat = STA013_SetUp[i++];
		Iic_Byte_Write(reg, dat);		//下载配置
	}while(reg != 0xff);				//寄存器地址为0xff则为结束
}


unsigned char STA013Init(void)
{
	DDRD|=0xe0;
	DDRA|=0x80;	
	DDRB&=0xef; //STA_REQ  IIC_SDA_R
	PORTB|=0x8;	
	pBuf=0;
	F_DEC=0;	
	VOL=0x012;
	
	Iic_Stop();
	DELAY1();DELAY1();DELAY1();DELAY1();DELAY1();	
			
	
	if(Iic_Byte_Read(STA_REG_IDENT) != STA_IDENT)
	{
		if(Iic_Byte_Read(STA_REG_IDENT) != STA_IDENT)
	    {
		   return 1;		
	    }	
		//return(Iic_Byte_Read(STA_REG_IDENT));
	}	
							
	STA013DownloadSetUp();	//set config
	STA013SetDec();         // sta Dec		
	
	STA013SetTone(0x0);
	STA013SetBass(0);
	STA013SetTrenb(0);
	Iic_Byte_Write(STA_REG_RUN,  0x00);		
	Iic_Byte_Write(STA_REG_PLAY, 0x00);
	Iic_Byte_Write(STA_REG_SOFT_RESET, 0x01);	
	
	
	return 0;
}

//
void STA013SetDec(void)
{
	// Soft reset
	Iic_Byte_Write(STA_REG_SOFT_RESET,			0x01);
	Iic_Byte_Write(STA_REG_SOFT_RESET,			0x00);

	// Mute and configure DAC output
	Iic_Byte_Write(STA_REG_MUTE,				0x01);
	Iic_Byte_Write(STA_REG_PCMDIVIDER,			0x01);	// 32-bit mode, O_FAC = 256
	Iic_Byte_Write(STA_REG_PCMCONF,				0x31);	// 18-bit mode & more

	// Configure PLL for MP3 rates
	Iic_Byte_Write(STA_REG_PLLFRAC_441_H,		0x67);
	Iic_Byte_Write(STA_REG_PLLFRAC_441_L,		0x77);
	Iic_Byte_Write(STA_REG_PLLFRAC_H,			0xbb);
	Iic_Byte_Write(STA_REG_PLLFRAC_L,			0x3a);
	Iic_Byte_Write(STA_REG_MFSDF_441,			0x10);
	Iic_Byte_Write(STA_REG_MFSDF,				0x0F);

	// Configure interface polarities, etc
	Iic_Byte_Write(STA_REG_PLLCTL_2,			0x0C);
	Iic_Byte_Write(STA_REG_PLLCTL_3,			0x00);
	Iic_Byte_Write(STA_REG_PLLCTL_1,			0xA1);
	Iic_Byte_Write(STA_REG_SCLK_POL,			0x00);	// data sampled on rising edge
	Iic_Byte_Write(STA_REG_REQ_POL,				0x01);	// REQ line active high
	Iic_Byte_Write(STA_REG_DATA_REQ_ENABLE,		0x04);
	Iic_Byte_Write(STA_REG_PLLCTL_1,			0xA1);	
	
	
	//设置低音增益
	//Iic_Byte_Write(STA_REG_BASS_FREQUENCY_LOW,  200&256);
	//Iic_Byte_Write(STA_REG_BASS_FREQUENCY_HIGH, 200/256);
	//设置高音增益
	//Iic_Byte_Write(STA_REG_TREBLE_FREQUENCY_LOW,  3000&256);
	//Iic_Byte_Write(STA_REG_TREBLE_FREQUENCY_HIGH, 3000/256);
	
	//Iic_Byte_Write(STA_REG_BASS_ENHANCE,0);
	//Iic_Byte_Write(STA_REG_TREBLE_ENHANCE,0);    
}


void STA013StopDec(void)
{
	// mute output
	Iic_Byte_Write(STA_REG_RUN,  0x00);		
	Iic_Byte_Write(STA_REG_PLAY, 0x01);
	Iic_Byte_Write(STA_REG_MUTE, 0x01);
	// soft reset
	Iic_Byte_Write(STA_REG_SOFT_RESET, 0x01);
	Iic_Byte_Write(STA_REG_SOFT_RESET, 0x00);
	Mp3Start=0;
}

void STA013StarDec(void)
{   
	STA013SetDec();											
	Iic_Byte_Write(STA_REG_RUN,  0x01);		
	Iic_Byte_Write(STA_REG_PLAY, 0x01);
	Iic_Byte_Write(STA_REG_MUTE, 0x00);
	STA013SetTone(VOL);			//设置默认音量
	Mp3Start=1;	
}
void STA013VOL(void)
{
     STA013SetTone(VOL);
}

void STA013PauseDec(void)
{	
	Iic_Byte_Write(STA_REG_MUTE, 0x01);	
	Iic_Byte_Write(STA_REG_PLAY, 0x00);
	Mp3Start=0;
}
void STA013ResumeDec(void)
{	
	Iic_Byte_Write(STA_REG_PLAY, 0x01);	
	Iic_Byte_Write(STA_REG_MUTE, 0x00);
}
void STA013SetTone(unsigned char  ToneAtten)
{
     Iic_Byte_Write(STA_REG_TONE_ATTEN,ToneAtten);
}
void STA013SetBass(unsigned char  BassEnhance)
{
     Iic_Byte_Write(STA_REG_BASS_ENHANCE,BassEnhance);
}
void STA013SetTrenb(unsigned char  TrenbleEnhance)
{
     Iic_Byte_Write(STA_REG_TREBLE_ENHANCE,TrenbleEnhance);
}
//*********************************************************MP3流 输出

unsigned char DataStrBit( void)		 //串行数据流   SPI
{     	 	 
     unsigned char as;
     unsigned char bs; 
	 
	 if(!STA_REQ){return(0);}
	 while(STA_REQ)
	 {
	     if(!F_DEC){as=FILE_DATA_BUF[pBuf]; }
		 else      {as=FILE_DATA_BUF1[pBuf];}		 
		      
	     //Out Mp3 8 Bit
		 for(bs=8;bs!=0;bs--)
		 {
		     //8
		     if(as&0x80){STA_SDI_HIG();}
		     else       {STA_SDI_LOW();}
		     STA_SCL_HIG();
		     STA_SCL_LOW();
		     as<<=1;
		 } 
		 //Out Mp3 8 Bit
		 
		 pBuf++;		 
		 if(pBuf&0xfe00)
		 {
		     pBuf=0;
			 F_Read=1;
			 if(F_DEC){F_DEC=0;}//缓冲区切换	 
			 else     {F_DEC=1;}
			 return(2);         //数据请求
		 }    
	 }
	 return(1);	 
}
//*****************************************************

unsigned char StrBitFlash( void)		 //串行数据流 Flash  SPI
{
     unsigned char a;
	 unsigned char b;	 	 
      
	 if(!STA_REQ){return(0);}
	 while(STA_REQ)
	 {
	     //LcdOFF();
	     a=Mp3[pBuf];
	     for(b=8;b!=0;b--)
	     {
	        if(a&0x80){STA_SDI_HIG();}
		    else      {STA_SDI_LOW();}
		    STA_SCL_HIG();
		    STA_SCL_LOW();
		    a<<=1;	 
	     }
	     pBuf++;
		 if(pBuf>550*16){pBuf=0;}
	 }
	 return(1);	 
}
//******************************************************************************

⌨️ 快捷键说明

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