AT89S52与DS18B20实现数码管数字温度计程序

需积分: 10 6 下载量 85 浏览量 更新于2024-09-15 收藏 4KB TXT 举报
"基于AT89S52单片机和DS18B20传感器的数码管显示数字温度计的C语言程序设计" 该程序设计用于创建一个数码管显示的数字温度计,主要由两部分组成:硬件电路和软件程序。硬件部分包括AT89S52单片机和DS18B20温度传感器。AT89S52是一种8位微控制器,具有内置的Flash存储器,常用于嵌入式系统设计。DS18B20是一款数字温度传感器,能够提供精确的温度读数,并通过单总线协议与微控制器通信。 在软件方面,程序使用C语言编写,主要包含以下几个关键知识点: 1. 头文件引用: - `#include "reg52.h"`:包含了52系列单片机的寄存器定义,方便访问和操作单片机的IO口。 - `#include "intrins.h"`:包含了内联函数库,如`_nop_()`,用于插入空操作指令,有时用于控制程序执行速度。 2. 定义及宏: - 定义了端口P0、P2作为数据和扫描控制信号,P3的第三位DQ作为DS18B20的通信线。 - 使用`uchar`和`uint`定义无符号字符和无符号整型变量,分别用于存储单个位的显示数据和控制变量。 - 定义了数组`editab`,用于转换数字到7段码;`dis_7`用于将数字0-9和符号-转换为7段数码管显示代码;`scan_con`定义了扫描数码管的控制序列。 3. 函数定义: - `void delay(uint t)`:延时函数,通过循环实现固定时间的延迟,用于控制数码管的闪烁频率和通信时序。 - `void scan()`:扫描数码管函数,根据`display`数组的内容逐位点亮数码管,实现数字显示。 - `ow_reset(void)`:DS18B20的一线总线复位函数,初始化传感器通信。 4. 数据存储: - `uchar temp_data[2]`:存储DS18B20读取的温度数据(两个字节表示一字节的温度值)。 - `uchar display[5]`:存储待显示的温度值,最多可以显示4位整数和1位小数。 5. 温度传感器通信: - DS18B20的通信协议包括发送复位信号、写命令、读数据等步骤,这些步骤需要精确的时间控制,通过单总线协议实现。程序中没有展示完整的DS18B20通信代码,但`ow_reset(void)`是通信过程中的一个重要环节,负责初始化传感器。 6. 数码管显示流程: - 首先,通过DS18B20获取温度数据,将其转化为适合数码管显示的格式存储在`display`数组中。 - 然后,调用`scan()`函数,按照数码管的扫描顺序和7段码表,依次点亮数码管显示温度值。 这个项目不仅涵盖了单片机编程的基本知识,还涉及到数字温度传感器的使用和通信,以及数码管显示技术,是学习嵌入式系统设计和实践的好例子。