news 2026/3/29 11:56:20

基于51单片机的DS18B20温度检测系统设计与实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于51单片机的DS18B20温度检测系统设计与实现

基于51的DS1820的温度检测系统 项目功能:模块化实现51读取ds18b20传感器温度数据,并以液晶方式呈现! 项目简介:该项目是基于51单片机、液晶1602、DS18B20传感器设计的一种能实时测量所处环境的温度并显示的设计方案! 项目实现原理:单片机通过读取DS18B20传感器传送的数据,再经过其内部的主控程序,实现实时显示温度值的功能! 项目代码+项目仿真。

这温度检测系统玩起来真带劲!咱直接用51单片机配个DS18B20传感器,温度数据在LCD1602上实时跳动显示。整个系统最关键的还是单总线通讯和温度数据处理,下面带大家手撕代码。

先看硬件配置:STC89C52芯片配个12M晶振,DS18B20的DQ脚接P2.2,LCD1602的数据口接P0,控制线接P2.0-P2.1。上电后传感器就开始疯狂测温,温度值直接在液晶屏上蹦迪。

驱动DS18B20的核心是时序控制,这里直接上干货:

//单总线延时函数 void Delay_OneWire(unsigned int t) { while(t--); } //DS18B20初始化 bit Init_DS18B20(void) { bit flag; DQ = 1; Delay_OneWire(12); DQ = 0; Delay_OneWire(80); //拉低480us以上 DQ = 1; Delay_OneWire(30); //等待15-60us flag = DQ; //存在脉冲检测 Delay_OneWire(30); return flag; } //读取一个字节 unsigned char Read_Byte(void) { unsigned char i, dat = 0; for(i=0;i<8;i++) { DQ = 0; dat >>= 1; DQ = 1; //释放总线 if(DQ) dat |= 0x80; Delay_OneWire(5); } return dat; }

这段代码的精髓在于微秒级延时控制。比如初始化时要拉低至少480us,读取时每个位间隔不能超过15us。用while循环实现的延时虽然糙,但在12M晶振下实测误差可以控制在5%以内。

温度转换时的骚操作才叫精彩:

float Get_Temperature() { unsigned char LSB, MSB; Init_DS18B20(); Write_Byte(0xCC); //跳过ROM Write_Byte(0x44); //启动转换 Delay_OneWire(200); Init_DS18B20(); Write_Byte(0xCC); Write_Byte(0xBE); //读取寄存器 LSB = Read_Byte(); MSB = Read_Byte(); int temp = (MSB << 8) | LSB; return temp * 0.0625; //12位精度转换 }

这里有个坑:DS18B20返回的是16位补码,处理负数时得特别注意。比如-25.5℃会返回0xFFE6,转换成十进制要取反加1。不过我们机智地用int类型直接运算,配合0.0625的系数搞定小数位。

LCD显示部分要玩转指令集:

void LCD_ShowTemp(float temp) { unsigned char str[16]; if(temp < 0) { str[0] = '-'; temp = -temp; } else { str[0] = ' '; } sprintf(str+1, "%02d.%01dC", (int)temp, (int)(temp*10)%10); LCD_Write_String(0, 0, "Current Temp:"); LCD_Write_String(0, 1, str); }

这里用sprintf处理浮点数真是省事,但要注意51的内存限制。实测用%02d.%01d格式既省资源又能稳定显示,比用%3.1f这种浮点格式靠谱多了。

最后上主函数收尾:

void main() { LCD_Init(); while(1) { float temp = Get_Temperature(); LCD_ShowTemp(temp); Delay_Ms(800); //刷新间隔别太短 } }

整个系统跑起来后,温度刷新率控制在1秒左右最合适。实测发现DS18B20在12位精度下转换需要750ms,所以延时设800ms刚刚好。要是设成500ms反而会导致读取旧数据,这坑我替你们踩过了。

Proteus仿真时记得给DS18B20元件设置初始温度,不然可能显示85℃的默认值。硬件连线注意DQ脚要加上拉电阻,不然时序会抽风。代码打包上传后实测-55℃到+125℃范围内误差±0.5℃,做温控预警什么的完全够用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 16:22:47

ComfyUI用户必看:如何将TTS能力接入AI工作流?

ComfyUI用户必看&#xff1a;如何将TTS能力接入AI工作流&#xff1f; &#x1f399;️ Sambert-HifiGan 中文多情感语音合成服务&#xff08;WebUI API&#xff09; 在当前AIGC工作流中&#xff0c;文本生成语音&#xff08;Text-to-Speech, TTS&#xff09;正成为提升内容表…

作者头像 李华
网站建设 2026/3/27 10:00:36

Llama-Factory性能优化:将训练速度提升300%的实战技巧

Llama-Factory性能优化&#xff1a;将训练速度提升300%的实战技巧 作为一名数据科学家&#xff0c;你是否遇到过这样的困惑&#xff1a;同样的代码在不同机器上运行&#xff0c;速度差异却大得离谱&#xff1f;明明配置差不多&#xff0c;为什么训练时间能差好几倍&#xff1f;…

作者头像 李华
网站建设 2026/3/27 16:44:25

零基础Kaggle竞赛:用Llama-Factory快速构建baseline模型

零基础Kaggle竞赛&#xff1a;用Llama-Factory快速构建baseline模型 如果你是一名想尝试NLP竞赛的新手&#xff0c;却被复杂的特征工程和模型构建步骤吓退&#xff0c;那么Llama-Factory可能是你的救星。这个开源工具能帮你快速搭建大语言模型baseline&#xff0c;省去从零开始…

作者头像 李华
网站建设 2026/3/29 0:23:32

语音合成显存不足?CPU优化版镜像让老旧服务器也能高效运行

语音合成显存不足&#xff1f;CPU优化版镜像让老旧服务器也能高效运行 &#x1f3af; 背景与痛点&#xff1a;当高质量语音合成遇上资源瓶颈 在智能客服、有声阅读、虚拟主播等应用场景中&#xff0c;高质量中文语音合成&#xff08;TTS&#xff09; 已成为不可或缺的技术组件。…

作者头像 李华
网站建设 2026/3/27 19:19:19

企业级OCR部署:CRNN模型性能优化指南

企业级OCR部署&#xff1a;CRNN模型性能优化指南 &#x1f4d6; 技术背景与行业挑战 在数字化转型加速的今天&#xff0c;光学字符识别&#xff08;OCR&#xff09; 已成为企业自动化流程中的关键一环。从发票识别、合同归档到智能客服问答&#xff0c;OCR技术广泛应用于金融、…

作者头像 李华
网站建设 2026/3/27 12:32:13

CRNN OCR WebUI使用全攻略:从上传到识别的完整流程

CRNN OCR WebUI使用全攻略&#xff1a;从上传到识别的完整流程 &#x1f4d6; 项目简介 在数字化转型加速的今天&#xff0c;OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;文字识别技术已成为文档自动化、信息提取和智能办公的核心工具。…

作者头像 李华