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

news2024/11/25 20:16:28

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 0xBE

void 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 500us
	OneWire_DQ=1;
	i = 29;while (--i);//Delay 70us
	AckBit=OneWire_DQ;
	i = 227;while (--i);//Delay 500us
	return AckBit;
}

void OneWire_SendBit(unsigned char Bit)
{
	unsigned char i;
	OneWire_DQ=0;

	i = 3;while (--i);//Delay 10us
	OneWire_DQ=Bit;
	i = 22;while (--i);//Delay 50us
	OneWire_DQ=1;
}

unsigned char OneWire_ReceiveBit(void)
{
	unsigned char i;
	unsigned char Bit;
	OneWire_DQ=0;
	i = 1;while (--i);//Delay 5us
	OneWire_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,"    ");
		}

	}
}

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

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

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

相关文章

linux模拟aix盘19c单机asm安装补丁

linux模拟盘aix盘vi /etc/rc.d/rc.local/bin/ln /dev/sda /dev/rhdisk2/bin/ln /dev/sdb /dev/rhdisk3 /bin/chown grid:oinstall /dev/rhdisk*chmod 660 /dev/rhdisk* 一、19c安装GI&#xff08;Standalone Oracle Restart&#xff09; su - grid配置环境变量vi .profileex…

【Linux】Linux用户,用户组,其他人

1.文件拥有者 初次接触Linux的朋友大概会觉得很怪异&#xff0c;怎么“Linux有这么多用户&#xff0c;还分什么用户组&#xff0c;有什用呢&#xff1f;”&#xff0c;这个“用户与用户组”的功能可是相当健全而且好用的一个安全防护措施。 怎么说呢&#xff1f;由于Linux是个…

人生感悟 | 努力奋斗和内卷不是一个意思。

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 有个很有趣的话题&#xff0c;是不是努力奋斗导致的内卷&#xff1f; 如果每个人都躺平&#xff0c;各行各业的内卷是不是就不存在了&#xff1f; 01 有关联不尽同 两者有关量&#xff0c;但无绝对的导向关系。 努力…

vue高德地图使用

