|
发表于 2012-6-8 17:58:41
|
显示全部楼层
#define PT2313_ADDR 0x88 //I2C写地址
unsigned char contr[7];// = {63, 0, 31, 31, 15, 15, 3};
#pragma warn-
eeprom char mcontr[7];
#pragma warn+
extern unsigned char tda7131savecou = 0;
//unsigned char keycou = 0;
//extern unsigned int tcount = 0, keyval = 0x0f, keysta = 1, keytem = 0x0f, keycn = 22, ctrbit = 0;
static bit muteflag = 0;
#define keypin (PINC & 0x0f)
#define fcow 5
#define fvcow (fcow + 36)
#define bcow 70
#define bvcow (bcow + 36)
//#define MovLef 0x02fd
//#define MovRig 0xc23d
//#define ValAdd 0x906f
//#define ValDec 0xa857
void Radio_dsiplay(void);
/*///////////////////////////////////////////////////
四个通道衰减处理
通道0-3单独通道处理
通道4 前两通道处理
通道5 后两通道处理
通道6 四个通道同时处理
0静音 31音最大
*////////////////////////////////////////////////////
unsigned char spkatt(unsigned char track, unsigned char atten)
{
unsigned char flag = 0, tem;
tem = track;
if(track >= 0 || track <= 7) //合法数据
{
track += 4;
track <<= 5;
}
else
{
return;
}
if(atten >= 0 && atten <= 31)
{
atten = 31 - atten;
}
else
return;
iicstart();
flag = write(PT2313_ADDR);
if(tem < 4)
{
flag = write(track | atten);
}
else
{
if(tem == 4)
{
flag = write(0x80 | atten);
flag = write(0xa0 | atten);
}
if(tem == 5)
{
flag = write(0xc0 | atten);
flag = write(0xe0 | atten);
}
// if(tem == 6)
// {
// flag = write(0x80 | atten);
// flag = write(0xa0 | atten);
// flag = write(0xc0 | atten);
// flag = write(0xe0 | atten);
// }
}
iicstop();
return(flag);
}
/*///////////////////////////////////////////////
0-2 3个输入通道
0-3 四级响度 响度为0时关闭响度
*////////////////////////////////////////////////
unsigned char audsw(unsigned char stern) //, unsigned char loud
{
unsigned char tem = 0x44, flag = 0;
if(stern > 2)
return;
// if(loud > 4)
// {
// return;
// }
// else
// {
// loud = 3 - loud;
// loud <<= 3;
// }
iicstart();
flag = write(PT2313_ADDR);
// if(loud == 4)
// {
// flag = write(0x44);
// }
// else
// {
// tem |= loud;
tem |= stern;
flag = write(tem);
// }
iicstop();
tda7131savecou = 30; //调音设置过后30秒保存
return(flag);
}
//////////////////////////////////////////////////
//type 为0 时设bass
// 1 Treble
//0-15 共16级设置
//////////////////////////////////////////////////
unsigned char bastre(unsigned char type, unsigned char lay)
{
unsigned char flag = 0;
if(type > 1)return;
if(lay >15)return;
if(lay > 7)
{
lay &= 0x07;
lay = 7 - lay;
lay |= 0x08;
}
iicstart();
flag = write(PT2313_ADDR);
if(type)
{
flag = write(lay | 0x70);
sprintf(lcd_buffer, "BA:%2d", contr[5]);
display_ascii(34,7,1);
}
else
{
flag = write(lay | 0x60);
sprintf(lcd_buffer, "TR:%2d", contr[4]);
display_ascii(0,7,1);
}
iicstop();
tda7131savecou = 30; //调音设置过后30秒保存
return(flag);
}
//////////////////////////////////////
//音量设置0最小,63最大
//
//////////////////////////////////////
unsigned char volume(unsigned char vol)
{
unsigned char flag = 0;
iicstart();
flag = write(PT2313_ADDR);
if(vol > 64)
return;
if(vol == 64)
{
sprintf(lcd_buffer, "VOLUME:MUT");
vol = 63;
flag = write(vol);
}
else
{
vol = 63 - vol;
sprintf(lcd_buffer, "VOLUME: %2d", 63 - vol);
flag = write(vol);
}
display_ascii(68,7,1);
iicstop();
tda7131savecou = 30; //调音设置过后30秒保存
return(flag);
}
void setload()
{
volume(contr[0]);
audsw(contr[1]); //,contr[6]
spkatt(4,contr[2]);
spkatt(5,contr[3]);
bastre(0,contr[4]);
bastre(1,contr[5]);
}
/*void Tda7131Display(void)
{
sprintf(lcd_buffer, "VOLUME ");
display_ascii(fcow,2,1);
sprintf(lcd_buffer, " %d", contr[0]);
display_ascii(fvcow,2,1);
sprintf(lcd_buffer, "AUD_SW %d", contr[1]);
display_ascii(bcow,2,1);
sprintf(lcd_buffer, "BAK_SP %d", contr[2]);
display_ascii(fcow,3,1);
sprintf(lcd_buffer, "FON_SP %d", contr[3]);
display_ascii(bcow,3,1);
sprintf(lcd_buffer, "TREBLE %d", contr[4]);
display_ascii(fcow,4,1);
sprintf(lcd_buffer, "BASS %d", contr[5]);
display_ascii(bcow,4,1);
sprintf(lcd_buffer, "LOUNDN %d", contr[6]);
display_ascii(fcow,5,1);
setload();
} */
void Tda7131Load(void)
{
unsigned char i;
for(i = 0; i < 7; i++) contr[i] = mcontr[i]; //{63, 0, 31, 31, 15, 15, 3};
if(contr[0] > 63)contr[0] = 30; //音量
if(contr[1] > 2)contr[1] = 0; //音源
switch(contr[1])
{
case 0: sprintf(lcd_buffer, " MHz"); break;
case 1: sprintf(lcd_buffer, " CD Play"); break;
case 2: sprintf(lcd_buffer, " PC au "); break;
}
display_ascii16x32(0,2,1);
if(contr[2] > 31)contr[2] = 31; //后两声道音量
if(contr[3] > 31)contr[3] = 31; //前两声道音量
if(contr[4] > 15)contr[4] = 15; //高音值
if(contr[5] > 15)contr[5] = 15; //低音值
if(contr[6] > 4)contr[6] = 4; //响度
}
void Tda7131Save(void)
{
unsigned char i;
if(tda7131savecou == 1)
{
for(i = 0; i < 7; i++)
{
mcontr[i] = contr[i];
}
}
}
void Tda7131_Ctr(unsigned int keyval)
{
switch(keyval)
{
case VolAdd: //vol +
{
if(contr[0] < 63)
{contr[0] ++; volume(contr[0]);}
break;
}
case VolDec: //vol -
{
if(contr[0] > 0)
{contr[0] --;volume(contr[0]);}
break;
}
case Mute: //mute
{
if(muteflag)
{
muteflag = 0;
volume(contr[0]);
}
else
{
muteflag = 1;
volume(64);
}
break;
}
//-------------高音处理-----------------
case PRT: //tre +
{
if(contr[4] < 15)contr[4] ++; else contr[4] = 0;
bastre(0,contr[4]);
break;
}
//-----------------低音处理-----------------
case Clock: //bass
{
if(contr[5] < 15)contr[5] ++; else contr[5] = 0;
bastre(1,contr[5]);
break;
}
//------------------音源处理---------------
case Mode: //ausw Mode EQ
{
if(contr[1] < 2)
{
contr[1] ++;
}
else
contr[1] = 0;
switch(contr[1])
{
case 0:
{
sprintf(lcd_buffer, " MHz");
display_ascii16x32(0,2,1);
Radio_dsiplay();
break;
}
case 1:
{
sprintf(lcd_buffer, " CD Play ");
break;
}
case 2:
{
sprintf(lcd_buffer, " PC au ");
break;
}
}
display_ascii16x32(0,2,1);
audsw(contr[1]); //,contr[6]
break;
}
//---------------------前两声道处理------------
// case 0x5aa5: //fontsp +
// {
// if(contr[3] < 31)
// {
// contr[3] ++;
// sprintf(lcd_buffer, " %d", contr[3]);
// display_ascii(bvcow,3,1);
// spkatt(5,contr[3]);
// }
// break;
// }
// case 0x42ba: //fontsp -
// {
// if(contr[3] > 0)
// {
// contr[3] --;
// sprintf(lcd_buffer, " %d", contr[3]);
// display_ascii(bvcow,3,1);
// spkatt(5,contr[3]);
// }
// break;
// }
//-----------------后两声道处理----------
// case 0x4bd4: //backsp +
// {
// if(contr[2] < 31)
// {
// contr[2] ++;
// sprintf(lcd_buffer, " %2d", contr[2]);
// display_ascii(fvcow,3,1);
// spkatt(4,contr[2]);
// }
// break;
// }
// case 0x52ba: //backsp -
// {
// if(contr[2] > 0)
// {
// contr[2] --;
// sprintf(lcd_buffer, " %2d", contr[2]);
// display_ascii(fvcow,3,1);
// spkatt(4,contr[2]);
// }
// break;
// }
// break;
tda7131savecou = 30;
}
}
|
|