stm32学习:DHT11+0.96寸oled屏

目录

材料

接线

步骤

stm32clube配置

配置gpio口

配置IIC,OLED

生成项目

打开项目编辑

加入dht11和oled文件到项目中

将.c文件加入到项目中,然后编译

修改main代码

烧录后就会在oled上出现温湿度

注意


材料

  1. stmf103c8t6
  2. dht11
  3. oled(IIC,四针)

接线

dht11接A7,oled接IIC的B6和B7

步骤

stm32clube配置

stm32学习:DHT11+0.96寸oled屏_第1张图片

stm32学习:DHT11+0.96寸oled屏_第2张图片

stm32学习:DHT11+0.96寸oled屏_第3张图片

弄完按一下enter

配置gpio口

stm32学习:DHT11+0.96寸oled屏_第4张图片

配置IIC,OLED

stm32学习:DHT11+0.96寸oled屏_第5张图片

生成项目

stm32学习:DHT11+0.96寸oled屏_第6张图片

stm32学习:DHT11+0.96寸oled屏_第7张图片

打开项目编辑

加入dht11和oled文件到项目中

将dht11和oled的.c文件加入到项目根目录的Core文件夹里的Src里

将dht11和oled的.h文件加入到项目根目录的Core文件夹里的Inc里

文件在开头,有资源,可以下载

将.c文件加入到项目中,然后编译

stm32学习:DHT11+0.96寸oled屏_第8张图片

修改main代码

#include "main.h"
#include "i2c.h"
#include "gpio.h"
#include "dht11.h"
#include "oled.h"
#include 
#include 
#include 

void SystemClock_Config(void);
int main(void)
{
  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();
  MX_I2C1_Init();
  
  char *name1;
  char *name2;
  char datas[5];
  
	//1. OLED初始化//2. 选择一个位置//2.1 确认页寻址模式
	Oled_Init();
	Oled_Write_Cmd(0x20);
	Oled_Write_Cmd(0x02);
	Oled_Screen_Clear();
	  
	name1 = (char *) malloc(20);
	name2 = (char *) malloc(20);
  while (1)
  {
	//温湿度
	HAL_Delay(1000);
	Read_Data_From_DHT();
	
	HAL_Delay(1000);
	if(two==0)
	{
		sprintf(name1, "Temp  %d.%d ", datas[2], datas[3]);
		sprintf(name2, "Humi  %d.%d ", datas[0], datas[1]);
		Oled_Show_Str(1,0,name1);
		Oled_Show_Str(2,0,name2);
	}
	HAL_Delay(1000);
  }
}

烧录后就会在oled上出现温湿度

注意

  1. 我的dht11代码里有一个one和一个two,有时会检测不出来,one就是测试一段时间有没有反应,没反应就会退出,如果检测出来,就会让two标志位变成1,只要判断是否是1就可以知道什么时候打印了
  2. oled有一个oled.c  oled.h  oledfont.h三个文件,dht11有一个dht11.c  dht11.h两个文件
  3. 可以配置多一个灯的gpio口,检测程序是否有没有正常运行,作者懒
  4. 整个项目在文章头,可以自行下载

你可能感兴趣的:(stm32,stm32,学习,嵌入式硬件)