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

📄 audio.c

📁 我个人编写的车载dvd上的程序
💻 C
📖 第 1 页 / 共 3 页
字号:
			else if(AudioVol<17)
				return(15);
			else if(AudioVol<19)
				return(14);
			else if(AudioVol<21)
				return(13);
			else if(AudioVol<23)
				return(12);
			else if(AudioVol<25)
				return(11);
			else if(AudioVol<27)
				return(10);
			else if(AudioVol<29)
				return(9);
			else if(AudioVol<31)
				return(8);
			else if(AudioVol<32)
				return(7);
			else if(AudioVol<33)
				return(6);
			else if(AudioVol<34)
				return(5);
			else if(AudioVol<35)
				return(4);
			else if(AudioVol<36)
				return(3);
			else if(AudioVol<37)
				return(2);
			else if(AudioVol<38)
				return(1);
			else
				return(0);
			break;
		default:
			return(0);
			break;
	}
	return(0);
	/*if(AudioVol>24)return(0);
	switch(AudioIXBass)
	{
		case 1:
			return(4-AudioVol/6);
			break;
		case 2:
			return(8-AudioVol/3);
			break;
		case 3:
			return(12-AudioVol/2);
			break;
		default:
			return(0);
			break;
	}*/
/*	if(AudioVol<20)
	{
		switch(AudioIXBass)
		{
			case 1:
				return(4);
				break;
			case 2:
				return(8);
				break;
			case 3:
				return(12);
				break;
			default:
				return(0);
				break;
		}
	}
	else if(AudioVol<25)
	{
		switch(AudioIXBass)
		{
			case 1:
				return(1);
				break;
			case 2:
				return(2);
				break;
			case 3:
				return(3);
				break;
			default:
				return(0);
				break;
		}
	}
	else
		return(0);*/
}

