DS18B20温度传感器

文章目录

  • 一、介绍DS18B20
    • 了解DS18B20
    • 引脚及电路图
    • 内部结构框图
    • 存储器结构
    • 单总线(1 wire bus)介绍
    • 单总线电路规范
    • 单总线时序结构
      • 初始化
      • 发送一个数据
      • 接收一位数据
      • 发送一个字节与接收一个字节
    • DS18B20操作流程
    • 所要使用的数据帧
    • 温度存储格式
  • 二、实现温度检测
    • 根据单总线时序结构配置初始化、写入数据、读取数据函数
    • 根据要使用的数据帧配置温度变换与温度读取
    • 显示温度传感器并配置阈值警报
  • 注意


一、介绍DS18B20

了解DS18B20

在这里插入图片描述

引脚及电路图

在这里插入图片描述
完整电路(引脚名称不同、功能一样)
在这里插入图片描述
在这里插入图片描述

内部结构框图

使用寄生电源时,由于上拉电阻电阻较大,需要给这个电源高电压(强上拉)才能使DS18B02工作,本次案例不用使用。

在这里插入图片描述

存储器结构

在这里插入图片描述

单总线(1 wire bus)介绍

在这里插入图片描述

单总线电路规范

在这里插入图片描述

单总线时序结构

初始化

在这里插入图片描述

发送一个数据

在这里插入图片描述

接收一位数据

在这里插入图片描述

发送一个字节与接收一个字节

在这里插入图片描述

DS18B20操作流程

在这里插入图片描述
在这里插入图片描述

所要使用的数据帧

在这里插入图片描述

温度存储格式

在这里插入图片描述
例子
在这里插入图片描述

二、实现温度检测

根据单总线时序结构配置初始化、写入数据、读取数据函数

OneWire.c

#include <REGX52.H>
#include <intrins.h>// 定义接口
sbit OneWire_IO = P3^7;
// 初始化单总线
unsigned char OneWire_Init(){unsigned char i,ACK;// 关闭中断,以免影响温度传感器读取数据(影响延时)EA = 0;OneWire_IO = 1;OneWire_IO = 0; // 把总线拉低_nop_();i = 227;while (--i);		// 延时500usOneWire_IO = 1;	// 释放总线_nop_();i = 29;while (--i);			// 延时70usACK = OneWire_IO;	// 返回从机的响应_nop_();i = 227;while (--i);		// 延时500usEA = 1;return ACK;
}
// 发送一位数据
void OneWire_SendBit(unsigned char Bit){unsigned char i;EA = 0;OneWire_IO = 0;i = 3;while (--i);		// 延时10usOneWire_IO = Bit;i = 24;while (--i);		// 延时50usEA = 1;OneWire_IO = 1;				// 释放总线
}
// 接收一位数据
unsigned char OneWire_ReceiveBit(){unsigned char i,Bit;EA = 0;OneWire_IO = 0;i = 2;while (--i);		// 延时5usOneWire_IO = 1;i = 2;while (--i);		// 延时5usBit = OneWire_IO;i = 24;while (--i);		// 延时50usEA = 1;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(){unsigned char i,Byte = 0x00;for(i=0;i<8;i++){if(OneWire_ReceiveBit()){Byte |= 0x01<<i;}}return Byte;
}

根据要使用的数据帧配置温度变换与温度读取

DS18B20.c

#include <REGX52.H>
#include "OneWire.h"#define SKIP_ROM  				0xCC	// 跳过ROM
#define CONVERT_T   			0x44	// 温度交换
#define READ_SCRATCHPAD   		0xBE	// 读取RAM// 温度变换
void DS18B20_CovertT(){OneWire_Init();OneWire_SendByte(SKIP_ROM);OneWire_SendByte(CONVERT_T);
}// 温度读取
float DS18B20_ReadT(){unsigned char TLSB,TMSB;int Temp;float T;OneWire_Init();OneWire_SendByte(SKIP_ROM);OneWire_SendByte(READ_SCRATCHPAD);TLSB = OneWire_ReceiveByte();	// 高八位TMSB = OneWire_ReceiveByte();	// 低八位Temp = (TMSB<<8) | TLSB;T = Temp/16.0;	// 右移四位return T;
}

显示温度传感器并配置阈值警报

main.c

