蓝桥杯单片机基础部分——5、DS18B20温度传感器

前言

好久没有更新关于蓝桥杯单片机相关的模块了,今天更新一下数字温度传感器DS18B20的相关应用

单线数字温度计DS1820介绍

DS1820数字温度计提供9位(二进制)温度读数,指示器件的温度。信息经过单线接口送入DS1820 或从 DS1820 送出,因此从主机CPU到DSl820仅需一条线(和地线) 。DS1820的电源可以由数据线本身提供而不需要外部电源。因为每一个DS1820在出厂时已经给定了唯一的序号,因此任意多个DS1820可以存放在同一条单线总线上,这允许在许多不同的地方放置温度敏感器件。DS1820的测量范围从-55℃ 到+125℃ ,增量值为0.5℃ 。

DSl820中用于贮存测得的温度值的两个8位存贮器RAM,编号为0号和1号。1 号存贮器存放温度值的符号,如果温度为负(℃ )则1号存贮器8位全为1,否则全为0。0号存贮器用于存放温度值的补码 LSB(最低位)的 “1”表示 0.5 将存贮器中的二进制数求补再转换成十进制数并除以2就得到被测温度值(-55℃~125℃ ) 。
每只D51820都可以设置成两种供电方式,即数据总线供电方式和外部供电方式,采取数据总线供电方式可以节省一根导线,但完成温度测量的时间较长,采取外部供电方式则多用一根导线,但测量速度较快 。
在这里插入图片描述
在这里插入图片描述

温度计算

DS18B20用12位存贮温值度,最高位为符号位,下图为18b20的温度存储方式 负温度S=1,正温度S=0,如
0550H 为+85℃ ,0191H 为 25.0625℃ ,FC90H为-55℃
在这里插入图片描述

DSl820工作过程及时序

DSl820 工作过程中的协议如下

1、初始化
单总线上的所有处理均从初始化开始
2、ROM操作品令
总线主机检测到DS18B20的存在 便可以发出ROM操作命令之一
在这里插入图片描述

3、存储器操作命令
在这里插入图片描述
4、时序
主机使用时间隙来读写DS18B20的数据位和写命令字的位
(1)初始化
主机总线to时刻发送一复位脉冲(最短为480us的低电平信号), 接着在t1时刻释放总线并进入接收状态,DSl820在检测到总线的上升沿之后,等待15-60us,接DS18B20在t2时刻发出存在脉冲(低电平 持续60-240 us),如图中虚线所示
在这里插入图片描述

(2)写时间隙
当主机总线t o时刻从高拉至低电平时,就产生写时间隙,从to时刻开始15us之内应将所需写的位送到总线上,DS18B20在t。后15-60us间对总线采样,若低电平 写入的位是0,若高电平,写入的位是1,连续写2位间的间隙应大于1us
在这里插入图片描述
(3)读时间隙
主机总线to时刻从高拉至低电平时,总线只须保持低电平1 7ts。之后在t1时刻将总线拉高,产生读时间隙,读时间隙在t1时刻后t 2时刻前有效。t2距t0为15us 也就是说:t2时刻前主机必须完成读位,并在t0后的60us一120us内释放总线,读位子程序
在这里插入图片描述

代码

又臭又长的介绍,总不如代码来的实惠,直接上代码

onewire.c

#include "onewire.h"

//单总线延时函数
void Delay_OneWire(unsigned int t)
{
  while(t--);
}

//DS18B20芯片初始化
bit Init_DS18B20(void)
{
	bit initflag = 0;
	DQ = 1;
	Delay_OneWire(120);
	DQ = 0;
	Delay_OneWire(800); 
	DQ = 1;
	Delay_OneWire(100); 
	initflag = DQ;    
	Delay_OneWire(50);
  
	return initflag;
}

//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		DQ = 0;
		DQ = dat&0x01;
		Delay_OneWire(50);
		DQ = 1;
		dat >>= 1;
	}
	Delay_OneWire(50);
}

//从DS18B20读取一个字节
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(50);
	}
	return dat;
}

onewire.h

#ifndef _ONEWIRE_H
#define _ONEWIRE_H

#include <REGX52.H>



#define OW_SKIP_ROM 0xcc
#define DS18B20_CONVERT 0x44
#define DS18B20_READ 0xbe

//IC引脚定义
sbit DQ = P1^4;

