本帖最后由 hedge31 于 2009-9-5 21:09 编辑
#include <reg52.H>
#include <intrins.h>
#define uchar unsigned char
sbit sda=P3^6;//数据线设置为P3^6脚
sbit scl=P3^7;//时钟线设置为P3^7脚
void delay()
{
_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();
}
void init()
{
sda=1;
delay();
scl=1;
delay();
}
void start()
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop()
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void ask(bit i)
{
sda=i;
delay();
scl=1;
delay();
scl=0;
}
void writebyte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
scl=0;
_nop_();
_nop_();
_nop_();
temp<<=1;
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
}
unsigned char readbyte(void)
{
uchar i,tmp;
tmp=0;
for(i=0;i<8;i++)
{
scl=0;
_nop_();
_nop_();
_nop_();
sda=1;
delay();
scl=1;
delay();
tmp<<=1;
if(sda==1)
tmp++;
}
scl=0;
return tmp;
}
void write_add(uchar add,uchar info)
{
start();
writebyte(0xa0);
ask(0);
writebyte(add);
ask(0);
writebyte(info);
ask(1);
stop();
}
uchar read_add(uchar add)
{
uchar dd;
start();
writebyte(0xa0);
ask(0);
writebyte(add);
ask(1);
start();
writebyte(0xa1);
ask(0);
dd=readbyte();
delay();
stop();
return dd;
}
void main()
{
init();
start();
writebyte(0xa0);
ask(0);
writebyte(0x34);
ask(0);
writebyte(0x24);
ask(1);
stop();
start();
writebyte(0xa0);
ask(0);
writebyte(0x34);
ask(1);
stop();
start();
writebyte(0xa1);
ask(0);
P0=readbyte();//LED灯管用P0口控制
stop();
}
下载到实验板 发现最后返回的数据总是0xff。 请各位高手指点指点 不胜感激 |