利用DB18B20芯片采集温度,并通过八段码显示出来
时间: 2024-05-07 09:17:10 浏览: 160
Msp430f1611+ds18b20+5110,温度显示+电子时钟,利用DS18B20将温度采集
好的,问题已经记录下来了。关于您的问题,您可以编写一个基于Arduino或其他单片机的程序来读取DB18B20芯片的数据。下面是一个摘录的示例代码:
```
#include <OneWire.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_LEDBackpack.h>
// 芯片引脚连接
#define ONE_WIRE_BUS 2
// 显示器对象
Adafruit_AlphaNum4 display = Adafruit_AlphaNum4();
// 创建一个 OneWire 对象
OneWire oneWire(ONE_WIRE_BUS);
void setup() {
// 初始化串行通信
Serial.begin(9600);
// 初始化显示屏
display.begin(0x70);
display.clear();
display.writeDisplay();
}
void loop() {
// 计算当前温度
float temperatureC = getTemperature();
// 显示到8x8扫描显示器上
printTemperature(temperatureC);
delay(1000);
}
float getTemperature(){
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
// 查找 DS18B20 芯片
if ( !oneWire.search(addr)) {
oneWire.reset_search();
delay(250);
return -1000;
}
// CRC 校验
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return -1000;
}
// 判断是否是 DS18B20 芯片
if (addr[0] != 0x28) {
Serial.println("Device is not a DS18B20 family device.");
return -1000;
}
// 发送启动温度转换指令
oneWire.reset();
oneWire.select(addr);
oneWire.write(0x44, 1);
// 等待转换完成
present = oneWire.reset();
oneWire.select(addr);
oneWire.write(0xBE);
// 读取温度数据
for ( i = 0; i < 9; i++) {
data[i] = oneWire.read();
}
// 计算温度
int16_t rawTemperature = (data[1] << 8) | data[0];
float temperatureC = ((float)rawTemperature) / 16.0;
return temperatureC;
}
void printTemperature(float temperatureC){
// 计算温度的绝对值和小数部分
byte temperatureAbs = abs(int(temperatureC));
byte temperatureDecimal = abs(int((temperatureC - temperatureAbs) * 10));
// 将温度的绝对值和小数部分转换成字符
int absDigit1 = temperatureAbs / 10;
int absDigit2 = temperatureAbs - (absDigit1 * 10);
int decimalDigit = temperatureDecimal;
// 将温度显示到8x8扫描显示器上
display.clear();
display.writeDigitAscii(0, absDigit1 + '0'); // 第一位
display.writeDigitAscii(1, absDigit2 + '0'); // 第二位
display.writeDigitAscii(3, decimalDigit + '0'); // 第四位
// 处理温度负号
if (temperatureC < 0){
display.writeDigitAscii(2, '-'); // 负号
}
display.writeDisplay();
}
```
这个程序使用 OneWire 库来查询 DS18B20 芯片,并使用 Adafruit_LEDBackpack 和 Adafruit_GFX 库来显示温度到一个8x8扫描显示器上。如果您使用不同的芯片或显示器,请注意更新代码。
注意:这只是一个示例代码,不一定适用于所有情况。请确保您正确地安装了所需的库并理解每个代码行的含义,以确保您的系统正常工作。
阅读全文