Arduino中读取DS18B20温度传感器和温度超限报警提示并在TM1637数码管显示
目录一、所需库文件二、硬件连接三、完整程序代码四、测试1、数码管显示温度2、串口中显示温度五、温度超限报警指示1、温度超限报警实现2、完整的程序如下3、实际测试1温度低于24摄氏度2温度超过24摄氏度一、所需库文件在Arduino IDE中通过 工具 - 管理库 搜索并安装以下三个库1、OneWire — 用于单总线通信2、DallasTemperature — 用于DS18B20温度传感器3、TM1637显示部分推荐使用 TM1637TinyDisplay 库支持负数显示--同样在库管理器中搜索安装。二、硬件连接三、完整程序代码/* * Arduino Nano DS18B20 TM1637 温度显示 * 支持正负数精确到0.1℃兼容Arduino 1.8.12 */ #include OneWire.h #include DallasTemperature.h #include TM1637TinyDisplay.h // 引脚定义 #define ONE_WIRE_BUS 8 // DS18B20 数据引脚 #define TM1637_CLK 3 // TM1637 时钟引脚 #define TM1637_DIO 2 // TM1637 数据引脚 // 全局对象 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(oneWire); TM1637TinyDisplay display(TM1637_CLK, TM1637_DIO); // 段码表 (共阴极0~9) const uint8_t SEG[] { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F // 9 }; const uint8_t SEG_MINUS 0x40; // 负号 - const uint8_t SEG_BLANK 0x00; // 空白 void setup() { Serial.begin(9600); sensors.begin(); display.setBrightness(7); // 亮度 0~7 display.clear(); // 修正点使用 getDeviceCount() 检测传感器 if (sensors.getDeviceCount() 0) { Serial.println(Err:No checked DS18B20!); } else { Serial.print(Checked DS18B20 Count:); Serial.print(sensors.getDeviceCount()); Serial.println(); } delay(500); } void loop() { sensors.requestTemperatures(); float temperature sensors.getTempCByIndex(0); // 传感器故障检测DS18B20读取失败返回 -127℃ if (temperature -127.00) { display.showString(ERR ); delay(1000); return; } // 转换为整数精确到0.1℃例如 25.3 - 253-5.2 - -52 int tempInt (int)(temperature * 10); // 在数码管上显示 displayTemperature(tempInt); // 串口调试输出 Serial.print(Temp: ); Serial.print(temperature, 1); Serial.println( Degrees); delay(1000); // 刷新间隔 } /** * 核心显示函数纯段码操作兼容所有版本库 * param temp 温度值×10如 253 表示 25.3℃ */ void displayTemperature(int temp) { uint8_t segs[4] {SEG_BLANK, SEG_BLANK, SEG_BLANK, SEG_BLANK}; bool negative false; int dotPos 1; // 小数点默认放在第1位从0开始计数 // ------------------ 超量程处理±100℃以上 ------------------ if (temp 1000) { // ≥ 100.0℃ segs[0] SEG[9]; segs[1] SEG[9]; segs[2] SEG[9]; display.setSegments(segs); return; } if (temp -1000) { // ≤ -100.0℃ segs[0] SEG_MINUS; segs[1] SEG[9]; segs[2] SEG[9]; display.setSegments(segs); return; } // ------------------ 处理符号 ------------------ if (temp 0) { negative true; temp -temp; // 转为绝对值 } int whole temp / 10; // 整数部分如 253 - 25 int frac temp % 10; // 小数部分如 253 - 3 // ------------------ 两位数整数部分10.0℃ ~ 99.9℃ ------------------ if (whole 10) { int tens whole / 10; // 十位 int ones whole % 10; // 个位 if (negative) { // 显示 -XX.X 格式如 -12.3 segs[0] SEG_MINUS; segs[1] SEG[tens]; segs[2] SEG[ones]; segs[3] SEG[frac]; dotPos 2; // 小数点在个位后面位置2 } else { // 显示 XX.X 格式如 25.3 segs[0] SEG[tens]; segs[1] SEG[ones]; segs[2] SEG[frac]; segs[3] SEG_BLANK; dotPos 1; // 小数点在个位后面位置1 } } // ------------------ 一位数整数部分-9.9℃ ~ 9.9℃ ------------------ else { int ones whole % 10; if (negative) { // 显示 -X.X 格式如 -5.2 segs[0] SEG_MINUS; segs[1] SEG[ones]; segs[2] SEG[frac]; segs[3] SEG_BLANK; } else { // 显示 X.X 格式首位留空如 5.2 segs[0] SEG_BLANK; segs[1] SEG[ones]; segs[2] SEG[frac]; segs[3] SEG_BLANK; } dotPos 1; // 小数点在个位后面位置1 } // ------------------ 点亮小数点 (bit7 置1) ------------------ if (dotPos 0 dotPos 4) { segs[dotPos] | 0x80; } // 发送到TM1637显示 display.setSegments(segs); }四、测试1、数码管显示温度2、串口中显示温度五、温度超限报警指示1、温度超限报警实现设置当温度达到或者超过24摄氏度时候LED指示灯点亮。当温度低于24摄氏度LED灯熄灭。LED指示灯使用IO引脚13高电平点亮低电平熄灭。温度超限报警代码可用作温度控制器使用//温度超限报警LED指示灯。温度达到24度LED指示灯亮温度低于24度LED指示灯灭 if(temperature24.0f) { digitalWrite(LED_LIGHT, HIGH); } if(temperature24.0f) { digitalWrite(LED_LIGHT, LOW); }2、完整的程序如下/* * Arduino Nano DS18B20 TM1637 温度显示 * 支持正负数精确到0.1℃兼容Arduino 1.8.12 */ #include OneWire.h #include DallasTemperature.h #include TM1637TinyDisplay.h // 引脚定义 #define LED_LIGHT 13 // led 温度指示灯 #define ONE_WIRE_BUS 8 // DS18B20 数据引脚 #define TM1637_CLK 3 // TM1637 时钟引脚 #define TM1637_DIO 2 // TM1637 数据引脚 // 全局对象 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(oneWire); TM1637TinyDisplay display(TM1637_CLK, TM1637_DIO); // 段码表 (共阴极0~9) const uint8_t SEG[] { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F // 9 }; const uint8_t SEG_MINUS 0x40; // 负号 - const uint8_t SEG_BLANK 0x00; // 空白 void setup() { Serial.begin(9600); pinMode(LED_LIGHT, OUTPUT); sensors.begin(); display.setBrightness(7); // 亮度 0~7 display.clear(); // 修正点使用 getDeviceCount() 检测传感器 if (sensors.getDeviceCount() 0) { Serial.println(Err:No checked DS18B20!); } else { Serial.print(Checked DS18B20 Count:); Serial.print(sensors.getDeviceCount()); Serial.println(); } delay(500); } void loop() { sensors.requestTemperatures(); float temperature sensors.getTempCByIndex(0); // 传感器故障检测DS18B20读取失败返回 -127℃ if (temperature -127.00) { display.showString(ERR ); delay(1000); return; } // 转换为整数精确到0.1℃例如 25.3 - 253-5.2 - -52 int tempInt (int)(temperature * 10); // 在数码管上显示 displayTemperature(tempInt); //温度超限报警LED指示灯。温度达到24度LED指示灯亮温度低于24度LED指示灯灭 if(temperature24.0f) { digitalWrite(LED_LIGHT, HIGH); } if(temperature24.0f) { digitalWrite(LED_LIGHT, LOW); } // 串口调试输出 Serial.print(Temp: ); Serial.print(temperature, 1); Serial.println( Degrees); delay(1000); // 刷新间隔 } /** * 核心显示函数纯段码操作兼容所有版本库 * param temp 温度值×10如 253 表示 25.3℃ */ void displayTemperature(int temp) { uint8_t segs[4] {SEG_BLANK, SEG_BLANK, SEG_BLANK, SEG_BLANK}; bool negative false; int dotPos 1; // 小数点默认放在第1位从0开始计数 // ------------------ 超量程处理±100℃以上 ------------------ if (temp 1000) { // ≥ 100.0℃ segs[0] SEG[9]; segs[1] SEG[9]; segs[2] SEG[9]; display.setSegments(segs); return; } if (temp -1000) { // ≤ -100.0℃ segs[0] SEG_MINUS; segs[1] SEG[9]; segs[2] SEG[9]; display.setSegments(segs); return; } // ------------------ 处理符号 ------------------ if (temp 0) { negative true; temp -temp; // 转为绝对值 } int whole temp / 10; // 整数部分如 253 - 25 int frac temp % 10; // 小数部分如 253 - 3 // ------------------ 两位数整数部分10.0℃ ~ 99.9℃ ------------------ if (whole 10) { int tens whole / 10; // 十位 int ones whole % 10; // 个位 if (negative) { // 显示 -XX.X 格式如 -12.3 segs[0] SEG_MINUS; segs[1] SEG[tens]; segs[2] SEG[ones]; segs[3] SEG[frac]; dotPos 2; // 小数点在个位后面位置2 } else { // 显示 XX.X 格式如 25.3 segs[0] SEG[tens]; segs[1] SEG[ones]; segs[2] SEG[frac]; segs[3] SEG_BLANK; dotPos 1; // 小数点在个位后面位置1 } } // ------------------ 一位数整数部分-9.9℃ ~ 9.9℃ ------------------ else { int ones whole % 10; if (negative) { // 显示 -X.X 格式如 -5.2 segs[0] SEG_MINUS; segs[1] SEG[ones]; segs[2] SEG[frac]; segs[3] SEG_BLANK; } else { // 显示 X.X 格式首位留空如 5.2 segs[0] SEG_BLANK; segs[1] SEG[ones]; segs[2] SEG[frac]; segs[3] SEG_BLANK; } dotPos 1; // 小数点在个位后面位置1 } // ------------------ 点亮小数点 (bit7 置1) ------------------ if (dotPos 0 dotPos 4) { segs[dotPos] | 0x80; } // 发送到TM1637显示 display.setSegments(segs); }3、实际测试1温度低于24摄氏度2温度超过24摄氏度

