单片机学习(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 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,"    ");
		}

	}
}

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

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

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

相关文章

Keil汇编相关知识

一、汇编的组成 1.汇编指令&#xff1a;在内存中占用内存&#xff0c;执行一条汇编指令会让处理器进行相关运算 分类&#xff1a;数据处理指令&#xff0c;跳转指令&#xff0c;内存读写指令&#xff0c;状态寄存器传送指令&#xff0c;软中断产生指令&#xff0c;协助处理器…

项目菜单配置

stores/index.js import {createStore } from "vuex"; //计算高度 let height window.innerHeight;//计算分辨率 let width window.innerWidth;let activeIndex localStorage.getItem("activeIndex"); if (activeIndex null || activeIndex "&q…

基于单片机技术的按键扫描电路分析

摘 要&#xff1a; 单片机应用技术被广泛应用于各种智能控制系统中&#xff0c;是电子信息类专业学生必修的一门专业课。在单片机端口信息输入模块中&#xff0c;按键是主要元器件之一&#xff0c;笔者主要介绍矩阵键盘的电路设计及控制程序编写&#xff0c;分析了单片机端口连…

商城自动化测试实战 —— 登录+滑块验证

hello大家好&#xff0c;我是你们的小编&#xff01; 本商城测试项目采取PO模型和数据分离式架构&#xff0c;采用pytestseleniumjenkins结合的方式进行脚本编写与运行&#xff0c;项目架构如下&#xff1a; 1、创建项目名称&#xff1a;code_shopping&#xff0c;创建所需项目…

springboot是否可以代替spring

Spring Boot不能直接代替Spring&#xff0c;但它是Spring框架的一个扩展和增强&#xff0c;提供了更加便捷和高效的开发体验。以下是关于Spring Boot和Spring关系的详细解释&#xff1a; Spring框架&#xff1a; Spring是一个广泛应用的开源Java框架&#xff0c;提供了一系列模…

Linux 2-Vim使用

1 什么是vi及vim&#xff1f; vi是文本编辑器&#xff1b;vim是程序开发工具。 2 vi的几种模式 1 一般模式&#xff1a;vi <fileName> 就进入命令模式&#xff0c;可以删除或者复制粘贴 2 编辑模式&#xff1a;修改内容 3 命令行模式&#xff1a;最下面一行&#xf…

追觅科技25届校招校招24年社招科技北森题库商业推理综合测评答题攻略、通关技巧

一、追觅科技这家公司怎么样&#xff1f; 追觅科技是一家在智能清洁家电领域表现出色的企业。 二、追觅科技待遇怎么样 追觅科技的待遇在业内具有竞争力&#xff0c;具体信息如下&#xff1a; 1. **薪酬结构**&#xff1a;根据对外经济贸易大学招生就业处发布的2023届校园招…

一、安装VMware16

本篇来源&#xff1a;山海同行 本篇地址&#xff1a;https://shanhaigo.cn/courseDetail/1805875642621952000 本篇资源&#xff1a;以整理到-山海同行 一、VMware虚拟机下载 1. 官网下载 1. 打开官网 打开VMware官网地址&#xff1a;https://www.vmware.com/ 2. 选择下载产…

ctfshow sqli-labs web532--web540

web532 时间盲注 admin")闭合 import requestsurl"https://8b83d32c-8348-4393-ad72-08d00f7f6cd0.challenge.ctf.show/" flag"" i0 while True:i 1low 32high 127while low < high:mid (lowhigh)//2#payloadf"if((ascii(substr((databas…

大语言模型(LLMs)全面学习指南,初学者入门,一看就懂!

大语言模型&#xff08;LLMs&#xff09;作为人工智能&#xff08;AI&#xff09;领域的一项突破性发展&#xff0c;已经改变了自然语言处理&#xff08;NLP&#xff09;和机器学习&#xff08;ML&#xff09;应用的面貌。这些模型&#xff0c;包括OpenAI的GPT-4o和Google的gem…

kafka(一)原理(2)组件

