⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iic.c

📁 image capture billing control system
💻 C
字号:
const Word Bass_Data[] = 
{
// 0x9e40, 0xa280, 0xa740, 0xac40, 0xb180,
 0xb740, 0xbd40, 0xc3c0, 0xca40, 0xd180,
 0xd8c0, 0xe040, 0xe800, 0xefc0, 0xf7c0,
 0x0000,
 0x0800, 0x1000, 0x17c0, 0x1f80, 0x2700,
 0x2e40, 0x3580, 0x3c00, 0x4280, 0x4880,
// 0x4e40, 0x5380, 0x5880, 0x5d40, 0x6180,
};

const Word Treble_Data[] =
{
// 0xb2c0, 0xbb40, 0xc180, 0xc6c0, 0xcbc0,
 0xd040, 0xd500, 0xd980, 0xde00, 0xe280,
 0xe7e0, 0xec00, 0xf0c0, 0xf5c0, 0xfac0,
 0x0000,
 0x0540, 0x0ac0, 0x1040, 0x1600, 0x1c00,
 0x2200, 0x2840, 0x2ec0, 0x3540, 0x3c00,
// 0x42c0, 0x49c0, 0x5180, 0x5840, 0x5f80
};

//--------------------------------------------------------------------------
void IicDelay (void)
{
	IicData = IicData;
	IicData = IicData;
}
/*
//--------------------------------------------------------------------------
void IicStart (void)
{
	IicClk = 1;
	IicDelay();
	IicData = 0;	
	IicDelay();
	IicClk = 0;
}

//--------------------------------------------------------------------------
void IicStop (void)
{
	IicData = 0;
	IicClk = 1;
	IicDelay();
	IicData = 1;
	IicDelay();
	IicDelay();
}
*/
//--------------------------------------------------------------------------

void IicStart (void)
{
	IicDelay();
	IicClk = 1;
	IicData = 1;	
	IicDelay();
	IicData = 0;	
	IicDelay();
	IicClk = 0;
	IicDelay();
}

//--------------------------------------------------------------------------
void IicStop (void)
{
	IicDelay();
	IicClk = 1;
	IicData = 0;
	IicDelay();
	IicData = 1;
	IicDelay();
}

/*
void IicStart (void)
{
	IicDelay();
	IicClk = 1;
	IicDelay();
	IicData = 1;	
	IicDelay();
	IicData = 0;	
	IicDelay();
	IicClk = 0;
}

void IicStop (void)
{
	IicDelay();
	IicClk = 1;
	IicDelay();
	IicData = 0;
	IicDelay();
	IicData = 1;
	IicDelay();
	IicClk = 0;
}
*/
//--------------------------------------------------------------------------
//#define IicBit(x)	IicData = x;	IicDelay();	IicClk = 1;	IicDelay();	IicDelay();	IicClk = 0;

//void IicBit(Byte x)
void IicBit(Bit x)
{
	IicDelay();
	IicClk = 0;
	IicData = x;
	IicDelay();
	IicClk = 1;
	IicDelay();
	IicClk = 0;
	IicDelay();
}

void IicByte (Byte dt)
{

//	Byte i;

	IicBit (dt & 0x80);
	IicBit (dt & 0x40);
	IicBit (dt & 0x20);
	IicBit (dt & 0x10);
	IicBit (dt & 0x08);
	IicBit (dt & 0x04);
	IicBit (dt & 0x02);
	IicBit (dt & 0x01);

// Ack
	IicClk = 0;
	IicData = 1;
	IicDelay();
	IicClk = 1;
	IicDelay();
	while(~IicClk);
	IicClk = 0;
	IicDelay();
	I2C_Error=0;
/*
		for( i=0 ; i<10 ; i++)
		{
			if(~IicData)
			{
				IicClk = 0;
				IicDelay();
				return;
			}
		}
		while(~IicClk);
		IicStop();
		I2C_Error=1;
*/
/*
		IicClk = 0;
		IicDelay();
		I2C_Error=0;
*/

/*
	Bit IicErr;
	do
	{
		IicBit (dt & 0x80);
		IicBit (dt & 0x40);
		IicBit (dt & 0x20);
		IicBit (dt & 0x10);
		IicBit (dt & 0x08);
		IicBit (dt & 0x04);
		IicBit (dt & 0x02);
		IicBit (dt & 0x01);


//	IicBit (1);			// Ack
//	IicDelay();
//	IicDelay();
//	IicDelay();


// Ack
		IicClk = 0;
		IicData = 1;
		IicDelay();
		IicClk = 1;
		IicDelay();
//		Red_Light(1,1);
		while(!IicClk);
//		Red_Light(1,1);
		if(IicData)
		{
			IicClk = 0;
			IicData = 0;
			IicClk = 1;
			IicDelay();
			IicData = 1;
			IicDelay();
			IicErr = 1;
		}
		else
		{
			IicErr = 0;
		}
	}
	while(IicErr);
	IicClk = 0;
	I2C_Error=0;
*/
}

