首页 > 其他分享 >在线仿真平台+C语言实现:STM32驱动0.96寸OLED屏幕显示DHT11温湿度传感器测量值

在线仿真平台+C语言实现:STM32驱动0.96寸OLED屏幕显示DHT11温湿度传感器测量值

时间:2024-08-11 10:52:36浏览次数:16  
标签:10 引脚 温湿度 电源 C语言 STM32 OLED I2C DHT11

这里推荐一款由深圳航天科技创新研究院推出的在线电路仿真软件,该软件不仅具备原理图绘制与代码编写功能,还支持在线编译代码、上传自定义代码以及进行仿真模拟,此外还能在线生成并允许下载.bin和.hex文件。

官网地址如下:Document

进入网页后先注册一个账号。  注册完账号后即可开始编写自己的仿真项目,点击 个人项目 栏

 在随后的页面点击创建项目

 给项目起一个非常Fashion非常Explosive的名字,可以的话加上内容描述,方便日后复习回顾,随后点击右侧的 电路

 接下来进入原理图绘制界面,我们可以根据自己需求来挑选MCU,挑选好后直接拖拽到画布即可

在左侧有众多模块可供选择 

 和Proteus相同的接线方式,将一个小黑块连到另一个小黑块即代表电路链接

 绘制原理图

完整版的原理图如下 :

 温湿度传感器及OLED屏幕需要加入供电。

DHT11温湿度传感器的 DATA引脚 接芯片的 PA0引脚 

OLED屏幕的 SCK(SCL)串行时钟线 接芯片的  PB6  ,SDA串行数据线 接芯片的  PB7

串口助手可有可无,需要的话 TX 接芯片的 PA10 RX 接芯片的 PA9

编写代码

点击右上角的 保存 ,随后点击 编码

 接下来就可以快乐的敲码了,在 main.c 中编写运行代码

main.c 内容如下,直接复制过去即可:

#include "stm32f10x_conf.h"
#include "sys.h"
#include "dht11.h"
#include "delay.h"
#include "usart.h"
#include "iic_oled.h"

int main(void)
{
    int temperature = 0;  	    
    int humidity = 0;    	 
    SystemInit();	// 配置系统时钟为72M
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	uart_init(115200);
    // 初始化 OLED
    IIC_OLED_Init();
    IIC_OLED_Clear();   // 清屏

    while (DHT11_Init())
    {
        printf("DHT11 is Error\n");
        delay_ms(10);
    }
    delay_ms(10);
    printf("DHT11 is OK\n"); 

    while (1)
    {

        char tempStr[12];
        snprintf(tempStr, sizeof(tempStr), "Temp: %d.%d C", temperature / 10, temperature % 10);
        IIC_OLED_ShowString(0, 0, tempStr);  // 显示温度

        char humStr[12];
        snprintf(humStr, sizeof(humStr), "Hum: %d.%d %%", humidity / 10, humidity % 10);
        IIC_OLED_ShowString(0, 5, humStr);   // 显示湿度

        delay_ms(1000); // 每秒更新一次屏幕

        while(DHT11_Read_Data(&temperature,&humidity));
        temperature = temperature;
        humidity = humidity;
        printf("temperature is %d.%d\n", temperature/10, temperature%10);
        printf("humidity is %d.%d\n", humidity/10, humidity%10);		//显示湿度
        delay_ms(10);
    }
}


项目运行  

代码编写完成后点击 保存 , 随后点击 编译 ,编译完成后可以下载源码和.bin与.hex文件

 编译完后点击 运行

再次点击 运行

运行成功:

 STM32F103C8引脚名称与含义表