先根据官方方法给vue项目引入高德 高德文档地址 做好准备后使用 初始化地图 AMap.plugin(AMap.MoveAnimation, () >{//地图this.map new AMap.Map("mapContainer", {resizeEnable: true,center: [116.397447,39.909176],//地图中心坐标zoom:12,//缩放值});this.…

掌握亚马逊自养号:测评策略的核心要点与实战经验

在当今电商领域的激烈角逐中&#xff0c;亚马逊测评对于卖家而言&#xff0c;已从单纯的销量助推器与好评累积工具&#xff0c;进化为品牌塑造与市场洞察的关键环节。然而&#xff0c;许多卖家仍局限于传统认知&#xff0c;未能充分挖掘自养号测评的多元化价值与深远影响。本文…

深入Kafka:如何保证数据一致性与可靠性?

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! Hello, 大家好!我是小米,今天我们来聊一聊Kafka的一致性问题。Kafka作为一个高性能的分布式流处理平台,一直以来都备受关注。今天,我将深入探讨Kaf…

智算中心风云再起,如何锚定突围之路?

导读&#xff1a;2024年&#xff0c;智算中心建设全面提速&#xff0c;头部玩家争相布局。如何打造智算中心的差异化竞争能力&#xff1f; 2024年&#xff0c;随着大模型和生成式AI应用加速落地&#xff0c;各行各业对AI算力的需求持续暴涨。作为AI时代的算力基础设施&#xff…

Spring AI 1.0.0 新变化,从 0.8.1 如何升级

Spring AI 1.0.0-M1 版本已经发布&#xff0c;距离 1.0.0 正式版又更近了一步。同时这也意味着&#xff0c;Spring AI 1.0.0 的 API 已经基本确定&#xff0c;不会发生大的改动。这里介绍一下&#xff0c;相对于上一个发布版本 0.8.1&#xff0c;Spring AI 1.0.0 的一些重要的变…

【pearcmd】通过pearcmd.php 进行GetShell

https://cloud.tencent.com/developer/article/2204400 关于PHP 配置 register_argc_argv 小结 的一些研究文章。 应用例题 [NewStarCTF 2023 公开赛道]Include &#x1f350; <?phperror_reporting(0);if(isset($_GET[file])) {$file $_GET[file];if(preg_match(/flag|l…

国外惊现IDM命令行永久破解方法

IDM 想必大部分人都知道和使用过&#xff0c;这是一款在国内外都非常流行的下载神器&#xff0c;除了不能支持种子文件和磁力之外&#xff0c;完爆国内的迅雷&#xff0c;小编我在 6 年前就已经购买了永久更新正版。 image.png 不过最近国外有大神流传出了一个号称可以永久完美…

如何在Docker容器中,修改MySQL密码

如果MySQL运行在Docker容器中&#xff0c;修改MySQL密码的方法稍有不同。以下是如何在Docker中修改MySQL密码的步骤&#xff1a; 方法1&#xff1a;使用MySQL命令行工具 1. 找到MySQL容器的ID或者名字&#xff1a; docker ps 2. 进入MySQL容器&#xff1a; docker exec -i…

Hi3861 OpenHarmony嵌入式应用入门--UDP Client

本篇使用的是lwip编写udp客户端。需要提前准备好一个PARAM_HOTSPOT_SSID宏定义的热点&#xff0c;并且密码为PARAM_HOTSPOT_PSK。还需要准备一个udp服务&#xff0c;服务ip为PARAM_SERVER_ADDR宏定义&#xff0c;端口为PARAM_SERVER_PORT宏定义。 修改网络参数 在Hi3861开发板…

如何挑选短剧系统源码?

在选择短剧系统源码之前&#xff0c;我们需要明确什么是短剧系统源码。短剧系统源码是指用于构建和管理短剧内容的程序代码。选择适合的短剧系统源码可以提高短剧制作的效率和质量。下面是几个选择短剧系统源码的建议&#xff1a; 需求分析&#xff1a;在选择短剧系统源码之前&…

【代码随想录】【算法训练营】【第58天】 [卡码101]孤岛的总面积 [卡码102]沉没孤岛 [卡码103]水流问题 [卡码104]建造最大岛屿

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 58&#xff0c;周四&#xff0c;ding~ 题目详情 [卡码101] 孤岛的总面积 题目描述 卡码101 孤岛的总面积 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 […

word 转pdf 中图片不被压缩的方法

word 转pdf 中图片不被压缩的方法 法1&#xff1a; 调节word 选项中的图片格式为不压缩、高保真 法2&#xff1a; 1: word 中的图片尽可能使用高的分辨率&#xff0c;图片存为pnd或者 tif 格式&#xff08;最高清&#xff09; 2: 转化为pdf使用打印机器&#xff0c;参数如下…

实验七 SQL数据更新和视图

题目 &#xff08;1&#xff09;向商品类别表category中插入一条记录&#xff08;801&#xff0c;‘座椅套’&#xff0c;‘各种品牌的汽车座套’&#xff09; &#xff08;2&#xff09;向商品表product中插入一条记录&#xff1a;商品编号80101&#xff0c;商品名称“四季通…

基于Springboot的人格障碍诊断系统

结构图&#xff1a; 效果图&#xff1a; 后台&#xff1a; 前台:

AI免费英语学习在线工具:Pi;chatgpt;其他大模型AI 英语学习智能体工具

1、pi(强烈推荐&#xff1a;可以安卓下载使用) https://pi.ai/talk &#xff08;网络国内使用方便&#xff09; 支持实时聊天与语音对话 2、chatgpt&#xff08;强烈推荐&#xff1a;可以安卓下载使用) https://chat.openai.com/ &#xff08;网络国内使用不方便&#xf…

零基础入门怎么学习老挝语字母表?《老挝语翻译通》App真人发音教学,学习老挝语字母发音和词汇句子!

这段老挝文字翻译成中文是什么意思&#xff1f;有什么好用的老挝语翻译工具推荐吗&#xff1f; 快速翻译&#xff1a;中老语言无缝转换&#xff0c;实时翻译&#xff0c;让沟通更流畅。 学习工具&#xff1a;零基础入门到流利对话&#xff0c;老挝语真人发音&#xff0c;让你的…

ue5导航网格设置

AI使用导航网格进行移动&#xff0c;所以&#xff0c;先设置导航网格边界体积 2&#xff0c;使导航网格边界体积覆盖AI所需要的场景&#xff08;绿色区域&#xff09;&#xff0c;x,y&#xff0c;z在这里都扩大到原来的10倍 3&#xff0c;打开actor的“启用tick并开始” 4&…