STM32F103VE基于标准库下DHT11数据I2C oled显示

STM32F103VE基于标准库下DHT11数据I2C oled显示


  • 📺在1.3寸sh1106 I2C oled屏幕上显示效果:
    在这里插入图片描述
  • 当然如果修改到0.96寸ssd1306 OLED屏幕上显示也是可以的。

✅1.3寸和0.96寸驱动注意事项

驱动代码只需要修改2个地方即可。

  • oled初始化函数:
void OLED_Init(void)
{
	HZ=GB16_NUM();
	IIC_GPIO_Config();
	Write_IIC_Command(0xAE); //--display off
	Write_IIC_Command(0x02);//-设置低位列地址set low column address 注意:0.96屏幕从0x00开始写数据,1.3寸屏幕从0x02开始写数据
	......
  • 清屏函数
void OLED_Fill(u8 fill_Data)
{
	u8 m,n;
	for(m=0;m<8;m++)
	{
		Write_IIC_Command(0xb0+m);		//page0-page1
		Write_IIC_Command(0x02);//low  column start address1.3寸屏幕发送地址是从0x02开始的,0.96屏幕是从0x00地址开始的特别注意个地方!!!
		Write_IIC_Command(0x10);		//high column start address
		for(n=0;n<130;n++)
		{
			Write_IIC_Data(fill_Data);
		}
	}
}

📝主程序代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "DHT11.h"
#include "LED.h"
u8 temp = 0,humi = 0,tempL=0 ,humiL=0;
int main(void)
{

	OLED_Init();
	DHT11_Init();
	LED_Init();
	Delay_ms(200);
	OLED_Clear();
	OLED_ShowString(24,0,(u8*)"DHT11_TEST");
	/*显示温度*/
	OLED_ShowString(0,3,(u8*)"温度:");
	OLED_ShowString(58,3,(u8*)".");
	OLED_ShowString(80,3,(u8*)"℃");
  /*显示湿度*/
	OLED_ShowString(0,6,(u8*)"湿度:");
	OLED_ShowString(58,6,(u8*)".");
	OLED_ShowString(80,6,(u8*)"%");
	while (1)
	{ 

		Delay_ms(2000);
//		OLED_Clear();
		OLED_ShowNum(40,3,temp,2,0);
	  OLED_ShowNum(40,6,humi,2,0);
    OLED_ShowNum(60,6,humiL,2,0);
		OLED_ShowNum(60,3,tempL,2,0);
		DHT11_Read_Data(&temp,&tempL ,&humi,&humiL);	
		if(humi >81){
		 LED1_ON();
		}
		else {
		 LED1_OFF();
		}

  }

}

📚程序源码

链接:https://pan.baidu.com/s/1MRL3dSRUpGNbX28Gkk3Kwg 
提取码:6yox
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是基于STM32F103C8T6标准库DHT11测温代码,供参考: ```c #include "stm32f10x.h" #include "delay.h" #define DHT11_PORT GPIOC #define DHT11_PIN GPIO_Pin_3 void DHT11_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = DHT11_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DHT11_PORT, &GPIO_InitStructure); GPIO_SetBits(DHT11_PORT, DHT11_PIN); delay_ms(1000); } uint8_t DHT11_Read_Byte(void) { uint8_t i, data = 0; for(i=0; i<8; i++) { while(!GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN)); delay_us(30); if(GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN)) data |= (1<<(7-i)); while(GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN)); } return data; } uint8_t DHT11_Read_TempAndHumidity(float *Temp, float *Humidity) { uint8_t i, j, check_sum; uint8_t DHT11Data[5]; GPIO_ResetBits(DHT11_PORT, DHT11_PIN); delay_ms(18); GPIO_SetBits(DHT11_PORT, DHT11_PIN); delay_us(40); if(GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN)) return 1; delay_us(80); if(!GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN)) return 2; delay_us(80); for(i=0; i<5; i++) DHT11Data[i] = DHT11_Read_Byte(); GPIO_SetBits(DHT11_PORT, DHT11_PIN); check_sum = DHT11Data[0] + DHT11Data[1] + DHT11Data[2] + DHT11Data[3]; if(check_sum != DHT11Data[4]) return 3; *Humidity = (float)DHT11Data[0] + (float)DHT11Data[1]/10.0; *Temp = (float)DHT11Data[2] + (float)DHT11Data[3]/10.0; return 0; } int main(void) { float Temp, Humidity; DHT11_Init(); while(1) { if(DHT11_Read_TempAndHumidity(&Temp, &Humidity) == 0) { printf("Temperature: %.1f C, Humidity: %.1f%%\n", Temp, Humidity); } delay_ms(2000); } } ``` 这个程序使用了STM32F103C8T6的标准库和一个DHT11传感器来测量温度和湿度。程序首先初始化GPIO口,然后读取DHT11传感器来获取温度和湿度值。最后,程序会将读取到的温度和湿度值通过串口打印出来,然后等待2秒钟再次读取。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值