根据给定文件的信息,我们可以总结出以下关于“基于51单片机的18b20温度传感器程序”的相关知识点: ### 一、基础知识 #### 1. 51单片机简介 51单片机是一种广泛使用的8位微控制器系列,其核心是Intel 8051架构。它具有成本低廉、易于编程、接口简单等特点,在工业控制、家用电器、通信设备等领域有广泛应用。 #### 2. DS18B20温度传感器介绍 DS18B20是一款数字温度传感器,具有体积小、功耗低、测量范围宽(-55℃~+125℃)、精度高等特点。它采用单总线的数据通信方式,使得外部硬件电路非常简单。该传感器可以提供9到12位的温度读数分辨率,并且可以通过编程设置分辨率。 ### 二、程序设计要点 #### 1. 程序结构解析 程序主要分为几个部分:头文件包含、宏定义、变量声明、函数定义以及主函数。 - **头文件包含**:`#include<reg51.h>`用于包含51单片机的寄存器定义;`#include<intrins.h>`用于包含延时函数等内联汇编指令;`#include<stdio.h>`用于标准输入输出。 - **宏定义**:定义了无符号字符类型`uchar`和无符号整型`uint`,便于数据类型操作。 - **变量声明**:声明了一些全局变量,如标志位`Flag`和风速计数器`Feng`。 - **函数定义**: - `delay(uint t)`:延时函数,用于控制程序运行速度。 - `dsreset(void)`:复位18B20传感器。 - `tempreadbit(void)`:读取18B20传感器的一个比特。 - `tempread(void)`:读取一个完整的温度值。 - `tempwritebyte(uchar dat)`:向18B20写入一个字节。 - `tempchange(void)`:启动温度转换过程。 - `float get_temp()`:获取当前温度值。 - `void Display1()`:显示温度值。 - **主函数**:程序的入口点,不断循环调用`tempchange()`进行温度转换,再调用`Display1()`显示温度。 #### 2. 关键函数解析 - **dsreset(void)**:通过设置信号线为低电平一段时间来完成对DS18B20的复位。 - **tempreadbit(void)**:读取一个比特的数据。此函数利用了DS18B20的单总线通信协议,通过改变信号线状态并读回数据完成一个比特的读取。 - **tempread(void)**:读取完整的温度数据。通过多次调用`tempreadbit()`函数读取每个比特,组成完整的温度数据。 - **tempwritebyte(uchar dat)**:将一个字节的数据写入DS18B20。该函数同样遵循单总线协议,通过设置信号线的状态来发送比特数据。 - **tempchange(void)**:初始化温度转换。首先复位DS18B20,然后发送ROM命令(0xCC)和温度转换命令(0x44),触发温度测量过程。 - **get_temp()**:获取当前温度。先复位DS18B20,发送ROM命令(0xCC),接着发送读取命令(0xBE)以读取温度数据,最后计算出实际温度值。 - **Display1()**:将获取的温度数据显示在P1端口上,通过分段显示来模拟LED显示效果。 ### 三、注意事项 - **单总线通信**:DS18B20采用单总线通信方式,这意味着必须正确处理信号线的高低电平变化和延迟时间。 - **温度转换时间**:温度转换需要一定的时间,通常需要几百毫秒。因此在读取温度前应等待足够的时间。 - **ROM命令与功能命令**:DS18B20支持多种命令,包括ROM命令和功能命令,其中ROM命令用于选择特定的传感器,功能命令则用于执行具体的操作(如温度转换、读取温度等)。 - **电源与接地**:确保DS18B20的电源和接地正确连接,以避免损坏传感器或影响测量结果。 以上是对基于51单片机的18b20温度传感器程序的关键知识点的详细介绍。
#include <intrins.h> //内部包含延时函数 _nop_();
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar Flag=0; //定义一个全局的标志位
uchar Feng=0;
sbit ds= P3^1; //接18B20
void delay(uint t)
{
uint k;
while(t--)
{
for(k=0; k<12; k++)
{ }
}
}
void dsreset(void)//初始化函数
{
uint i;
ds=0;
i=97;
while(i>0)
i--;
ds=1;
i=4;
while(i>0)
i--;
}
- 粉丝: 7
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助