在线仿真平台+C语言实现:STM32驱动0.96寸OLED屏幕显示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引脚名称与含义表

引脚编号 引脚名称 含义/功能
1 PB8 TIM4_CH3, PWM输出引脚之一
2 PB9 TIM4_CH4, PWM输出引脚之一
3 BOOT0 Boot选择,系统启动时工作模式选择
4 VBAT 电池电压输入,与VBAT输入端连接
5 PC13 TAMPER/WKUP, 实时钟振荡器字节功能, 触摸检测引脚
6 OSC_IN 外部时钟输入,双速内核时钟输入引脚
7 OSC_OUT 外部时钟输出,双速内核时钟输出引脚
8 NRST 复位引脚,复位状态表示
9 VSSA 模拟地,模拟电源地
10 VDDA 模拟电源,模拟电源
11-18 PA0-PA7 ADC1_IN0-ADC1_IN7, 模拟输入引脚之一
19-20 PB0-PB1 ADC1_IN8-ADC1_IN9, 模拟输入引脚之一
21 VSS 地,数字电源地
22 VDD 电源,数字电源
23 PA8 TIM1_CH1, PWM输出引脚之一
24 PA9 USART1_Tx, USART1的Tx引脚
25 PA10 USART1_Rx, USART1的Rx引脚
26 PA11 USB_DM, USB数据信号
27 PA12 USB_DP, USB数据信号
28-33 PA13-PA15, PB3, PB4 JTMS, JTCK/SWCLK, JTDI, JTDO/TRACESWO, JNTRST, 串行线调试引脚
34-35 PB6-PB7 I2C1_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时钟引脚。

猜你喜欢

转载自blog.csdn.net/m0_73500130/article/details/140912163