引脚编号引脚名称含义/功能
1PB8TIM4_CH3, PWM输出引脚之一
2PB9TIM4_CH4, PWM输出引脚之一
3BOOT0Boot选择,系统启动时工作模式选择
4VBAT电池电压输入,与VBAT输入端连接
5PC13TAMPER/WKUP, 实时钟振荡器字节功能, 触摸检测引脚
6OSC_IN外部时钟输入,双速内核时钟输入引脚
7OSC_OUT外部时钟输出,双速内核时钟输出引脚
8NRST复位引脚,复位状态表示
9VSSA模拟地,模拟电源地
10VDDA模拟电源,模拟电源
11-18PA0-PA7ADC1_IN0-ADC1_IN7, 模拟输入引脚之一
19-20PB0-PB1ADC1_IN8-ADC1_IN9, 模拟输入引脚之一
21VSS地,数字电源地
22VDD电源,数字电源
23PA8TIM1_CH1, PWM输出引脚之一
24PA9USART1_Tx, USART1的Tx引脚
25PA10USART1_Rx, USART1的Rx引脚
26PA11USB_DM, USB数据信号
27PA12USB_DP, USB数据信号
28-33PA13-PA15, PB3, PB4JTMS, JTCK/SWCLK, JTDI, JTDO/TRACESWO, JNTRST, 串行线调试引脚
34-35PB6-PB7I2C1_SCL, I2C1_SDA, I2C总线时钟和数据引脚

DHT11介绍

DHT11传感器内部集成了一个电阻式温度传感器和一个湿度电容式传感器,通过检测这两个传感器的电阻值和电容值,来计算出当前环境的温度和湿度值。DHT11传感器通常采用单线制串行接口,其引脚主要包括VDD(电源正极)、GND(电源负极)和DATA(数据线)。

接线时,VDD引脚应连接到单片机的VCC或其他稳定的电源正极,GND引脚应连接到单片机的GND或其他电源负极。注意电源电压应在DHT11的工作范围内,通常为3.3V至5.5V。DATA引脚是DHT11与单片机之间的通信接口,应连接到单片机的某个GPIO口,为了增强信号的抗干扰能力,DATA引脚在实际使用时通常需要并联一个5K以上的上拉电阻,一般常见的小模块上已经继承,上拉电阻的作用是在单片机不进行输出以及传感器待机时,使得DATA口为高电平。 

DHT11与单片机之间的通信采用单总线协议,主机(单片机)通过DATA引脚向DHT11发送一个起始信号,该信号为一个低电平信号,持续时间至少18ms,以唤醒DHT11并进入通信状态。DHT11检测到起始信号后,会等待信号结束,然后发送一个80μs的低电平响应信号,紧接着发送一个80μs的高电平信号,表示已经准备好发送数据。DHT11开始通过DATA引脚向主机发送数据,数据格式为40位的脉冲信号,包含16位的湿度整数数据、8位的湿度小数数据(当前未使用,读出为零)、16位的温度整数数据、8位的温度小数数据(当前未使用,读出为零)以及8位的校验和。主机根据DATA引脚电平的变化接收数据,并解析出温湿度值。 

0.96寸OLED介绍 

 这里使用到的0.96寸I2C OLED屏幕的工作原理主要基于OLED(有机发光二极管)技术和I2C(Inter-Integrated Circuit,集成电路总线)通信协议,0.96寸I2C OLED屏幕通常内置驱动芯片(如SSD1306),用于接收来自I2C总线的数据,并将其存储在内部显示存储器(GDDRAM)中。驱动芯片还负责控制OLED像素点的开关和亮度调节,从而实现图像的显示。

0.96寸I2C OLED屏幕的接线相对简单,通常只需连接四根线:VCC、GND、SDA和SCL。

  1. VCC:电源正极,为OLED屏幕提供工作电压。根据屏幕规格,VCC通常连接到3.3V或5V电源。

  2. GND:电源负极,即地线,与VCC一起构成电源回路。

  3. SDA:数据线,用于在I2C总线上传输数据。SDA线连接到微控制器的I2C数据引脚。

  4. SCL(SCK):时钟线,用于同步SDA线上的数据传输。SCL线连接到微控制器的I2C时钟引脚。