#include <REGX52.H>
#include "LCD1602.h"
#include "DS18B20.h"
#include "Delay.h"
#include "AT24C02.h"
#include "Key.h"
#include "Time0Init.h"float T,TShow;
char TL,TH;
unsigned char KeyNum;void main()
{DS18B20_CovertT();		//上电先转换一次温度,防止第一次读数据错误Delayms(1000);			//等待转换完成TH=AT24C02_ReadByte(0);	//读取温度阈值数据TL=AT24C02_ReadByte(1);if(TH>125 || TL<-55 || TH<=TL){TH=20;			//如果阈值非法,则设为默认值TL=15;}LCD_Init();LCD_ShowString(1,1,"T:");LCD_ShowString(2,1,"TH:");LCD_ShowString(2,9,"TL:");LCD_ShowSignedNum(2,4,TH,3);LCD_ShowSignedNum(2,12,TL,3);Time0_Init();while(1){KeyNum=Key();/*温度读取及显示*/DS18B20_CovertT();	//转换温度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 long)(TShow*100)%100,2);//显示温度小数部分/*阈值判断及显示*/if(KeyNum){if(KeyNum==1)	//K1按键,TH自增{TH++;if(TH>125){TH=125;}}if(KeyNum==2)	//K2按键,TH自减{TH--;if(TH<=TL){TH++;}}if(KeyNum==3)	//K3按键,TL自增{TL++;if(TL>=TH){TL--;}}if(KeyNum==4)	//K4按键,TL自减{TL--;if(TL<-55){TL=-55;}}//显示阈值数据LCD_ShowSignedNum(2,4,TH,3);	LCD_ShowSignedNum(2,12,TL,3);//写入到At24C02中保存AT24C02_WriteByte(0,TH);		Delayms(5);AT24C02_WriteByte(1,TL);Delayms(5);}//越界判断if(T>TH)			{LCD_ShowString(1,13,"OV:H");}else if(T<TL){LCD_ShowString(1,13,"OV:L");}else{LCD_ShowString(1,13,"    ");}}
}void Timer0_Routine() interrupt 1
{static unsigned int T0Count;TL0 = 0x18;		//设置定时初值TH0 = 0xFC;		//设置定时初值T0Count++;if(T0Count>=20){T0Count=0;Key_Loop();	//每20ms调用一次按键驱动函数}
}

注意

  • 单总线与I2C总线发送接收数据不同,I2C数据从左到右是从高位到低位,单总线从左到右是从低位到高位。
  • 本案例为避免定时器影响单总线的延时判断逻辑,采用了延时判断时关闭一切中断的做法,对定时器有一定的影响,在其他程序中使用需注意。
  • 这个温度传感器的温度转换即转变为可接收的值的过程需要一定的时间,如果不延时等待会显示一个默认值。
  • 由于温度数据最后四位为小数位,返回值和显示值时要注意移位。

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

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

相关文章

用bootstrap结合jQuery实现简单的模态对话框

嗨害嗨&#xff0c;我又来了奥。今天呢&#xff0c;给大家分享一个工作中常用到的插件——模态对话框的用法。想必大家在工作中也遇到很多页面&#xff0c;需要用模态对话框进行交互的吧&#xff0c;现在呢&#xff0c;就让我们一起来了解一下它的使用吧。 首先&#xff0c;我…

百面嵌入式专栏(面试题)华为面试题

文章目录 题目:static有什么用途?(请至少说明两种)题目:引用与指针有什么区别?题目:描述实时系统的基本特性题目:全局变量和局部变量在内存中是否有区别?如果有,是什么区别?题目:什么是平衡二叉树?题目:堆栈溢出一般是由什么原因导致的?题目:什么函数不能声明为…

为电子表格嵌入数据库,Excel/WPS一键升级为管理系统

将Excel表格转化为管理系统&#xff0c;这款工具能够实现只需导入表格数据&#xff0c;即可自动生成相应的软件和APP。 表格办公的烦恼&#xff0c;有遇到吧&#xff1f; 对于具有一定规模的企业而言&#xff0c;各类表格如同繁星般众多&#xff0c;既有日常使用的常规表格&a…

算法每日一题: 使用循环数组所有元素相等的最少秒数 | 哈希

大家好&#xff0c;我是星恒&#xff0c;今天给大家带来的是一道需要感觉规律的题目&#xff0c;只要读懂题目中的规律&#xff0c;就可以做出来了 这道题用到了哈希&#xff0c;还有一个关键点比较类似循环队列 题目&#xff1a;leetcode 2808 给你一个下标从 0 开始长度为 n…

支持向量机

支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一个非常优雅的算法&#xff0c;具有非常完善的数学理论&#xff0c;常用于数据分类&#xff0c;也可以用于数据的回归预测中。支持向量机在许多领域都有广泛的应用&#xff0c;如文本分类、图像识别…

数据库管理phpmyadmin

子任务1-PHPmyadmin软件的使用 本子任务讲解phpmyadmin的介绍和使用操作。 训练目标 1、掌握PHPmyadmin软件的使用方法。 步骤1 phpMyAdmin 介绍 phpmyadmin是一个用PHP编写的软件工具&#xff0c;可以通过web方式控制和操作MySQL数据库。通过phpMyAdmin可以完全对数据库进行…

如何构建起自己的伦敦银交易系统?

