51单片机ds18b20使用程序
时间: 2024-05-09 19:14:42 浏览: 95
以下是51单片机使用ds18b20温度传感器的程序示例:
```c
#include <reg51.h>
#include <intrins.h>
#define DQ P2_0
sbit DQ = P2^0;
void Delay(unsigned int i)
{
while(i--);
}
unsigned char Init_DS18B20(void)
{
unsigned char i;
DQ = 1;
Delay(6);
DQ = 0;
Delay(60);
DQ = 1;
Delay(6);
i = DQ;
Delay(60);
return i;
}
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0; i<8; i++)
{
DQ = 0;
_nop_();
DQ = dat & 0x01;
Delay(6);
DQ = 1;
dat >>= 1;
}
}
unsigned char Read_DS18B20(void)
{
unsigned char i, dat = 0;
for(i=0; i<8; i++)
{
DQ = 0;
_nop_();
DQ = 1;
_nop_();
_nop_();
dat >>= 1;
if(DQ)
dat |= 0x80;
Delay(6);
}
return dat;
}
void Convert_DS18B20(void)
{
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
}
int Read_Temperature(void)
{
unsigned char LSB, MSB;
int value;
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
LSB = Read_DS18B20();
MSB = Read_DS18B20();
value = ((int)MSB << 8) | LSB;
return value;
}
void main()
{
int temperature;
while(1)
{
Convert_DS18B20();
Delay(1000);
temperature = Read_Temperature();
temperature = temperature * 0.0625;
// 这里可以将温度值输出到LCD屏幕或者串口等显示设备上
}
}
```
上述程序中主要使用了以下几个函数:
- `Init_DS18B20()` 初始化DS18B20温度传感器
- `Write_DS18B20(unsigned char dat)` 向DS18B20写入数据
- `Read_DS18B20()` 从DS18B20读取数据
- `Convert_DS18B20()` 发送温度转换命令
- `Read_Temperature()` 读取温度值
其中,`Convert_DS18B20()` 函数用于发送温度转换命令,这个命令会让DS18B20开始温度转换,并且需要一定的时间完成转换。在程序中,我们使用了一个 `Delay(1000)` 的延时函数来等待转换完成,然后再读取温度值。读取到温度值后,我们可以将其输出到LCD屏幕或者串口等显示设备上。
阅读全文