ds18b20温度传感器的使用

一、传感器分类:

  • 数字温度传感器,实现简单,不需要额外转换电路,采集过来的就是数字温度值
  • 模拟温度传感器->热敏电阻->AD转换电路->数字值

二、传感器接口:

  • GPIO接口:(ds18b20是特殊的单线GPIO接口)
  • I2C接口:SCLSDAVCCGND
  • SPI接口:SCLK、CS.MOSL、MISO
  • ADC接口:板子ADC进行模数转换
  • UART接口:GPS

三、ds18b20的主从通信方式

ds18b20的封装形式:

在51上,与dq数据请求线相连接的网络接口是P37,P37通过上拉电阻与VCC相连,说明引脚在空闲状态下处于高电平。

四、ds18b20的通信流程:

复位信号:51单片机复位,问ds18b20在不在
存在信号:“ds18b20"回复一个存在脉冲

每次和ds18b20通信前:必须要复位
1复位or存在、读、写时序图

2(复位函数、读函数、写函数)

#include <reg51.h>
#include "delay.h"//51 单片机复位后 所有特殊功能寄存器都被硬件清 0#define DQ_HIGH (P3 |= (1 << 7))//将DQ引脚拉高
#define DQ_DOWN (P3 &= ~(1 << 7))//将DQ引脚拉低
#define DQ_CHECK ((P3 & (1 << 7)) != 0)//检测DQ引脚电平 P37高电平输出1 低电平输出0//ds18b20复位函数
int de18b20_Reset(void)
{int t = 0;DQ_DOWN;	   //将引脚拉低Delay10us(70);// 延时70usDQ_HIGH;	   //将引脚拉高Delay10us(5);// 延时60us//在300us内检测DQ引脚是否被拉低(跳出循环),如果被拉低代表ds18b20回复了一个存在脉冲信号while(DQ_CHECK && t < 30){Delay10us(1);t++;}if(t >= 30){return 0;}//在300us内检测DQ引脚是否被拉高(跳出循环),如果被拉低代表ds18b20回复了一个存在脉冲信号while(!DQ_CHECK && t < 30){Delay10us(1);t++;}if(t >= 30){return 0;}return 1;
}//向ds18b20发送一个字节数据
void write_ds18b20(unsigned char dat)
{int i = 0;//判断发送的数据的8bit是1还是0for(i = 0;i < 8;i++){if(dat & 1 == 1)	 //bit 1{DQ_DOWN;_nop_();_nop_();//空转延迟1us左右DQ_HIGH;Delay10us(5);}else		 //bit 0{DQ_DOWN;Delay10us(5);DQ_HIGH;}dat = dat >> 1;//dat右移 始终把要发送的bit放置在最低位 和1比较}	
}//从ds18b20读取一个字节数据
unsigned char read_ds18b20(void)
{int i = 0;unsigned char ret = 0;for (i = 0; i < 8;i++){DQ_DOWN;_nop_();_nop_();DQ_HIGH;			//拉高才能检测到ds18b20发送了0 _nop_();_nop_();_nop_();if (DQ_CHECK)	  // 检测到发送的电平为1  代表发送数字1{ret = ret|(1 << i); //把发过来的为1的数字放到指定位置}	//发送了0不用管 ret初始化全为0;Delay10us(5);}return ret;
} 

3 ds18b20获取数据流程

  •   (1)复位
  • (2)51单片机发送0xCC,代表跳过ROM
  • (3)51单片机发送0x44,代表ds18b20开启温度转换
  • (4)延时等待(1s)
  • (5)复位
  • (6)51单片机发送0xCC,代表跳过ROM
  • (7)51单片机发送0xBE,代表读取ds18b20发送过来的温度值
  • (8)读取温度数据
//获取ds18n20采集到的温度  传递的是两个字节的数据
float get_tempt(void)
{short ret = 0;		 //两个字节unsigned char tl = 0;//一个字节unsigned char th = 0;//一个字节de18b20_Reset();write_ds18b20(0xCC);write_ds18b20(0x44);Delay1ms(1000);//延时1sde18b20_Reset();write_ds18b20(0xCC);write_ds18b20(0xBE);//先读低位tl = read_ds18b20(); th = read_ds18b20();ret = th << 8; //先把高位放进来ret |= tl;	   //再把低位放到高位后面接着return ret * 0.0625;//分辨率 展示的是温度
}

4分辨率:ds18b20:

  • 9位分辨率:精度±0.5℃
  • 10位分辨率:精度±0.25°℃
  • 11位分辨率:精度±0.125℃
  • 12位分辨率:精度±0.0625℃

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kali搭建sqli-labs靶场

1.输入apt-get install docker.io即可下载靶场镜像。 下载好后&#xff0c;我们输入docker search sqli-labs搜索sqli-labs靶场。2.我们选择第一个&#xff0c;输入docker pull acgpiano/sqli-labs&#xff0c;将该靶场装到本地。此时输入docker images&#xff0c;发现本地有s…

电脑外接显示屏字体和图标过大

当外接显示屏的分辨率过高时&#xff0c;可以调整显示器设置来解决字体和图标过大的问题。具体操作包括在桌面右击选择显示设置&#xff0c;切换到外接显示器&#xff0c;将分辨率调至推荐的1920x1080&#xff0c;或根据个人偏好进行适当调节&#xff0c;然后保存更改。 原因&a…

Linux 网络流量监控 Shell 脚本详解(支持邮件告警)

前言 一、脚本功能 二、实现原理 三、Shell 脚本实现 四、关键知识点解析 1. Bash 关联数组 2. 命令组 { } 与子 Shell ( ) 3. 字符串拼接换行 4. 流量计算逻辑 五、测试方法 六、优化建议 七、总结 前言 在生产环境中&#xff0c;监控服务器的 网络流量 非常重要…

【牛客刷题-剑指Offer】BM18 二维数组中的查找:一题四解,从暴力到最优

文章目录 一、题目介绍 1.1 描述 1.2 示例1 1.3 示例2 1.4 给的部分代码 二、题解 方法一:暴力遍历 方法二:二分查找(逐行) 方法三:Z字形查找(最优解) 方法四:递归分治(拓展思路) 三、总结 心得体会 一、题目介绍 原题链接:https://www.nowcoder.com/practice/abc3…

使用pyspark对上百亿行的hive表生成稀疏向量

背景&#xff1a;一张上百亿行的hive表&#xff0c;只有id和app两列&#xff0c;其中app的去重量是8w多个&#xff08;原app有上百万枚举值&#xff0c;此处已经用id数量进行过筛选&#xff0c;只留下有一定规模的app&#xff09;&#xff0c;id的去重量大概有八九亿&#xff0…

【设计模式】关于学习《重学Java设计模式》的一些成长笔记

【设计模式】关于学习《重学Java设计模式》的一些成长笔记 没有几个人是一说就会的,掌握一些技能,不仅要用心,而且还需要从温故中知新。 为此,好记性不如烂笔头,我干脆一步一脚印地系统学习一遍设计模式! (关注不迷路哈!!!) 文章目录 【设计模式】关于学习《重学Jav…

【基础-判断】@Entry装饰的自定义组件将作为页面的入口。在单个页面中可以使用多个@Entry装饰不同自定义组件。

@Entry装饰的自定义组件将作为页面的入口。在单个页面中可以使用多个@Entry装饰不同自定义组件。 解释: @Entry 的核心作用与唯一性:@Entry 装饰器用于明确声明该组件是一个页面的入口组件,即整个页面的“根”和“起点”。当UIAbility实例加载并显示页面时,系统需要明确知道…

医学影像AI应用-实践:使用MONAI实现肺部CT图像分割的原理与实践

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#,Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…

如何训练一个简单的Transformer模型(附源码)李宏毅2025大模型-作业4

摘要&#xff1a;一、作业目标&#xff1a;使用只有2层transformer的GPT-2&#xff0c;生成完整宝可梦图像。二、源码&解析&#xff1a;使用提供的Transformer模型&#xff08;GPT-2&#xff09;进行训练&#xff0c;FID Score: 96.3425一、作业目标1&#xff09;目标使用T…

leetcode211.添加与搜索单词-数据结构设计

与208.前缀树的设计是一样的&#xff0c;关键点在于word中存在通配符“."&#xff0c;所以针对该特殊情况&#xff0c;在search时针对这里进行全子节点的深度搜索class WordDictionary {TrieNode root;private class TrieNode {char val;// 当前节点的值&#xff0c;冗余了…

项目中的一些比较实用的自定义控件

本文是记录项目开发中一些相对复杂但都比较实用的控件&#xff0c;这些控件都是基于自定义的方式去实现&#xff0c;如果有需要的朋友&#xff0c;这个可以作为一个参考&#xff0c;同时也做一个自我总结。 &#xff08;1&#xff09;子项大小不一致的RecyclerView&#xff08;…

[iOS] 折叠 cell

目录 前言 1.原理 2.折叠 cell 的点击选中 3.折叠 cell 高度的变化 4.实现效果 5.总结 前言 折叠 cell 是在 3GShare 中写过的一个小控件&#xff0c;这篇博客是一个小小的总结。 1.原理 在这里的核心就是我们可以通过改变按钮的 tag 值来判断我们是否应该展开还是回收…

MySQL的组复制(MGR)高可用集群搭建

一、MySQL 组复制&#xff08;MGR&#xff09;核心概念 MySQL Group Replication&#xff08;简称 MGR&#xff09;是 MySQL 官方推出的 高可用&#xff08;HA&#xff09; 强一致性 解决方案&#xff0c;基于改进的 Paxos 协议实现&#xff0c;核心能力可概括为 3 点&#xf…

使用Shell脚本实现Linux系统资源监控邮件告警

前言 1. 问题背景与需求 2. Bash 脚本监控资源 3. Bash 脚本判断阈值 4. 配置 msmtp 发送邮件 4.1 安装 msmtp 4.2 创建配置文件 /etc/msmtprc 5. 发送邮件 5.1 给别人发邮件 6. 完整示例脚本 7. 测试方法 8. 常见问题解答 9. 总结 前言 在运维过程中&#xff0c…

设计整体 的 序分(三“释”)、正宗分(双“门”)和流通分(统一的通行表达式) 之3 “自明性”(腾讯元宝 之2)

Q&AQ11、可能还需要补充 魂轴、体轴 和 中心轴 并行 上升 的内容Q11.1、我刚才说“可能还需要补充 魂轴、体轴 和 中心轴 并行 上升 的内容” 是指的 我们今天前面讨论 得出的整体设计 的一个概念整体 的一个双螺旋上升结构中的三个轴。 您刚才是这样 理解的吗&#xff1f;…

使用Ansible自动化部署Hadoop集群(含源码)--环境准备

现在我们有5台虚拟机&#xff0c;已经配置好了主机名和网络我们的目标是通过Ansible实现自动化部署hadoop集群。在此之前&#xff0c;我们先编写一个shell脚本来配置hadoop集群的环境&#xff0c;包括安装软件、安装配置Ansible&#xff08;一个主节点四个工作节点&#xff09;…

C#海康车牌识别实战指南带源码

C#海康车牌识别实战指南带源码前言车牌识别技术在智能交通、停车场管理等领域有着广泛的应用。海康威视作为国内领先的安防厂商&#xff0c;其车牌识别相机提供了丰富的SDK接口供开发者使用。本文将详细介绍如何使用C#语言结合海康威视SDK实现车牌识别功能&#xff0c;并解析关…

智慧能源新范式:数字孪生平台如何驱动风电场的精细化管理?

摘要你有没有想过&#xff0c;一座风力发电场背后&#xff0c;藏着一个“看不见的孪生兄弟”&#xff1f;它能提前预知风机故障&#xff0c;实时模拟极端天气的影响&#xff0c;甚至能“训练”运维人员在虚拟场景中演练抢修。这就是数字孪生——一个让风电场从“靠经验管理”转…

STM32-FreeRTOS操作系统-任务管理

引言 随着嵌入式技术的飞速发展&#xff0c;STM32与FreeRTOS的融合愈发紧密。本文聚焦于STM32平台下FreeRTOS操作系统的任务管理&#xff0c;旨在为开发者提供清晰的思路与实用的技巧&#xff0c;助力高效开发。 为什么要进行任务管理&#xff1f; 在嵌入式系统中&#xff0c;…

工业领域 ACP 协议全解析:从入门到实战案例

工业领域 ACP 协议全解析&#xff1a;从入门到实战案例 文章目录工业领域 ACP 协议全解析&#xff1a;从入门到实战案例一、前言二、ACP 协议是什么&#xff1f;1. 基本定义2. 与数据传输协议的区别三、ACP 协议的核心功能1. 身份认证&#xff08;Authentication&#xff09;2.…