投资者在市场这个江湖中行走&#xff0c;就需要有一技防身&#xff0c;不然很容易会被市场的风险所淹没&#xff0c;这个“一技”指的就是伦敦银交易系统。如果投资者要构建起自己的伦敦银交易系统&#xff0c;应该从哪几个方面着手呢&#xff1f;下面我们就来讨论一下。 分析方…

【算法与数据结构】583、72、LeetCode两个字符串的删除操作+编辑距离

文章目录 一、583、两个字符串的删除操作二、72、编辑距离三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、583、两个字符串的删除操作 思路分析&#xff1a;本题的思路和115、不同的子序列差不多&#xff0c;只是变成…

Python—数据可视化Seaborn大全:参数详解与实战案例全解析【第52篇—python:Seaborn大全】

文章目录 Seaborn库常用绘图详解与实战引言安装与导入一、散点图参数说明实战案例 二、直方图参数说明实战案例 三、线性关系图参数说明实战案例 四、热力图参数说明实战案例 五、分布图参数说明实战案例 六、箱线图参数说明实战案例 七、联合分布图参数说明实战案例 八、小提琴…

echarts条形图添加滚动条

效果展示: 测试数据: taskList:[{majorDeptName:测试,finishCount:54,notFinishCount:21}, {majorDeptName:测试,finishCount:54,notFinishCount:21}, {majorDeptName:测试,finishCount:54,notFinishCount:21}, {majorDeptName:测试,finishCount:54,notFinishCount:21}, {maj…

Pytest框架测试

Pytest 是什么? pytest 能够支持简单的单元测试和复杂的功能测试;pytest 可以结合 Requests 实现接口测试; 结合 Selenium、Appium 实现自动化功能测试;使用 pytest 结合 Allure 集成到 Jenkins 中可以实现持续集成。pytest 支持 315 种以上的插件;为什么要选择 Pytest 丰…

【axios报错异常】: Uncaught ReferenceError: axios is not defined

问题描述: 当前代码在vivo手机和小米手机运行是正常的,点击分享按钮调出相关弹框,发送接口进行分享,但是现在oppo手机出现了问题: 点击分享按钮没有反应. 问题解析: 安卓同事经过查询后,发现打印了错误: 但是不清楚这个问题是安卓端造成的还是前端造成的,大家都不清楚. 问题…

图论练习3

内容&#xff1a;过程中视条件改变边权&#xff0c;利用树状数组区间加处理 卯酉东海道 题目链接 题目大意 个点&#xff0c;条有向边&#xff0c;每条边有颜色和费用总共有种颜色若当前颜色与要走的边颜色相同&#xff0c;则花费为若当前颜色与要走的边颜色不同&#xff0c;…

Java面试——计网篇

一、基础篇 1、 TCP/IP 网络模型 对于同一台设备上的进程间通信&#xff0c;有很多种方式&#xff0c;比如有管道、消息队列、共享内存、信号等方式&#xff0c;而对于不同设备上的进程间通信&#xff0c;就需要网络通信&#xff0c;而设备是多样性的&#xff0c;所以要兼容多…

【Java程序设计】【C00245】基于Springboot的家政服务管理平台(有论文)

基于Springboot的家政服务管理平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的家政服务管理平台 本系统分为前台模块、管理员功能模块、用户功能模块以及服务人员功能模块。 前台模块&#xff1a;系统首页的…

C2-Search-Netlas:一款基于Netlas API的强大C2服务器识别与检测工具

关于C2-Search-Netlas C2-Search-Netlas是一款功能强大的命令与控制&#xff08;C2&#xff09;服务器检测工具&#xff0c;该工具使用Java语言开发&#xff0c;基于Netlas API实现其功能&#xff0c;可以帮助广大研究人员轻松快速地识别和检测目标C2服务器的相关信息。 C2-S…

【目标跟踪】相机运动补偿

文章目录 一、前言二、简介三、改进思路3.1、状态定义3.2、相机运动补偿3.3、iou和ReID融合3.4、改进总结 四、相机运动补偿 一、前言 目前 MOT (Multiple Object Tracking) 最有效的方法仍然是 Tracking-by-detection。今天给大家分享一篇论文 BoT-SORT。论文地址 &#xff0…

XCTF:warmup[WriteUP]

CtrlU查看页面源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&q…

【Matplotlib】figure方法之图形的保存

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;matplotlib &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

idea常用设置

1、内存优化 根据自己电脑本身的内存&#xff0c;对idea安装包里bin目录下的idea64.exe.vmoptions文件进行修改 -server -Xms256m -Xmx2048m -XX:MaxPermSize1024m -XX:ReservedCodeCacheSize256m -ea -Dsun.io.useCanonCachesfalse -Djava.Net.preferIPv4Stacktrue -Djsse.e…