温度通信系统 LCD显示+上位机显示 传感器使用的是ds18b20,LCD显示温度,还可以串口...
温度通信系统 LCD显示上位机显示 传感器使用的是ds18b20LCD显示温度还可以串口通信在pc上显示温度并且有VB的上位机实时显示波形实物验证成功 自己写的代码注释详细 有代码有仿真 上位机显示这温度监控系统折腾了我整整一个礼拜从DS18B20的诡异时序到VB上位机曲线卡顿踩的坑比写的代码都多。先上实物效果1602液晶实时显示26.5℃的绿色字符电脑屏幕上红色温度曲线像心电图一样规律跳动。下面把核心代码和踩坑经验拆开说说。温度通信系统 LCD显示上位机显示 传感器使用的是ds18b20LCD显示温度还可以串口通信在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 i0; i4; 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.coloradmin.cn/o/2486483.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!