AT89S52与DS18B20实现数码管数字温度计程序
需积分: 10 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段码表,依次点亮数码管显示温度值。
这个项目不仅涵盖了单片机编程的基本知识,还涉及到数字温度传感器的使用和通信,以及数码管显示技术,是学习嵌入式系统设计和实践的好例子。
2021-04-21 上传
点击了解资源详情
2023-05-31 上传
2022-07-01 上传
2021-09-26 上传
点击了解资源详情
yingjun999
- 粉丝: 0
- 资源: 1
最新资源
- Advanced Bash-Scripting Guide
- ArcGISObjectModel
- 基于自适应分割和自适应量化的图像压缩算法
- 中文php配置文件php.ini
- HTTP1.0和HTTP1.1的比较
- 用ODBC实现SQL+Server+2000在VB中的应用
- 利用DAO实现Visual+C对数据库的访问
- 基于VC的数据库访问技术的比较与选择
- VC中通过ADO访问远程SQL+SERVER+2000的高级编程
- MFC+ODBC数据存取技术
- 2进制转10进制源代码
- 自动售货机程序和仿真
- AS400 CL命令基础教程
- μC/OS, The Real-Time Kernel
- oracle数据库触发器实例
- 08下半年软件设计师上午试题