📄 i2c.c
字号:
//i1c test//
sbit SDA=P3^2;
sbit SCL=P3^3;
//************* Delay *********//
void delay(int n)
{
int i;
for(i=0;i<=n;i++);
}
//**************Start**********//
void I2C_start(void)
{
SDA=1;
SCL=1;
delay(3);
SDA=0;
delay(3);
SCL=0;
}
//*************Stop***********//
void I2C_stop(void)
{
SDA=0;
SCL=1;
delay(3);
SDA=1;
delay(3);
SCL=0;
}
//*************Ack**************//
void I2C_ack(void)
{
SDA=0;
SCL=1;
delay(3);
SCL=0;
SDA=1;
}
//*************No Ack*********//
void I2C_nack(void)
{
SDA=1;
SCL=1;
delay(3);
SCL=0;
SDA=0;
}
//*********Check ack signal*******//
bit I2C_Cack(void)
{
bit a;
SDA=1;
SCL=1;
delay(1);
a=SDA;
delay(1);
SCL=0;
delay(3);
if(a==1)
{
return 1;
}
else
{
return 0;
}
}
//**********Send a Bety*********//
void I2C_Send_byte(char da)
{
unsigned char i;
for(i=0;i<8;i++)
{
if((da<<i)&0x80)
{
SDA=1; //send "1"//
SCL=1;
delay(3);
SCL=0;
SDA=0;
delay(3);
}
else
{
SDA=0; //send "0"//
SCL=1;
delay(3);
SCL=0;
delay(3);
}
}
}
//*************receive a byte *********//
unsigned char I2C_Receive_byte(void)
{
unsigned char i,da=0;
bit a;
for(i=0;i<8;i++)
{
SDA=1;
SCL=1;
delay(3);
a=SDA;
delay(3);
SCL=0;
if(a==1)
{
da=da<<1;
da=da|0x01;
}
else
{
da=da<<1;
}
}
return da;
}
//********main************//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -