📄 audio.c
字号:
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 + -