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

#include<reg52.h>#defineucharunsignedcharsbitsda=P2^0;sbitscl=P2^1;uchara;voiddelay()... #include<reg52.h>
#define uchar unsigned char
sbit sda=P2^0;
sbit scl=P2^1;
uchar a;
void delay()
{ ;; }
void start() //开始信号
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}

void stop() //停止
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}

void respons() //应答
{
uchar i;
scl=1; ???
delay();
while((sda==1)&&(i<250))i++; ???
scl=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; ???
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;
}

void main()
{
init();
write_add(23,0xaa);
delay1(100);
P1=read_add(23);
while(1);
}
展开
 我来答
随意的风k
2009-10-02 · TA获得超过209个赞
知道小有建树答主
回答量:222
采纳率:0%
帮助的人:139万
展开全部
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
意法半导体(中国)投资有限公司
2023-08-25 广告
单片机是一种集成处理器,通常包含微控制器、存储器、通信接口和其他外设。它们通常用于嵌入式系统,如智能家居设备、汽车电子系统、工业自动化和消费电子产品等。单片机可以通过编程来实现各种功能,如数据处理、输入输出控制、通信等。由于单片机体积小、功... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
qwe5628197
2009-09-26 · TA获得超过520个赞
知道小有建树答主
回答量:753
采纳率:0%
帮助的人:420万
展开全部
既然是I2C总线,问好处的这些要求都是硬件固定的,拿前两个问好说吧,主机询问应答信号,I2C协议就要求先把scl拉高,延时一下再询问,询问完后再把scl回复原来电平。
这个是死规定的,没什么可多做解释
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
摘一把青梅煮酒
2009-09-26 · TA获得超过1805个赞
知道小有建树答主
回答量:767
采纳率:0%
帮助的人:631万
展开全部
看着像是液晶的显示驱动程序

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

是器件要求这么写的....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
霂璇尹凝伪9x
2009-09-26 · TA获得超过195个赞
知道答主
回答量:180
采纳率:0%
帮助的人:101万
展开全部
去看I2C总线你就明白了。
这是I2C总线读与写的时序要求
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式