基于51单片机的单线多路DS18B20测温
### 基于51单片机的单线多路DS18B20测温技术解析 #### 技术背景及应用场景 51系列单片机因其价格低廉、易于编程等特点,在工业控制、家用电器等领域有着广泛的应用。随着科技的发展,对温度测量精度和可靠性要求不断提高,传统的热敏电阻或热电偶已经难以满足需求。在此背景下,基于51单片机结合DS18B20数字温度传感器实现的单线多路测温系统因其低成本、高精度和方便扩展等优点而备受青睐。 #### 51单片机简介 89C51是51系列单片机的一种典型代表,采用8位CPU为核心,集成了4K Flash ROM、128B RAM、32根可编程I/O线、2个16位定时/计数器、1个全双工串行通信口等资源。本设计使用的是89C51单片机作为主控芯片。 #### DS18B20温度传感器概述 DS18B20是一款由Dallas公司生产的数字温度传感器,具有体积小、功耗低、测量范围广等特点。最重要的是它可以通过一根数据线(即单线通信)进行数据传输,并且可以实现多个DS18B20在同一根数据线上工作,非常适合于构建多点测温系统。DS18B20支持9到12位的温度读取分辨率,测量范围为-55°C至+125°C。 #### 系统设计方案 为了实现多点温度监测,系统设计包括以下几个关键部分: 1. **硬件组成**: - **主控制器**:使用89C51单片机作为主控制器。 - **温度传感器**:采用两个DS18B20温度传感器,用于模拟实际应用中的多点温度监测。 - **显示模块**:采用一排8个共阳极数码管来显示温度值和温度上下限。 - **按键控制**:通过两个按键实现不同温度点的切换,另外四个按键用于设置温度上下限。 2. **软件实现**: - **初始化DS18B20**:使用`Init_DS18B20()`函数完成DS18B20的初始化工作。 - **读取温度**:通过`Read_OneChar()`函数逐位读取温度值。 - **写入命令**:利用`Write_OneChar()`函数向DS18B20写入指令或数据。 - **温度控制逻辑**:根据用户通过按键选择的温度点,调用相应的函数进行温度数据的读取和显示。 - **温度上下限设置**:提供功能允许用户通过额外的按键调整每个温度点的报警上下限。 #### 实现细节 1. **DS18B20序列号配置**: - 在Protuse仿真软件中,需要手动设置每个DS18B20的序列号。例如,对于ROM1和ROM2两个温度传感器,它们的序列号分别为: - ROM1 = {0x28, 0x34, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x52}; - ROM2 = {0x28, 0x31, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xB9}; - 通过修改Protuse中的末位数字可以得到不同的序列号。 - 使用CRC计算器确保序列号的正确性。 2. **DS18B20驱动程序详解**: - `Init_DS18B20()`函数用于初始化DS18B20,包括发送复位信号。 - `Read_OneChar()`函数用于读取DS18B20的一个字节数据。 - `Write_OneChar()`函数用于向DS18B20写入一个字节的数据。 - `PP_SZ1()`和`PP_SZ2()`函数分别用于读取ROM1和ROM2的温度数据。 - `write_temprom()`函数用于写入温度上下限数据。 #### 结论 本项目通过对51单片机与DS18B20数字温度传感器的组合应用,实现了单线多路的温度监测功能。不仅展示了如何配置DS18B20的序列号以及如何通过单片机读取温度数据,还提供了温度显示和上下限设置等功能,具有较高的实用价值。此外,该设计还可以进一步扩展,例如增加更多的温度监测点或者与其他外部设备集成,以满足更复杂的应用场景需求。
剩余13页未读,继续阅读
- huangweiiie2018-10-08还不错的 内容详细
- 粉丝: 67
- 资源: 31
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助