void Volume_Adj()
{
// DAC3550A control
//	Delay(100);

	do{
		I2C_Error=0;

 		IicStart();
		IicByte (0x9A);
		IicByte (0xC2);
		if(Volume>10)
		{
			IicByte (Volume+10);  // max 0x38 (d'56')
			IicByte (Volume+10);
		}
		else
		{
			IicByte (Volume*2);  // max 0x38 (d'56')
			IicByte (Volume*2);
		}
		IicStop();
	}while(I2C_Error);
//	Delay(100);
}


void Volume_Mute()
{
// DAC3550A control
//	Delay(10);
	do{
		I2C_Error=0;

		IicStart();
		IicByte (0x9A);
		IicByte (0xC2);
		IicByte (0);  // max 0x38 (d'56')
		IicByte (0);
		IicStop();
	}while(I2C_Error);
//	Delay_100ms(1);
}

void Bass_Adj()
{
	do{
		I2C_Error=0;

		IicStart();
		IicByte(0x3A);
		IicByte(0x68);

		IicByte(0x96);	// 0x9 : write register
		IicByte(0xb0);	// 0xe6 : Startup configration
		IicByte(Bass_Data[Bass]/256);
		IicByte(Bass_Data[Bass]%256);
		IicStop();
	}while(I2C_Error);
}

void Treble_Adj()
{
	do{
		I2C_Error=0;

		IicStart();
		IicByte(0x3A);
		IicByte(0x68);

		IicByte(0x96);	// 0x9 : write register
		IicByte(0xf0);	// 0xe6 : Startup configration
		IicByte(Treble_Data[Treble]/256);
		IicByte(Treble_Data[Treble]%256);
		IicStop();
	}while(I2C_Error);
}

void Set_EQ_Mode(Byte mode)
{
	Red_Off();
	Green_Off();
/*
#define	Normal_Mode()			EQ_Mode_Change(7, 7, NORMAL_MODE)
#define	Bass_Up_Mode()			EQ_Mode_Change(13, 5, BASS_UP_MODE)
#define	Treble_Up_Mode()		EQ_Mode_Change(5, 13, TREBLE_UP_MODE)
#define	Bass_Treble_Up_Mode()	EQ_Mode_Change(13, 13, BASS_TREBLE_UP_MODE)
*/
	switch(mode)
	{
	case NORMAL_MODE:
		Bass = 7; Treble = 7;
		break;
	case BASS_UP_MODE:
		Bass = 13; Treble = 5;
		break;
	case TREBLE_UP_MODE:
		Bass = 5; Treble = 13;
		break;
	case BASS_TREBLE_UP_MODE:
		Bass = 13; Treble = 13;
		break;
	default: break;
	}

	Bass_Adj();
	Treble_Adj();
	EQ_Mode = mode;
}

