基于ds18b20的温度检测Lcd显示
时间: 2023-08-08 14:06:41 浏览: 82
好的,我可以为您提供一些基本的代码示例,以实现基于ds18b20温度传感器的温度检测,并通过LCD显示温度值。以下是一个简单的Arduino程序:
```c++
#include <OneWire.h>
#include <LiquidCrystal.h>
// 定义ds18b20的数据引脚
#define ONE_WIRE_BUS 2
// 实例化一个 OneWire 对象
OneWire oneWire(ONE_WIRE_BUS);
// 定义温度变量
float temperature;
// 实例化一个 LiquidCrystal 对象
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// 初始化LCD
lcd.begin(16, 2);
// 初始化串口调试工具
Serial.begin(9600);
}
void loop() {
// 读取温度
byte data[12];
byte addr[8];
if (oneWire.search(addr)) {
oneWire.reset_search();
return;
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
if (addr[0] != 0x28) {
Serial.println("Device is not a DS18x20 family device.");
return;
}
oneWire.reset();
oneWire.select(addr);
oneWire.write(0x44, 1);
delay(800);
oneWire.reset();
oneWire.select(addr);
oneWire.write(0xBE);
for (byte i = 0; i < 9; i++) {
data[i] = oneWire.read();
}
int16_t raw = (data[1] << 8) | data[0];
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7;
else if (cfg == 0x20) raw = raw & ~3;
else if (cfg == 0x40) raw = raw & ~1;
temperature = (float)raw / 16.0;
// 显示温度
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperature: ");
lcd.setCursor(0, 1);
lcd.print(temperature, 1);
lcd.print((char)223);
lcd.print("C");
// 输出到串口调试工具
Serial.print("Temperature: ");
Serial.print(temperature, 1);
Serial.println(" C");
// 等待一段时间
delay(1000);
}
```
这个程序使用了 OneWire 库和 LiquidCrystal 库,需要先在 Arduino IDE 中安装这两个库。程序通过 OneWire 库实现了对 ds18b20 温度传感器的读取,并通过 LiquidCrystal 库将温度值显示在 LCD 上。同时,程序还将温度值输出到串口调试工具方便调试。
阅读全文