单片机C语言编程问题,高手请进 帮忙解释打了问号的语句是什么意思,为什么要那样写?

2025-04-14 04:02:20
推荐回答(3个)
回答1:

void respons() //应答
{
uchar i;
scl=1;
时钟信号 ???
delay();
while((sda==1)&&(i<250))i++; 数据传送启动 ???
scl=0;
先1后0表示一个时钟脉冲 ???
delay();
}

void init()
{
sda=1; 同上 ???
delay();
scl=1; ???
delay();
}

void write_byte(uchar date)
{
uchar i,temp;
temp=date;

for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0; 时钟???
delay();
sda=CY; 根据进位标志位给sda赋值 ???
delay();
scl=1; 时钟 ???
delay();
// scl=0; ???
// delay();
}
scl=0; ???
delay();
sda=1; ???
delay();
}

uchar read_byte()
{
uchar i,k;
scl=0; ???
delay();
sda=1; ???
delay();
for(i=0;i<8;i++)
{
scl=1; ???
delay();
k=(k<<1)|sda;
scl=0; ???
delay();
}
return k;
}

void delay1(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}

void write_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}

uchar read_add(uchar address)
{
uchar date;
start();
write_byte(0xa0); ???
respons();
write_byte(address);
respons();
start();
write_byte(0xa1); ???
respons();
date=read_byte();
stop();
return date;
}
反正就是scl=1...scl=0就是给出一个有效时钟脉冲 在这个脉冲里你可以对单片机进行一些操作 传数据sda

回答2:

既然是I2C总线,问好处的这些要求都是硬件固定的,拿前两个问好说吧,主机询问应答信号,I2C协议就要求先把scl拉高,延时一下再询问,询问完后再把scl回复原来电平。
这个是死规定的,没什么可多做解释

回答3:

看着像是液晶的显示驱动程序

这样写你要看你元器件的datasheet的

是器件要求这么写的....