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/10/12 6:06:01 阅读更多 →
二.Linux——文件

二.Linux——文件

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

2026/10/12 6:06:03 阅读更多 →
如何在桌面端打造你的专属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/9/29 20:46:56 阅读更多 →

最新新闻

项目进度管理10.1-10.3思维导图:定规矩、拆动作、排顺序

项目进度管理10.1-10.3思维导图:定规矩、拆动作、排顺序

做项目管理系统学习的人,十有八九都会在“项目进度管理”这一章卡过壳。第10章的10.1到10.3,也就是规划进度管理、定义活动、排列活动顺序这三小节,是整个进度管理知识域的起手式。看似只有三节,但信息密度极高,术语之…

2026/10/12 6:05:34 阅读更多 →
X4独角兽新版PHP视频网站源码实测:部署、播放器与二次开发指南

X4独角兽新版PHP视频网站源码实测:部署、播放器与二次开发指南

做视频站的朋友应该都清楚,选一套靠谱的源码比什么都重要。市面上PHP视频网站源码不少,但真正能打、更新及时、后台顺手的不多。今天聊的这套X4独角兽视频网站新版源码,我前后在本地和服务器上都跑过,也拿它搭过测试站&#xff0c…

2026/10/12 6:05:34 阅读更多 →
AI 调试心法:用「完整日志 + 循环修复」让 AI 成为你的排错搭档

AI 调试心法:用「完整日志 + 循环修复」让 AI 成为你的排错搭档

文档教程Vibe Coding示例工程 【免费下载链接】vibe-vibe The First Systematic Vibe Coding Open-Source Tutorial | From Zero to Full-Stack, Empowering Everyone to Build Products with AI | Live at: www.vibevibe.cn ;首个系统化 Vibe Coding 开源教程 | 零…

2026/10/12 6:05:34 阅读更多 →
用巴菲特原则评估量子创业:从护城河到价值创造

用巴菲特原则评估量子创业:从护城河到价值创造

量子、巴菲特、创业生态、价值创造,这四个词放到一句话里,很多人第一反应是"硬凑"。一边是奥马哈的吼叫与汽水,一边是实验室里的极低温稀释制冷机,画风差得有点远。但过去两年我一直在用巴菲特的财务标尺去反推一批量子…

2026/10/12 6:05:34 阅读更多 →
Vibe Coding真相:零基础也能用自然语言打造效率工具?

Vibe Coding真相:零基础也能用自然语言打造效率工具?

1. 先说个真实场景:一个零基础朋友是怎么把活干完的前两天一个从没写过代码的朋友找我,说单位里每天要整理几十张Excel表,手工复制粘贴到晚上八点。她说听说现在有Vibe Coding,问我是不是真的不用学编程也能自己做个工具。当时我的…

2026/10/12 6:05:34 阅读更多 →
牛客寒假算法集训营第一场题解:双指针、树形DP与字符串DP实战

牛客寒假算法集训营第一场题解:双指针、树形DP与字符串DP实战

牛客寒假算法基础集训营第一场这套题,我印象挺深。难度曲线并不是那种“签到题送到嘴边、压轴题劝退所有人”的极端分布,前几道确实送分,但从G题开始就进入双指针、树形DP、字符串DP这些正经考点,最后两道又考模型转化和临场取舍。…

2026/10/12 6:04:34 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →