当前位置: 首页 > news >正文

温度通信系统 LCD显示+上位机显示 传感器使用的是ds18b20,LCD显示温度,还可以串口...

温度通信系统 LCD显示+上位机显示 传感器使用的是ds18b20,LCD显示温度,还可以串口通信在pc上显示温度,并且有VB的上位机实时显示波形,实物验证成功 自己写的代码,注释详细 有代码有仿真 上位机显示

这温度监控系统折腾了我整整一个礼拜,从DS18B20的诡异时序到VB上位机曲线卡顿,踩的坑比写的代码都多。先上实物效果:1602液晶实时显示26.5℃的绿色字符,电脑屏幕上红色温度曲线像心电图一样规律跳动。下面把核心代码和踩坑经验拆开说说。

温度通信系统 LCD显示+上位机显示 传感器使用的是ds18b20,LCD显示温度,还可以串口通信在pc上显示温度,并且有VB的上位机实时显示波形,实物验证成功 自己写的代码,注释详细 有代码有仿真 上位机显示

DS18B20这玩意儿看着就两根线,操作起来却要精确到微秒。初始化时序不对直接罢工,上拉电阻没接好温度值乱跳。后来在面包板上焊了个4.7K电阻才稳定,代码里加了三次读取校验:

// 单总线复位脉冲(注意这个延时必须精确) DS18B20_Reset() { DQ = 0; delay_us(480); // 保持480-960μs DQ = 1; delay_us(60); // 等待传感器回应 if(!DQ) { delay_us(400); return 1; // 检测到设备 } return 0; // 设备未响应 }

这段代码调了整整两天——最开始用定时器中断处理其他任务,结果导致延时函数不准,传感器死活不响应。后来改用纯轮询方式才搞定。

液晶显示部分用了HD44780驱动,自定义了℃符号。有意思的是发现1602的D4-D7接法会影响刷新速度,改成4线模式后闪烁问题消失了:

// 自定义温度符号 unsigned char tempChar[8] = {0x18,0x18,0x03,0x04, 0x04,0x04,0x03,0x00}; LCD_CustomChar(0, tempChar); // 注册到CGRAM LCD_PutCmd(0x80); // 第一行首位 LCD_PutStr("Temp: "); LCD_PutChar(0); // 显示自定义符号

串口通信开始直接用printf发送,结果上位机经常收不全数据。改成原始字节发送反而稳定,每500ms发送一次带校验位的数据包:

void USART_SendTemp(float temp) { uint8_t data[4]; *(float*)data = temp; // 浮点数转字节数组 USART_SendByte(0xAA); // 帧头 for(int i=0; i<4; i++) { USART_SendByte(data[i]); } USART_SendByte(0x55); // 帧尾 }

上位机用VB6写的,用MSComm控件接收数据。最坑的是VB的Byte数组处理——收到数据要先判断帧头帧尾,还要处理粘包问题。曲线绘制用了PictureBox的Line方法,后来发现数据量大了会卡,改成双缓冲后流畅多了:

Private Sub DrawWave() Static lastX As Integer currentX = (currentX + 2) Mod Picture1.Width Picture1.Line (lastX, lastY)-(currentX, newY), vbRed lastX = currentX: lastY = newY If currentX = 0 Then Picture1.Cls // 满屏后清屏 End Sub

仿真时Proteus里的DS18B20模型和实物表现不一致,温度值变化有延迟。后来在实物调试时发现,传感器离单片机太近会受干扰,用杜邦线隔开20cm后读数才稳定。整个系统跑起来后,用手捏住传感器,看到液晶数字跳动和电脑曲线爬升的瞬间,感觉这周掉的头发值了。

http://www.jsqmd.com/news/592846/

相关文章:

  • 4大场景化解决方案:CyberpunkSaveEditor存档修改工具全指南
  • [计算机网络] 查看计算机设备MAC地址的方法
  • 5分钟攻克系统激活:开源激活工具的极简解决方案
  • 新手福音:告别环境配置噩梦,在快马平台直接体验jdk1.8编程
  • arXiv论文太多看不过来?教你用Python+Paper Agent搭建智能推荐系统(支持本地PDF分析)
  • OpenClaw人人养虾:Cron vs 心跳 - 调度策略对比
  • 革新Windows Android应用体验:无缝集成与效率提升的完美方案
  • 成都二手房装修哪家靠谱?厨卫翻新改造/精装房微改哪家好? - 成都人评鉴
  • 零基础入门linux:用快马ai一键生成ubuntu20.04交互式安装教程
  • 如何用开源工具解除音乐加密限制?解锁音频文件的完整指南
  • 从电机到USB:一文搞懂嵌入式里的感性负载、容性负载与阻抗匹配(附功率因数校正实例)
  • 1. CAN总线简介
  • 避免PCB设计翻车!Allegro铜皮编辑中的5个常见错误及解决方法
  • OpenClaw人人养虾:办公自动化合集案例
  • 利用快马AI快速生成Android Studio天气预报应用原型
  • OpenClaw人人养虾:Gmail 邮件事件订阅
  • LabVIEW单位根多项式生成
  • 一些存储类型
  • 告别评价烦恼:京东自动评价工具的技术实现与高效应用指南
  • 国产化替代实战:在信创环境下用Docker-compose部署Nacos 2.2.0并连接达梦数据库
  • 新手编程第一课:跟随快马AI一步步构建你的简易z-library
  • EF Core 慢查询排查实战:TagWith、OpenTelemetry、执行计划,30 分钟定位性能瓶颈
  • AutoHotkey-v1.0:Windows自动化效率革命的极简解决方案
  • 利用快马平台快速构建openclaw机械臂抓取仿真原型
  • 双天线北斗接收机在机器人导航中的实战配置——以NC502-D为例
  • 基于模糊控制的改进DWA算法功能详解
  • 人生感悟 --- 为什么ld一直爱开会
  • AssetStudio资源处理指南:从教育素材提取到独立游戏开发的创新应用
  • MATLAB轴承动力学模拟:不同故障类型下的动力学行为分析及其图表输出
  • Windows系统优化与驱动管理完全指南:释放磁盘空间并解决驱动冲突