/*********************************************
	Function:		AudioCalc
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-8-9- 16:32:01
*********************************************/
void AudioCalc(unsigned char type)
{
	switch(type)
	{
		case AUDIO_VOL:
			if(F_VolNotSoftChange)
			{
				if(F_LOUD)
					NowVol=VolChangeTable[AudioVol]+GetRealLoudTable(AudioIXBass);//LoudTable[AudioIXBass]; 
				else
					NowVol=VolChangeTable[AudioVol]; 
				if(AudioVol==0)
					NowVol=0;
				BackupVol=NowVol;
				AudioI2CBuf[3]=VolTable[NowVol]; 

				F_VolNotSoftChange=0;
			}
			else
			{
				if(F_LOUD)
					SetSoftChange(VolChangeTable[AudioVol]+GetRealLoudTable(AudioIXBass));//LoudTable[AudioIXBass]); 
				else
					SetSoftChange(VolChangeTable[AudioVol]); 
				if(AudioVol==0)
					SetSoftChange(VolChangeTable[0]); 
			}
			break;
		case AUDIO_BAS:
			AudioI2CBuf[6]=(AudioI2CBuf[6] & 0xE0)+BasTreTable[AudioBas];
			break;
		/*
		case AUDIO_BAS_FRE:
			AudioI2CBuf[8]=(AudioI2CBuf[8] & 0xCF)+(AudioBasFre<<4);
			break;
		case AUDIO_BAS_Q:
			AudioI2CBuf[6]=(AudioI2CBuf[6] & 0x9F)+(AudioBasQ<<5);
			break;
		*/
		case AUDIO_TRE:
			AudioI2CBuf[4]=(AudioI2CBuf[4] & 0xE0)+BasTreTable[AudioTre];
			break;
		/*
		case AUDIO_TRE_FRE:
			AudioI2CBuf[4]=(AudioI2CBuf[4] & 0x9F)+(AudioTreFre<<5);
			break;
		*/
		case AUDIO_MID:
			AudioI2CBuf[5]=(AudioI2CBuf[5] & 0xE0)+BasTreTable[AudioMid];
			break;
		/*
		case AUDIO_MID_FRE:
			AudioI2CBuf[8]=(AudioI2CBuf[8] & 0xF3)+(AudioMidFre<<2);
			break;
		case AUDIO_MID_Q:
			AudioI2CBuf[5]=(AudioI2CBuf[5] & 0x9F)+(AudioMidQ<<5);
			break;
		case AUDIO_IXBAS:
			AudioI2CBuf[1]=(AudioI2CBuf[1] & 0xF0)+GetRealLoudTable(AudioIXBass);//LoudTable[AudioIXBass];
			break;
		case AUDIO_IXBAS_FRE:
			AudioI2CBuf[1]=(AudioI2CBuf[1] & 0xCF)+(AudioIXBassFre<<4);
			break;
		case AUDIO_SUBW:
			AudioI2CBuf[15] = SubwTable[AudioSubw];
			break;
		case AUDIO_SUBW_FRE:
			AudioI2CBuf[8]=(AudioI2CBuf[8] & 0xFC)+AudioSubwFre;
			break;
		*/
		case AUDIO_BAL:
		case AUDIO_FAD:
			AudioCalcBalFad();
			break;
		case AUDIO_OTHER_VAL:
			AudioCalcOther();
			break;
		case AUDIO_SOURCE:
			AudioCalcSource();
			break;
		case AUDIO_ALL_VAL:
		default:
			// SCI_SendStr("Audio Setup VolNotSoftCHange:",AudioVol);
			if(F_VolNotSoftChange)
			{
				if(F_LOUD)
					NowVol=VolChangeTable[AudioVol]+GetRealLoudTable(AudioIXBass);//LoudTable[AudioIXBass]; 
				else
					NowVol=VolChangeTable[AudioVol]; 
				if(AudioVol==0)
					NowVol=0;
				BackupVol=NowVol;
				AudioI2CBuf[3]=VolTable[NowVol]; 
				F_VolNotSoftChange=0;
			}
			else
			{
				if(F_LOUD)
					SetSoftChange(VolChangeTable[AudioVol]+GetRealLoudTable(AudioIXBass));//LoudTable[AudioIXBass]); 
				else
					SetSoftChange(VolChangeTable[AudioVol]); 
				if(AudioVol==0)
					SetSoftChange(VolChangeTable[0]); 
			}
			AudioI2CBuf[6]=(AudioI2CBuf[6] & 0xE0)+BasTreTable[AudioBas];
			AudioI2CBuf[8]=(AudioI2CBuf[8] & 0xCF)+(AudioBasFre<<4);
			AudioI2CBuf[6]=(AudioI2CBuf[6] & 0x9F)+(AudioBasQ<<5);
			AudioI2CBuf[4]=(AudioI2CBuf[4] & 0xE0)+BasTreTable[AudioTre];
			AudioI2CBuf[4]=(AudioI2CBuf[4] & 0x9F)+(AudioTreFre<<5);
			AudioI2CBuf[5]=(AudioI2CBuf[5] & 0xE0)+BasTreTable[AudioMid];
			AudioI2CBuf[8]=(AudioI2CBuf[8] & 0xF3)+(AudioMidFre<<2);
			AudioI2CBuf[5]=(AudioI2CBuf[5] & 0x9F)+(AudioMidQ<<5);
			AudioI2CBuf[1]=(AudioI2CBuf[1] & 0xF0)+GetRealLoudTable(AudioIXBass);//LoudTable[AudioIXBass];
			AudioI2CBuf[1]=(AudioI2CBuf[1] & 0xCF)+(AudioIXBassFre<<4);
			AudioI2CBuf[15] = SubwTable[AudioSubw];
			AudioI2CBuf[8]=(AudioI2CBuf[8] & 0xFC)+AudioSubwFre;
			AudioCalcBalFad();
			AudioCalcOther();
			AudioCalcSource();
			break;
			
	}
	
}

