(二)、温度传感器

1、One-Wire总线

 One-Wire总线利用一根线实现双向通信。因此其协议对时序的要求较严格,如应答等时序都有明确的时间要求。基本的时序包括复位及应答时序、写一位时序读一位时序。单总线即只有一根数据线,系统中的数据交换、控制都由这根线完成。设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其他设备使用总线。由于它们是主从结构,只有主机呼叫从机时,从机才能应答,因此主机访问One-Wire器件都必须严格遵循单总线命令序列,即初始化、ROM命令、功能命令

对于蓝桥杯的同学,One-Wire协议官方会提供,不需要大家自己写。DS18B20的通信过程较为简单。图 五为蓝桥杯DS18B20原理图,DQ即用于通信的单总线,需要在函数开始定义该引脚sbit DQ = P1^4;

DS18B20的通信过程:初始化总线---写ROM指令(跳过ROM指令0xcc)---写RAM指令(开始温度转换0x44)---重新初始化---ROM指令(跳过ROM指令0xcc)---写RAM指令(开始温度读取0xbe)---接收数据(先低位再高位)---分析处理数据。(如图 六

                         图 五DS18B20原理图

                         图 六 DS18B20通信过程

 

2、代码解读(图 七)(数据处理分析)

数据处理: High<<8 高八位数据以二进制的形式左移八位就变成了unsigned int 类型数据,后八位数据全为0,此时用 | Low 运算符来获取后八位数据,则((High<<8)|Low)就是获取到了初步的温度数据,float(对象)就是强制转换括号中数据为float数据类型,但温度高五位是符号位(图 八),当这五个全是0时温度为正值,全为1则为负值。后四位是小数位,此时要*0.0625或者/16.0来获取到适合的温度区间,例如0000 0000 0000 0011表示十进制数据3,最后一位精度为0.0625,3*0.0625即为温度数据。

                     图 七 DS18B20代码解读

                     图 八 DS18B20数据存储位

 

附相关代码(注意蓝桥杯官方会给初始化、写入、读取等底层)

#include <STC15F2K60S2.H>
#include <INTRINS.h>sbit DQ = P1^4;void Delay_OneWire(unsigned int t)  
{unsigned char i;while(t--){for(i=0;i<12;i++);}
}//仿真用这个延时
//void Delay_OneWire(unsigned int t)  
//{
//	while(t--);
//}//
void Write_DS18B20(unsigned char dat)
{unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = dat&0x01;Delay_OneWire(5);DQ = 1;dat >>= 1;}Delay_OneWire(5);
}//
unsigned char Read_DS18B20(void)
{unsigned char i;unsigned char dat;for(i=0;i<8;i++){DQ = 0;dat >>= 1;DQ = 1;if(DQ){dat |= 0x80;}	    Delay_OneWire(5);}return dat;
}//
bit init_ds18b20(void)
{bit initflag = 0;DQ = 1;Delay_OneWire(12);DQ = 0;Delay_OneWire(80);DQ = 1;Delay_OneWire(10); initflag = DQ;     Delay_OneWire(5);return initflag;
}/*
DS18B20的通信过程:初始化总线写ROM指令(跳过ROM指令0xcc)写RAM指令(开始温度转换0x44)重新初始化ROM指令(跳过ROM指令0xcc)写RAM指令(开始温度读取0xbe)接收数据(先低位再高位)分析处理数据
*/float Temperature_Read(void)
{unsigned char Low,High;init_ds18b20();       //初始化总线Write_DS18B20(0xcc);  //跳过ROM指令Write_DS18B20(0x44);  //开始温度转换Delay_OneWire(200);init_ds18b20();       //重新初始化Write_DS18B20(0xcc);  //跳过ROM指令Write_DS18B20(0xbe);  //开始读取温度(低位优先)Low = Read_DS18B20();   //接收数据(先低位再高位)High = Read_DS18B20();return (float)((High<<8)|Low)/16.0;  //分析处理数据
}

 

 

 

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

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

相关文章

科技赋能成长 脑力启迪未来

