51单片机实现DS18B20温度测量与四数码管显示

5星 · 超过95%的资源 需积分: 18 4 下载量 32 浏览量 更新于2024-09-12 1 收藏 93KB PDF 举报
"这篇资源是关于使用C51语言在51单片机上实现DS18B20温度传感器的测量与显示程序。代码包含了详细的注释,并使用四位共阳数码管进行温度值的显示。DS18B20是一款能够提供12位温度转换精度的传感器,测量范围为-55°C到+125°C,显示精度为0.1度。程序中定义了数据线DQ连接到P1^2口,段码输入连接到P0口,位选控制连接到P3^4到P3^7口。" 在该程序中,主要涉及以下知识点: 1. **DS18B20温度传感器**:DS18B20是一款单线数字温度传感器,可以通过单根数据线与微控制器通信,发送温度数据。它具有内置的温度转换器,可以提供12位的温度分辨率。 2. **51系列单片机**:51单片机是基于Intel 8051架构的微控制器,广泛应用于嵌入式系统中。在这个程序中,单片机被用来接收和处理DS18B20的数据,并驱动数码管进行温度显示。 3. **C51编程**:C51是针对51系列单片机的C语言扩展,允许开发者用高级语言编写底层硬件控制程序。程序中的`#include "reg51.h"`包含51单片机的寄存器定义。 4. **数据线操作**:在代码中,`sbit DQ = P1^2;`定义了DQ引脚(数据线)连接到P1口的第2位,用于与DS18B20的通信。 5. **数码管显示**:四位共阳数码管显示温度值,数码管的段码控制由数组`codedis_7`定义,而列扫描控制字由数组`scan_con`定义。数码管的显示数据存储在`display`数组中。 6. **温度转换和显示**:`temp_data`数组用于暂存从DS18B20读取的温度数据,然后经过处理(可能包括温度的转换和格式化)后,存入`display`数组供数码管显示。 7. **延时函数**:`void delay(uint t)`是一个简单的延时函数,用于满足DS18B20通信中的时序要求。在实际应用中,可能需要更精确的延时函数,如使用定时器。 8. **温度小数部分的查表法**:`editab`数组用于将温度的小数部分转换为数码管的段码,通过查表法快速得到对应的显示值。 通过这个程序,开发者可以学习如何利用C51语言与DS18B20传感器交互,以及如何驱动共阳数码管进行数值显示。这对于初学者理解单片机控制硬件和温度测量的基本原理非常有帮助。