读写AT24C02,调试后d=ff,数码管没数据,那么是没有读到24C02里面数据了,程序有错吗?
#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitscl=P1^0;sbitsda=P...
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit scl=P1^0;
sbit sda=P1^1;
uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f,0x67};
void delayus()
{
{;;}
/*uchar i=1;
while(i--);*/
}
void delayms(uint x)
{
uchar m,n;
for(m=x;x>0;x--)
for(n=110;n>0;n--);
}
void init()//两总线释放总线(都为高电平),为总线空闲状态,此时才
{ //准许启动数据传送
sda=1;
delayus();
scl=1;
delayus();
}
void sta()
{
sda=1;scl=1;delayus();
sda=0;delayus();
scl=0;
}
bit resp()
{
uchar i=0;bit ask;
sda=1;delayus();
scl=1;delayus();
ask=sda;//while((sda==1)&&(i<255)) i++;
scl=0;
return(ask);
}
void nonresp()
{
sda=1;scl=0;
scl=1;delayus();
}
void sto()
{
scl=1;
sda=0;delayus();
sda=1;delayus();
sda=0;
}
void writebyte(uchar dat)
{
uchar i,temp;
temp=dat;
for(i=8;i>0;i--)
{
scl=0;delayus();
temp=temp<<1;//delayus();
sda=CY;//delayus();
scl=1;//delayus();
}
scl=0;delayus();
sda=1;delayus();
}
uchar readbyte()
{
uchar i,dat=0;
scl=0;delayus();
sda=1;//delayus();
for(i=8;i>0;i--)
{
scl=1;//delayus();
dat=(dat<<1)|sda;//delayus();
scl=0;//delayus();
}
return(dat);
}
/*void display(uint *p)
{
uchar i;
for(i=0;i<16;i--)
{
P2=7;
P0=table[*(p++)]; //delayms(1000);
}
} */
void main()
{
uchar d;
init();//delayus();
sta();
writebyte(0xA0);resp();
writebyte(9);resp();
writebyte(5);resp();sto();delayus();
sta();
writebyte(0xA0);resp();
writebyte(9);resp();
sta();
writebyte(0xa1);resp();
d=readbyte();sto();
/*for(i=0;i<16;i++)
{
a[i]=readbyte();resp();
}*/
while(1)
{
P2=7;
P0=table[d]; }
// p=a;
//display(p);
} 展开
#define uint unsigned int
#define uchar unsigned char
sbit scl=P1^0;
sbit sda=P1^1;
uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f,0x67};
void delayus()
{
{;;}
/*uchar i=1;
while(i--);*/
}
void delayms(uint x)
{
uchar m,n;
for(m=x;x>0;x--)
for(n=110;n>0;n--);
}
void init()//两总线释放总线(都为高电平),为总线空闲状态,此时才
{ //准许启动数据传送
sda=1;
delayus();
scl=1;
delayus();
}
void sta()
{
sda=1;scl=1;delayus();
sda=0;delayus();
scl=0;
}
bit resp()
{
uchar i=0;bit ask;
sda=1;delayus();
scl=1;delayus();
ask=sda;//while((sda==1)&&(i<255)) i++;
scl=0;
return(ask);
}
void nonresp()
{
sda=1;scl=0;
scl=1;delayus();
}
void sto()
{
scl=1;
sda=0;delayus();
sda=1;delayus();
sda=0;
}
void writebyte(uchar dat)
{
uchar i,temp;
temp=dat;
for(i=8;i>0;i--)
{
scl=0;delayus();
temp=temp<<1;//delayus();
sda=CY;//delayus();
scl=1;//delayus();
}
scl=0;delayus();
sda=1;delayus();
}
uchar readbyte()
{
uchar i,dat=0;
scl=0;delayus();
sda=1;//delayus();
for(i=8;i>0;i--)
{
scl=1;//delayus();
dat=(dat<<1)|sda;//delayus();
scl=0;//delayus();
}
return(dat);
}
/*void display(uint *p)
{
uchar i;
for(i=0;i<16;i--)
{
P2=7;
P0=table[*(p++)]; //delayms(1000);
}
} */
void main()
{
uchar d;
init();//delayus();
sta();
writebyte(0xA0);resp();
writebyte(9);resp();
writebyte(5);resp();sto();delayus();
sta();
writebyte(0xA0);resp();
writebyte(9);resp();
sta();
writebyte(0xa1);resp();
d=readbyte();sto();
/*for(i=0;i<16;i++)
{
a[i]=readbyte();resp();
}*/
while(1)
{
P2=7;
P0=table[d]; }
// p=a;
//display(p);
} 展开
3个回答
展开全部
时序不对,参考网上有很多I2C源代码
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询