——西安臻昊科技与秦岭云数智共筑脑科学教育新生态 2025年6月26日&#xff0c;西安臻昊科技&#xff08;集团&#xff09;有限责任公司与秦岭云数智&#xff08;陕西&#xff09;科技有限公司正式签署脑象评测技术战略合作协议&#xff0c;双方将依托技术互补与资源协同&#…

Docker部署的PostgreSQL慢查询日志配置指南

目录 1. 核心步骤 1.1 修改配置文件 1.2 动态加载配置&#xff08;无需重启容器&#xff09; 1.3 验证配置生效 1.3.1 查看参数 1.3.2 执行测试慢查询 2. 高级用法 2.1 使用分析工具 2.2 启用扩展 3. 注意事项 3.1 日志目录权限 3.2 性能影响 配置Docker部署的Pos…

C# 入门教程(四)委托详解

文章目录1、什么是委托2、委托的声明&#xff08;自定义委托&#xff09;3、委托的使用3.1 实例:把方法当作参数传给另一个方法3.2 注意:难精通易使用功能强大东西&#xff0c;一旦被滥用则后果非常严重4、委托的高级使用4.1 多播&#xff08;multicast&#xff09;委托4.2隐式…

React的基本语法和原理

3. React条件渲染某些情况下&#xff0c;姐妹的内容会根据不同的情况显示不同的内容&#xff0c;或者决定是否渲染某部分内容&#xff1a; 在React中&#xff0c;所有的条件判断和普通的JavaScript代码一致&#xff1b;常见的条件渲染的方式有哪些&#xff1f;方式一&#xff1…

如何在 Gradle 项目中添加依赖?(以添加 AndroidX 版本的 RecyclerView 为例)

1. 确保项目已启用 AndroidX RecyclerView 的现代版本属于 AndroidX 库&#xff0c;需确保项目已启用 AndroidX&#xff1a; 在 gradle.properties 中应有以下配置&#xff08;通常新建项目默认开启&#xff09;&#xff1a;android.useAndroidXtrue android.enableJetifiert…

深度学习与图像处理 | 基于PaddlePaddle的梯度下降算法实现(线性回归投资预测)

演示基于PaddlePaddle自动求导技术实现梯度下降&#xff0c;简化求解过程。01、梯度下降法梯度下降法是机器学习领域非常重要和具有代表性的算法&#xff0c;它通过迭代计算来逐步寻找目标函数极小值。既然是一种迭代计算方法&#xff0c;那么最重要的就是往哪个方向迭代&#…

负载均衡集群HAproxy

HAProxy 简介HAProxy 是一款高性能的负载均衡器和代理服务器&#xff0c;支持 TCP 和 HTTP 应用。广泛用于高可用性集群&#xff0c;能够有效分发流量到多个后端服务器&#xff0c;确保服务的稳定性和可扩展性。HAProxy 核心功能负载均衡&#xff1a;支持轮询&#xff08;round…

重生之我在10天内卷赢C++ - DAY 1

坐稳了&#xff0c;我们的C重生之旅现在正式发车&#xff01;请系好安全带&#xff0c;前方高能&#xff0c;但绝对有趣&#xff01;&#x1f680; 重生之我在10天内卷赢C - DAY 1导师寄语&#xff1a;嘿&#xff0c;未来的编程大神&#xff01;欢迎来到C的世界。我知道&#x…

[mind-elixir]Mind-Elixir 的交互增强:单击、双击与鼠标 Hover 功能实现

[mind-elixir]Mind-Elixir 的交互增强&#xff1a;单击、双击与鼠标 Hover 功能实现 功能简述 通过防抖&#xff0c;实现单击双击区分通过mousemove事件&#xff0c;实现hover效果 实现思路 &#xff08;一&#xff09;单击与双击事件 功能描述 单击节点时&#xff0c;可以触发…

c++-迭代器类别仿函数常用算法函数

C常用算法函数 1. 前置知识 1.1 迭代器的类别 C中&#xff0c;迭代器是 STL 容器库的核心组件之一&#xff0c;具有举足轻重的作用&#xff0c;它提供了一种 统一的方式来访问和遍历容器&#xff0c;而无需关心底层数据结构的具体实现。迭代器类似指针&#xff0c;但比指针更通…

Python深度学习框架TensorFlow与Keras的实践探索

