跳到主要内容

51单片机DS18B20使用

介绍

DS18B20是一款常用的数字温度传感器,具有高精度、单总线接口和低功耗等特点。它可以直接与51单片机连接,通过简单的通信协议读取温度数据。本文将详细介绍如何在51单片机中使用DS18B20传感器,并提供代码示例和实际应用案例。

DS18B20工作原理

DS18B20采用单总线(1-Wire)通信协议,只需要一根数据线即可与单片机进行通信。传感器内部包含温度传感器和ADC(模数转换器),能够将温度转换为数字信号输出。

主要特点

  • 温度测量范围:-55°C 到 +125°C
  • 精度:±0.5°C(-10°C 到 +85°C)
  • 单总线接口,节省I/O资源
  • 可编程分辨率:9到12位

硬件连接

DS18B20与51单片机的连接非常简单,通常只需要三个引脚:

  • VCC:接电源(3.3V或5V)
  • GND:接地
  • DQ:数据线,接单片机的I/O口
备注

DS18B20的数据线DQ需要接一个4.7kΩ的上拉电阻,以确保通信稳定。

软件实现

初始化

在使用DS18B20之前,需要进行初始化操作。初始化过程包括发送复位脉冲和检测传感器的存在。

c
#include <reg52.h>

sbit DQ = P3^7; // 假设DS18B20的数据线连接到P3.7

void DS18B20_Init() {
DQ = 1; // 释放总线
DQ = 0; // 拉低总线,发送复位脉冲
delay_us(480); // 延时480us
DQ = 1; // 释放总线
delay_us(60); // 延时60us
if (DQ == 0) { // 检测传感器是否存在
// 传感器存在
} else {
// 传感器不存在
}
delay_us(480); // 延时480us
}

读取温度

读取温度的过程包括发送读取温度命令和读取温度数据。DS18B20的温度数据以16位二进制补码形式存储,需要转换为实际温度值。

c
unsigned char DS18B20_ReadByte() {
unsigned char i, dat = 0;
for (i = 0; i < 8; i++) {
DQ = 0; // 拉低总线
dat >>= 1;
DQ = 1; // 释放总线
if (DQ) {
dat |= 0x80;
}
delay_us(60); // 延时60us
}
return dat;
}

void DS18B20_WriteByte(unsigned char dat) {
unsigned char i;
for (i = 0; i < 8; i++) {
DQ = 0; // 拉低总线
DQ = dat & 0x01; // 发送最低位
delay_us(60); // 延时60us
DQ = 1; // 释放总线
dat >>= 1;
}
}

float DS18B20_ReadTemp() {
unsigned char tempL, tempH;
int temp;
float temperature;
DS18B20_Init();
DS18B20_WriteByte(0xCC); // 跳过ROM命令
DS18B20_WriteByte(0x44); // 启动温度转换
delay_ms(750); // 等待转换完成
DS18B20_Init();
DS18B20_WriteByte(0xCC); // 跳过ROM命令
DS18B20_WriteByte(0xBE); // 读取温度命令
tempL = DS18B20_ReadByte(); // 读取温度低字节
tempH = DS18B20_ReadByte(); // 读取温度高字节
temp = (tempH << 8) | tempL; // 合并高低字节
temperature = temp * 0.0625; // 转换为实际温度值
return temperature;
}

实际应用案例

假设我们需要设计一个温度监控系统,当温度超过30°C时,点亮一个LED灯。

c
sbit LED = P1^0;  // 假设LED连接到P1.0

void main() {
float temperature;
while (1) {
temperature = DS18B20_ReadTemp();
if (temperature > 30) {
LED = 0; // 点亮LED
} else {
LED = 1; // 熄灭LED
}
delay_ms(1000); // 延时1秒
}
}

总结

通过本文的学习,你应该已经掌握了如何在51单片机中使用DS18B20温度传感器。我们介绍了DS18B20的工作原理、硬件连接和软件实现,并提供了一个实际应用案例。希望这些内容能够帮助你在项目中更好地使用DS18B20传感器。

附加资源

练习

  1. 修改代码,使温度超过35°C时,LED闪烁。
  2. 尝试使用多个DS18B20传感器,并读取它们的温度数据。
  3. 将温度数据通过串口发送到PC,并在PC上显示。
提示

在实际项目中,建议使用硬件定时器来精确控制延时,以提高系统的稳定性和响应速度。