ds18b20测温#include#include#define uchar unsigned char#define uint unsigned int sbit ds=P1^1;sbit lcden=P2^1;sbit lcdrs=P2^0;uint temp;float f_temp;void delay(uint z)//延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void dsreset(void) //

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/02 07:58:54
ds18b20测温#include#include#define uchar unsigned char#define uint unsigned int sbit ds=P1^1;sbit lcden=P2^1;sbit lcdrs=P2^0;uint temp;float f_temp;void delay(uint z)//延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void dsreset(void) //

ds18b20测温#include#include#define uchar unsigned char#define uint unsigned int sbit ds=P1^1;sbit lcden=P2^1;sbit lcdrs=P2^0;uint temp;float f_temp;void delay(uint z)//延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void dsreset(void) //
ds18b20测温
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit ds=P1^1;
sbit lcden=P2^1;
sbit lcdrs=P2^0;
uint temp;
float f_temp;
void delay(uint z)//延时函数
{uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void dsreset(void) //初始化函数
{uint i;
ds=0;
i=103;
while(i>0)i--;
ds=1;
i=4;
while(i>0)i--;
}
bit tempreadbit(void) //读一位函数
{uint i;
bit dat;
ds=0;i++;
ds=1;i++;i++;
dat=ds;
i=8;while(i>0)i--;
return(dat);
}
uchar tempread(void)//读一个字节函数
{uchar i,j,dat;
dat=0;
for(i=1;i1;
if(testb)// xie 1
{ds=0;
i++;i++;
ds=1;
i=8;while(i>0)i--;
}
else
{ ds=0;
i=8;while(i>0)i--;
ds=1;
i++;i++;
}
}
}
void tempchange(void) //ds18b20 开始转换
{dsreset();
delay(1);
tempwritebyte(0xcc);
tempwritebyte(0x44);
}
uint get_temp()// 读取寄存器温度
{uchar a,b;
dsreset();
delay(1);
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempread();
b=tempread();
temp=b;
temp0;i--)
{write_com(0x80);
write_data(f_temp+0x30);
delay(5);}
comm(buff);
for(i=4;i>0;i--)
{write_com(0x80);
write_data(f_temp+0x30);
delay(5);
}
}
}
液晶不能正常显示温度,只会一直是0.帮我看下这个程序问题.