基础概念与安装配置 TensorFlow核心架构解析 TensorFlow是由Google Brain团队开发的开源深度学习框架&#xff0c;其核心架构包含数据流图&#xff08;Data Flow Graph&#xff09;和张量计算系统。数据流图通过节点表示运算操作&#xff08;如卷积、激活函数&#xff09;&…

c# net6.0+ 安装中文智能提示

https://github.com/stratosblue/IntelliSenseLocalizer 1、安装tool dotnet tool install -g islocalizer 2、 安装IntelliSense 文件&#xff0c;安装其他net版本修改下版本号 安装中文net6.0采集包 islocalizer install auto -m net6.0 -l zh-cn 安装中英文双语net6.0采集包…

【建模与仿真】二阶邻居节点信息驱动的节点重要性排序算法

导读&#xff1a; 在复杂网络中&#xff0c;挖掘重要节点对精准推荐、交通管控、谣言控制和疾病遏制等应用至关重要。为此&#xff0c;本文提出一种局部信息驱动的节点重要性排序算法Leaky Noisy Integrate-and-Fire (LNIF)。该算法通过获取节点的二阶邻居信息计算节点重要性&…

指令微调Qwen3实现文本分类任务

参考文档&#xff1a; SwanLab入门深度学习&#xff1a;Qwen3大模型指令微调 - 肖祥 - 博客园 vLLM&#xff1a;让大语言模型推理更高效的新一代引擎 —— 原理详解一_vllm 原理-CSDN博客 概述 为了实现对100个标签的多标签文本分类任务&#xff0c;前期调用gpt-4o进行prom…

【机器学习-3】 | 决策树与鸢尾花分类实践篇

0 序言 本文将深入探讨决策树算法&#xff0c;先回顾下前边的知识&#xff0c;从其基本概念、构建过程讲起&#xff0c;带你理解信息熵、信息增益等核心要点。 接着在引入新知识点&#xff0c;介绍Scikit - learn 库中决策树的实现与应用&#xff0c;再通过一个具体项目的方式来…

【数字投影】折幕影院都是沉浸式吗?

折幕影院作为一种现代化的展示形式&#xff0c;其核心特点在于通过多块屏幕拼接和投影融合技术&#xff0c;打造更具包围感的视觉体验。折幕影院设计通常采用多折幕结构&#xff0c;如三折幕、五折幕等&#xff0c;利用多台投影机的协同工作&#xff0c;呈现无缝衔接的超大画面…

数据结构——图(三、图的 广度/深度 优先搜索)

一、广度优先搜索(BFS)①找到与一个顶点相邻的所有顶点 ②标记哪些顶点被访问过 ③需要一个辅助队列#define MaxVertexNum 100 bool visited[MaxVertexNum]; //访问标记数组 void BFSTraverse(Graph G){ //对图进行广度优先遍历&#xff0c;处理非连通图的函数 for(int i0;i…

直击WAIC | 百度袁佛玉:加速具身智能技术及产品研发,助力场景应用多样化落地

7月26日&#xff0c;2025世界人工智能大会暨人工智能全球治理高级别会议&#xff08;WAIC&#xff09;在上海开幕。同期&#xff0c;由国家地方共建人形机器人创新中心&#xff08;以下简称“国地中心”&#xff09;与中国电子学会联合承办&#xff0c;百度智能云、中国联通上海…

2025年人形机器人动捕技术研讨会将在本周四召开

2025年7月31日爱迪斯通所主办的【2025人形机器动作捕捉技术研讨会】是携手北京天树探界公司线下活动结合线上直播的形式&#xff0c;会议将聚焦在“动作捕捉软硬件协同&#xff0c;加速人形机器人训练”&#xff0c;将深度讲解多项核心技术&#xff0c;包含全球知名的惯性动捕大…

Apple基础(Xcode①-项目结构解析)

要运行设备之前先选择好设备Product---->Destination---->选择设备首次运行手机提示如出现 “未受信任的企业级开发者” → 手机打开 设置 ▸ 通用 ▸ VPN与设备管理 → 信任你的 Apple ID 即可ContentView 是 SwiftUI 项目里 最顶层、最主界面 的那个“页面”&#xff0…