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

📄 csp.c

📁 一款车载DVD的车机源程序(正在生成中的哦)
💻 C
字号:
/***************************************************************************
Project  :  Car two ting dvd System
Compiler :  ST7 HiCross C (HiWARE)
Module   :  autos.c 
Version  :  V 1.0
Created  :  24 11, 2005
Author   :  tomi / SA
Description
         -  Audio process,include volume control/select input/gain control/bass,treble control and so on.  
Modified
		 - tomi
***************************************************************************/
#include "Csp.h"
#include "Libr.h"
#include "Sys_config.h"
#include "i2c_drv.h"
#include "System_operation.h"

unsigned char Csp_buff[8] = {0x00,0xc0,0xe0,0x80,0xa0,0x40,0X60,0X70};
unsigned char Bass_volume = 0x07/*0db*/;	//The range is 0 to e
#pragma INTO_ROM
static const unsigned char Bass_list[]  = {0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x6e,0x6d,0x6c,0x6b,0x6a,0x69,0x68};
unsigned char Treble_volume = 0x07/*0db*/;	//The range is 0 to e
#pragma INTO_ROM
static const unsigned char Treble_list[] = {0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78};
unsigned char Total_volume = 30/*0db*/;	//The range is 0 to 30
#pragma INTO_ROM
static const unsigned char Total_volume_list[] = {0x38,0x30,0x2c,0x28,0x26,0x24,0x22,0x20,0x1e,0x1c,
										0x1a,0x18,0x16,0x14,0x12,0x10,0x0e,0x0d,0x0b,0x0a,
										0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00
										};
unsigned char LF_volume = 14/*0db*/;
#pragma INTO_ROM
static const unsigned char LF_list[] = {0X9F,0X98,0X94,0X90,0x8e,0X8C,0X8A,0X88,0X87,0X86,0X85,0X84,0X83,0X82,/*0X81,*/0X80};
unsigned char RF_volume = 14/*0db*/;
#pragma INTO_ROM
static const unsigned char RF_list[] = {0XBF,0XB8,0XB4,0XB0,0xbe,0XBC,0XBA,0XA8,0XA7,0XA6,0XA5,0XA4,0XA3,0XA2,/*0XA1,*/0XA0};
unsigned char LR_volume = 14/*0db*/;
#pragma INTO_ROM
static const unsigned char LR_list[] = {0XDF,0XD8,0XD4,0XD0,0xde,0XDC,0XDA,0XC8,0XC7,0XC6,0XC5,0XC4,0XC3,0XC2,/*0XC1,*/0XC0};
unsigned char RR_volume = 14/*0db*/;
#pragma INTO_ROM
static const unsigned char RR_list[] = {0XFF,0XF8,0XF4,0XF0,0xfe,0XFC,0XFA,0XE8,0XE7,0XE6,0XE5,0XE4,0XE3,0XE2,/*0XE1,*/0XE0};