一、broker 1、介绍 kafka服务器的官方名字&#xff0c;一个集群由多个broker组成&#xff0c;一个broker可以容纳多个topic。 2、工作流程 3、重要参数 参数名称 描述 replica.lag.time.max.ms ISR中&#xff0c;如果Follower长时间未向Leader发送通信请求或同步数据&a…

计算机图形学笔记----矩阵

矩阵和标量的运算 ,则 矩阵与矩阵相乘 的矩阵A&#xff0c;的矩阵B。两矩阵&#xff0c;结果为的矩阵&#xff0c;第一个矩阵的列数必须和第二个矩阵的行数相同&#xff0c;否则不能相乘 &#xff0c;中的每个元素等于A的第i行所对应的矢量和B的第j列所对应的矢量进行矢量点…

【滚动哈希】2156. 查找给定哈希值的子串

本文涉及知识点 滚动哈希 LeetCode2156. 查找给定哈希值的子串 给定整数 p 和 m &#xff0c;一个长度为 k 且下标从 0 开始的字符串 s 的哈希值按照如下函数计算&#xff1a; hash(s, p, m) (val(s[0]) * p0 val(s[1]) * p1 … val(s[k-1]) * pk-1) mod m. 其中 val(s[…

015、HBase分布式数据库与传统数据库的深度对比

目录 HBase分布式数据库与传统数据库的深度对比 1. 数据模型 1.1 传统关系型数据库 1.2 HBase 2. 扩展性 2.1 传统关系型数据库 2.2 HBase 3. 查询语言 3.1 传统关系型数据库 3.2 HBase 4. 事务支持 4.1 传统关系型数据库 4.2 HBase 5. 数据一致性 5.1 传统关系型…

《C语言》编译和链接

文章目录 一、翻译环境1、预处理2、编译3、汇编4、链接 二、运行环境 一、翻译环境 在使用编译器编写代码时&#xff0c;编写的代码是高级语言&#xff0c;机器无法直接识别和运行&#xff0c;在编译器内部会翻译成机器可执行的机器语言。 编译环境由编译和链接两大过程组成。 …

深度之眼(二十九)——神经网络基础知识(四)-循环神经网络

文章目录 一、 学习目标二、序列数据三、语言模型四、循环神经网络4.1 RNN的反向传播 五、门控循环单元-GNU5.1 候选隐藏状态 六、长短期记忆网络-LSTM七、回顾 一、 学习目标 二、序列数据 序列数据是常见的数据类型&#xff0c;前后数据通常具有关联性 三、语言模型 综合…

PyQt问题汇总(持续更新)

目录 1.抛出异常后QAppliaction自动闪退 2.Unbuntu共享文件夹自动挂载 1.抛出异常后QAppliaction自动闪退 开发阶段&#xff0c;PyQt5 QAppliaction会在遇到未捕获的异常时立即退出&#xff0c;它能够快速发现并报告错误&#xff0c;我在调用一些密码算法库的时候&#xff0…

传媒行业指哪些?需要过等保吗?

传媒&#xff0c;一个人人都接触的行业。相信大家都听过传媒&#xff0c;但具体传媒行业是指什么&#xff0c;包括哪些&#xff0c;详细很多人都不了解。这不一些人在问&#xff0c;传媒行业指哪些&#xff1f;需要过等保吗&#xff1f;这里跟我们小编一起来讨论讨论吧&#xf…

SpringMVC 域对象共享数据

文章目录 1、使用ServletAPI向request域对象共享数据2、使用ModelAndView向request域对象共享数据3、使用Model向request域对象共享数据4、使用map向request域对象共享数据5、使用ModelMap向request域对象共享数据6、Model、ModelMap、Map的关系7、向session域共享数据8、向app…

Pikachu 不安全的文件下载(Unsafe file download)概述 附漏洞利用案例

目录 获取下载链接 修改链接 重新构造链接 拓展 不安全的文件下载概述 文件下载功能在很多web系统上都会出现&#xff0c;一般我们当点击下载链接&#xff0c;便会向后台发送一个下载请求&#xff0c;一般这个请求会包含一个需要下载的文件名称&#xff0c;后台在收到请求…