标签:10,引脚,温湿度,电源,C语言,STM32,OLED,I2C,DHT11
From: https://blog.csdn.net/m0_73500130/article/details/140912163

相关文章

  • 与君初相识,犹如故人归(相遇c语言)
    标题:走进C语言的世界探索编程的奥秘1.什么是c语言2.main函数3.printf和库函数4.关键字介绍5.字符和ASCII编码6.字符串和\07.转义字符8.语句和语句分类9.注释是什么?为什么写注释?接下来让我们一起走进编程的入门一.中文是我们与人交流的方式(各种语言都......
  • 【STM32】ADC模拟数字转换-规则组单通道
    本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 ADC简介ADC时钟配置引脚模拟输入模式规则组通道选择ADC初始化 工作模式数据对齐 触发转换方式连续与单次转换模式扫描模式组内的通道个数ADC初始化框架ADC上电ADC校验 获取转换数......
  • C语言学习笔记 Day11(指针--下)
    Day11 内容梳理:目录Chapter7 指针7.6指针&函数(1)形参改变实参的值(2)字符数组作为函数参数1)合并字符串2)删掉字符串中空格(3)指针作为函数返回值Chapter7 指针7.6指针&函数(1)形参改变实参的值前文提到形参无法改变实参,但是通过使用指针就可以改变。因为在......
  • C语言进阶(6)
    1.结构体类型的声明和初始化结构体是一堆数据类型的集合体(与数组不同的是它可以是不同的数据类型)。结构体声明的是一个图纸,并不向内存申请空间,只有在设置变量的时候我们才进行划分空间给变量。结构体的变量数据类型可以理解成struct(结构体名),在初始化时我们就要牢记这个原则。......
  • 从零开始制作一个简易数字示波器,超详细看完必懂 举例基于stm32f103标准库
    为了实现使用STM32f103制作一个简易数值示波器,大体流程如下:1-模拟信号(输入)2-ADC(模数转换)(适当采样率和分辨率配置)3-DMA(直接存储器访问)(DMA搬运,减少CPU负担)4-内存缓冲区(数据转入缓冲区)5-FFT处理(频域数据)(FFT处理(可选,用于频域显示))6-显示处理(像素转换)(数据映射为......
  • 【C语言】字符函数和字符串函数
    目录一、字符函数(1)字符分类函数(2)字符转换函数二、字符串函数(1)strlen①函数原型②注意事项③模拟实现函数(2)strcpy①函数原型②注意事项③模拟实现函数(3)strcat①函数原型②注意事项③模拟实现函数(4)strcmp①函数原型②模拟实现函数(5)strncpy①函......
  • 堆总结(C语言)
    堆总结(C语言)二叉树的顺序结构及实现堆是什么堆的分类堆的实现堆的向下调整堆的向上调整堆的应用堆排序TOP-K问题思路:堆是什么堆总是一棵完全二叉树,堆是用来存完全二叉树的,如果存普通的二叉树就会浪费空间。堆(一种二叉树)使用顺序结构的数组来存储。堆不是简单的......
  • 1410、proteus仿真-STM32单片机血压体温血氧心率检测阈值报警加远程监控设计(程序+pro
    毕设帮助、开题指导、技术解答(有偿)见文未 目录方案选择单片机的选择一、设计功能二、proteus仿真图三、程序源码资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。方案选择单片机的选择方案一:AT89C51是美国ATMEL公......
  • 【时时三省】(C语言基础)操作符3
    山不在高,有仙则名。水不在深,有龙则灵。             ----CSDN时时三省&取地址操作符示例: 每个内存单元都有自己的编号编号就成为内存单元的地址&a就是找出a的地址后面可以加一个int*pa=&a是可以用来存放地址pa是用来存放地址的-pa就是一......
  • 初识c语言
    什么是c语言c语言是一门计算机编程语言,可广泛用于底层开发。c语言是一种能以简易方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。第一个c语言程序入门第一个c语言代码如下:那么其运行的结果就是打印helloworld,运行结果如下:......