51单片机-第十一节-DS18B20温度传感器(One_Wire单总线)

news2024/11/14 15:36:55

一、DS18B20温度传感器介绍:

DS18B20是一种数字温度传感器。

测温范围:-55C - +125C

通信接口:1-Wire(单总线)

二、引脚及应用电路:

很简单,电源,接地,通讯接口。

      

三、内部结构:

总图:

(1)备用电源

(2)器件地址

(3)控制器

(4)存储器

(5)存储器内部:

B1,B2存储最低有效温度和最高有效温度。

存储格式:其中MSB前6位是符号位

B2,B3是暂存器,掉电丢失。

B4是配置寄存器,用于管理传感器配置。

其中,E2PROM是掉电不丢失的存储器(见前文),里面可存B2 3 4数据,开机时自动导入B2 3 4

注:(2)器件地址相当于大门(3)控制器相当于管家(4)存储器相当于

记住这个说法,有助于后面理解。

四、One_Wire单总线:

1、介绍:

One_Wire单总线是一种通用数据总线,用的比双总线少。

(1)一根通信线:DQ

(2)异步,半双工

2、时序结构:

(1)初始化:

主机将总线拉低至少480us,然后释放总线,等待15-60us后,存在的从机会拉低总线60-240us以响应主机,之后从机将释放总线。

(2)发送一位:

主机将总线拉低60-120us,然后释放总线,表示发送0;主机将总线拉低1-15us,然后释放总线,表示发送1。

从机将在总线拉低30us后读取电平。此时若为0,说明拉低时长大于30us,故确认发送0,1同理。

发送一位的总时长应大于60us。

(3)接收一位:

主机将总线拉低1-15us,然后释放总线,并在拉低后15us被读取总线电平(尽量贴近15us末尾)

读取为低电平则为0,高电平为1。

接收一位的总时长应大于60us。

3、注意:定时器冲突

由于One_Wire是单总线,所以是以绝对时间来进行判断,而判断的精度是微秒级的,这就要求在延时过程中不能被打断,因此与定时器中断冲突了。

解决:在One_Wire的函数中,执行操作前关闭定时器,执行后再打开

新问题:有其他需要定时器控制的高精度部分时,会产生冲突,只用一个芯片,就是没办法的事。
              这也是用绝对时间判断的单总线使用少的原因。

五、DS18B20操作流程:

初始化 ---》 ROM操作(控制大门)---》功能操作(通过管家控制

本节主要使用:

SKIP ROM【CCh】:跳过ROM,因为只有一个单片机,没有其他设备,无需选址。

CONVERT T【44h】:温度变化,将新感应到的温度放入存储器,温度值更新。

READ SCRATCHPAD【BEh】:读取存储器内容。

六、集成One_Wire单总线:

//OneWire单总线
sbit OneWire_DQ = P3 ^ 7;

unsigned char OneWire_Init()
{
	EA = 0;
	unsigned char i;
	unsigned char AckBit;
	OneWire_DQ = 1;
	OneWire_DQ = 0;	
	i = 247; while (--i);     //Delay500us,由延时计算器生成
	OneWire_DQ = 1;
	i = 32; while (--i);      //Delay70us
	AckBit = OneWire_DQ;
	i = 247; while (--i);
	EA = 1;
	return AckBit;
}

void OneWire_SendBit(unsigned char Bit)
{
	EA = 0;
	unsigned char i;
	OneWire_DQ = 0;
	i = 4; while (--i);   //10us
	OneWire_DQ = Bit;
	i = 24; while (--i);   //50us
	OneWire_DQ = 1;
	EA = 1;
}

unsigned char OneWire_ReceiveBit()
{
	EA = 0;
	unsigned char i;
	unsigned char Bit;
	OneWire_DQ = 0;
	i = 2; while (--i);   //5us
	OneWire_DQ = 1;
	i = 2; while (--i);   //5us
	Bit = OneWire_DQ;
	i = 24; while (--i);   //50us
	EA = 1;
	return Bit;
}

void OneWire_SendByte(unsigned char Byte)
{
	unsigned char i;
	for (i = 0; i < 8; i++)
	{
		OneWire_SendBit(Byte & (0x01 << i));
	}
}

unsigned char OneWire_ReceiveByte()
{
	unsigned char i;
	unsigned char Byte = 0x00;
	for (i = 0; i < 8; i++)
	{
		if (OneWire_ReceiveBit())
		{
			Byte |= 0x01 << i;
		}
	}
	return Byte;
}

七、集成DS18B20:

//DS18B20温度传感器
#define DS18B20_SKIP_ROM            0xCC
#define DS18B20_CONVERT_T           0x44
#define DS18B20_Read_SCTATCHPAD     0xBE
//更新温度
void DS18B20_ConvertT()
{
	OneWire_Init();
	OneWire_SendByte(DS18B20_SKIP_ROM);
	OneWire_SendByte(DS18B20_CONVERT_T);
}
//读取温度
float DS18B20_ReadT()
{
	unsigned char TLSB,TMSB;
	int Temp;
	float T;
	OneWire_Init();
	OneWire_SendByte(DS18B20_SKIP_ROM);
	OneWire_SendByte(DS18B20_Read_SCTATCHPAD);
	TLSB = OneWire_ReceiveByte();
	TMSB = OneWire_ReceiveByte();
	Temp = (TMSB << 8) | TLSB;
	T = Temp / 16.0;   //见温度存储格式,除以16相当于右移4位
	return T;
}

八、 实战:实时显示温度:

float T;
void main()
{
	LCD_Init();
	LCD_ShowString(1, 1, "Temperature:");
	Time0_Init();
	while (1)
	{
		DS18B20_ConvertT();
		T = DS18B20_ReadT();
		if (T < 0)
		{
			LCD_ShowChar(2, 1, '-');
			T = -T;
		}
		else
		{
			LCD_ShowChar(2, 1, '+');
		}
		LCD_ShowNum(2, 2, T, 3);//LCD这个函数只显示整数,自动丢失小数
		LCD_ShowChar(2, 5, '.');
		LCD_ShowNum(2, 2, (unsigned long)(T * 10000) % 10000, 4);
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2106242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

认知杂谈38

今天分享 有人说的一段争议性的话 I I 《灵感&#xff0c;创意的魔法棒》 嘿&#xff0c;咱可得好好唠唠灵感这玩意儿。你说怪不怪&#xff0c;有时候就喝那么一杯热乎乎的茶&#xff0c;哎呀妈呀&#xff0c;脑袋里一下子就跟开了闸似的&#xff0c;各种点子“哗哗”地往外…

[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-29基于FPGA实现触摸屏实验

软件版本&#xff1a;VIVADO2021.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA 实验平台&#xff1a;米联客-MLK-H3-CZ08-7100开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 http…

FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播

之前的文章《利用RTMP协议构建电脑与手机的直播Demo》介绍了如何使用RTMP Streamer实现完整的RTMP直播流程&#xff0c;另一篇文章《利用SRT协议构建手机APP的直播Demo》介绍了如何使用SRT Streamer实现完整的SRT直播流程&#xff0c;接下来介绍如何使用EasyPusher-Android实现…

golang学习笔记03——gin框架的核心数据结构

文章目录 1.核心数据结构1.1 gin.Context1.2 前缀树&#xff08;1&#xff09;前缀树&#xff08;2&#xff09;压缩前缀树&#xff08;3&#xff09;代码实现 上期文章我们讲到了golang中gin框架的基本原理和底层请求、渲染的流程&#xff0c;还不知道的小伙伴查看golang学习笔…

Docker 部署 Redis (图文并茂超详细)

部署 Redis ( Docker ) [Step 1] : 拉取 Redis 镜像, 推荐使用 7 的 Redis 版本 docker pull redis:7.0.12[Step 2] : 创建 Redis 相关目录 ➡️ 启动 Redis 容器 ➡️ 拷贝文件 ➡️ 授权文件夹 ➡️ 删除容器 # 创建 Redis 相关目录 mkdir -p /data/redis/{conf,data,log…

页面小组件-搜索栏(一)

样例展示 效果示例-折叠状态 效果示例-展开状态 代码示例 <custom-search-wrapper><!--showFoldBtn 需要展示折叠按钮时传值--><template slotleft><el-form:model"searchFormData"inlinesize"small"><el-form-item><e…

Linux 虚拟网络三大基石:Namespace、Veth pair 与 Bridge

引言 在 Linux 的世界里&#xff0c;虚拟网络技术是系统管理、云计算和容器化不可或缺的一部分。今天&#xff0c;我们将深入探讨构建这些虚拟网络的三大基石&#xff1a;Namespace、Veth 对和 Bridge&#xff0c;揭示它们如何在背后默默支撑起你的网络环境。 Namespace&…

PNP与NPN型传感器

PNP与NPN型传感器 一、磁性开关1、==磁性开关分类及原理==:2、==磁性开关配线==3、磁性开关串连和并联(不重要)4、磁性开关选型(不重要)二、PNP型与NPN型的选用1、PNP型传感器(高电平输出)1.1、对于`PNP-NO`(常开)型1.2、对于`PNP-NC`(常闭)型:2、NPN型传感器(低电…

Navicat 17 新特性 | 新增 Redis 哨兵部署模式

随着 Navicat 17 的发布&#xff0c;在业界引起了广泛的共鸣与热议。我们曾深入剖析其众多革新特性&#xff0c;包括新增 PolarDB 与 Garnet、模型设计创新与优化、增强的商业智能 BI 能力、高效的查询与配置、用户界面交互体验再升级&#xff0c;以及原生适配国产平台和操作系…

商品信息的标准化

销售环节的数字化见效最快 现在&#xff0c;企业的数字化是非常热的话题&#xff0c;工业&#xff14;.&#xff10;&#xff0c;人工智能&#xff0c;物联网&#xff0c;机器人都是企业数字化转型的主要方向&#xff0c;但是某些时候&#xff0c;我们走的太远&#xff0c;却忘…

双向链表的学习

双向链表是一种数据结构&#xff0c;它由节点组成&#xff0c;每个节点包含两个指针&#xff1a;一个指向前一个节点&#xff0c;另一个指向后一个节点。这种结构允许数据元素在两个方向上进行遍历&#xff0c;即既可以从前到后&#xff08;顺序&#xff09;&#xff0c;也可以…

【微处理器系统原理和应用设计第六讲】片上微处理器系统系统架构

一、概念辨析 首先来厘清以下概念&#xff1a;微处理器&#xff0c;微控制器&#xff0c;单片机&#xff0c;片上微处理器系统 &#xff08;1&#xff09;微处理器&#xff1a;即MPU&#xff08;Microprocessor Unit&#xff09;&#xff0c;微处理器是一种计算机的中央处理单…

Vue封装的过度与动画(transition-group、animate.css)

目录 1. Vue封装的过度与动画1.1 动画效果11.2 动态效果21.3 使用第三方动画库animate.css 1. Vue封装的过度与动画 作用&#xff1a;在插入、更新或移除DOM元素时&#xff0c;在合适的时候给元素添加样式类名 1.1 动画效果1 Test1.vue: transition内部只能包含一个子标签。…

电脑知识:如何恢复 Word、媒体和存档文件?

如果您是 Word 用户&#xff0c;那么您一定对无法打开 Word 文档的问题很熟悉。当文档包含大量关键信息时&#xff0c;情况会变得更加复杂。如果您遇到这种情况&#xff0c;那么您将如何处理&#xff1f; 我们再怎么强调在外部存储位置&#xff08;如外部硬盘、网络位置&#…

Ubuntu设置

1.查看版本:lsb_release -a 2.配置相关参数 配置root用户 设置 root 用户的登录密码&#xff0c;然后 su 登录。 1.改root密码&#xff1a;sudo passwd root 2.切换登录root用户&#xff1a; su root 3.root主目录在&#xff1a;cd ~ 4.开启 root 用户SSH远程登录权限 …

学习记录——day43 C++ 异常处理

一、异常处理的格式 1、在可能产生异常的地方使用关键字&#xff1a;throw 抛出异常 2、try { 可能会抛出异常的语句 }catch(接收异常的形参) { 处理异常 } 任何函数在定义时&#xff0c;可以指定能抛出的异常格式如下 返回值类型 函数…

前端:HTML、CSS、JS、Vue

1 前端 内容概要 了解前端三件套(HTML、CSS、JS)在前端所起的作用掌握HTML标签的功能&#xff0c;掌握重要标签(a标签&#xff0c;form标签)了解CSS了解JS的基础语法掌握Vue的基础语法重点掌握Vue项目怎么启动项目掌握前后端分离是什么。前端做什么事情&#xff0c;后端做什么…

统信UOS:快速修改主机名和计算机名

统信UOS&#xff1a;快速修改主机名和计算机名 1、修改主机名2、更改计算机显示名称 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、修改主机名 打开终端并获取root权限&#xff1a; 右键桌面空白处&#xff0c;选择“在终端中打开”。输…

制造业疲软引震荡,就业数据成市场焦点

周二&#xff0c;标普全球制造业PMI终值数据揭示了制造业的疲软态势&#xff0c;这一消息迅速在金融市场引发连锁反应&#xff0c;各类资产价格大幅跳水&#xff0c;交易员对经济前景的担忧情绪显著升温。在此背景下&#xff0c;即将于周五发布的美国非农就业数据无疑成为了本周…

软考 -- 软件设计师 -- 二轮复习(2) -- 程序设计语言(持续更新)

软考 – 软件设计师 – 二轮复习(2) – 程序设计语言(持续更新) 文章目录 软考 -- 软件设计师 -- 二轮复习(2) -- 程序设计语言(持续更新)前言一、编译、解释、基本控制结构二、数据类型三、变量和常量、逻辑表达式(短路&#xff1a;&&、||、&#xff01;)四、传值调用…