单片机 求大侠帮忙看一下这个代码,为什么运行后第一个灯不亮?2
发布网友
发布时间:2023-10-24 15:56
我来回答
共2个回答
热心网友
时间:2024-12-05 04:51
你的程序的意图是用i2c总线向24C02写入一个数据0xfe,然后在读回,将读回的值赋给P1口从而驱动led发光。
正是因为你的程序没有错误,所以第一个灯才不亮。
注意,你给P1的值是0xfe (1111 1110),也就是P1.0=0,它驱动的LED当然不会亮了。。。
如果你把0xfe改写为0xff,那么所有led都会亮起。同理,0xfe改为0x00,那么所有的灯都会灭掉,懂了么?
热心网友
时间:2024-12-05 04:51
void delay1(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=1000;b>0;b--);//错误1,uchar的数值范围是0~255,你这个b=1000有问题.(不影响运行)
}
////////////////////////////////////
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;//CY是何物****************
delay();
scl=1;
delay();
}
sda=1;
delay();
}
-------->可改为
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
if(temp&0x80) sda=1;
else sda=0;
temp=temp<<1;
scl=0;
delay();
scl=1;
delay();
}
sda=1;
delay();
}
//////////////////////////////////////////////
uchar read_byte()
{
uchar i,n,j;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
j=sda;
n=(n<<1)|j;
scl=0;
delay();
}
//return n;//返回值要放到最后,否则下面的两句就拥有不会执行
sda=1;
delay();
return n;//
}