51单片机DS18B20温度传感器程序解析

5星 · 超过95%的资源 需积分: 6 18 下载量 89 浏览量 更新于2024-09-20 收藏 3KB TXT 举报
该资源是一个基于51单片机的DS18B20温度传感器的子程序,用于读取并显示温度数据。程序中包含了必要的定义、函数声明和主函数实现,允许用户通过DS18B20与51单片机进行通信,获取温度值,并将结果显示在7段显示器上。 程序主要知识点: 1. **DS18B20**:这是一个数字温度传感器,可以提供精确的温度测量,支持一线总线(1-Wire)通信协议。在这个程序中,它通过sbit DQ=P1^7与单片机连接。 2. **头文件**:程序使用了`REG52.H`,这是51系列单片机的标准寄存器定义头文件;`math.h`通常包含数学函数,但在这个程序中未使用;`INTRINS.H`包含51单片机的内联汇编函数。 3. **定义和变量**:程序定义了多个位定义(如seg1-seg3用于7段显示器控制),以及一些全局变量(temp, flag_get, count, num, minute, second等)来存储温度值和其他状态信息。 4. **函数声明**:包括`delay1()`, `ReadTemperature()`, `Init_DS18B20()`, `ReadOneChar()`, `WriteOneChar()` 和 `delay()`。这些函数分别负责延时、初始化DS18B20、读取一个字符、写入一个字符以及主循环中的延时操作。 5. **7段显示器编码**:`codetab`数组包含了7段显示器显示数字0-9的编码,用于将温度值转化为7段显示器可以理解的格式。 6. **主函数**:`main()`函数是程序的入口点,其中设置了定时器配置(用于生成延时)和中断设置,初始化DS18B20,然后进入一个无限循环,不断读取温度,更新并显示在7段显示器上。 7. **通信过程**:通过`ReadTemperature()`函数,程序与DS18B20进行通信,获取温度值。`ReadOneChar()`和`WriteOneChar()`函数可能用于DS18B20的一线总线协议交互,读取或写入数据。 8. **延时函数**:`delay1()`和`delay()`函数提供了不同级别的延时功能,对于实时性要求不高的系统,通常使用这种方式实现简单的延时。 9. **温度显示**:读取到的温度值被转换为ASCII字符并存储在`str[]`数组中,然后通过`tab[]`查找对应的7段码,以便在7段显示器上正确显示。 10. **硬件配合**:为了更好地理解和使用此程序,建议配合电路原理图“DY_mini80.pdf”一起学习,这个图会展示DS18B20如何连接到51单片机以及其他硬件组件的布局。 这个程序适合初学者了解和学习如何使用51单片机与DS18B20温度传感器的交互,以及如何将读取的数据在7段显示器上进行显示。同时,通过程序可以学习到基本的C语言编程技巧,如变量定义、函数调用、位操作以及中断系统在单片机应用中的使用。