相关新闻

2026年渝北区口碑好的牙齿矫正医疗机构深度调研与推荐

2026年渝北区口碑好的牙齿矫正医疗机构深度调研与推荐

一、开头:技术痛点/趋势引入2026年,随着人们对口腔健康和美观关注度的不断提升,牙齿矫正领域迎来了新的发展机遇,但同时也面临着诸多挑战。在技术社区里,经常能看到大家的讨论:牙齿矫正到底该如何进行架构选…

2026/7/31 12:38:17 阅读更多 →
二.Linux——文件

二.Linux——文件

在学习Linux文件之前,我们需要先搞懂Linux中到底有哪些文件?目前,我们需要了解和学习的大致有以下这些:-:普通文件d: 目录(文件夹)p:管道l:链接c,b:设备文件s…

2026/7/31 12:38:17 阅读更多 →
如何在桌面端打造你的专属LaTeX写作工作站?

如何在桌面端打造你的专属LaTeX写作工作站?

如何在桌面端打造你的专属LaTeX写作工作站? 【免费下载链接】NativeOverleaf Next-level academia! Repository for the Native Overleaf project, attempting to integrate Overleaf with native OS features for macOS, Linux and Windows. 项目地址: https://g…

2026/7/31 12:38:17 阅读更多 →

最新新闻

