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

📄 tw9910 i2c initial.c

📁 TW9910 I2C初始化程序
💻 C
字号:
void I2CStart(void)
{
	I2CON=I2CRestart;	//启动I2C总线
	while(SI==0);		//启动中......  启动完毕SI=1						
}

void I2CSend(unsigned char send)
{
	I2DAT=send;		//待发送数据装入I2DAT
	I2CON=I2CBus_ACK;  	//清除SI准备发送
	while(SI==0);	   	//发送中......  发送完毕SI=1
}

void WriteTW9910(unsigned char index,unsigned char dat)
{
	I2CStart();

	I2CSend(SLAW);		//发送从器件地址
	if(I2STAT!=0x18)	//发送完毕后检验是否有应答
	{
		I2CON=I2CStop;	//如果没有应答就停止I2C总线	
	}

	I2CSend(index);		//发送从器件数据寄存器首地址
	if(I2STAT!=0x28)	//发送完毕后检验是否有应答
	{
		I2CON=I2CStop;	//
	}

	I2CSend(dat);		//发送从器件控制寄存器控制字
	if(I2STAT!=0x28)	//发送完毕后检验是否有应答
	{
		I2CON=I2CStop;	//
	}

	I2CON=I2CStop;		//数据发送完毕释放总线
}

void I2CRead(void)
{
	I2CON=I2CBus_ACK;	//清除SI准备接收
	while( SI==0 );		//接收中......
}

unsigned char ReadTW9910(unsigned char index)
{
	unsigned char read=0;

	I2CStart();

	I2CSend(SLAW);		//发送从器件地址
	if(I2STAT!=0x18)	//发送完毕后检验是否有应答
	{
		I2CON=I2CStop;	//如果没有应答就停止I2C总线	
	}

	I2CSend(index);		//发送从器件数据寄存器首地址
	if(I2STAT!=0x28)	//发送完毕后检验是否有应答
	{
		I2CON=I2CStop;	//
	}

	I2CStart();

	I2CSend(SLAR);		//发送从器件地址
	if(I2STAT!=0x40)	//发送完毕后检验是否有应答
	{
		I2CON=I2CStop;	//如果没有应答就停止I2C总线	
	}

	I2CRead();			//接收中......

	if(I2STAT!=0x50)	//接收完毕进行应答判断
	{
		I2CON=I2CStop;	//
	}

	read=I2DAT;			//数据取出

	if(I2STAT!=0x50)
	{
		read=0;			//接收错误,数据清零
	}
	
	I2CON=I2CStop;		//数据接收完毕释放总线

	return(read);		//接收数据返回
}

