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()) ;}} 展开
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()) ;}} 展开
展开全部
肯定是DS18B20的程序有问题。到我的共亨空间,下载一下仿真例子,是用数码管显示的,可以改成用LCD显示。参考一下,改一下你的程序。仿真时,第一次按测量温度时,会显示出85,要按第二次就对了。
http://yun.baidu.com/s/1bniGiwJ
http://yun.baidu.com/s/1bniGiwJ
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询