unsigned char Csp_adjust_mode = Front_speaker_balance_mode;
unsigned char Front_speaker_balance_volume=7;
unsigned char Back_speaker_balance_volume=7;
void Select_audio_input_source(unsigned char Input_source);
void Enable_loudness_on(void);
void Disable_loudness_off(void);
void Select_audio_input_gain(unsigned char Input_gain);
void Audio_bass_control(void);
void Audio_treble_control(void);
void Audio_total_volume_control(void);
void Audio_LF_speaker_volume_control(void);
void Audio_RF_speaker_volume_control(void);
void Audio_LR_speaker_volume_control(void);
void Audio_RR_speaker_volume_control(void);
void Init_csp(void);
void Front_speaker_balance_volume_control(void);
void Back_speaker_balance_volume_control(void);
void Csp_up_adjust_control(void);
void Csp_down_adjust_control(void);
void Mute_csp(void);
void Unmute_csp(void);
/**********************************************************************
Function:Select the audio input source,total 3 stereo input
**********************************************************************/
void Select_audio_input_source(unsigned char Input_source)
{
	switch(Input_source)
		{
		case AV_switch_input_source:
			Audio_switch = Audio_switch & 0xfc;	
			break;
		case Radio_tuner_source:
			Audio_switch = Audio_switch & 0xfd;	
			Audio_switch = Audio_switch | 0x01;	
			break;
		case Outside_AV2_input_source:
			Audio_switch = Audio_switch & 0xfe;	//bit S0 is 0
			Audio_switch = Audio_switch | 0x02;	//bit S1 is 1
			break;
		}
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/*********************************************************************
Function:Enable the loudness function on
*********************************************************************/
void Enable_loudness_on(void)
{
	ClrBit(Audio_switch,2);	//bit S2 is 0
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/*******************************************************************
Function:Disable the loudness function off
*******************************************************************/
void Disable_loudness_off(void)
{
	SetBit(Audio_switch,2);	//bit S2 is 1
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/*******************************************************************
Function:Select input gain:11.25db/7.5db/3.75db/0db
*******************************************************************/
void Select_audio_input_gain(unsigned char Input_gain)
{
	switch(Input_gain)
		{
		case Audio_input_gain_1125db:
			Audio_switch = Audio_switch & 0xe7;	//The bitG1 G0 are 0
			break;
		case Audio_input_gain_75db:
			Audio_switch = Audio_switch & 0xef;	//The bitG1 is 0
			Audio_switch = Audio_switch | 0x08;	//The bitG0 is 1
			break;
		case Audio_input_gain_375db:
			Audio_switch = Audio_switch & 0xf7;	//The bitG0 is 0
			Audio_switch = Audio_switch | 0x10;	//The bitG1 is 1
			break;
		case Audio_input_gain_0db:
			Audio_switch = Audio_switch | 0x18;	//The bitG1 GO are 1
			break;
		}
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}

/*****************************************************************
Function:Bass control
*****************************************************************/
void Audio_bass_control(void)
{
	if(Bass_volume <= 0)
		Bass_volume = 0x00;	//The min is 0x00
	if(Bass_volume >= 0x0f)
		Bass_volume = 0x0e;	//The max is 0x0e
	Bass_control = Bass_list[Bass_volume];
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}


/*******************************************************************
Function:Treble control
*******************************************************************/
void Audio_treble_control(void)
{
	if(Treble_volume <= 0)
		Treble_volume = 0x00;	//The min is 0x00
	if(Treble_volume >= 0x0f)
		Treble_volume = 0x0e;	//The max is 0x0e
	Treble_control = Treble_list[Treble_volume];
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}

/******************************************************************
Function:Total volume control
******************************************************************/
void Audio_total_volume_control(void)
{
	if(Total_volume <= 0)
		Total_volume = 0;	//The min is 0x00
	if(Total_volume > 29)
		Total_volume = 29;	//The max is 30
	Volume_control = Total_volume_list[Total_volume];
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
	
	if(ValBit(System_flag1,Mute_flag) && Total_volume != 0)	//From 0 to 1
		{
		Unmute_csp();
		WAIT_100ms();
		Hardware_disable_mute_system;
		Hardware_disable_mute_BACK_CON;
		ClrBit(System_flag1,Mute_flag);
		}

	if(!ValBit(System_flag1,Mute_flag) && Total_volume == 0)	//From 1 to 0
		{
		Hardware_enable_mute_system;
		Hardware_enable_mute_BACK_CON;
		WAIT_100ms();
		Mute_csp();
		SetBit(System_flag1,Mute_flag);
		}
		
}
/******************************************************************
Function:LF speaker volume control
******************************************************************/
void Audio_LF_speaker_volume_control(void)
{
	if(LF_volume <= 0)
		LF_volume = 0;	//The min is 0
	if(LF_volume > 14)
		LF_volume = 14;	//The max is 15
	Speak_att_LF = LF_list[LF_volume];
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);

}

/******************************************************************
Function:RF speaker volume control
******************************************************************/
void Audio_RF_speaker_volume_control(void)
{
	if(RF_volume <= 0)
		RF_volume = 0;	//The min is 0
	if(RF_volume > 14)
		RF_volume = 14;	//The max is 15
	Speak_att_RF = RF_list[RF_volume];
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);

}

/******************************************************************
Function:LF speaker volume control
******************************************************************/
void Audio_LR_speaker_volume_control(void)
{
	if(LR_volume <= 0)
		LR_volume = 0;	//The min is 0
	if(LR_volume > 14)
		LR_volume = 14;	//The max is 15
	Speak_att_LR = LR_list[LR_volume];
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);

}

