在线仿真平台+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引脚名称与含义表

引脚编号引脚名称含义/功能
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时钟引脚。

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值