蓝桥杯单片机快速开发笔记——DS18B20温度传感器

news2025/1/11 9:52:49

一、原理分析

        考试时可能会需要自己编写底层驱动的.h文件,编写.h的关键是会查原理图把DQ定义好。

sbit DQ = P1^4;  

二、应用 

  1. 温度监控:DS18B20广泛应用于温度监控系统中,如室内温度监测、工业生产过程中的温度控制等。

  2. 环境监测:DS18B20可用于环境监测系统,如温室温度监测、气象站温度采集等。

  3. 智能家居:在智能家居系统中,DS18B20可用于室内温度控制、智能恒温器等设备。

  4. 电子设备:DS18B20也可应用于电子设备中,如电脑散热系统的温度监测、电池温度监测等。

  5. 医疗设备:在医疗设备中,DS18B20可用于体温监测、恒温器控制等应用。

三、思维导图

四、示例框架

#include "ds18b20.h"
#include "reg52.h"
#include "onewire.h"

float temp_ds18b20 = 0;
extern unsigned int smg_ds18b20;   //数码管显示温度值

//初始化DS18B20的温度,避免在上电的时候,读取温度默认值85,作为当前的采样温度
void Init_DS18B20_Temp()  
{
	unsigned char LSB,MSB;
	
	init_ds18b20();                   //初始化DS18B20
	Write_DS18B20(0xcc);              //忽略ROM操作
	Write_DS18B20(0x44);              //启动温度转换
	
	do{
		init_ds18b20();                 //初始化DS18B20
	  Write_DS18B20(0xcc);            //忽略ROM操作
		Write_DS18B20(0xbe);            //读出内部存储器
		LSB = Read_DS18B20();           //第0字节:温度低8位
		MSB = Read_DS18B20();           //第1字节,温度高8位
		MSB = (MSB << 4) | (LSB >> 4);  //将高8位数据左移4位,然后与低8位数据右移4位后的结果进行或运算,得到完整的16位温度数据。
	}while(MSB == 85);                //直到首次温度转换完成

}

//DS18B20的温度读出
void Read_DS18B20_Temp()  
{
	unsigned char LSB,MSB;
	unsigned int temp = 0;
	
	init_ds18b20();                   //初始化DS18B20
	Write_DS18B20(0xcc);              //忽略ROM操作
	Write_DS18B20(0x44);              //启动温度转换
	DisplaySMG_Info();
	
	init_ds18b20();                   //初始化DS18B20
	DisplaySMG_Info();
	Write_DS18B20(0xcc);            //忽略ROM操作
	Write_DS18B20(0xbe);            //读出内部存储器
	LSB = Read_DS18B20();           //第0字节:温度低8位
	MSB = Read_DS18B20();           //第1字节,温度高8位
	temp = MSB;
	temp = (temp << 8) | LSB;       //合成16位温度原始数据
	
	if((temp & 0xf800) == 0x0000)   //处理正温度
	{
		temp_ds18b20 = temp * 0.0625; //计算实际温度值
	}
	smg_ds18b20 = temp_ds18b20 * 10;//将小数转换成整数方便后续显示
}

        这段代码主要实现了DS18B20温度传感器的初始化、温度读取和显示功能。通过单总线通信协议与DS18B20传感器通信,获取温度数据并进行处理

  1. #include "ds18b20.h"#include "reg52.h"#include "onewire.h":包含了三个头文件,分别是DS18B20传感器的头文件、STC单片机的头文件和单总线通信的头文件。

  2. float temp_ds18b20 = 0;extern unsigned int smg_ds18b20;:定义了一个浮点型变量temp_ds18b20用于存储DS18B20的温度值,以及一个外部声明的无符号整型变量smg_ds18b20用于在数码管上显示温度值。

  3. void Init_DS18B20_Temp():定义了一个无返回值的函数Init_DS18B20_Temp(),用于初始化DS18B20的温度,避免在上电时读取默认温度值85。

  4. unsigned char LSB, MSB;:定义了两个无符号字符型变量LSB和MSB,用于存储DS18B20传感器读取的温度数据的低8位和高8位。

  5. init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0x44);:初始化DS18B20传感器,忽略ROM操作,启动温度转换。

  6. do { ... } while (MSB == 85);:使用do-while循环,读取DS18B20传感器的温度数据,直到首次温度转换完成(MSB不等于85)。

  7. void Read_DS18B20_Temp():定义了一个无返回值的函数Read_DS18B20_Temp(),用于读取DS18B20传感器的温度数据并显示在数码管上。

  8. unsigned int temp = 0;:定义了一个无符号整型变量temp,用于存储DS18B20传感器读取的温度数据。

  9. DisplaySMG_Info();:显示数码管信息。

  10. temp = (temp << 8) | LSB;:将高8位数据左移8位,然后与低8位数据进行或运算,得到完整的16位温度数据。

  11. if ((temp & 0xf800) == 0x0000):判断温度数据的符号位,处理正温度。

  12. temp_ds18b20 = temp * 0.0625;:计算实际温度值,乘以0.0625得到实际温度值。

  13. smg_ds18b20 = temp_ds18b20 * 10;:将实际温度值乘以10,转换为整数方便后续显示在数码管上。

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

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

