📄 i2c.c
字号:
/**********************************JBB**************************************/
#include <i2c.h>
sbit SCL = 0x90;
sbit SDA = 0x91;
void i2cdelay(unsigned char dy1)
{
unsigned char dy2;
while(dy1>0)
{
for (dy2=0;dy2<=40;dy2++);dy1--;
}
}
void writetoi2c(unsigned char into)
{
//OK.
unsigned char var = 0;
unsigned char mask = 0x80;
while(var <= 7)
{
SCL = 0;
i2cdelay(I2C_DELAY);
if((mask & into) == 0)
{
SDA = 0;
}
else
{
SDA = 1;
}
i2cdelay(I2C_DELAY);
SCL = 1;
i2cdelay(I2C_DELAY);
mask >>= 1;
var++;
}//ENDWHILE(VAR <= 7).
}
char i2cgetc(unsigned char device,unsigned char loc)
{
//OK.
unsigned char check;
char fetch = 0x00;
unsigned char value;
unsigned char counter;
SDA = 1;
SCL = 1;
i2cdelay(I2C_DELAY);
SDA = 0;
writetoi2c(WRITE | device);
SCL = 0;
i2cdelay(I2C_DELAY);
check = SDA;
SCL = 1;
i2cdelay(I2C_DELAY);
if(check == 0)
{
writetoi2c(loc);
SCL = 0;
i2cdelay(I2C_DELAY);
check = SDA;
SCL = 1;
i2cdelay(I2C_DELAY);
if(check == 0)
{
SCL = 0;
i2cdelay(I2C_DELAY);
SDA = 1;
i2cdelay(I2C_DELAY);
SCL = 1;
i2cdelay(I2C_DELAY);
SDA = 0;
writetoi2c(READ | device);
SCL = 0;
i2cdelay(I2C_DELAY);
check = SDA;
SCL = 1;
i2cdelay(I2C_DELAY);
if(check == 0)
{
counter = 0;
value = 0x00;
while(counter <= 7)
{
SCL = 0;
i2cdelay(I2C_DELAY);
value = value | (char)SDA;
i2cdelay(I2C_DELAY);
SCL = 1;
i2cdelay(I2C_DELAY);
if(counter < 7)
value <<= 1;
counter++;
}
fetch = value;
SCL = 0;
i2cdelay(I2C_DELAY);
SDA = 0;
i2cdelay(I2C_DELAY);
SCL = 1;
i2cdelay(I2C_DELAY);
SDA = 1;
i2cdelay(I2C_DELAY);
return fetch;
}//ENDIF(CHECK==0).
}//ENDIF(CHECK==0).
}//ENDIF(CHECK==).
}
void i2cputc(unsigned char device,unsigned char addr,unsigned char dat)
{
//OK.
unsigned char check;
SDA = 1;
SCL = 1;
i2cdelay(I2C_DELAY);
SDA = 0;
writetoi2c(WRITE | device);
SCL = 0;
i2cdelay(I2C_DELAY);
check = SDA;
SCL = 1;
i2cdelay(I2C_DELAY);
if(check == 0)
{
writetoi2c(addr);
SCL = 0;
i2cdelay(I2C_DELAY);
check = SDA;
SCL = 1;
i2cdelay(I2C_DELAY);
if(check == 0)
{
writetoi2c(dat);
SCL = 0;
i2cdelay(I2C_DELAY);
check = SDA;
SCL = 1;
i2cdelay(I2C_DELAY);
if(check == 0)
{
SCL = 0;
i2cdelay(I2C_DELAY);
SDA = 0;
i2cdelay(I2C_DELAY);
SCL = 1;
i2cdelay(I2C_DELAY);
SDA = 1;
i2cdelay(I2C_DELAY);
}//ENDIF(CHECK==0).
}//ENDIF(CHECK==0).
}//ENDIF(CHECK==0).
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -