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

基于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℃,做温控预警什么的完全够用。

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

相关文章:

  • 百度TTS替代方案:自建开源语音服务,数据更安全成本更低
  • 一键部署:用Llama Factory快速搭建属于你的AI写作助手
  • Llama Factory模型部署:如何将微调后的模型快速应用到生产环境
  • 快速验证:用Windbg+Python构建DMP分析原型系统
  • 如何用LangSmith本地部署提升AI开发效率
  • 企业级语音系统搭建:Sambert-Hifigan支持高并发API请求处理
  • OCR技术入门:CRNN模型原理与应用
  • 24小时挑战:用AI打造动态鼠标指针游戏
  • ComfyUI用户必看:如何将TTS能力接入AI工作流?
  • AI助力达梦数据库连接:智能工具开发实战
  • 用FLASH ATTENTION快速构建高效Transformer原型
  • 锁存器在物联网设备中的5个典型应用场景
  • CRNN OCR在零售业的应用:商品标签自动识别系统
  • 为什么说数据库一体机融合架构优于超融合?
  • 告别手动操作:EASYPOI+AI让报表生成时间从2小时降到5分钟
  • 电商后台实战:Vue DevTools高级调试技巧
  • 多模态OCR:CRNN结合图像理解
  • 批量处理文本转语音?Python脚本调用API实现万条任务队列化
  • Dify平台如何集成语音?Sambert-Hifigan API支持JSON调用,快速接入
  • ai识别宠物百科知识系统 小程序Thinkphp-Laravel框架项目源码开发实战
  • 教育场景AI落地:用开源语音镜像生成多情感课件音频,效率提升3倍
  • CRNN OCR安全考量:敏感信息识别与隐私保护
  • CRNN OCR在复杂表格数据提取中的行列识别技巧
  • GitLab中文版下载安装图解指南(2024最新)
  • CRNN OCR应用:智能合同文本识别系统
  • Linux新手必看:为什么不能用CHMOD -R 777解决问题
  • Java反编译零基础入门:从.class文件看代码本质
  • CRNN模型在复杂文档识别中的优势分析
  • 边缘计算场景:将Llama Factory微调模型部署到Jetson设备
  • CRNN模型深度解析:为何它在中文识别中表现优异