/******************************************************************
Function:LF speaker volume control
******************************************************************/
void Audio_RR_speaker_volume_control(void)
{
	if(RR_volume <= 0)
		RR_volume = 0;	//The min is 0
	if(RR_volume > 14)
		RR_volume = 14;	//The max is 15
	Speak_att_RR = RR_list[RR_volume];
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);

}
/*****************************************************************
Function:Init the csp
*****************************************************************/
void Init_csp(void)
{
	Volume_control = 0x00;	//Total volume is 0db
	Speak_att_LR = 0xc0;	//LR speaker is 0db
	Speak_att_RR = 0xe0;	//RR speaker is 0db
	Speak_att_LF = 0x80;	//LF speaker is 0db
	Speak_att_RF = 0xa0;	//RF speaker is 0db
	Audio_switch = 0x49;	//input gain is 0db/Loudness is on/input soure is AV_switch_input_source
	Bass_control = 0x67;	//bass volume is 0db
	Treble_control = 0x77;	//Treble volume is 0db
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}

void Front_speaker_balance_volume_control(void)
{
	if(Front_speaker_balance_volume <1)
		Front_speaker_balance_volume = 0;	//The min is 0x00
	if(Front_speaker_balance_volume > 14)
		Front_speaker_balance_volume = 14;	//The max is 30
	switch(Front_speaker_balance_volume)
		{
		case 0:
			Speak_att_LF = LF_list[14];
			Speak_att_RF = RF_list[0];
			break;
		case 1:
			Speak_att_LF = LF_list[14];
			Speak_att_RF = RF_list[2];
			break;
		case 2:
			Speak_att_LF = LF_list[14];
			Speak_att_RF = RF_list[4];
			break;
		case 3:
			Speak_att_LF = LF_list[14];
			Speak_att_RF = RF_list[6];
			break;
		case 4:
			Speak_att_LF = LF_list[14];
			Speak_att_RF = RF_list[8];
			break;
		case 5:
			Speak_att_LF = LF_list[14];
			Speak_att_RF = RF_list[10];
			break;
		case 6:
			Speak_att_LF = LF_list[14];
			Speak_att_RF = RF_list[12];
			break;
		case 7:
			Speak_att_LF = LF_list[14];
			Speak_att_RF = RF_list[14];
			break;

		case 8:
			Speak_att_RF = RF_list[14];
			Speak_att_LF = LF_list[12];
			break;
		case 9:
			Speak_att_RF = RF_list[14];
			Speak_att_LF = LF_list[10];
			break;
		case 10:
			Speak_att_RF = RF_list[14];
			Speak_att_LF = LF_list[8];
			break;
		case 11:
			Speak_att_RF = RF_list[14];
			Speak_att_LF = LF_list[6];
			break;
		case 12:
			Speak_att_RF = RF_list[14];
			Speak_att_LF = LF_list[4];
			break;
		case 13:
			Speak_att_RF = RF_list[14];
			Speak_att_LF = LF_list[2];
			break;
		case 14:
			Speak_att_RF = RF_list[14];
			Speak_att_LF = LF_list[1];
			break;
		case 15:
			Speak_att_RF = RF_list[14];
			Speak_att_LF = LF_list[0];
			break;
		}
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}