ds18b20测温#include#include#define uchar unsigned char#define uint unsigned int sbit ds=P1^1;sbit lcden=P2^1;sbit lcdrs=P2^0;uint temp;float f_temp;void delay(uint z)//延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void dsreset(void) //
首先,如果你要使用12864液晶显示温度的话,请保证你本身的液晶显示程序没有问题,这个可以通过让他随便显示一个数据或字符得到验证.假设本省液晶显示程序没有问题,那十有八九的问题就出在ds18B20温度传感器的程序上,应该是你的ds18b20温度传感器本身就没有工作,也就是说你的f_temp一直就是默认的值0,因为温度传感器没有正常工作吗,所以程序中也就无法给f_temp重新赋值,在保证液晶程序正确的情况下,你可以这样,给你要显示的变量,比如这里的这个f_temp赋上一个值,看他还显0吗,显然,如果现在显示的是你赋给他的这个值,那问题就出在我说的这个地方,温度传感器没有工作.我估计十有八九是这样的原因.对于温度传感器,你首先要明白,对于这类单总线的器件,由于其本省外部结构简单,所以他是需要较为复杂的软件程序来进行弥补的.本身它对时序的要求比较严格,所以延时一定要尽量精确,请在这一方面进行详细的检查.对于每一次的ds18B20操作,基本都是一个复位、一个ROM指令、一个ram指令这样的顺序.ds18B20前段时间我用过,不过现在算起也有一些时间了,有些东西也在忘,所以暂时对你的程序我也不能帮你进行详细的检查了.你自己试试看吧.有时间的话我就在帮你瞅瞅.
刚才简单看了一下,你ds18B20程序肯定是有问题.首先就是你复位函数里最后少一个延时,这个延时是要有的,不然ds18b20是不能正常工作的.
简单说明如下,先多定义一个延时函数,以后用着方便.
void delay1(uchar count)
{
while(count>0) count--;
}
void dsreset(void) //初始化函数
{
DS=0;
delay1(103); //延时804.473,符合480-960us之间
DS=1;
delay1(4); //延时36.449us,符合15-60us之间
delay1(20); //延时164.494us,符合60-240us之间(这个你少了!)
}
下面是读一位的函数,感觉也是延时有点问题,修改如下:(头文件多包涵一个#include ,这是定义下面调用的_nop_()函数用的头文件,该函数对于51系列12时钟单片机执行一次的时间为1us)
bit tempreadbit(void) //读一位函数
{uint i;
bit dat;
ds=0;
_nop_();
ds=1;
_nop_();
dat=ds;
delay1(7);
return(dat);
}
下面是写一个字节的函数(我只是改成了我用的延时函数,如果你的延时效果和我定义是一样的,其实也没有必要改,但是一定保证延时的时间,即时序!两个i++执行下来是1us吗,我没试,一般延时一毫秒我都是习惯用_nop_()函数,是的话你不该也成)
void tempwritebyte(uchar dat)
{uint i;
uchar j;
bit testb;
for(j=1;j>1;
if(testb)// xie 1
{ds=0;
_nop_();
ds=1;
delay1(7);
}
else
{ ds=0;
delay1(7);
ds=1;
_nop_();
}
}
}
上面这三个函数算是基础,一定要保证时序的准确性,先给你检查了这三个,你自己看看其他的地方还有没有需要是要改的.ds18B20就这样,你只要保证了时序,一般按照数据手册来写就差不多了.网上有很多现成的资料,在不理解的话你自己下下来看看.ds18b20的源程序网上一般很好找的.一定自己多看看数据手册,把一些最基本的搞清楚.最近事比较多,就不能给你细看了,就到这,

ds18b20测温利用了什么硬件技术 DS18b20测温度用1602显示为什么出现85度 ds18b20测温#include#include#define uchar unsigned char#define uint unsigned int sbit ds=P1^1;sbit lcden=P2^1;sbit lcdrs=P2^0;uint temp;float f_temp;void delay(uint z)//延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void dsreset(void) // 以下是一段用DS18b20测温度的程序谁能给解释一下if(temp 用DS18B20测温度液晶显示,为什么仿真可以,实物就不行了 用微机原理完成恒温控制(DS18B20测温并显示,DAC0832控制发热电阻) DS18B20的测温范围哪位大侠知道DS18B20测温范围在0到85度的时候程序是怎么写的?(汇编的)两位数码管显示,单片机控制.主要是怎么设置DS18B20, DS18B20测温请问DS18B20在实际测被测物体表面温度时,应该将哪个面接触被测物体从而使测量的更准确一些呢, 求热敏电阻温度、热电偶测温的缺点和ds18b20的优点.从电路设计等方面说都行. DS18B20测温程序#include#includeunsigned char code tab1[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//不带小数点unsigned char code tab2[ ]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef };//带小数点sbit TMDAT=P0^0;sbit ds=P include in和include有什么区别? ds18b20温度寄存器怎么就达到被测温度值下面这段话是ds18b20的测温.我的问题是:如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度.这句话 PIC单片机ds18b20测温度时,将AD转换的750ms延时使用中断延时的程序后,温度检测的变化几分才转换一次,为 include in 造句 (简单一些) 1.翻译include in2.用include in造句 基于AT89C52单片机的DS18B20数字温度计的设计功能要求:要求测温范围为-50~100℃ ,精度误差在0.1℃ 以内,LED数码管直接读数显示.请将源程序代码写上. 用DS18B20单总线温度传感器实现一个温度计,测温范围0~100度,精度+/-0.25度,温度用数码管显示可用键盘设置采样周期、改变显示模式(如显示采样值、温度等) 用ds18b20测温度时,只需将最后所得的16位数乘以一个0.0625就可以得到实际的温度值?temp1=Read_DS18B20();temp2=Read_DS18B20();temp=temp2;temp=temp