部分代码来源于网络,侵权删

本文使用硬件:STM32F103C8T6最小系统板、IIC协议0.96寸OLED屏幕显示、DS18B20传感器

实现功能:在OLED上显示出DS18B20采集到的温度,精确到小数点后一位。

DS18B20.c

#include "ds18b20.h"
#include "delay.h"void DS18B20_IO_IN(void)
{GPIO_InitTypeDef  GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=DS18B20_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(DS18B20_PORT,&GPIO_InitStructure);
}void DS18B20_IO_OUT(void)
{GPIO_InitTypeDef  GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=DS18B20_PIN;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(DS18B20_PORT,&GPIO_InitStructure);
}void DS18B20_Reset(void)
{                 DS18B20_IO_OUT(); //SET PG11 OUTPUTDS18B20_DQ_OUT=0; //拉低DQDelay_us(750);    //拉低750usDS18B20_DQ_OUT=1; //DQ=1 Delay_us(15);     //15US
}u8 DS18B20_Check(void)
{   u8 retry=0;DS18B20_IO_IN();//SET PG11 INPUT     while (DS18B20_DQ_IN&&retry<200){retry++;Delay_us(1);};if(retry>=200)return 1;else retry=0;while (!DS18B20_DQ_IN&&retry<240){retry++;Delay_us(1);};if(retry>=240)return 1;      return 0;
}u8 DS18B20_Read_Bit(void)           // read one bit
{u8 data;DS18B20_IO_OUT();//SET PG11 OUTPUTDS18B20_DQ_OUT=0; Delay_us(2);DS18B20_DQ_OUT=1; DS18B20_IO_IN();//SET PG11 INPUTDelay_us(12);if(DS18B20_DQ_IN)data=1;else data=0;     Delay_us(50);           return data;
}u8 DS18B20_Read_Byte(void)    // read one byte
{        u8 i,j,dat;dat=0;for (i=1;i<=8;i++) {j=DS18B20_Read_Bit();dat=(j<<7)|(dat>>1);}                          return dat;
}void DS18B20_Write_Byte(u8 dat)
{             u8 j;u8 testb;DS18B20_IO_OUT();//SET PG11 OUTPUT;for (j=1;j<=8;j++) {testb=dat&0x01;dat=dat>>1;if (testb) {DS18B20_DQ_OUT=0;// Write 1Delay_us(2);                            DS18B20_DQ_OUT=1;Delay_us(60);             }else {DS18B20_DQ_OUT=0;// Write 0Delay_us(60);             DS18B20_DQ_OUT=1;Delay_us(2);                          }}
}void DS18B20_Start(void)// ds1820 start convert
{                                          DS18B20_Reset();    DS18B20_Check();  DS18B20_Write_Byte(0xcc);// skip romDS18B20_Write_Byte(0x44);// convert
} u8 DS18B20_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(DS18B20_PORT_RCC,ENABLE);GPIO_InitStructure.GPIO_Pin=DS18B20_PIN;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(DS18B20_PORT,&GPIO_InitStructure);DS18B20_Reset();return DS18B20_Check();
}  float DS18B20_GetTemperture(void)
{u16 temp;u8 a,b;float value;DS18B20_Start();                    // ds1820 start convertDS18B20_Reset();DS18B20_Check();     DS18B20_Write_Byte(0xcc);// skip romDS18B20_Write_Byte(0xbe);// convert        a=DS18B20_Read_Byte(); // LSB   b=DS18B20_Read_Byte(); // MSB   //temp=b;temp=(b<<8)|a;if((temp&0xf800)==0xf800){temp=(~temp)+1;value=temp*(-0.0625);}else{value=temp*0.0625;   }return value;
}

DS18B20.h

#ifndef _ds18b20_H
#define _ds18b20_H#include "sys.h"/*  DS18B20时钟端口、引脚定义 */
#define DS18B20_PORT            GPIOB
#define DS18B20_PIN             (GPIO_Pin_6)
#define DS18B20_PORT_RCC        RCC_APB2Periph_GPIOGIO操作函数
#define DS18B20_DQ_OUT PBout(6) //数据端口  PG11
#define DS18B20_DQ_IN  PBin(6)  //数据端口  PG11 u8 DS18B20_Init(void);         //初始化DS18B20
float DS18B20_GetTemperture(void);  //获取温度
void DS18B20_Start(void);       //开始温度转换
void DS18B20_Write_Byte(u8 dat);//写入一个字节
u8 DS18B20_Read_Byte(void);     //读出一个字节
u8 DS18B20_Read_Bit(void);      //读出一个位
u8 DS18B20_Check(void);         //检测是否存在DS18B20
void DS18B20_Reset(void);           //复位DS18B20   #endif

main.c