相关文章

怎样提升小程序日活?签到抽奖可行吗?

一、 日活运营策略 小程序应该是即用即走的&#xff0c;每个小程序都在用户中有自己的独特定位&#xff0c;可能是生活日常必备&#xff08;美食、团购、商城&#xff09;&#xff0c;也可能是工作办公必备&#xff08;文档、打卡、工具&#xff09;。 如果你想要让自己的小程…

白话transformer(三):Q K V矩阵代码演示

在前面文章讲解了QKV矩阵的原理&#xff0c;属于比较主观的解释&#xff0c;下面用简单的代码再过一遍加深下印象。 B站视频 白话transformer&#xff08;三&#xff09; 1、生成数据 我们呢就使用一个句子来做一个测试&#xff0c; text1 "我喜欢的水果是橙子和苹果&…

WPF布局、控件与样式

视频来源&#xff1a;https://www.bilibili.com/video/BV1HC4y1b76v/ 布局 常用布局属性 HorizontalAlignment&#xff1a;用于设置元素的水平位置VerticalAlignment&#xff1a;用于设置元素的垂直位置Margin&#xff1a;指定元素与容器的边距Height&#xff1a;指定元素的…

AMRT 3D 数字孪生引擎(轻量化图形引擎、GIS/BIM/3D融合引擎):智慧城市、智慧工厂、智慧建筑、智慧校园。。。

AMRT3D 一、概述 1、提供强大完整的工具链 AMRT3D包含开发引擎、资源管理、场景编辑、UI搭建、项目预览和发布等项目开发所需的全套功能&#xff0c;并整合了动画路径、精准测量、动态天气、视角切换和动画特效等工具。 2、轻量化技术应用与个性化定制 AMRT3D适用于快速开…

《雷德斯东家》 第一话——火把花的回忆

引子 温馨提示:本系列小说为福瑞向! ------------------------------------------------------------------------------------------------------------------------- 作者 RedstoneCuberoot 地图 RedstoneCuberoot、梓元sama 审核 Brenda_fyx、RedstoneCuberoot Minecraft大…

Linux_socket编程

套接字通信 socket 接口 守护进程 一.套接字通信 端口号&#xff1a; 端口号是一个2字节16位的整数;端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; 一台主机可以根据ip地址定位另一台主机&#xff0c;而两台主机之间的通信本质是进程在通信。…

stm32-编码器测速

一、编码器简介 编码电机 旋转编码器 A,B相分别接通道一和二的引脚&#xff0c;VCC&#xff0c;GND接单片机VCC&#xff0c;GND 二、正交编码器工作原理 以前的代码是通过触发外部中断&#xff0c;然后在中断函数里手动进行计次。使用编码器接口的好处就是节约软件资源。对于频…

QT下跨平台库实现及移植经验分享

最近在移植公司一个QT桌面软件到android上&#xff0c;有一些公司自定义的库&#xff0c;用了很多windows的api&#xff0c;移植过程很是曲折&#xff0c;在此有一些感悟分享一下~ 一.自编写跨平台库 1.有时候为了程序给第三方用需要编译一些qt封装库&#xff0c;并可能跨平台…

思科防火墙如何进行ACL操作

环境&#xff1a; 思科防火墙ASA5555 Cisco Adaptive Security Appliance Software Version 9.4(2)6 Device Manager Version 7.5(2)153 问题描述&#xff1a; 思科防火墙如何进行ACL操作 解决方案&#xff1a; 进入en模式 1.查看现有全部list show running-config | i…

stm32-定时器输出比较PWM

