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

📄 audio.c

📁 用51单片机实现IR解码
💻 C
字号:
/**********************************************************************
*File		Name		:	auido.c
*Creat		Time		:	2002/02/11
*Program	Author		:	Saho
*File		Discreption	:		 Control the ADC WM8775 and the Class D STA323
************************************************************************/
#include "common.h"
#include "var.h"
#include "main.h"
#include "key.h"
#include "Keyboard.h"
#include "i2c.h"

#include "lcd.h"

#include "Int.h"
#include "audio.h"

void Init_ADC_WM8775()
{
//reset WM8775
       // Write_ADC_WM8775(WM8775_RESET_REG,0xFF);
       
//set the master clock ,128K samp 256 fs
  Write_ADC_WM8775( ADC_CLOCK_REG, 0x0A);//WM8775_ADC_MASTER_MODE_128SAMP_256FS);
  Write_ADC_WM8775( WM8775_INPUT_MUX_CONTROL_REG, 0x02);

  #if 0
//set the ADC output  interface  I2S 24bits
 
     Write_ADC_WM8775( ADC_FORAMTE_CONTROL_REG, WM8775_ADC_NORMAL_I2S_24BIT);
 
//enable zero cross timeout
	
      Write_ADC_WM8775(ZERO_CROSS_DETECT_TIMEOUT_CONTROL_REG, 0x08);

//set the master clock ,128K samp 256 fs

   Write_ADC_WM8775( ADC_CLOCK_REG, WM8775_ADC_MASTER_MODE_128SAMP_256FS);
//set L channel gain

   Write_ADC_WM8775( LEFT_CHANNEL_GAIN_CONTROL_REG, LR_CHANNEL_ATTENUATION_0dB);
//set R channel gain

   Write_ADC_WM8775( RIGHT_CHANNEL_GAIN_CONTROL_REG,LR_CHANNEL_ATTENUATION_0dB);
//enable the limter

      Write_ADC_WM8775( LIMITER_ALC_ENABLE_CONTROL_REG, ENABLE_LIMITER_AND_PGA_ZERO_CROSS);
//select the limter
 
      Write_ADC_WM8775( LIMITER_ALC_SELECT_AND_LIMITE_REG, SELECT_LIMITER_AND_MAX_LEVEL_NEGTIVE1dB);
//select the empty input

     Write_ADC_WM8775(WM8775_INPUT_MUX_CONTROL_REG, INPUT_SELECT_EMPTY);
#endif
}
void Select_Audio_Input(U8 audio_source)
{
	switch(audio_source)
		{
		case iPod_SOURCE:
			     P2_0=1;
    			 	Write_ADC_WM8775( WM8775_INPUT_MUX_CONTROL_REG,  0x02);
				break;
		case AUX_SOURCE:
			       P2_0=0;
				Write_ADC_WM8775( WM8775_INPUT_MUX_CONTROL_REG, 0x04);
				break;
		default:
			     Write_ADC_WM8775( WM8775_INPUT_MUX_CONTROL_REG, INPUT_SELECT_EMPTY);

					break;
		}
			
			

}

void Set_WM8775_Power_State(U8 state)
{
if(state==0)
{

Write_ADC_WM8775(WM8775_POWER_CONTROL_REG,  WM8775_ADC_AND_INPUT_MUX_AND_ALL_POWER_OFF);
Write_ADC_WM8775(WM8775_POWER_CONTROL_REG, WM8775_ADC_AND_INPUT_MUX_POWER_OFF);

}

else
{
Write_ADC_WM8775(WM8775_POWER_CONTROL_REG, WM8775_ADC_AND_INPUT_MUX_AND_ALL_POWER_ON);



}

}
void Init_STA323_Hardware()
{

	STA323_SET_RESET;
	AMP_POWER_DOWN;
	

}