/*********************************************
	Function:		AudioCalcBalFad
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-8-9- 16:32:13
*********************************************/
void AudioCalcBalFad(void)
{
	unsigned char lr,lf,rr,rf;
	lr=0;
	lf=0;
	rr=0;
	rf=0;
	if(AudioBal>12)
	{
		lr=AudioBal-12;
		lf=AudioBal-12;
	}
	else
	{
		rr=12-AudioBal;
		rf=12-AudioBal;
	}
	if(AudioFad>12)
	{
		lr=MaxMinChangeProtect(lr+AudioFad-12,0,12,0,1);
		rr=MaxMinChangeProtect(rr+AudioFad-12,0,12,0,1);
	}
	else
	{
		lf=MaxMinChangeProtect(lf+12-AudioFad,0,12,0,1);
		rf=MaxMinChangeProtect(rf+12-AudioFad,0,12,0,1);
	}

	AudioI2CBuf[10] = BalFadTable[lf];
	AudioI2CBuf[11] = BalFadTable[rf];
	AudioI2CBuf[12] = BalFadTable[lr];
	AudioI2CBuf[13] = BalFadTable[rr];
}

/*********************************************
	Function:		AudioCalcOther
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-8-9- 16:32:17
*********************************************/
void AudioCalcOther(void)
{

	/*if(F_SUBW)
		AudioI2CBuf[9] &= 0xF7;
	else
		AudioI2CBuf[9] |= 0x08;*/

	if(F_3DSOUND)
		AudioI2CBuf[16] |= 0x80;
	else
		AudioI2CBuf[16] &= 0x7F;

	if(F_MUTE)
		AudioI2CBuf[2] &= 0xFE;
	else
		AudioI2CBuf[2] |= 0x01;
		
}

/*********************************************
	Function:		AudioCalcSource
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-8-9- 16:32:20
*********************************************/
void AudioCalcSource(void)
{
	if(F_2ZONE)
		AudioI2CBuf[7] |= 0x80;
	else
		AudioI2CBuf[7] &= 0x7F;

	AudioI2CBuf[0]=(AudioI2CBuf[0] & 0xF8)+SourceTable[AudioFSource];
	AudioI2CBuf[7]=(AudioI2CBuf[7] & 0xF8)+SourceTable[AudioRSource];
	if(!F_2ZONE)return;
	AudioI2CBuf[10]=VolTable[VolChangeTable[AudioFVol]]; 
	AudioI2CBuf[11]=VolTable[VolChangeTable[AudioFVol]]; 
	AudioI2CBuf[12]=VolTable[VolChangeTable[AudioRVol]]; 
	AudioI2CBuf[13]=VolTable[VolChangeTable[AudioRVol]]; 
	
	
}

/*********************************************
	Function:		AudioSend
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-8-9- 16:32:23
*******************************************/

void AudioSend(unsigned char start, unsigned char end)
{
	unsigned char i;
  	I2CStart ();
  	I2COut8Bit(0x88);
  	if(start==end)
		I2COut8Bit(start);
	else
		I2COut8Bit(start+AUDIO_AUTO_INC);

	for (i=start;i<=end; i++)
		I2COut8Bit(AudioI2CBuf[i]);

	I2CStop();
}

/*********************************************
	Function:		AudioTimerINT10ms
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-8-10- 17:42:15
*********************************************/
void AudioTimerINT10ms(void)
{
	/*if(BeepTimer>1)
		BeepTimer--;
	else if(BeepTimer==1)
	{
		PWMCR =y00000000;
		BeepTimer=0;

		// for test /MCCBCR&=y11111110;
	}*/

	if(SpecTimer>0)SpecTimer--;
	if(SpecChangeTimer>0)SpecChangeTimer--;
}

/*********************************************
	Function:		AudioTimerINT100ms
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-8-9- 16:32:26
*********************************************/
void AudioTimerINT100ms(void)
{
	if(AudioTimer>1)AudioTimer--;
	if(MuteTimer>0)MuteTimer--;
}

/*********************************************
	Function:		SetSoftChange
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:18:28
*********************************************/
void SetSoftChange(unsigned char VolVal)
{
	BackupVol=VolVal;
}

/*********************************************
	Function:		SoftChangeLoop
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:18:18
*********************************************/
void SoftChangeLoop(void)
{
	if(SoftChangeTimer>0)
		SoftChangeTimer--;
	else
	{
		SoftChangeTimer=1;
		
		if(BackupVol!=NowVol)
		{
			if(BackupVol<NowVol)
				NowVol--;
			else
				NowVol++;
			AudioI2CBuf[3]=VolTable[NowVol];
			//SCI_SendStr("New Audio Is:",AudioI2CBuf[3]);
			AudioSend(AUDIO_AREA_VOL);
		}
	}
}


