DS18B20-STM32温度读取

news2024/10/7 18:26:28

command

在这里插入图片描述

data

在这里插入图片描述
高地位组合即为温度数据

1. 初始化时钟

在这里插入图片描述

void Init_DS18B20(void) 
{
	 
  char  CY = 1;
    while (CY)
    {
		DQ_OUT();
	  DQ_SET_H(); 
	  delay_us(20); 
        DQ_SET_L();                     //送出低电平复位信号
        delay_us(360);              //延时至少480us
        delay_us(240);
        DQ_SET_H();                    //释放数据线
        delay_us(50);               //等待60us
        DQ_IN();
		CY = DQ_READ();                    //检测存在脉冲
 
		 delay_us(240); 
    } 
} 

特别注意读写字节数据顺序由低到高,不可弄错

2.主机写入数据

在这里插入图片描述


void WriteOneChar(unsigned char dat) 
{ 
	DQ_OUT();
  unsigned char i=0; //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,
  for(i=0;i<8;i++) //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。 
  {
   DQ_SET_L(); //在开始另一个写周期前必须有1us以上的高电平恢复期。 
   delay_us(1); 
	  if(dat&0x01)
  {
	  DQ_SET_H();
//	  delay_us(1); 
  }
  else
	  DQ_SET_L(); 
  
  delay_us(60); 
 
   DQ_SET_H();
//  delay_us(1); 
  
   dat>>=1;
  } 
 
} 

3.读时序

在这里插入图片描述

char ReadOneChar()  //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
{
unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
unsigned char dat=0; 
for (i=0;i<8;i++) //一个字节有8位 
{ 
	DQ_OUT(); 
 DQ_SET_L();  //低起始
 dat>>=1; 
//DQ_SET_H();
DQ_IN();
 if(DQ_READ()==1) 
 dat|=0x80; 
 delay_us(45);
// 	DQ_OUT(); 
 DQ_SET_H();
 
} 
return(dat);
 
} 

读取温度数据

char  ReadTemperature(void) 
{

unsigned char tempL=0; //设全局变量
unsigned char tempH=0; 
unsigned int TEMPZ;//测量到的温度的整数部分
 
  Init_DS18B20(); //初始化
//	while(chack_ds18b20())
//	{
//	printf("err");
//	}
 WriteOneChar(0xcc); //跳过读序列号的操作
 WriteOneChar(0x44); //启动温度转换
//	chack_ds18b20(); 
  Init_DS18B20(); //初始化
 WriteOneChar(0xcc); //跳过读序列号的操作 
 WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位) 
 tempL=ReadOneChar(); //读出温度的低位LSB
 tempH=ReadOneChar(); //读出温度的高位MSB 
 
 	  TEMPZ= ((tempH<<4)|(tempL>>4)); 
	 if(TEMPZ>=128)
	 {
	 TEMPZ=~TEMPZ+1; 
	 }		  
		return  TEMPZ;

}

感谢大佬的分享
https://blog.csdn.net/weixin_47457689/article/details/124081703

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

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

相关文章

忆联携手中国移动,企业级NVME SSD评测及生态推进计划发布仪式圆满成功

6月27日&#xff0c;中国信通院、中国移动和中国电信在ODCC 2023夏季全会上发布了“企业级NVME SSD评测及生态推进计划”&#xff08;以下简称“推进计划”&#xff09;&#xff0c;忆联作为中国移动重要的合作伙伴受邀出席该“推进计划”成立仪式环节&#xff0c;与中国信通院…

vue watch监听不生效,解决办法

1、在data里定义监听的属性&#xff0c;解决问题 2、使用深度监听

(0day通用)中庆纳博某系统敏感信息泄露+未授权修改密码

申明&#xff1a;本次测试只作为学习用处&#xff0c;请勿未授权进行渗透测试&#xff0c;切勿用于其它用途&#xff01; 1.漏洞背景 北京中庆纳博信息技术有限公司&#xff0c;简称中庆纳博&#xff0c;是有20年历史的中庆集团旗下核心企业&#xff0c;专注于教育信息化的深度…

UDP SocketAPI

1、TCP与UDP区别 TCP&#xff1a;有连接&#xff0c;可靠传输&#xff0c;面向字节流&#xff0c;全双工 UDP&#xff1a;无连接&#xff0c;不可靠传输&#xff0c;面向数据报&#xff0c;全双工 2、UDP sockeAPI的核心类 DatagramSocket&#xff1a;相当于对socket文件进…

Swift 单元测试入门

含义&#xff1a;编程语言中的单元测试是为了确保编写的代码按预期工作。 给定一个特定的输入&#xff0c;希望代码带有一个特定的输出。通过测试代码&#xff0c;能够给当前的重构和发布建立信心&#xff0c;因为将能够确保代码在成功运行的测试套件后按预期工作。 一、单元测…

macos中回退键是Command+shift+z,我该如何改成Command+y?

