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 + -
显示快捷键?