//函数声明
void Delay_OneWire(unsigned int t);
void Write_DS18B20(unsigned char dat);
bit Init_DS18B20(void);
unsigned char Read_DS18B20(void);

#endif

实际使用部分代码

unsigned int ds18b20()
{
	unsigned int LSB,MSB;
	unsigned int temp = 0;
	Init_DS18B20();
	Write_DS18B20(0xcc);//跳过读序号列号的操作
	Write_DS18B20(0x44);//启动温度转换
	
	Init_DS18B20();
	Write_DS18B20(0xcc);//跳过读序号列号的操作
	Write_DS18B20(0xbe);//读取温度寄存器
	LSB = Read_DS18B20();//读低8位
	MSB = Read_DS18B20();//读高8位
	temp = MSB;
	temp = (temp<<8) |LSB;
	temp *= 0.0625;
	return temp;
}

本人水平有限,所有代码都是自己的风格书写,但是大致的应该是没有什么问题,希望对大家有帮助如果有哪里出错或者有更好的解法可以与我私信或在评论区里进行讨论

上一节:蓝桥杯单片机基础部分——4、DS1302时钟

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫入门(实践)

python爬虫入门&#xff08;实践&#xff09; 一、对目标网站进行分析 二、博客爬取 获取博客所有h2标题的路由 确定目标&#xff0c;查看源码 代码实现 """ 获取博客所有h2标题的路由 """url "http://www.crazyant.net"import re…

nginx 配置代理,根据 不同的请求头进行转发至不同的代理

解决场景&#xff1a;下载发票的版式文件&#xff0c;第三方返回的是url链接地址&#xff0c;但是服务是部署在内网环境&#xff0c;无法访问互联网进行下载。此时需要进行走反向代理出去&#xff0c;如果按照已有套路&#xff0c;就是根据不同的访问前缀&#xff0c;跳转不同的…

EI Scopus双检索 | 2025年第四届信息与通信工程国际会议(JCICE 2025)

会议简介 Brief Introduction 2025年第四届信息与通信工程国际会议(JCICE 2025) 会议时间&#xff1a;2025年7月25日-27日 召开地点&#xff1a;中国哈尔滨 大会官网&#xff1a;www.jcice.org 由黑龙江大学和成都信息工程大学主办&#xff0c;江苏科技大学协办的2025年第四届信…

软考高级5个资格、中级常考4个资格简介及难易程度排序

一、软考高级5个资格 01、网络规划设计师 资格简介&#xff1a;网络规划设计师要求考生具备全面的网络规划、设计、部署和管理能力&#xff1b;该资格考试适合那些在网络规划和设计方面具有较好理论基础和较丰富从业经验的人员参加。 02、系统分析师 资格简介&#xff1a;系统分…

STM32 FreeRTOS 任务挂起和恢复---实验

实验目标 学会vTaskSuspend( )、vTaskResume( ) 任务挂起与恢复相关API函数使用&#xff1a; start_task:用来创建其他的三个任务。 task1&#xff1a;实现LED1每500ms闪烁一次。 task2&#xff1a;实现LED2每500ms闪烁一次。 task3&#xff1a;判断按键按下逻辑&#xff0c;KE…

YOLO系列代码

Test-Time Augmentation TTA (Test Time Augmentation)是指在test过程中进行数据增强。其思想非常简单&#xff0c;就是在评测阶段&#xff0c;给每个输入进行多种数据增广变换&#xff0c;将一个输入变成多个输入&#xff0c;然后再merge起来一起输出&#xff0c;形成一种ens…

《自动驾驶与机器人中的SLAM技术》ch4:基于预积分和图优化的 GINS

前言&#xff1a;预积分图优化的结构 1 预积分的图优化顶点 这里使用 《自动驾驶与机器人中的SLAM技术》ch4&#xff1a;预积分学 中提到的散装的形式来实现预积分的顶点部分&#xff0c;所以每个状态被分为位姿&#xff08;&#xff09;、速度、陀螺零偏、加计零偏四种顶点&am…

docker 部署confluence

1.安装docker的过程就不说了。 2.下载镜像。 docker pull cptactionhank/atlassian-confluence:7.4.0 docker images 3.下载pojie 包。 https://download.csdn.net/download/liudongyang123/90285042https://download.csdn.net/download/liudongyang123/90285042https://do…

前端实习第二个月小结

