首页|资源下载
登录|注册

您现在的位置是:首页 > 技术阅读 >  【不用开发板学习STM32】DS18B20温度采集+OLED显示(文末获取代码及工程文件)

【不用开发板学习STM32】DS18B20温度采集+OLED显示(文末获取代码及工程文件)

时间:2024-01-05
关注我们更多精彩等你发现!




不用开发板学习STM32

  温度传感器

DS18B20实验

1

实验环境介绍

• 实验环境

本次实验是通过Proteus+MDK一起模拟完成的。Proteus模拟实际电路,MDK编译代码。Proteus版本是8.13,MDK版本是5.21。需要注意的是,Proteus需要安装8.8以上版本,器件库里面要支持STM32F103R8。

• 实验目的

    1.读取DS18B20的数值转换成温度,正负值都能读取;

    2.OLED12864屏幕显示当前温度,上限阈值,下限阈值;

    3.可通过按键调节温度上下限阈值;

    4.温度超过范围红色LED亮起报警,在范围内绿色LED亮起。

2

硬件电路



Proteus电路

• 主控:

STM32F103R8(之前用的是C6,但是觉得IO少了点改成了R8,本质上只有Flash和SRAM大小的区别,所以没有必要纠结)

• 时钟:

没有用外部晶振,因为Proteus只支持一种时钟树,所以这里采用内部晶振,做实验够了,倍频后是48M。

• 复位电路:

复位电路直接去掉了,因为不是实际电路,在仿真环境中感觉作用不大,还占地方。

• IO说明:

  • OLED的I2C通信SCL-PB12,SDA-PB13;

  • DS18B20的1-wrie的IO-PA11;

  • RED-LED-PB0,GREEN-LED-PB1;

  • 串口用来调试PA9和PA10;

  • 上限设置按键-PC0,下限设置按键PC1。

  • 3

    代码概述



    MDK代码目录结构

    • 代码目录概述:

    APP文件夹:主要包含应用函数的.C文件。

    BSP文件夹:主要包含底层硬件驱动的.C文件。

    MDK-ARM文件夹:主要包含STM32的启动的.S文件。

    StdPeriph_Driver文件夹:主要包含ST官方提供的标准外设驱动.C文件(不是HAL库哦)。

    CMSIS文件夹:系统内核配置文件,标准库自带的。

    • 代码内容概述:

    ↓↓↓ 主要贴一下DS18B20的代码:

    ↓↓↓复位函数,reset ds18b20

    DS18B20_IO_OUT_Pin_11(); //SET PA11 OUTPUTDS18B20_DQ_OUT_Pin_11(0); //拉低PA11Delay_DS18B20_1us(750);    //延时750usDS18B20_DQ_OUT_Pin_11(1); //拉高PA11Delay_DS18B20_1us(15); //15US

    ↓↓↓ 检测函数,检测总线上有没有 ds18b20:

    u8 retry=0; DS18B20_IO_IN_Pin_11();//SET PA0 INPUT while (DS18B20_DQ_IN_Pin_11&&retry<200) { retry++; Delay_DS18B20_1us(1); }; if(retry>=200)return 1; else retry=0; while (!DS18B20_DQ_IN_Pin_11&&retry<240) { retry++; Delay_DS18B20_1us(1); }; if(retry>=240)return 1; return 0;

    ↓↓↓ 读数值函数,读ds18b20返回的温度:

    ↓↓↓读1bit

    u8 data;DS18B20_IO_OUT_Pin_11();//SET PA0 OUTPUTDS18B20_DQ_OUT_Pin_11(0); Delay_DS18B20_1us(2);DS18B20_DQ_OUT_Pin_11(1); DS18B20_IO_IN_Pin_11();//SET PA0 INPUTDelay_DS18B20_1us(12);if(DS18B20_DQ_IN_Pin_11)data=1; else data=0; Delay_DS18B20_1us(50);  return data;

    ↓↓↓读1byte

    u8 i,j,dat;dat=0;for (i=1;i<=8;i++)  { j=DS18B20_Read_Bit_Pin_11(); dat=(j<<7)|(dat>>1);   }                return dat;

    ↓↓↓写1byte

    u8 j;u8 testb;DS18B20_IO_OUT_Pin_11();//SET PA0 OUTPUT;for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if (testb) { DS18B20_DQ_OUT_Pin_11(0);// Write 1 Delay_DS18B20_1us(2); DS18B20_DQ_OUT_Pin_11(1); Delay_DS18B20_1us(60); } else { DS18B20_DQ_OUT_Pin_11(0);// Write 0 Delay_DS18B20_1us(60); DS18B20_DQ_OUT_Pin_11(1); Delay_DS18B20_1us(2);         }}

    ↓↓↓ 更详细代码及工程文件,公众号回复关键字就能获取!!

    4

    实验结果展示



    实验实际效果



    实验实际效果

  • 开机经过初始化以后,显示欢迎界面以及当前的温度,默认上限温度是10℃,下限温度是-10℃;

  • 按下上下限设置温度设置按键后,界面切换到设置按键,按一下上限+1,下限-1。

  • 关注公众号,后台回复以下内容免费获取



    2004


    AD封装系列不用开发板学习STM32系列
    必看必读系列
    漫画电容器产品及选型指南经典PPT系列电子元器件基础普及系列
    趣味试用系列PCB知识库系列

    推荐阅读