The code called case C_READ+C_I2C:
Return_buf[2] = comm_buf[4]; //
Read(comm_buf[3],comm_buf[4],&return_buf[3]);
Break;
Case C_WRITE+C_I2C:
Return_buf[2] = 0;
Write(comm_buf[3], comm_buf[4], &comm_buf[5]);
Break;
Main I2C code
#define Chip_ADDR 0 x78
Unsigned char cread(uchar addr);
Void cwrite(uchar addr,uchar dat);
void read (uchar addr, uchar num, uchar * buf);
Void write(uchar addr, uchar num,uchar * buf);
Void i2c_start(void);
Void i2c_stop(void);
Uchar WaitAck(void);
Void SendNotAck(void);
Void SendtAck(void);
Void delay_5us(void);
Void delay(unsigned char num);
Void i2c_writ2(unsigned char dat);
Uchar i2c_rea2(bit ack);
Void i2c_start()
{
SCL=1; delay_5us();
SDA=1;delay_5us();
SDA=0; delay_5us();delay_5us();
SCL=0; delay_5us();
}
Void i2c_stop()
{
SCL=0;
SDA=0; delay_5us();
SCL=1; delay_5us();
SDA=1;delay_5us();
}
Uchar WaitAck(void)
{
Uchar errtime=255; //Because the faulty receiver has no ACK timeout value is 255
SDA=1; delay_5us();
SCL=1; delay_5us();
While(SDA)
{
If (--errtime == 0)
{
I2c_stop();
Return 0;
}
}
SCL=0;
Return 1;
}
Void SendNotAck(void)
{
SDA=1;
Delay_5us();
SCL=1;
Delay_5us();
SCL=0;
}
Void SendtAck(void)
{
SDA=0;
Delay_5us();
SCL=1;
Delay_5us();
SCL=0;
}
Void i2c_writ2(uchar dat)
{
Uchar i;
For(i=0;i<8;i++)
{
// SDA=1;
If((dat&0 x80)==0 x00) SDA=0;
Else SDA=1;
SCL=1; delay_5us(); SCL=0;
Dat<<=1;
}
SDA=1;
SCL=1; delay_5us();
SCL=0; delay_5us();
}
Unsigned char cread(uchar addr)
{
Unsigned char i;
I2c_start();
I2c_writ2(Chip_ADDR); // Write
I2c_writ2(addr);
I2c_start(); // Start
I2c_writ2(CHIP_ADDR+1); // Read
i = i2c_rea2(0);
I2c_stop();
Delay(10);
Return(i);
}
Void cwrite(uchar addr,uchar dat)
{
I2c_start();
I2c_writ2(CHIP_ADDR); // Write
I2c_writ2(addr);
I2c_writ2(dat);
I2c_stop();
Delay(30);
}
void read (uchar addr, uchar num, uchar * buf)
{
I2c_start();
I2c_writ2(CHIP_ADDR); // Write
I2c_writ2(addr);
I2c_start(); // Start
I2c_writ2(CHIP_ADDR+1); // Read
for (; num> 0; num--) // number {
*buf++ = i2c_rea2(1); // read }
I2c_stop();
Delay(10);
}
Void write(uchar addr, uchar num, uchar * buf)
{
I2c_start();
I2c_writ2(CHIP_ADDR); // Write
I2c_writ2(addr);
for (; num> 0; num--) // number {
I2c_writ2(*buf++); //write }
I2c_stop();
Delay(30);
}
Uchar i2c_rea2(bit ack)
{
Uchar i,j;
j=0 x00;
SDA=1;
For(i=0;i<8;i++)
{
SCL=1;
j=j<<1;
If(SDA) j|=0 x01;
SCL=0; delay_5us();
}
If(ack) SDA=0;
SCL=1; delay_5us();
SCL=0; delay_5us();
Return j;
}
Void delay_5us()
{
Uchar i;
//for(i=0;i<2;i++){}
For(i=0;i<4;i++)
{
}
}
Facade Display,Led Outdoor Display Screen,Low Power Led Light Buried Lamp,Soft-Panel Stage Lighting
Kindwin Technology (H.K.) Limited , https://www.ktlleds.com