proteus 仿真ds18b20读出的温度一直为59

用的1602显示显示那块测试了没问题但是读取DS18B20数据一直显示5.9变换B20的温度显示也不会变化各位大神能不能告诉我这是为什么?我的程序错了么?sbitwd=P... 用的1602显示 显示那块测试了没问题 但是读取DS18B20数据一直显示5.9 变换B20的温度 显示也不会变化 各位大神能不能告诉我这是为什么? 我的程序错了么?

sbit wd=P2^7;
void xs_wd(uint sj) { uchar i,j,k; i=sj/100; j=sj%100/10; k=sj%100%10; write_ml(0x80+0x40+5); write_sj(xs[i]); write_sj(xs[j]); write_sj('.'); write_sj(xs[k]);}
void dsreset(void) { uint i; wd=0; i=103; while(i>0)i--; wd=1; i=4; while(i>0)i--;

} uchar tempreadbyte(void)
{ unsigned char i=0;unsigned char dat = 0;for(i=8;i>0;i--){ wd=0;dat>>=1; wd=1;if(wd) dat|=0x80;delay(4);} return(dat);}
void tempwritebyte(uchar dat)
{
uchar j;
for(j=1;j<=8;j++) { wd=1; delay(1); wd=0; wd=dat&0x01; delay(4); wd=1; delay(4); dat>>=1; } delay(1); } void statarttempt() //
{ dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0x44);} uint get_temp() {uchar a,b;dsreset();delay(1);tempwritebyte(0xCC);tempwritebyte(0xBE);a=tempreadbyte();b=tempreadbyte();temp=b;temp<<=8;temp=temp|a;f_temp=temp*0.0625;temp=f_temp*10+0.5;
return (temp);
}

void main() {
yj_init(); while(1){ statarttempt();
xs_wd(get_temp()) ;}}
展开
 我来答
lycdl
高粉答主

2015-11-24 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4941万
展开全部
肯定是DS18B20的程序有问题。到我的共亨空间,下载一下仿真例子,是用数码管显示的,可以改成用LCD显示。参考一下,改一下你的程序。仿真时,第一次按测量温度时,会显示出85,要按第二次就对了。
http://yun.baidu.com/s/1bniGiwJ
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式