当前位置: 首页 > news >正文

单片机学习(14)--DS18B20温度传感器

DS18B20温度传感器

  • 13.1DS18B20温度传感器基础知识
    • 1.DS18B20介绍
    • 2.引脚及应用电路
    • 3.内部结构框图
    • 4.存储器框图
    • 5.单总线介绍
    • 6.单总线电路规范
    • 7.单总线时序结构
    • 8.DS18B20操作流程
    • 9.DS18B20数据帧
  • 13.2DS18B20温度读取和温度报警器代码
    • 1.DS18B20温度读取
      • (1)工程目录
      • (2)main.c函数
      • (3)DS18B20.c函数
      • (4)OneWire.c函数
    • 2.DS18B20温度报警器
      • (1)工程目录
      • (2)main.c函数

13.1DS18B20温度传感器基础知识

1.DS18B20介绍

DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点
测温范围:-55°℃到+125°℃
通信接口:1-Wire(单总线)·其它特征:可形成总线结构、内置温度报警功能、可寄生供电
在这里插入图片描述

2.引脚及应用电路

在这里插入图片描述

3.内部结构框图

在这里插入图片描述
64-BITROM:作为器件地址,用于总线通信的寻址
SCRATCHPAD(暂存器):用于总线的数据交互
EEPROM:用于保存温度触发阈值和配置参数

4.存储器框图

在这里插入图片描述

5.单总线介绍

单总线(1-WireBUS)是由Dallas公司开发的一种通用数据总线
一根通信线**:DQ**
异步、半双工
单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线

6.单总线电路规范

设备的DO均要配置成开漏输出模式
DO添加一个上拉电阻,阻值一般为4.7K左右
若此总线的从机采取寄生供电,则主机还应配一个强上拉输出电路
在这里插入图片描述

7.单总线时序结构

初始化:主机将总线拉低至少480us.然后释放总线,等待15-60us后,存在的从机会拉低总线60~240us以响应主机,之后从机将释放总线
在这里插入图片描述发送一位:主机将总线拉低60120us.然后释放总线,表示发送0;主机将总线拉低115us.然后释放总线,表示发送1。从机将在总线拉低30us后(典型值)读取电平,整个时间片应大于60us
在这里插入图片描述
发送一位:主机将总线拉低60120us.然后释放总线,表示发送0;主机将总线拉低115us.然后释放总线,表示发送1。从机将在总线拉低30us后(典型值)读取电平,整个时间片应大于60us
在这里插入图片描述
在这里插入图片描述

8.DS18B20操作流程

初始化:从机复位,主机判断从机是否响应
ROM操作:ROM指令+本指令需要的读写操作
功能操作:功能指令+本指令需要的读写操作

在这里插入图片描述

9.DS18B20数据帧

在这里插入图片描述

13.2DS18B20温度读取和温度报警器代码

1.DS18B20温度读取

(1)工程目录

在这里插入图片描述

(2)main.c函数

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "DS18B20.h"float T;void main()
{LCD_Init();LCD_ShowString(1,1,"Temperature:");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_ShowChar(2,5,'.');LCD_ShowNum(2,6,(unsigned long)(T*10000)%10000,4);}
}

(3)DS18B20.c函数

#include <REGX52.H>
#include "OneWire.h"#define DS18B20_SKIP_ROM  0xCC
#define DS18B20_CONVERT_T 0x44
#define DS18B20_READ_SCRATCHPAD 0xBEvoid DS18B20_ConvertT(void)
{OneWire_Init();OneWire_SendByte(DS18B20_SKIP_ROM);OneWire_SendByte(DS18B20_CONVERT_T);
}float DS18B20_ReadT(void)
{unsigned char TLSB,TMSB;int Temp;float T;OneWire_Init();OneWire_SendByte(DS18B20_SKIP_ROM);OneWire_SendByte(DS18B20_READ_SCRATCHPAD);TLSB=OneWire_ReceiveByte();TMSB=OneWire_ReceiveByte();Temp=(TMSB<<8)|TLSB;T=Temp/16.0;return T;
}

(4)OneWire.c函数