#include "stm32f10x.h"
#include "Delay.h"
#include "OLED.h"
#include "DS18B20.h"
#include "sys.h"int main()
{float temper;Delay_ms(1500);OLED_Init();DS18B20_Init();OLED_Clear();OLED_ShowString(1, 1, "T:");OLED_ShowString(1, 6, ".");while(1){   temper=DS18B20_GetTemperture();if(temper<0){OLED_ShowString(1,3,"-");temper = -temper;}else OLED_ShowString(1,3,"+");OLED_ShowNum(1,4,temper,2);   //显示温度整数部分OLED_ShowNum(1,7,(unsigned long)(temper*10)%10,1);   //显示温度小数部分Delay_ms(10);}
}

实物效果图:

工程文件百度网盘链接:链接:https://pan.baidu.com/s/17QLXeaq2mFMwrAaxpWRvRA 
提取码:1234

STM32读取DS18B20温度,并在OLED上显示相关推荐

  1. STM32小项目之dht11在oled上显示温湿度

    前言: 实现一个简单的功能,最终多个功能合起来,就是一个大项目,也叫模块化编程:本篇文章不在讲述oled的用法和代码,因为代码太多了,粘不过来,需要的可以去看我另一篇文章专门讲解oled的. 本文牵扯 ...

  2. 7.STM32C8T6+DHT11在OLED上显示 温度,湿度

    STM32C8T6+DHT11在OLED上显示 温度,湿度 平台 STM32T103C8T6 传感器:DHT11 1.DTH11的工作原理 在这里我就不读说了,在我的另一篇博客有说明,关于对DHT11 ...

  3. imx6ul linux读取DS18B20温度

    imx6ul linux读取DS18B20温度 首先尝试加载模块 root@imx6ulevk:~# modprobe w1-gpio modprobe: FATAL: Module w1-gpio ...

  4. RA4M2开发(3)----读取ISL29035数据,并在OLED上显示,串口打印

    概述 首先导入必要的库文件,包括I2C驱动和OLED驱动. 在代码中配置I2C接口,并初始化I2C驱动. 配置ISL29035传感器,包括配置传感器的工作模式和量程. 使用I2C读取ISL29035传 ...

  5. STC15F2K60S2读取DS18B20温度串口显示

    为方便大家调试,特附该程序的项目下载地址 STC15F2K60S2读取DS18B20温度实例下载地址 //************************** //程序说明:stc15f2k60s2采 ...

  6. 在OLED上显示各种各样的数据(文字、字母、图片)

    今天来说一说OLED,也同时记录一下成果. 在学习OLED之前需要知道IIC协议,不了解的可以看(IIC协议相关_dxdlnu的博客-CSDN博客) 什么是OLED? OLED_百度百科 (baidu ...

  7. ATMEGA16读取DS18B20温度,1602显示,并用proteus仿真,成功。

    ATMEGA16单片机读取DS18B20的温度数据,用lcd1602显示,并用proteus实现仿真. 实现温度的实时读取,程序中设定温度的上下限,当温度超限时报警,用led小灯进行 指示. 开发环境 ...

  8. lua编程简单实用入门教程,用NodeMCU在OLED上显示温湿度

    OLED模块介绍 OLED显示屏是指有机电激发光二极管(Organic Light-Emitting Diode,OLED),具备自发光,所以不需背光源,对比度高,厚度薄,视角广,反应速度快等特性,被 ...

  9. RA4M2开发(4)----读取ISL29035数据,并在OLED上显示,串口打印

    概述 HS3003是一种数字式温湿度传感器,可以测量环境中的温度和湿度.读取HS3003的数据需要连接传感器到一个数据采集系统,一般是微处理器或者单片机.以下是一个简单的读取HS3003数据的概述: ...

最新文章

  1. linux mysql远程连接其他服务器_Linux服务器中MySQL远程连接的开启方法
  2. 【解决方案】MySQL-5.7.9 服务无法启动-“NET HELPMSG 3534”
  3. jchdl - GSL Node
  4. 第三十一讲 非线性微分自治方程组及图解
  5. Opencv显示创建Mat对象的七种方式
  6. JavaScript错误信息
  7. asp如何将图片文件上传到mysql数据库中_怎样才能利用ASP把图片上传到数据库
  8. DataLoader 和 Dataset
  9. 基于matlab遗传算法工具箱的曲线拟合,基于Matlab遗传算法工具箱的曲线拟合
  10. pr cpu100%_PR插件Sapphire2019.52安装教程
  11. 【vue】生成条形码
  12. 计算机应用bsp什么意思,bsp文件是什么?bsp文件怎么打开?
  13. 如何使用 Selenium 在 HTML 文本输入中模拟按 Enter 键?
  14. 德艺双馨艺术家——刘文军
  15. quartus更新symbol后没反应_Quartus II使用常见问题
  16. 戴尔新电脑笔记本桌面没有计算机,自主日常维修,更换戴尔灵越15屏幕过程记录...
  17. 自定义android控件:快速检索QuickSearch
  18. @Validated和@Valid的使用
  19. 知到网课中国饮食文化单元测试试题答案总结
  20. ChatGPT之父Sam Altman:成功的13个关键要素

热门文章

  1. 论文阅读-Robust Image Retargeting via Axis-Aligned Deformation
  2. saltstack 分组
  3. 网络基础自学1 | 简要认识计算机网络及互联网发展
  4. mysql教程我爱自学网_5个相见恨晚的自学网站,每天坚持30分钟,效果显著
  5. mysql运行时间函数_mysql 时间函数
  6. 异质图综述 - Graph Neural Networks for Graphs with Heterophily: A Survey(CoRR 2022)
  7. 大数据时代新技术在智能交通中的应用
  8. 阿里云学生服务器购买以及使用入门教程(附案例学习)
  9. 计算机房工程标准,计算机房建设标准计算机房建设标准.doc
  10. 咸鱼ESP32实例—串口屏文字显示