基于51单片机+DS18B20温度测温器+LCD1602显示

DS18B20温度传感器

  • DS18B20相关介绍
        • 学习视频推荐
        • DS18B20特性
        • 封装形式与引脚说明
        • 供电方式(外部电源供电、寄生电源供电、寄生电源强上拉)
        • 内部结构
        • 温度存储格式及配置寄存器(模式和分辨率)
        • DS18B20指令(ROM指令操作)
        • 指令的使用
        • 注意事项
    • 时序图
        • 初始化
        • 写时序(写0或1)
        • 读时序(读0或1)
  • 程序代码
    • LCD1602显示温度
        • main.c(主函数)
  • 项目展示

DS18B20相关介绍

学习视频推荐

我看的是B站的从零学电子。 址

DS18B20特性

1.独特的单总线接口,就需一条线则可实现双向通信(测温)
2.测温范围:-55℃~+125℃,可通过编程设定9—12位分辨率,对应分辨温度分别为0.5、0.25、0.125、0.0625℃。
3.支持多点组 (可连接多个DS18B20温度传感器),多个DS18B20可以并联(3或2线)实现多个组 测温,但注意超过8个要解决好供电问题,否则电压过低会导致传输不稳定,从而数据不准确。
4.工作电压:3.0~5.5V (寄生电源方式下可由数据线供电)
5.在使用过程中不需要外围电路,全部传感元件及转换电路都在芯片内了。(上拉电阻
6.测温结果直接是数字量输出,单总线串行传送方式,同时可传送CRC校验码(校验数据采集是否正确),具有极强的抗干扰和纠错能力。
7.在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字。
8.负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。

封装形式与引脚说明

内部结构

DS18B20内部结构如图所示,其中与操作有关的是:64位光刻ROM、温度传感器、9个字节的RAM存储器、EEPROM(温度 警寄存器TH和TL、配置寄存器)。

例子:

写时序(写0或1)

程序代码

每一次进行写ROM相关命令都记得初始化。
对于单个DS18B20我们可以直接跳过ROM指令 直接温度转换。读取温度

步骤:
1.初始化
2.跳过ROM指令
3.启动温度转换(需要时间)
4.延时(等待温度转换)
5.初始化 (记得每写ROM相关命令记得需要从初始化开始)
6.读取温度
7.显示温度

LCD1602显示温度

main.c(主函数)

#include #include "delay.h"#include "lcd1602.h"sbit DS18B20 = P3^7; //DS18B20引脚unsigned char ds18b20Flag; //DS18B20是否响应标志位unsigned char temperature[2] = {' '}; //存放温度整数和小数unsigned char code array[14] = {"DS18B20 error!"};unsigned char code array1[5] = {"Temp:"};/*DS18B20初始化函数*/void initDs18b20(){	DS18B20 = 1;	delay20us();	DS18B20 = 0;   //拉低电平 	delay480us();  //480us-960us之间均可	DS18B20 = 1;   //拉高电平	delay50us();   //等待15us-60us	if(DS18B20 == 1) //如果未响应	{		ds18b20Flag = 1; //DS18B20未响应 标志位置1	}	delay240us();	}	/*DS18B20写命令函数*/void ds18b20WriteData(unsigned char com){	unsigned char i;	for(i=0;i8;i++)	{		DS18B20 = 0; //拉低电平		//延时至少1us		DS18B20 = com&0x01;		delay60us();		DS18B20 = 1;		com = com>>1;	}		}/*DS18B20读数据函数*/unsigned char ds18b20ReadData(){	unsigned char i;	unsigned char dat = 0; //接收数据	for(i=0;i8;i++)	{		DS18B20 = 0;  //拉低电平至少1us		dat=dat>>1;	  //右移一位		DS18B20 = 1; //释放总线		if(DS18B20 == 1)		{			dat = dat|0x80;		}		delay45us(); //保持45us		DS18B20 = 1; //释放总线	}	return dat;}/*读取温度函数*/void readTemperature(){	unsigned char temperatureLow;  //温度低字节	unsigned char temperatureHigh; //温度高字节	unsigned char tempFlag = 0; //温度正负标志位	unsigned char disposeValue; //处理值		initDs18b20();	//初始化DS18B20	ds18b20WriteData(0xcc); //跳过ROM	ds18b20WriteData(0x44); //启动温度转换指令	//延时一段时间	delay800ms();		initDs18b20(); //每一次写命令都需要初始化	ds18b20WriteData(0xcc); //跳过ROM	ds18b20WriteData(0xbe); //读暂存器内容		temperatureLow = ds18b20ReadData();	 //获取温度的第一个字节	temperatureHigh = ds18b20ReadData(); //获取温度的第二个字节		disposeValue = (temperatureHigh4)|

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月22日
下一篇 2021年1月22日

相关推荐