#include <REGX52.H>
sbit OneWire_DQ=P3^7;unsigned char OneWire_Init(void)
{unsigned char  i;unsigned char AckBit;OneWire_DQ=1;OneWire_DQ=0;i = 227;while (--i);//Delay 500usOneWire_DQ=1;i = 29;while (--i);//Delay 70usAckBit=OneWire_DQ;i = 227;while (--i);//Delay 500usreturn AckBit;
}void OneWire_SendBit(unsigned char Bit)
{unsigned char i;OneWire_DQ=0;i = 3;while (--i);//Delay 10usOneWire_DQ=Bit;i = 22;while (--i);//Delay 50usOneWire_DQ=1;
}unsigned char OneWire_ReceiveBit(void)
{unsigned char i;unsigned char Bit;OneWire_DQ=0;i = 1;while (--i);//Delay 5usOneWire_DQ=1;i = 1;while (--i);//Delay 5us	Bit=OneWire_DQ;i = 22;while (--i);//Delay 50us	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(void)
{unsigned char i;unsigned char Byte=0x00;for(i=0;i<8;i++){if(OneWire_ReceiveBit()){Byte|=(0x01<<i);}}return Byte;
}

2.DS18B20温度报警器

(1)工程目录

在这里插入图片描述

(2)main.c函数

#include <REGX52.H>
#include "DS18B20.h"
#include "AT24C02.h"
#include "LCD1602.h"
#include "Key.h"
#include "Delay.h"float T,TShow;
char TLow,THigh;
unsigned char KeyNum;
void main()
{DS18B20_ConvertT();Delay(1000);THigh=AT24C02_ReadByte(0);TLow=AT24C02_ReadByte(1);if(THigh>125||TLow<-55||THigh<=TLow){THigh=20;TLow=15;}LCD_Init();LCD_ShowString(1,1,"T:");LCD_ShowString(2,1,"TH:");LCD_ShowString(2,9,"TL:");LCD_ShowSignedNum(2,4,THigh,3);LCD_ShowSignedNum(2,12,TLow,3);while(1){KeyNum=Key();/*温度读取及显示*/DS18B20_ConvertT();T=DS18B20_ReadT();if(T<0){LCD_ShowChar(1,3,'-');TShow=-T;}else{LCD_ShowChar(1,3,'+');TShow=T;}LCD_ShowNum(1,4,TShow,3);LCD_ShowChar(1,7,'.');LCD_ShowNum(1,8,(unsigned char)(TShow*100)%100,2);/*阈值判断及显示*/if(KeyNum){if(KeyNum==1){THigh++;if(THigh>125){THigh=125;}}if(KeyNum==2){THigh--;if(THigh<=TLow){THigh++;}}if(KeyNum==3){TLow++;if(TLow>=THigh){TLow--;}}if(KeyNum==4){TLow--;if(THigh<-55){TLow=-55;}}LCD_ShowSignedNum(2,4,THigh,3);LCD_ShowSignedNum(2,12,TLow,3);AT24C02_WriteByte(0,THigh);Delay(5);AT24C02_WriteByte(0,TLow);Delay(5);}if(T>THigh){LCD_ShowString(1,13,"OV:H");}else if(T<TLow){LCD_ShowString(1,13,"OV:L");}else{LCD_ShowString(1,13,"    ");}}
}

只能先敲出程序,慢慢理解了

相关文章:

单片机学习(14)--DS18B20温度传感器

DS18B20温度传感器 13.1DS18B20温度传感器基础知识1.DS18B20介绍2.引脚及应用电路3.内部结构框图4.存储器框图5.单总线介绍6.单总线电路规范7.单总线时序结构8.DS18B20操作流程9.DS18B20数据帧 13.2DS18B20温度读取和温度报警器代码1.DS18B20温度读取&#xff08;1&#xff09;…...

ue 材质贴图Tiling repeat

材质问题&#xff0c;如下 贴图显然不符合逻辑&#xff0c;太大&#xff0c;并且是一次性贴图 换一个红砖纹理&#xff0c;就看清了&#xff0c;砖太大了 修改&#xff1a; 拖出一个TexCoord&#xff0c;代表坐标&#xff0c;拖出一个参数&#xff0c;代表次数&#xff0c;如…...

【图像超分辨率】一个简单的总结

文章目录 图像超分辨率(Image Super-Resolution, ISR)1 什么是图像超分辨率&#xff1f;2 图像超分辨率通常有哪些方法&#xff1f;&#xff08;1&#xff09;基于插值的方法&#xff08;2&#xff09;基于重建的方法&#xff08;3&#xff09;基于学习的方法&#xff08;LR im…...

WEB与低代码:B/S架构在开发中的应用与优势

在互联网迅猛发展的今天&#xff0c;WEB应用已经成为人们日常生活和工作中不可或缺的一部分。随着技术的进步和需求的多样化&#xff0c;开发高效、灵活且易于维护的WEB应用变得尤为重要。B/S架构&#xff08;Browser/Server Architecture&#xff09;作为一种常见的WEB应用架构…...

内容营销专家刘鑫炜揭秘:姜萍一夜暴红背后的品牌传播密码

在互联网的浪潮下&#xff0c;品牌传播的方式愈发多样和复杂。近日&#xff0c;江苏省涟水中等专业学校的十七岁中专生姜萍因在世界级数学竞赛中取得优异成绩而一夜暴红&#xff0c;成为网络上的热议焦点。 在这个充满变数的时代&#xff0c;谁也无法预测下一个网红会是谁。然…...

安装VEX外部编辑器

Houdini20配置VEX外部编辑器方法_哔哩哔哩_bilibili 下载并安装Visual Studio Code软件&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 在Visual Studio Code软件内&#xff0c;安装相关插件&#xff0c;如&#xff1a; 中文汉化插件vex插件 安装Houdini Expr…...

ISO 19110全局要求类/req/global/bound-association-role要求的详细解释

/req/global/bound-association-role 要求: 如果模型允许在一个关联角色&#xff08;association role&#xff09;中存在“rolePlayer”关联&#xff0c;并且该角色属于一个“globalProperty”角色&#xff0c;那么这种绑定必须通过一个绑定的关联角色实体&#xff08;bound …...

武汉凯迪正大等简述电缆电容检测:原理、应用与重要性

为了确保电缆的安全稳定运行评估电缆绝缘质量以及检测潜在故障&#xff0c;需要对电缆做一些必要的检测。本文将依照凯迪正大的一些经验对电缆电容检测的原理、应用及其重要性进行简单的序述。 一、电缆电容检测的原理 电缆电容检测基于电容的基本特性&#xff0c;电容是指两个…...

python调用阿里云OSS对象存储

1)安装SDK import oss2 print(oss2.__version__) 如果能返回SDK版号,则安装成功 2)配置访问凭证 import oss2 from project1 import settings #以下参数在阿里云账号中可以查到 auth=oss2.Auth(settings.ACCESS_KEY_ID, settings.ACCESS_KEY_SECRET) endpoint=settings.E…...