void Back_speaker_balance_volume_control(void)
{
	if(Back_speaker_balance_volume <1)
		Back_speaker_balance_volume = 0;	//The min is 0x00
	if(Back_speaker_balance_volume > 14)
		Back_speaker_balance_volume = 14;
	switch(Back_speaker_balance_volume)
		{
		case 0:
			Speak_att_LR = LR_list[14];
			Speak_att_RR = RR_list[0];
			break;
		case 1:
			Speak_att_LR = LR_list[14];
			Speak_att_RR = RR_list[2];
			break;
		case 2:
			Speak_att_LR = LR_list[14];
			Speak_att_RR = RR_list[4];
			break;
		case 3:
			Speak_att_LR = LR_list[14];
			Speak_att_RR = RR_list[6];
			break;
		case 4:
			Speak_att_LR = LR_list[14];
			Speak_att_RR = RR_list[8];
			break;
		case 5:
			Speak_att_LR = LR_list[14];
			Speak_att_RR = RR_list[10];
			break;
		case 6:
			Speak_att_LR = LR_list[14];
			Speak_att_RR = RR_list[12];
			break;
		case 7:
			Speak_att_LR = LR_list[14];
			Speak_att_RR = RR_list[14];
			break;

		case 8:
			Speak_att_RR = RR_list[14];
			Speak_att_LR = LR_list[12];
			break;
		case 9:
			Speak_att_RR = RR_list[14];
			Speak_att_LR = LR_list[10];
			break;
		case 10:
			Speak_att_RR = RR_list[14];
			Speak_att_LR = LR_list[8];
			break;
		case 11:
			Speak_att_RR = RR_list[14];
			Speak_att_LR = LR_list[6];
			break;
		case 12:
			Speak_att_RR = RR_list[14];
			Speak_att_LR = LR_list[4];
			break;
		case 13:
			Speak_att_RR = RR_list[14];
			Speak_att_LR = LR_list[2];
			break;
		case 14:
			Speak_att_RR = RR_list[14];
			Speak_att_LR = LR_list[1];
			break;
		case 15:
			Speak_att_RR = RR_list[14];
			Speak_att_LR = LR_list[0];
			break;
		}
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}

void Csp_up_adjust_control(void)
{
	switch(Csp_adjust_mode)
		{
		case Front_speaker_balance_mode:
			Front_speaker_balance_volume++;
			Front_speaker_balance_volume_control();
			break;
		case Total_volume_mode:
			Total_volume++;
			Audio_total_volume_control();
			break;
		case Treble_volume_mode:
			Treble_volume++;
			Audio_treble_control();
			break;
		case Bass_volume_mode:
			Bass_volume++;
			Audio_bass_control();
			break;
		case Back_speaker_balance_mode:
			 Back_speaker_balance_volume++;
			Back_speaker_balance_volume_control();
			break;
		}
}

void Csp_down_adjust_control(void)
{
	switch(Csp_adjust_mode)
		{
		case Front_speaker_balance_mode:
			if(Front_speaker_balance_volume != 0)
				Front_speaker_balance_volume--;
			Front_speaker_balance_volume_control();
			break;
		case Total_volume_mode:
			if(Total_volume != 0)
				Total_volume--;
			Audio_total_volume_control();
			break;
		case Treble_volume_mode:
			if(Treble_volume != 0)
				Treble_volume--;
			Audio_treble_control();
			break;
		case Bass_volume_mode:
			if(Bass_volume != 0)
				Bass_volume--;
			Audio_bass_control();
			break;
		case Back_speaker_balance_mode:
			if(Back_speaker_balance_volume != 0)
			 	Back_speaker_balance_volume--;
			Back_speaker_balance_volume_control();
			break;
		}
}

void Mute_csp(void)
{
	Speak_att_LF=0x9f;
	Speak_att_RF=0xbf;
	Speak_att_LR=0xdf;
	Speak_att_RR=0xff;
	I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);	
}

void Unmute_csp(void)
{
	Audio_LF_speaker_volume_control();
	Audio_RF_speaker_volume_control();
	Audio_LR_speaker_volume_control();
	Audio_RR_speaker_volume_control();
}

			
			














⌨️ 快捷键说明

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