tda7313.c
来自「这个是一款电子音量控制芯片的控制源码」· C语言 代码 · 共 146 行
C
146 行
//--------------------------------------------//
#include "tda7313.h"
#include "i2c.h"
#include "lcd1621.h"
#include "si4700.h"
//显示、计算值 != tda7313内码
uchar vol;
uchar treble;
uchar bass;
uchar input;
uchar vol_bak;
//--------------------------------------------//
//bass code;用于trable需set bit4,
const prog_uchar code_tone_TAB[]=
{
0b01100000, //-14
0b01100001, //-12
0b01100010, //-10
0b01100011, //-8
0b01100100, //-6
0b01100101, //-4
0b01100110, //-2
0b01100111, //0
0b01101110, //2
0b01101101, //4
0b01101100, //6
0b01101011, //8
0b01101010, //10
0b01101001, //12
0b01101000 //14
};
//包含gain=0,loudness=off
const prog_uchar code_input_TAB[]=
{
0b01011110, //FM
0b01011101, //IPOD
0b01011100 //AUX
};
//--------------------------------------------//
void vol_up(void)
{
vol=inctomax(vol,VOLMAX);
}
void vol_dn(void)
{
vol=dectomin(vol,VOLMIN);
}
void treble_up(void)
{
treble=inctomax(treble,TREBMAX);
}
void treble_dn(void)
{
treble=dectomin(treble,TREBMIN);
}
void bass_up(void)
{
bass=inctomax(bass,BASSMAX);
}
void bass_dn(void)
{
bass=dectomin(bass,BASSMIN);
}
void input_cyc(void)
{
input=risecyc(INPUTMIN,input,INPUTMAX);
}
void function_cyc(void)
{
function=risecyc(FUNCMIN,function,FUNCMAX);
}
void fade_in(void)
{
uchar i;
vol_bak=vol;
vol=0;
for(i=0; i<vol_bak; i++) //i=0 then vol=i+1
{
vol_up();
i2c_mw_tda7313();
lcd1621_redraw();
}
}
void fade_out(void)
{
vol_bak=vol;
do {
vol_dn();
i2c_mw_tda7313();
lcd1621_redraw();
}
while(vol != 0);
vol=vol_bak;
}
//--------------------------------------------//
void i2c_mw_tda7313(void)
{
//根据rssi确定FM高音衰减
uchar trebleDnr=treble;
if(input==FMIN && rssi < 15) trebleDnr=subtomin(treble, 7, TREBMIN); //Dnr=-7
else if(input==FMIN && rssi < 18) trebleDnr=subtomin(treble, 6, TREBMIN); //Dnr=-6
else if(input==FMIN && rssi < 21) trebleDnr=subtomin(treble, 5, TREBMIN); //Dnr=-5
else if(input==FMIN && rssi < 24) trebleDnr=subtomin(treble, 4, TREBMIN); //Dnr=-4
else if(input==FMIN && rssi < 28) trebleDnr=subtomin(treble, 3, TREBMIN); //Dnr=-3
else if(input==FMIN && rssi < 32) trebleDnr=subtomin(treble, 2, TREBMIN); //Dnr=-2
else if(input==FMIN && rssi < 36) trebleDnr=subtomin(treble, 1, TREBMIN); //Dnr=-1
//装入TDA7313数据
i2cBuff[0] = TDA7313_SLA_W;
i2cBuff[1] = pgm_read_byte(code_input_TAB + input);
i2cBuff[2] = pgm_read_byte(code_tone_TAB + bass);
i2cBuff[3] = pgm_read_byte(code_tone_TAB + trebleDnr);
i2cBuff[3]|= 0b00010000; //用于trable需set bit4
//max 显示音量50
if(vol== 0) i2cBuff[4] = 63;
else i2cBuff[4] = VOLMAX-vol;
i2cBuff[5] = LFATT;
i2cBuff[6] = RFATT;
i2cBuff[7] = LRATT;
i2cBuff[8] = RRATT;
//
if(mute!= 0) i2cBuff[4] = VOLMAX;
i2c_mw(9);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?