ds18b2051单片机测温度程序
时间: 2023-06-15 13:06:43 浏览: 42
以下基于DS18B20数字温度传感器的单片机测温度程序,你可以根据需要进行修改:
```c
#include <reg51.h>
#include <stdio.h>
#define DQ P1_0
sbit DQ=P1^0; //定义传感器数据线
//延时函数
void DelayUs2x(unsigned char t)
{
while(--t);
}
//初始化DS18B20
bit Init_DS18B20(void)
{
bit i;
DQ = 1;
DelayUs2x(5);
DQ = 0;
DelayUs2x(80);
DQ = 1;
DelayUs2x(5);
i = DQ;
DelayUs2x(20);
return i;
}
//从DS18B20读取一个位
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0;
dat >>= 1;
DQ = 1;
if (DQ)
{
dat |= 0x80;
}
DelayUs2x(4);
}
return dat;
}
//写一个字节到DS18B20
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
dat >>= 1;
DelayUs2x(4);
DQ = 1;
}
}
//开始转换温度
void ConvertT(void)
{
Init_DS18B20();
WriteOneChar(0xcc); //跳过ROM操作
WriteOneChar(0x44); //开始转换
}
//从DS18B20读取温度值
float ReadTemperature(void)
{
unsigned char a,b;
float t;
Init_DS18B20();
WriteOneChar(0xcc); //跳过ROM操作
WriteOneChar(0xbe); //读取温度
//读取温度的低8位和高8位
a = ReadOneChar();
b = ReadOneChar();
t = (float)((b<<8)+a)*0.0625;
return t;
}
void main()
{
float temp;
while(1)
{
ConvertT();
temp = ReadTemperature();
printf("Temperature = %f C\r\n", temp);
DelayUs2x(1000);
}
}
```
注:以上程序是基于Keil C51编译器编写的,如果你使用的是其他编译器,则需要做相应修改。同时,程序中的延时函数可以根据实际情况进行调整。