void Init_Digital_Audio_System_STA323_Register()
{
U8 * temp_add;
    U8 init_value[]={
 	 0x63,//                 0x00 - Configuration Register A //allow fault recover ,thermal warning recover,<48 fs 256 rate of fs
	0xA0,// 0x80,//                 0x01 - Configuration RegisterB
	 0x22,//                 0x02 - Configuration Register C
	 0x40,//                 0x03 - Configuration Register D
	 0xc2,//                 0x04 - Configuration Register E
	 0xdd,//                 0x05 - Configuration Register F
	 0x20,//                 0x06 - Master first Mute
	 0x35,//                 0x07 - Master Volume=-127.5dB
	 0x60-20,//                 0x08 - Channel 1 Volume=0dB+10dB
	 0x60-20,//                 0x09 - Channel 2 Volume=0dB+10dB
	 0x60-32,//                 0x0A - Channel 3 Volume=0dB+16dB
	0x20,// 0xA0,//                 0x0B - Auto GC, Auto Vol, Auto EQ ??????????????????
	 0x70,//                 0x0C - Auto BM, Auto AM  //160Hz
	 0x00,//                 0x0D - Preset EQ
	 0x00+0x10,//                 0x0E - Channel 1 Config 1->ch1
	 0x40+0x20,//                 0x0F - Channel 2 Config 2->ch2
	 0x80,//                 0x10 - Channel 3 Config 3->ch3
	 0x77,//                 0x11 - Bass and Treble Tone Control   T=0dB B=0dB
	 0x6a,//                 0x12 - Limiter 1 Attack/Release Rate  
	 0x69,//                 0x13 - Limiter 1 Attack/Release Threshold
	 0x6a,//                 0x14 - Limiter 2 Attack/Release Rate
	 0x69,//                 0x15 - Limiter 2 Attack/Release Threshold

 	};
		AMP_POWER_ON;
        Delay_xmS(10);
	STA323_RESET_RELEASE;
	Delay_xmS(2);
	
	* temp_add=STA323_CONFA_REG_ADD;
	//I2C_Write_Bytes(STA323_I2C_ADDRESS, temp_add,1,init_value,sizeof(init_value)); //allow fault recover 
	I2C_Write_STA323_Bytes(STA323_CONFA_REG_ADD,init_value,sizeof(init_value));
	//set the MPC coeficient
	#if 0
	init_value[0]=0x2d; init_value[1]=0xc0;
	* temp_add=STA323_MPC_REG_ADD;
	I2C_Write_Bytes(STA323_I2C_ADDRESS,temp_add ,1,init_value,2); //correct the MPC coeficient
	#endif

}
void Set_STA323_Volume(U8 volume)

{

		Write_STA323_Byte(STA323_MASTER_VOLUME_REG_ADD, 100-volume  ); 

}


void Change_Master_Volume(U8 change_direction)
{
	  if(change_direction==UP)
	  {
	  	System_Master_Volume++;
		if(System_Master_Volume>100)
			System_Master_Volume=100;
	  }
	  else
	  	{
	  	if(System_Master_Volume)
			System_Master_Volume--;

	  	}
	   Set_STA323_Volume(System_Master_Volume);

}
void Process_Mute_Funtion(U8 mute_state)
{
         
		if(mute_state==MUTE_ON)
	 			Write_STA323_Byte( STA323_MUTE_CONTROL_REG_ADD,0x01);
		else
				Write_STA323_Byte( STA323_MUTE_CONTROL_REG_ADD,0x00);

}

void Set_Tone_Control(U8  trable_val,U8 bass_val)
{
	

	
	Write_STA323_Byte(STA323_TONE_CONTROL_REG_ADD, (trable_val<<4)+bass_val   ); 


}
void Change_Tone_Control(U8 tone_type ,U8 change_direction)
{

	if(tone_type==TONE_TYPE_TRABLE)
		{
		      if(change_direction==UP)
			{
			System_Tone_Trable++;
			if(System_Tone_Trable>13)
				System_Tone_Trable=13;
			}
			else
			{
			
			if(System_Tone_Trable>1)
				System_Tone_Trable--;

			}

		}
	else
		{
		       if(change_direction==UP)
			{
			System_Tone_Bass++;
			if(System_Tone_Bass>13)
				System_Tone_Bass=13;
			}
			else
			{
			
			if(System_Tone_Bass>1)
				System_Tone_Bass--;

			}


		}
	Set_Tone_Control(System_Tone_Trable,System_Tone_Bass);
	
}
void Begin_Temp_Mute(U8 mute_timer)
{
	EventAutoUnmute_Timer=mute_timer;
	Write_STA323_Byte( STA323_MUTE_CONTROL_REG_ADD,0x01); 


}



⌨️ 快捷键说明

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