530、二叉搜索树的最小绝对差

给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 代码如下&#xff1a; class Solution { private: int result INT_MAX; TreeNode* pre NULL; void traversal(TreeNode…...

docker配置redis主从复制

下载redis,复制redis.conf 主节点(6379) 修改redis.conf # bind 127.0.0.1 # 注释掉这里 protected-mode no # 改为no port 6379从节点(6380) 修改redis.conf bind 127.0.0.1 protected-mode no # 改为no port 6380 replicaof 172.17.0.2 6379 # 这里的ip为主节点容器的i…...

IPython调试秘籍:pdb调试器深度解析与实战

&#x1f41e; IPython调试秘籍&#xff1a;pdb调试器深度解析与实战 在Python编程中&#xff0c;调试是开发过程中不可或缺的一环。IPython&#xff0c;作为一个强大的交互式Python解释器&#xff0c;内置了pdb调试器&#xff0c;使得代码调试变得异常便捷。本文将深入探讨如…...

MySQL 死锁处理

查询是否锁表 SHOW OPEN TABLES WHERE In_use > 0; 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 查看进程信息 SHOW PROCESSLIST; 或者 SELECT * FROM INFORMATION_SCHE…...

scatterlist的相关概念与实例分析

概念 scatterlist scatterlist用来描述一块内存&#xff0c;sg_table一般用于将物理不同大小的物理内存链接起来&#xff0c;一次性送给DMA控制器搬运 struct scatterlist {unsigned long page_link; //指示该内存块所在的页面unsigned int offset; //指示该内存块在页面中的…...

leetCode.97. 交错字符串

leetCode.97. 交错字符串 题目思路 代码 class Solution { public:bool isInterleave(string s1, string s2, string s3) {int n s1.size(), m s2.size();if ( s3.size() ! n m ) return false;vector<vector<bool>> f( n 1, vector<bool> (m 1));s1 …...

算力时代,算能(SOPHGO)的算力芯片/智算板卡/服务器选型

数字经济时代&#xff0c;算力成为支撑经济社会发展新的关键生产力&#xff0c;全球主要经济体都在加快推进算力战略布局。随着大模型持续选代&#xff0c;模型能力不断增强&#xff0c;带来算力需求持续增长。算力对数字经济和GDP的提高有显著的带动作用&#xff0c;根据IDC、…...

ManageEngine连续荣登Gartner 2024年安全信息和事件管理魔力象限

我们很高兴地宣布&#xff0c;ManageEngine再次在Gartner的安全信息和事件管理&#xff08;SIEM&#xff09;魔力象限中榜上有名&#xff0c;这是我们连续第七年获得这一认可。 Gartner ManageEngine Log360是一款全面的SIEM解决方案&#xff0c;旨在帮助组织有效处理日志数据…...

51单片机第11步_在C语言中插入汇编语言

本章重点介绍如何在C语言中插入汇编语言。要不是有记录&#xff0c;真不知道怎么搞。 /* 你在 Project Workspace窗口中,将光标移到DELAY.c处,点下鼠标右键,选择"Options for file DELAY.c", 点击右边的"Generate Assembler SRC File"和“Assemble SRC …...

【Qt+opencv】图片与视频的操作

文章目录 前言图片的操作图片的读取图片的写入示例代码 视频的操作打开视频关闭视频 总结 前言 在现代计算机视觉应用中&#xff0c;图像和视频处理起着至关重要的作用。这些应用范围广泛&#xff0c;包括图像识别、物体跟踪、3D建模等。为了实现这些功能&#xff0c;我们需要…...

Kubernetes面试整理-PersistentVolumes和PersistentVolumeClaims的使用和配置

在 Kubernetes 中,PersistentVolumes (PV) 和 PersistentVolumeClaims (PVC) 提供了一种分离存储和使用存储的机制。PV 是集群中存储资源的抽象表示,而 PVC 是用户对存储资源的请求。通过这种机制,用户可以动态地申请和管理存储资源。 PersistentVolumes (PV) PersistentVol…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...