void Init_IIC()
{
//	VDD_On();
//	Delay_100ms(5);

//	while(!PUP_Check);

//	while(!PUP_Check);
//	while(!P13);

//	Delay_Sec(1);
	IicData = 1;
	IicClk = 1;

	Volume_Mute();

	WSEN_Off();
	Delay_100ms(1);
//	Delay_Sec(2);

	WSEN_On();
	Delay_100ms(1);
//	Delay_Sec(2);
//	Green_Light(1,5);
/*
	WSEN_Off();
	Delay_10ms(2);
	WSEN_On();
	Delay_10ms(2);
*/

	IicData = 1;
	IicClk = 1;
	IicDelay();

// DC-DC Control
	do{
		I2C_Error=0;
		IicStart();
		IicByte(0x3A);
		IicByte(0x68);

		IicByte(0x98);	// Resister
		IicByte(0xe0);	// 
//	IicByte(0x03);
//	IicByte(0xc0);
		IicByte(0x00);
		IicByte(0x00);
		IicStop();
	}while(I2C_Error);


//-------------------------

	WSEN_Off();
	Delay_100ms(1);
	WSEN_On();
	Delay_100ms(1);

//	Mode2();

/*
	IicStart();
	IicByte(0x3A);
	IicByte(0x68);

	IicByte(0x9E);	// 0x9 : write register
	IicByte(0x60);	// 0xe6 : Startup configration
	IicByte(0x00);
	IicByte(0x00);
	IicStop();

	IicStart();
	IicByte(0x3A);
	IicByte(0x68);
	IicByte(0x9C);	// 0x9 : write register
	IicByte(0x50);	// 0xc5 : Left chanel
	IicByte(0x00);	// PI5 -> 0 : 32bit
	IicByte(0x00);
	IicStop();

	IicStart();
	IicByte(0x3A);
	IicByte(0x68);
	IicByte(0x9C);
	IicByte(0x60);	// 0xc6 : Right chanel
	IicByte(0x00);
	IicByte(0x00);
	IicStop();

	IicStart();		// run
	IicByte (0x3A);
	IicByte (0x68);
	IicByte (0x0F);
	IicByte (0xCD);
	IicStop();

// 
	IicStart();
	IicByte (0x3A);
	IicByte (0x68);

	IicByte (0xA0);	//write D0 memory
	IicByte (0x00);

	IicByte (0x00); // length
	IicByte (0x01);

	IicByte (0x03);	// address : output configration
	IicByte (0x2F);

	IicByte (0x00);	// data
	IicByte (0x00); //
	IicByte (0x00);
	IicByte (0x00);
	IicStop();
	
	IicStart();		// run
	IicByte (0x3A);
	IicByte (0x68);
	IicByte (0x04);
	IicByte (0x75);
	IicStop();

//
	IicStart();
	IicByte (0x3A);
	IicByte (0x68);

	IicByte (0xB0);	// write D1 memory
	IicByte (0x00);

	IicByte (0x00);	// length
	IicByte (0x04);

	IicByte (0x07);	// address : bass-band Volume
	IicByte (0xF8);

	IicByte (0x00);
	IicByte (0x00);
	IicByte (0x00);
	IicByte (0x08);

	IicByte (0x00);
	IicByte (0x00);
	IicByte (0x00);
	IicByte (0x00);

	IicByte (0x00);
	IicByte (0x00);
	IicByte (0x00);
	IicByte (0x00);

	IicByte (0x00);
	IicByte (0x00);
	IicByte (0x00);
	IicByte (0x08);
	IicStop();
*/
/*
// Mute
	IicStart();
	IicByte(0x3A);
	IicByte(0x68);

	IicByte(0x9a);	// 0x9 : write register
	IicByte(0xa1);	// 
	IicByte(0x00);
	IicByte(0x00);
	IicStop();
*/
}

void Init_EQ()
{
	Volume_Mute();

	MMU_Reset();
	DMA_Mode_Off();
	Flash_Mem_Read(0,0);
	if(Read_MMU(0)==FORMAT_MARK)
	{
		Volume = Read_MMU(1);
		if(Volume>MAX_VOLUME) Volume = DEFAULT_VOLUME;
		EQ_Mode = Read_MMU(2);
		if(EQ_Mode>BASS_TREBLE_UP_MODE) EQ_Mode = NORMAL_MODE;
	}
	else
	{
		Volume = DEFAULT_VOLUME;
		EQ_Mode = NORMAL_MODE;
	}

	Set_EQ_Mode(EQ_Mode);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -