51单片机ds18b20测温程序
时间: 2023-12-23 07:05:09 浏览: 27
以下是51单片机ds18b20测温程序的示例代码:
```c
#include <reg51.h>
#include <intrins.h>
sbit DQ = P1^4; //定义DS18B20数据线接口
void delay_us(unsigned int i) //延时1us的函数
{
while(i--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void delay_ms(unsigned int i) //延时1ms的函数
{
unsigned int j, k;
for(j = i; j > 0; j--)
for(k = 110; k > 0; k--);
}
void Init_DS18B20() //初始化DS18B20
{
DQ = 1;
delay_us(5);
DQ = 0;
delay_us(400);
DQ = 1;
delay_us(30);
}
unsigned char Read_DS18B20() //读取DS18B20的数据
{
unsigned char i, dat = 0;
for(i = 8; i > 0; i--)
{
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
dat |= 0x80;
delay_us(5);
}
return dat;
}
void Write_DS18B20(unsigned char dat) //向DS18B20写入数据
{
unsigned char i;
for(i = 8; i > 0; i--)
{
DQ = 0;
DQ = dat & 0x01;
delay_us(5);
DQ = 1;
dat >>= 1;
}
}
int Get_Temp_DS18B20() //获取DS18B20的温度值
{
unsigned char TL, TH;
int temp;
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
delay_ms(750);
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
TL = Read_DS18B20();
TH = Read_DS18B20();
temp = TH;
temp <<= 8;
temp |= TL;
return temp;
}
void main()
{
int temp;
while(1)
{
temp = Get_Temp_DS18B20();
temp = (temp / 16.0) * 100;
//将温度值转换为实际温度并乘以100,得到两位小数的温度值
//例如:温度值为25.75℃,转换后的值为2575
//需要注意的是,DS18B20的温度值是16位有符号整数,需要适当处理
}
}
```
此代码实现了DS18B20的初始化、读取温度值等功能。需要注意的是,DS18B20的温度值是16位有符号整数,需要适当处理。另外,由于DS18B20的精度高,可以将温度值转换为实际温度并乘以100,得到两位小数的温度值。例如:温度值为25.75℃,转换后的值为2575。