目录 一、输出比较简介 二、PWM简介 三、输出比较模式实现 1.输出比较框图(以通用定时器为例) 2.PWM基本结构 四、固件库实现 1.程序1&#xff1a;PWM呼吸灯 2.程序2&#xff1a;PWM驱动直流电机 3.程序3&#xff1a;控制舵机 一、输出比较简介 死区生成和互补输出一般…

Tomcat Session集群---会话绑定

实验配置&#xff1a; 7-1安装Nginx 7-2和7-3安装Tomcat 1.配置7-1 1.做负载均衡&#xff0c;反向代理 [rootlocalhost ~]# vim /etc/nginx/nginx.conf17 http {18 upstream tomcat {19 server 192.168.91.102:8080;20 server 192.168.91.103:8080;2…

ideaSSM校医院管理网页模式开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea ssm 校医院管理系统是一套完善的完整信息管理系统&#xff0c;结合SSM框架完成本系统SpringMVC spring mybatis &#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c; 系统具有完整的源代码和数据…

HarmonyOS应用开发者高级认证答案

** HarmonyOS应用开发者高级认证 ** 以下是高级认证答案&#xff0c;存在个别选项随机顺序答案&#xff0c;自行辨别 判断题 云函数打包完成后&#xff0c;需要到 AppGallery Connect 创建对应函数的触发器才可以在端侧中调用 错 在 column 和 Row 容器组件中&#xff0c;a…

UDF提权

目录 一、UDF概述 二、提权条件 三、漏洞复现 (一) 信息收集 1. Nmap信息收集 1.1、查看当前IP地址 1.2、扫描当前网段&#xff0c;找出目标机器 1.3、快速扫描目标机全端口 2. dirb目录扫描 3. 第一个flag 3.1、目录遍历漏洞 3.2、flag 4. 敏感信息利用 (二) 漏…

Hive-技术补充-初识ANTLR

一、背景 要清晰的理解一条Hql是如何编译成MapReduce任务的&#xff0c;就必须要学习ANTLR。下面是ANTLR的官方网址&#xff0c;下面让我们一起来跟着官网学习吧&#xff0c;在学习的过程中我参考了《antlr4权威指南》&#xff0c;你也可以读下这本书&#xff0c;一定会对你有…

labview技术交流-判断两个数组的元素是否完全相同

问题来源 分析并判断两个一维数组中包含的元素是否完全相同&#xff0c;不考虑索引顺序。比如说[1,5,7,3]和[3,5,7,1]是完全相同的两个一维数组&#xff0c;那[1,5,7,3]和[5,7,1,4]就不是相同的数组。结合我给出的示例&#xff0c;大家有没有什么思路呢&#xff1f; 思路分析 …

Java数据结构-优先级队列

文章目录 前言一、优先级队列1.1 概念 二、优先级队列的模拟实现2.1 堆的概念2.2 堆的存储方式2.3 堆的创建2.3.1 堆向下调整2.3.2 堆的创建2.3.3 建堆的时间复杂度 2.4 堆的插入与删除2.4.1 堆的插入2.4.2 堆的删除 2.5 用堆模拟实现优先级队列 三、常用接口介绍3.1 PriorityQ…

MediaBox音视频终端SDK已适配鸿蒙星河版(HarmonyOS NEXT)

2024年1月&#xff0c;HarmonyOS NEXT 鸿蒙星河版系统开发者预览版开放申请&#xff0c;该系统将只能安装为鸿蒙开发的原生应用&#xff0c;而不再兼容安卓应用。对此&#xff0c;阿里云MediaBox音视频终端SDK产品已实现功能的鸿蒙化迁移和重构&#xff0c;全面适配鸿蒙系统Har…

Html提高——HTML5 新增的语义化标签

引入&#xff1a; 以前布局&#xff0c;我们基本用 div 来做。div 对于搜索引擎来说&#xff0c;是没有语义的。 但是在html5里增加了语义化标签&#xff0c;如 <header>&#xff1a;头部标签 <nav>&#xff1a;导航标签 <article>&#xff1a;内容标签 &…

ASP.NET Mvc+FFmpeg+Video实现视频转码

目录 首先&#xff0c;做了视频上传的页面&#xff1a; FFmpeg&#xff1a;视频转码 FFmpegHelper工作类&#xff1a; 后台控制器代码&#xff1a; 前端视图代码&#xff1a; 参考文章&#xff1a; 首先&#xff0c;做了视频上传的页面&#xff1a; 借鉴了这篇文章 ASP.…