macos中回退键是Commandshiftz&#xff0c;我该如何改成Commandy? 操作如下&#xff0c;打开系统设置-键盘 在「菜单标题」中手动输入需要更改快捷键的菜单项名称&#xff0c;注意要完全一致&#xff08;见下图&#xff09;。 最后说一句&#xff0c;撤销与重做是非常基础的系…

VS2017编译64位库出现问题解决方法

1、问题&#xff1a;VS2017编译32位Release库正常通过,但是64位库总是报错 解决方法&#xff1a;添加setupapi.lib到依赖项中

线性代数笔记整理

文章目录 1 行列式2 矩阵&#xff08;本质是数表&#xff09;3 方程组的解4 向量5 矩阵的特征值和特征向量6 相似矩阵和相似对角化7 合同对角化8 二次型及其标准型 1 行列式 2 矩阵&#xff08;本质是数表&#xff09; 3 方程组的解 4 向量 5 矩阵的特征值和特征向量 6 相似矩阵…

【MATLAB第47期】基于MATLAB的多卷积层的卷积神经网络MCNN分类预测模型,含交叉验证,可自定义层数

【MATLAB第47期】基于MATLAB的多卷积层的卷积神经网络MCNN分类预测模型&#xff0c;含交叉验证&#xff0c;可自定义层数 一、展示效果 依次对比卷积层数为1/2/3时的分类预测结果 可得出&#xff0c;随着卷积层数量增加&#xff0c;训练集/测试集正确率基本上得到改进。 1.一…

GPIO模拟时序控制外设4——红外发射管

文章目录 前言红外发射管简介NEC协议HS0038NEC 的逻辑“1”与逻辑“0”NEC的数据帧格式 编程思路1. GPIO管脚2. 模拟同步头3.发送逻辑“0”与逻辑“1”发送一个字节数据发送一帧数据结束码现象 总结 前言 上一篇介绍了使用GPIO模拟时序实现I2C协议的功能&#xff0c;本文继续使…

DELL戴尔笔记本电脑灵越Inspiron 14 54105418原厂Win10系统恢复原装OEM出厂状态系统

Dell戴尔笔记本电脑&#xff0c;灵越Inspiron 14 5410&5418原装出厂OEM系统镜像原厂系统文件 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件等预装程序 链接&#xff1a;https://pan.baidu.com/s/1Qj_dW5lj71e9d71-je4dXw?pwdz3z1 提取码&#xff1a;z3z1

Oracle Recovery Tools恢复csc higher than block scn---惜分飞

有客户强制关闭数据库,结果有数据块报坏块,dbv检查为:csc higher than block scn问题 该问题主要是由于scn异常导致通过Oracle Recovery工具进行修复 dbv再次验证数据块ok,Oracle Recovery完美代替bbed解决该问题 通过OraRecovery工具快速解决csc higher than block scn故障…

IntelliJ IDEA如何自动生成serialVersionUID

IntelliJ IDEA如何自动生成serialVersionUID&#xff1f; 实体对象在流中传输时&#xff0c;需要将其序列化。 对象的类型实现Serializable接口public class ClassName implements java.io.Serializable { } 生成版本号serialVersionUID单击类名&#xff0c;按Alt Enter,在出…

C语言的##使用

##在C/C中具有连接字符串的作用 #include<stdio.h> #define TEST(_name, _inst_alloc) \printf("token6 %d\n",_name##_inst_alloc); int main() {int token6 100;TEST(token, 6);return 0; }

[环境配置][原创]VS2019新建项目一直打转转圈很久才能正常显示模板项目

不知道什么时候VS2019新建一个C#或者C项目越来越慢&#xff0c;点击新建项目一直是下面状态 我记得以前最多等个几秒都是可以出来的&#xff0c;后面发现要一分钟以上。这个确实令人抓狂。于是找到一种方法可以明显改善这个问题&#xff0c;那就是卸载Nsight相关程序。一般都是…

软考高级系统架构设计师(四) 计算机网络3物联网云计算

目录 物联网 关键技术 云计算 物联网 PS&#xff1a;可能下午题 关键技术 射频识别、二维码&#xff08;感知层&#xff09; 云计算

为什么游戏总是闪退?游戏闪退的原因和解决方法

在玩游戏的过程中&#xff0c;会有游戏突然关闭的情况&#xff0c;游戏闪退后回到电脑桌面或游戏主界面&#xff0c;十分影响游戏体验。端午开黑在际&#xff01;驱动人生游戏助你攻克游戏闪退&#xff0c;带来游戏闪退的原因和解决方法。 **1、设备性能不足&#xff1a;**某些…

ElasticSearch-IK分词器介绍和下载

IK分词器 什么是IK分词器&#xff1f; 分词:把一段中文或者别的划分成一个一个的关键字,我们在搜索的时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个词,比如"我爱魏一鹤"会被分成&quo…

hive引入外部函数-java实现

引入依赖 <dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>3.1.2</version> </dependency>编写函数 注意必须要继承GenericUDF 类 import org.apache.hadoop.hive.ql.exec.UDF…