📄 i2c.h
字号:
#ifndef __I2C__H
#define __I2C__H
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//*I2C专用**************//
#define WRITE24C02 0xA0
#define READ24C02 0xA1
#define MSB 0x80
sbit SCL= P2^3;
sbit SDA= P2^4;
/*I2C专用*/
/************************************************************************/
void I2C_delay(void)
{
_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();
}
/***********************************************************************/
void I2C_start(void)
{
SDA=1;
_nop_();
SCL=1;
_nop_();
SDA=0;
_nop_();
SCL=0;
_nop_();
}
/***********************************************************************/
void I2C_stop(void)
{
SDA=0;
_nop_();
SCL=1;
_nop_();
SDA=1;
_nop_();
SCL=0;
_nop_();
}
/***********************************************************************/
void I2C_send_0(bit k)
{
SDA=k;
I2C_delay();
SCL=1;
I2C_delay();
SCL=0;
}
/***********************************************************************/
void I2C_write_byte(uchar dat)
{
uchar i;
for (i=8;i>0;i--)
{
SCL=0;
I2C_delay();
SDA=(bit)(dat&MSB);
dat<<=1;
I2C_delay();
SCL=1;
I2C_delay();
}
SCL=0;
}
/***********************************************************************/
uchar I2C_read_byte(void)
{
uchar i,dat;
for (i=0;i<8;i++)
{
SCL=0;
I2C_delay();
SDA=1;
I2C_delay();
SCL=1;
dat<<=1;
I2C_delay();
if(SDA)
dat++;
}
SCL=0;
return (dat);
}
/***********************************************************************/
void AT24C02_write(uchar address,uchar dat)
{
uchar temp;
temp=dat/10;
temp<<=4;
temp=dat%10+temp;
I2C_start();
I2C_write_byte(WRITE24C02);
I2C_send_0(0);
I2C_write_byte(address);
I2C_send_0(0);
I2C_write_byte(temp);
I2C_send_0(1);
I2C_stop();
}
/***********************************************************************/
uchar AT24C02_read(uchar address)
{
uchar temp,dat;
I2C_start();
I2C_write_byte(WRITE24C02);
I2C_send_0(0);
I2C_write_byte(address);
I2C_send_0(1);
I2C_stop();
I2C_start();
I2C_write_byte(READ24C02);
I2C_send_0(0);
dat=I2C_read_byte();
I2C_send_0(1);
I2C_stop();
temp=dat/16;
dat=dat%16;
dat=dat+temp*10;
return (dat);
}
AT24C02_Rest()
{
SDA=0;
SCL=0;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -