📄 tw9910 i2c initial.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 + -