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