DS18B20-STM32温度读取

这篇具有很好参考价值的文章主要介绍了DS18B20-STM32温度读取。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

command

DS18B20-STM32温度读取

data

DS18B20-STM32温度读取
高地位组合即为温度数据

1. 初始化时钟

DS18B20-STM32温度读取

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.主机写入数据

DS18B20-STM32温度读取


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.读时序

DS18B20-STM32温度读取

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文章来源地址https://www.toymoban.com/news/detail-506407.html

到了这里,关于DS18B20-STM32温度读取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 Proteus仿真水箱水塔水位温度控制系统DS18B20 -0065

    STM32 Proteus仿真水箱水塔水位温度控制系统DS18B20 -0065 Proteus 仿真小实验: STM32 Proteus仿真水箱水塔水位温度控制系统DS18B20 -0065 功能: 硬件组成:STM32F103C8单片机 +LCD1602显示器+ADC220V转3.3V电路+DS18B20温度+多个按键(设置温度和水位)+继电器模拟加热+继电器模拟加水。 1.人工

    2024年02月15日
    浏览(39)
  • 【基于STM32F103C8T6的DS18b20温度检测系统】

    库函数是ST公司针对STM32系列微控制器提供的一套API,可以方便地实现各种功能。下面是一个基于STM32F103C8T6的温度检测系统的示例,使用了STM32F10x标准库函数。 硬件部分: - STM32F103C8T6微控制器 - 电源模块 - 温度传感器模块 软件部分: - Keil C编译器 - STM32F10x_StdPeriph_Driver库文件

    2024年01月20日
    浏览(50)
  • 单片机学习笔记---DS18B20温度读取

    目录 OneWire.c 模拟初始化的时序 模拟发送一位的时序  模拟接收一位的时序 模拟发送一个字节的时序 模拟接收一个字节的时序 OneWire.h DS18B20.c DS18B20数据帧 模拟温度变换的数据帧 模拟温度读取的数据帧 DS18B20.h main.c 上一篇讲了DS18B20温度传感器的工作原理,这节开始代码演示

    2024年02月20日
    浏览(48)
  • 51单片机学习--DS18B20温度读取&温度报警器

    需要先编写OneWire模块,再在DS18B20模块中调用OneWire模块的函数 先根据原理图做好端口的声明: 接下来像之前一样把时序结构用代码模拟出来: 至此,OneWire模块就写好了,接下来在DS18B20模块中模拟数据帧: 之后只需要在main中调用即可 接下来进行一些综合的应用:温度报警

    2024年02月14日
    浏览(51)
  • 51单片机读取DS18B20温度传感器

    1 .首先我们知道DS18B20是 单总线协议 ,只有一根数据线。所以Data数据线即使发送端又是接收端,同时DS18B20内部接了弱上拉电阻(如图一所示),数据线默认为高电平。有了这些概念,我们就能进行下一步。                                                图一 (截取

    2024年02月08日
    浏览(41)
  • 【正点原子STM32连载】 第四十二章 DS18B20数字温度传感器实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

    1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html# 本章,我们将介绍STM32F103如何读取外部温度传感器的温度,来得到较为准确的环境温度。我们将学习

    2024年02月04日
    浏览(56)
  • 【TB作品】MSP430单片机 Proteus仿真 DS18B20温度 LCD1602显示器 温度读取与显示

    效果图如下: 首先,让我们先来说说DS18B20集成电路。 • DS18B20是一款采用OneWire通讯协议的集成电路,因此只需要一条线就可以与微控制器通讯。它不需要额外的电源,但是也有外部电源输入端口。 • OneWire设备具有64位的ROM代码。如我们之前所说,这64位的前8位是家族代码,中间

    2024年02月08日
    浏览(69)
  • stm32之DS18B20

            DS18B20与stm32之间也是通过单总线进行数据的传输的。单总线协议在DHT11中已经介绍过。虽说这两者外设都是单总线,但时序电路却很不一样,DS18B20是更为麻烦一点的。  举例(原码补码反码转换_原码反码补码转换_王小小鸭的博客-CSDN博客):  将这两个字节的数

    2024年02月10日
    浏览(42)
  • 【嵌入式 – GD32开发实战指南(ARM版本)】第2部分 外设篇 - 第3章 温度传感器DS18B20

    DS18B20 是 DALLAS 最新单线数字温度传感器,新的\\\"一线器件\\\"体积更小、适用电压更宽、更经济。Dallas 半导体公司的数字化温度传感器 DS1820 是世界上第一片支持 \\\"一线总线\\\"接口的温度传感器。 DS18B20采用的单总线协议,也就是只需占用主机一个I/O口,无需其他外围电路,直接将

    2024年02月21日
    浏览(50)
  • STM32使用HAL库驱动DS18B20

    因为DS18B20是单总线,数据接收发送都是这根线,所以单片机配置为开漏上拉输出。 因为DS18B20对时序要求比较严格,建议用定时器延时获得微秒延时函数。 总线为48M,分频48,获得1us定时时基。 使用“void DS18B20_StartConv(void)”函数启动转换,因为转换时间需要750ms(12Bit精度)

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包