#include <reg52.h>
#define uchar unsigned char
sbit SCL=P2^0;
sbit SDA=P2^1;//WP已经接地
//
void delay()//延时
{;;}
void delay1(uchar z)//延时
{
uchar b,c;
for(b=z;b>0;b--)
for(c=200;c>0;c--);
}
//
void init()//初始化
{
SCL=1;
SDA=1;
delay();
}
//
void start()//开始
{
SDA=1;
SCL=1;//
delay();
SDA=0;
delay();
}
//
void stop()//停止
{
SDA=0;
SCL=1;
delay();
SDA=1;
delay();
}
//
void ack()//应答
{
uchar i;
SCL=1;
delay();
while((SDA==1)&&(i<250))i++;
SCL=0;
delay();
}
//
void nack()//非应答
{
SCL=1;
delay();
SDA=1;
delay();
SCL=0;
delay();
}
//
void write_dat(uchar temp)//写字节
{
uchar j,x;
x=temp;//
for(j=0;j<8;j++)
{
x=x<<1;
SCL=0;
delay();
SDA=CY;
delay();
SCL=1;
delay();
}
SCL=0;//
delay();//
SDA=1;
delay();
}
//
uchar read_dat()//读字节
{
uchar dat,y,e;
SCL=0;
delay();
for(y=0;y<8;y++)
{
SCL=1;
delay();
e=SDA;
dat=(dat<<1)|e;
SCL=0;
delay();
}
return dat;
}
//
void write_i2c(uchar address,uchar date)//写数据
{
start();
write_dat(0xae);
ack();
write_dat(address);
ack();
write_dat(date);
ack();
stop();
}
//
uchar read_i2c(uchar address)//读数据
{
uchar date;
start();
write_dat(0xae);
ack();
write_dat(address);
ack();
start();
write_dat(0xaf);
ack();
date=read_dat();
nack();
stop();
return date;
}
//
void main()//P1口显示0XF0
{
init();
start();
write_i2c(2,0xf0);
delay1(50);
P1=read_i2c(2);
while(1);
}
下载程序后LED无任何反应