时间飞快&#xff0c;第一次实习已经过去两个多月&#xff0c;作一些简单的总结和分享。 注&#xff1a;文章整体会比较轻松&#xff0c;提及的经历、经验仅作参考。 一、关于实习/工作内容 1、工作内容 近期做的是管理后台方面的业务&#xff0c;技术栈&#xff1a;前端re…

搭建一个基于Spring Boot的书籍学习平台

搭建一个基于Spring Boot的书籍学习平台可以涵盖多个功能模块&#xff0c;例如用户管理、书籍管理、学习进度跟踪、笔记管理、评论和评分等。以下是一个简化的步骤指南&#xff0c;帮助你快速搭建一个基础的书籍学习平台。 — 1. 项目初始化 使用 Spring Initializr 生成一个…

dl学习笔记:(4)简单神经网络

&#xff08;1&#xff09;单层正向回归网络 bx1x2z100-0.2110-0.05101-0.051110.1 接下来我们用代码实现这组线性回归数据 import torch x torch.tensor([[1,0,0],[1,1,0],[1,0,1],[1,1,1]], dtype torch.float32) z torch.tensor([-0.2, -0.05, -0.05, 0.1]) w torch.…

OpenHarmony-7.IDL工具

IDL 工具 1.openharmony IDL工具 在OpenHarmony中&#xff0c;当应用/系统服务的客户端和服务端进行IPC&#xff08;Inter-Process Communication&#xff09;跨线程通信时&#xff0c;需要定义双方都认可的接口&#xff0c;以保障双方可以成功通信&#xff0c;OpenHarmony ID…

openssl s_server源码剥离

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

前端小案例——网页井字棋

前言&#xff1a;我们在学习完了HTML、CSS和JavaScript之后&#xff0c;就会想着使用这三个东西去做一些小案例&#xff0c;不过又没有什么好的案例让我们去练手&#xff0c;本篇文章就提供里一个案例——网页井字棋。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可…

Leetcode 983. 最低票价 动态规划

原题链接&#xff1a;Leetcode 983. 最低票价 class Solution { public:int mincostTickets(vector<int>& days, vector<int>& costs) {int n days.size();int last days[n - 1];int dp[last 1];map<int, int> mp;for (auto x : days)mp[x] 1;dp…

Java中的 锁现象演示和原理解释 多线程操作资源类 八种案例 同步方法 静态方法 对象锁 类锁

目录 面试题 案例 1 标准访问有 ab 两个线程 案例 2 其中一个同步方法暂停 3 秒 案例 3 新增普通方法 案例 4 创建两个对象 案例 5 两个静态同步方法 一个对象 案例 6 两个静态同步方法 两个对象 案例 7 一个静态同步方法 一个普通同步方法 一个对象 案例 8 一个静态同…

HTML应用指南:利用GET请求获取全国特斯拉充电桩位置

随着电动汽车的普及&#xff0c;充电基础设施的建设变得至关重要。作为电动汽车领域的先驱&#xff0c;特斯拉不仅在车辆技术创新上持续领先&#xff0c;还积极构建广泛的充电网络&#xff0c;以支持其不断增长的用户群体。为了提升用户体验和服务质量&#xff0c;开发人员和数…

cuda + cudnn安装

1.安装CUDA Toolkit 在设备管理器&#xff08;此电脑–右键–属性&#xff09;的显示适配器中可以查看自己的显卡型号&#xff0c;去下载对应的CUDA Toolkit 。或者输入以下命令查看Driver Version &#xff0c;cuda Version&#xff1a;12.2代表12.2版本以下兼容可以进行安装 …

【k8s面试题2025】1、练气期

主要通过呼吸吐纳等方法&#xff0c;将外界的天地灵气吸入体内&#xff0c;初步改造身体&#xff0c;使身体素质远超常人。 文章目录 docker 和虚拟机的不同Kubernetes 和 docker 的关系Kube-proxy IPVS 和 iptables 的异同蓝绿发布Kubernetes中常见的数据持久化方式关于 Docke…

vue | 插值表达式

Vue 是一个用于 构建用户界面 的 渐进式 框架 1. 构建用户界面&#xff1a;基于 数据 动态 渲染 页面 2. 渐进式&#xff1a;循序渐进的学习 3. 框架&#xff1a;一套完整的项目解决方案&#xff0c;提升开发效率↑ (理解记忆规则) 插值表达式&#xff1a; 插值表达式是一种 Vu…