void TW9910Initial(void)
{
	RSTB=1;

//	PAL
	WriteTW9910(0x00,0x59);
	WriteTW9910(0x01,0x69);
	WriteTW9910(0x02,0x40);
	WriteTW9910(0x03,0xa2);
	WriteTW9910(0x04,0x00);
	WriteTW9910(0x05,0x01);
	WriteTW9910(0x06,0x00);
	WriteTW9910(0x07,0x12);
	WriteTW9910(0x08,0x19);
	WriteTW9910(0x09,0x1f);
	WriteTW9910(0x0a,0x0c);
	WriteTW9910(0x0b,0xd0);
	WriteTW9910(0x0c,0xcc);
	WriteTW9910(0x0d,0x00);
	WriteTW9910(0x0e,0x11);
	WriteTW9910(0x0f,0x00);
	WriteTW9910(0x10,0x00);
	WriteTW9910(0x11,0x64);
	WriteTW9910(0x12,0x11);
	WriteTW9910(0x13,0x80);
	WriteTW9910(0x14,0x80);
	WriteTW9910(0x15,0x00);
	WriteTW9910(0x16,0x00);
	WriteTW9910(0x17,0x30);
	WriteTW9910(0x18,0x44);
	WriteTW9910(0x19,0x57);
	WriteTW9910(0x1a,0x0f);
	//WriteTW9910(0x1b,0xc0);
	WriteTW9910(0x1b,0x80);
	WriteTW9910(0x1c,0x17);
	WriteTW9910(0x1d,0x7f);
	WriteTW9910(0x1e,0x18);
	WriteTW9910(0x1f,0x00);
	WriteTW9910(0x20,0x50);
	WriteTW9910(0x21,0x42);
	WriteTW9910(0x22,0xf0);
	WriteTW9910(0x23,0xd8);
	WriteTW9910(0x24,0xbc);
	WriteTW9910(0x25,0xb8);
	WriteTW9910(0x26,0x44);
	WriteTW9910(0x27,0x2a);
	WriteTW9910(0x28,0x00);
	WriteTW9910(0x29,0x03);
	WriteTW9910(0x2a,0x78);
	WriteTW9910(0x2b,0x44);
	WriteTW9910(0x2c,0x30);
	WriteTW9910(0x2d,0x07);
	WriteTW9910(0x2e,0xa5);
	WriteTW9910(0x2f,0xe0);
	WriteTW9910(0x30,0x00);
	WriteTW9910(0x31,0x10);
	WriteTW9910(0x32,0xff);
	WriteTW9910(0x33,0x05);
	WriteTW9910(0x34,0x1a);
	WriteTW9910(0x35,0);
	WriteTW9910(0x36,0);
	WriteTW9910(0x37,0);
	WriteTW9910(0x38,0);
	WriteTW9910(0x39,0);
	WriteTW9910(0x3a,0);
	WriteTW9910(0x3b,0);
	WriteTW9910(0x3c,0);
	WriteTW9910(0x3d,0);
	WriteTW9910(0x3e,0);
	WriteTW9910(0x3f,0);
	WriteTW9910(0x40,0);
	WriteTW9910(0x41,0);
	WriteTW9910(0x42,0);
	WriteTW9910(0x43,0);
	WriteTW9910(0x44,0);
	WriteTW9910(0x45,0);
	WriteTW9910(0x46,0);
	WriteTW9910(0x47,0);
	WriteTW9910(0x48,0);
	WriteTW9910(0x49,0);
	WriteTW9910(0x4a,0);
	WriteTW9910(0x4b,0);
	WriteTW9910(0x4c,0x0d);
	WriteTW9910(0x4d,0x40);
	WriteTW9910(0x4e,0x00);
	WriteTW9910(0x4f,0x00);
	WriteTW9910(0x50,0xa0);
	WriteTW9910(0x51,0x22);
	WriteTW9910(0x52,0x31);
	WriteTW9910(0x53,0x80);
	WriteTW9910(0x54,0);
	WriteTW9910(0x55,0);
	WriteTW9910(0x56,0);
	WriteTW9910(0x57,0);
	WriteTW9910(0x58,0);
	WriteTW9910(0x59,0);
	WriteTW9910(0x5a,0);
	WriteTW9910(0x5b,0);
	WriteTW9910(0x5c,0);
	WriteTW9910(0x5d,0);
	WriteTW9910(0x5e,0);
	WriteTW9910(0x5f,0);
	WriteTW9910(0x60,0);
	WriteTW9910(0x61,0);
	WriteTW9910(0x62,0);
	WriteTW9910(0x63,0);
	WriteTW9910(0x64,0);
	WriteTW9910(0x65,0);
	WriteTW9910(0x66,0);
	WriteTW9910(0x67,0);
	WriteTW9910(0x68,0);
	WriteTW9910(0x69,0);
	WriteTW9910(0x6a,0);
	WriteTW9910(0x6b,0x26);
	WriteTW9910(0x6c,0x36);
	WriteTW9910(0x6d,0xf0);
	WriteTW9910(0x6e,0x28);
	WriteTW9910(0x6f,0x24);
	//WriteTW9910(0x06,0x80);*/
}

void I2CInitial(void)
{
	I2SCLH=0x4B;	//设置波特率25kbps
	I2SCLL=0x4B;	//占空比50%
}

⌨️ 快捷键说明

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