单片机读取ds18b20的数据为什么总是不对;用proteus仿真的
#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitDQ=P3^3;//ds18b20与...
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^3;//ds18b20与单片机连接口
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
unsigned char code str1[]={"temperature: "};
unsigned char code str2[]={" C "};
uchar data disdata[5];
uint tvalue;//温度值
uchar tflag;//温度正负标志
/*************************lcd1602程序**************************/
void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
{unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
void wr_com(unsigned char com)//写指令//
{ delay1ms(1);
RS=0;
RW=0;
EN=0;
P0=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void wr_dat(unsigned char dat)//写数据//
{ delay1ms(1);;
RS=1;
RW=0;
EN=0;
P0=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void lcd_init()//初始化设置//
{delay1ms(15);
wr_com(0x38);delay1ms(5); //设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据
wr_com(0x08);delay1ms(5);
wr_com(0x01);delay1ms(5); //清显示
wr_com(0x06);delay1ms(5);//整屏不移动,光标自动右移
wr_com(0x0c);delay1ms(5);//开显示不显示光标
}
void display(unsigned char *p)//显示//
{
while(*p!='\0')
{
wr_dat(*p);
p++;
delay1ms(1);
}
}
init_play()//初始化显示
{ lcd_init();
wr_com(0x80);
display(str1);
wr_com(0xc0);
display(str2);
}
就是温度读取错误;求大神! 展开
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^3;//ds18b20与单片机连接口
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
unsigned char code str1[]={"temperature: "};
unsigned char code str2[]={" C "};
uchar data disdata[5];
uint tvalue;//温度值
uchar tflag;//温度正负标志
/*************************lcd1602程序**************************/
void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
{unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
void wr_com(unsigned char com)//写指令//
{ delay1ms(1);
RS=0;
RW=0;
EN=0;
P0=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void wr_dat(unsigned char dat)//写数据//
{ delay1ms(1);;
RS=1;
RW=0;
EN=0;
P0=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void lcd_init()//初始化设置//
{delay1ms(15);
wr_com(0x38);delay1ms(5); //设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据
wr_com(0x08);delay1ms(5);
wr_com(0x01);delay1ms(5); //清显示
wr_com(0x06);delay1ms(5);//整屏不移动,光标自动右移
wr_com(0x0c);delay1ms(5);//开显示不显示光标
}
void display(unsigned char *p)//显示//
{
while(*p!='\0')
{
wr_dat(*p);
p++;
delay1ms(1);
}
}
init_play()//初始化显示
{ lcd_init();
wr_com(0x80);
display(str1);
wr_com(0xc0);
display(str2);
}
就是温度读取错误;求大神! 展开
3个回答
展开全部
参考一下吧,会有帮助的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
DS18b20设计对时序要求很严格的啊
可以交流的啊
可以交流的啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
估计还是程序问题吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询