单片机用DS18B20测温,不显示温度,是不是温度启动动不了还是其他问题,请各位大侠帮忙看看,不甚感激! #i

 我来答
5411930
2012-04-28 · TA获得超过254个赞
知道小有建树答主
回答量:241
采纳率:0%
帮助的人:170万
展开全部
时序不对 DS18B20 的时序要求很严格,稍有不慎就会读不出
void delay(uchar k)
{
while(--k);
}

void delay1(uint k)
{
uint i,j;
for(i=0;i<60;i++)
for(j=0;j<k;j++);

}
/*
每次读写前对DS18B20进行复位初始化。复位要求主CPU将数据线下拉500μ
,然后释放,DS18B20收到信号后等待16 - 60us然后60-240us的存在低脉冲
脉冲,主CPU收到此信号后表示复位成功。
*/
uchar init_ds18b20(void)//返回为0表示初始化成功
{
uchar j=0;
DQ=1;//这两条语句用不用不关紧要
delay(4);
DQ=0;
delay(180);//精确延时 730us 检测总线上是否有480-960微秒的低电平出现
delay(200);
DQ=1;
delay(15);//35us 如果有总线转为高电平后等待15-60微秒自动将总线电平拉低60-240微秒做出响应存在脉冲
j=DQ;
delay(50);//105us 至少要100秒以上
return(j);
}

uchar read_byte(void)
{
uchar i=0,dat;
for(i=0;i<8;i++)
{
DQ=0;
delay(5);//15us
DQ=1;
dat>>=1;
if(DQ)
dat|=0x80;
delay(25);
}

return(dat);
}

void write_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
delay(5);//15us
DQ=dat&0x01;
delay(10);//写所需时间
DQ=1;
dat>>=1;
delay(2);
}
delay(1);

}
这是我做过DB18B20 时序程序,很成功。 仅供参考
heartbird
2012-05-08
知道答主
回答量:18
采纳率:100%
帮助的人:10.2万
展开全部
问题大体上是有两个部分的。
一个是DS18B20的程序。你需要一步一步的检查,看看复位有没有成功。
另一个是显示程序,你同样需要用非常简单的程序测试,你的显示是没有问题的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
单片机技术宅
2012-04-27 · 知道合伙人教育行家
单片机技术宅
知道合伙人教育行家
采纳数:251 获赞数:552
飞思卡尔智能赛车邀请赛二等奖全国大学生电子设计竞赛成功参赛奖

向TA提问 私信TA
展开全部
你的18b20程序不对,好好看看延时吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式