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

📄 audio.c

📁 7541数字高频头源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
			AudioCalc(AUDIO_IXBAS_FRE);
			AudioSend(AUDIO_AREA_LOUD);
			break;
		case AUDIO_MODE_BASS:
			AudioBas=MaxMinChangeProtect(AudioBas,dirc,12,0,1);
			AudioCalc(AUDIO_BAS);
			AudioSend(AUDIO_AREA_BASS);
			break;
		case AUDIO_MODE_BASS_FRE:
			AudioBasFre=MaxMinChangeProtect(AudioBasFre,dirc,3,0,1);
			AudioCalc(AUDIO_BAS_FRE);
			AudioSend(AUDIO_AREA_SMB);
			break;
		case AUDIO_MODE_BASS_Q:
			AudioBasQ=MaxMinChangeProtect(AudioBasQ,dirc,3,0,1);
			AudioCalc(AUDIO_BAS_Q);
			AudioSend(AUDIO_AREA_BASS);
			break;
		case AUDIO_MODE_MID:
			AudioMid=MaxMinChangeProtect(AudioMid,dirc,12,0,1);
			AudioCalc(AUDIO_MID);
			AudioSend(AUDIO_AREA_MID);
			break;
		case AUDIO_MODE_MID_FRE:
			AudioMidFre=MaxMinChangeProtect(AudioMidFre,dirc,3,0,1);
			AudioCalc(AUDIO_MID_FRE);
			AudioSend(AUDIO_AREA_SMB);
			break;
		case AUDIO_MODE_MID_Q:
			AudioMidQ=MaxMinChangeProtect(AudioMidQ,dirc,3,0,1);
			AudioCalc(AUDIO_MID_Q);
			AudioSend(AUDIO_AREA_MID);
			break;
		case AUDIO_MODE_TRE:
			AudioTre=MaxMinChangeProtect(AudioTre,dirc,12,0,1);
			AudioCalc(AUDIO_TRE);
			AudioSend(AUDIO_AREA_TRE);
			break;
		case AUDIO_MODE_TRE_FRE:
			AudioTreFre=MaxMinChangeProtect(AudioTreFre,dirc,3,0,1);
			AudioCalc(AUDIO_TRE_FRE);
			AudioSend(AUDIO_AREA_TRE);
			break;
		case AUDIO_MODE_BAL:
			AudioBal=MaxMinChangeProtect(AudioBal,dirc,24,0,1);
			AudioCalc(AUDIO_BAL);
			AudioSend(AUDIO_AREA_SPK);
			break;
		case AUDIO_MODE_FAD:
			AudioFad=MaxMinChangeProtect(AudioFad,dirc,24,0,1);
			AudioCalc(AUDIO_FAD);
			AudioSend(AUDIO_AREA_SPK);
			break;

	}
	
}


/*********************************************
	Function:		AudioMute
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-8-9- 16:31:56
*********************************************/
void AudioMute(unsigned char type)
{

	switch(type)
	{
		case SOFTON:
			F_MUTE=1;
			AudioCalc(AUDIO_OTHER_VAL);
			AudioSend(AUDIO_AREA_MUTE);
			break;
		case SOFTOFF:
			if(F_MuteKey)break;
			F_MUTE=0;
			//if(F_MUTE)break;
			AudioCalc(AUDIO_OTHER_VAL);
			AudioSend(AUDIO_AREA_MUTE);
			break;
		case HARDON:
			Pin_AMUTE=0;
			break;
		case HARDOFF:
			Pin_AMUTE=1;
			break;
	}
	
}

unsigned char GetRealLoudTable(unsigned char ixbass)
{
	switch(AudioIXBass)
	{
		case 1:
			if(AudioVol==0)
				return(0);
			else if(AudioVol<22)
				return(5);
			else if(AudioVol<25)
				return(4);
			else if(AudioVol<31)
				return(3);
			else if(AudioVol<34)
				return(2);
			else if(AudioVol<38)
				return(1);
			else
				return(0);
			break;
		case 2:
			if(AudioVol==0)
				return(0);
			else if(AudioVol<17)
				return(10);
			else if(AudioVol<21)
				return(9);
			else if(AudioVol<23)
				return(8);
			else if(AudioVol<25)
				return(7);
			else if(AudioVol<29)
				return(6);
			else if(AudioVol<31)
				return(5);
			else if(AudioVol<33)
				return(4);
			else if(AudioVol<34)
				return(3);
			else if(AudioVol<37)
				return(2);
			else if(AudioVol<38)
				return(1);
			else
				return(0);
			break;
		case 3:
			if(AudioVol==0)
				return(0);
			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;
	}
	/*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:
			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(ZoneKeyTimer>1)ZoneKeyTimer--;
	if(MuteTimer>0)MuteTimer--;
}

void SetSoftChange(unsigned char VolVal)
{
	BackupVol=VolVal;
}

void SoftChangeLoop(void)
{
	if(SoftChangeTimer>0)
		SoftChangeTimer--;
	else
	{
		SoftChangeTimer=1;
		
		if(BackupVol!=NowVol)
		{
			if(BackupVol<NowVol)
				NowVol--;
			else
				NowVol++;
			AudioI2CBuf[3]=VolTable[NowVol];
			AudioSend(AUDIO_AREA_VOL);
		}
	}
}
/*********************************************************
				File End
*********************************************************/

⌨️ 快捷键说明

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