void AudioDSP(void)
{
	if(AudioEQMode==0)
		{
		 	AudioBas=BackupEQBas;
		 	AudioTre=BackupEQTre;
		}
	else
		{
			if(AudioEQMode==1)
				{
		 			BackupEQBas=AudioBas;
		 			BackupEQTre=AudioTre;
				}
			AudioBas=EQTable[(AudioEQMode-1)*2];
			AudioTre=EQTable[(AudioEQMode-1)*2+1];
		}
	AudioCalc(AUDIO_BAS);
	AudioCalc(AUDIO_TRE);
	AudioSend(AUDIO_AREA_EQ);
}

static const unsigned char SpecTable[]=
{
	0,5,8,10,15,20,25,255
};
static const unsigned char SpecTable2[]=
{
	0,8,16,24,32,40,50,255
};

#if 0
/*********************************************
	Function:		AudioSpectrumProc
	Description:	
	Write/Modify:	Yete HUANG
	Time:		2006-05
*********************************************/

void AudioSpectrumProc(void)
{
	unsigned char i,temp1,temp2;

	if(SpecTimer==0&&System.PowerMode==POWERMODE_POWERON)
	{
		SpecTimer=10;

		/*if(System.PowerMode!=POWERMODE_POWERON
			|| System.PanelMode!=PANELMODE_PANELON
			|| System.AccMode!=ACCMODE_ACCON)
			return;*/

		Pin_SACLK=1;
		M_WAIT;
		M_WAIT;
		M_WAIT;
		Pin_SACLK=0;
		M_WAIT;
		M_WAIT;
		M_WAIT;
		for(i=0;i<7;i++)
		{
			Pin_SACLK=1;
			M_WAIT;
			M_WAIT;
			M_WAIT;
			
			temp1=GetADValue(AD_SAIN);
			
			if(temp1>40)
				SpecChangeTimer=100;

			for(temp2=0;temp2<7;temp2++)
			{
				if(SpecChangeTimer==0)
				{
					if(temp1<SpecTable[temp2])
						break;
				}
				else
				{
					if(temp1<SpecTable2[temp2])
						break;
				}
			}
				
			if(AudioSpectrum[i]==temp2 &&AudioSpectrum[i]>2)
				if(AudioSpectrum[i]==7)
				{
					AudioSpectrum[i]=6;
				}
				else
				{
					AudioSpectrum[i]+=1;
				}
			else
				AudioSpectrum[i] = temp2;
			
			if(AudioSpectrum[i] >7)AudioSpectrum[i] =7;			//for(temp2=0;temp2<7;temp2++)
			
			Pin_SACLK=0;
			M_WAIT;
			M_WAIT;
			M_WAIT;
		}
		Pin_SACLK=1;
		F_SpecOK=1;
	}
	
}


/*********************************************
	Function:		ShowSpectrum
	Description:	
	Write/Modify:	Yete HUANG
	Time:		2006-05
*********************************************/
void ShowSpectrum(void)
{
	unsigned char i,j;
	
	UIcon[4].byte=0x0;//Clear the Area
	if(!F_MuteKey)
	{
		i=3;
		for(j=0;j<AudioSpectrum[i];j++)//show 1k audio spectrum
		{
			UIcon[4].byte|= (0x1<<j);
		}
	}
}

/*********************************************
	Function:		ShowVolBar
	Description:	
	Write/Modify:	Yete HUANG
	Time:		2006-05
*********************************************/
void ShowVolBar(void)
{
	unsigned char i;
	unsigned char Voldisptemp;

	Voldisptemp = AudioVol / 6;
	if(Voldisptemp>7) Voldisptemp=7;
	UIcon[3].byte=0x0;
	UIcon[5].byte=0x0;
	if(!F_MuteKey)
	{
		for(i=0;i<Voldisptemp;i++)
		{
			UIcon[3].byte|= (0x1<<i);
			UIcon[5].byte|= (0x1<<i);
		}
	}			
}
#endif


/*********************************************************
				File End
*********************************************************/

⌨️ 快捷键说明

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