AT89C51与DS18B20温度传感器C源程序实现

需积分: 10 3 下载量 128 浏览量 更新于2024-11-04 收藏 4KB TXT 举报
本资源主要介绍了一种基于89C51单片机(一种常用的微控制器)与DS18B20温度传感器的数据采集和显示系统。89C51在此项目中作为主控单元,负责处理DS18B20温度传感器的通信以及数码管的驱动。DS18B20是一种数字温度传感器,能够提供精确的温度测量,并通过1-Wire接口进行通信。 在提供的C源代码片段中,首先定义了一些宏和数据结构,如uchar(无符号字符型)、uint(无符号整型)以及位定义(如DQ和DIN)。这些宏简化了代码并提高了可读性。sbit类型用于定义P1和P3引脚的输入输出控制,如DQ用于1-Wire数据线的输出,DIN连接到数码管的LED控制线。 代码中的"codeeditab"、"codedis_7"、"codescan_con"数组分别用于DS18B20的初始化和数据解析。"codeeditab"用于存储转换温度代码的映射,"codedis_7"和"codescan_con"则与数码管的显示和读取操作有关。"datatemp_data"和"datadisplay"变量用于存储温度数据和数码管显示的临时数据。 函数"delay()"定义了一个延时函数,用于在通信和数据处理过程中实现定时。"scan()"函数是关键部分,它负责执行1-Wire通信协议来读取DS18B20的温度数据,通过循环控制寄存器读取和数据解析,将获取的16位温度值转换为两位数码管可以显示的形式。 整个系统的工作流程大致如下:首先,通过AT89C51的定时器或中断机制设置通信时间,然后调用scan()函数,该函数会发送命令请求温度读取,接收并解析DS18B20返回的数据,最终将温度数据转换为相应的数码管显示。用户可以通过LED的亮灭状态观察温度变化。 总结来说,此资源提供了一个基础的89C51与DS18B20配合实现温度监控系统的示例,展示了C语言编程在单片机硬件控制中的应用,适合学习者了解和实践嵌入式系统开发,特别是对1-Wire通信和数码管驱动的理解。