[Android ] AI扫描大师 -全能AI文档扫描识别

[Android ] AI扫描大师 -全能AI文档扫描识别

[Android ] AI扫描大师 -全能AI文档扫描识别 链接:https://pan.xunlei.com/s/VOyq-NPeNmsLl5LjtvMN1V7oA1?pwdvbe7# 一站式全能扫描办公工具,集成扫描、识别、转换、测量等多项实用功能。文件扫描|OCR文字识别|PDF格式转换&a…

2026/7/31 13:22:32 阅读更多 →
终极指南:如何在任天堂Switch上免费实现PC游戏串流

终极指南:如何在任天堂Switch上免费实现PC游戏串流

终极指南:如何在任天堂Switch上免费实现PC游戏串流 【免费下载链接】Moonlight-Switch Moonlight port for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/mo/Moonlight-Switch 还在为Switch有限的硬件性能无法畅玩PC大作而烦恼吗?M…

2026/7/31 13:22:32 阅读更多 →
光学教程习题精解:从波动方程到偏振态,掌握姚启钧经典教材核心

光学教程习题精解:从波动方程到偏振态,掌握姚启钧经典教材核心

1. 项目概述:一本经典教材的“通关秘籍” 在物理学的众多分支里,光学一直是个既迷人又有点“磨人”的领域。说它迷人,是因为从彩虹到全息,从显微镜到光纤通信,它的身影无处不在;说它磨人,是因为…

2026/7/31 13:22:32 阅读更多 →
如何高效获取国家中小学智慧教育平台电子课本:教师必备的免费下载工具指南

如何高效获取国家中小学智慧教育平台电子课本:教师必备的免费下载工具指南

如何高效获取国家中小学智慧教育平台电子课本:教师必备的免费下载工具指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课…

2026/7/31 13:22:32 阅读更多 →
终极宽屏改造:5分钟让《植物大战僵尸》适配现代显示器

终极宽屏改造:5分钟让《植物大战僵尸》适配现代显示器

终极宽屏改造:5分钟让《植物大战僵尸》适配现代显示器 【免费下载链接】PvZWidescreen Widescreen mod for Plants vs Zombies 项目地址: https://gitcode.com/gh_mirrors/pv/PvZWidescreen 还在为《植物大战僵尸》在宽屏显示器上的黑边而烦恼吗?…

2026/7/31 13:22:31 阅读更多 →
从避坑要点到实操步骤:结婚证公证线上办理全能指南

从避坑要点到实操步骤:结婚证公证线上办理全能指南

摘要还在为办理结婚证公证专程请假、奔赴公证处、长时间排队等候而困扰?如今无需线下奔波,只需借助手机,在微信、支付宝双平台搜索证天下小程序,就能一站式完成结婚证公证的线上申报、材料上传、在线审核、出证送达全流程。本篇全…

2026/7/31 13:21:31 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