用stm32f103,代码实现温湿度实时显示(表盘式/表盘+柱状) 温湿度采集,采样间隔2s(要求采用定时器中断产生) 同时显示温度和湿度表盘,刻度自行设置
时间: 2024-02-07 10:02:14 浏览: 54
基于STM32F103单片机设计的DHT11温湿度OLED屏显示程序软件源代码.zip
5星 · 资源好评率100%
好的,这是一个基于STM32F103的温湿度实时显示的代码实现。我们可以使用DHT11传感器来采集温湿度数据,并使用定时器中断来控制采样间隔。关于表盘式或表盘+柱状的显示,我们可以使用OLED屏幕来实现。
首先,我们需要初始化DHT11传感器和OLED屏幕。接下来,我们需要设置一个定时器中断,每隔2秒钟触发一次,用于采集温湿度数据并更新OLED显示。具体的代码实现如下:
```c
#include "stm32f10x.h"
#include "dht11.h"
#include "oled.h"
int main(void)
{
// 初始化DHT11传感器
DHT11_Init();
// 初始化OLED屏幕
OLED_Init();
// 设置定时器中断,每隔2秒钟触发一次
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 2000 - 1;
TIM_TimeBaseStructure.TIM_Prescaler = 7200 - 1;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM2, ENABLE);
// 进入主循环,等待定时器中断触发
while (1)
{
}
}
// 定时器中断处理函数
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
// 采集温湿度数据
DHT11_Read_Data();
uint8_t temperature = DHT11_Data[2];
uint8_t humidity = DHT11_Data[0];
// 更新OLED显示
OLED_Clear();
OLED_ShowString(0, 0, "Temperature:");
OLED_ShowString(0, 2, "Humidity:");
OLED_DrawCircle(64, 32, 30);
OLED_DrawLine(64, 32, 64 + 20 * temperature / 255, 32);
OLED_DrawLine(64, 32, 64, 32 - 20 * humidity / 255);
OLED_ShowNum(80, 0, temperature, 2, 16);
OLED_ShowNum(80, 2, humidity, 2, 16);
OLED_Refresh_Gram();
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
}
```
在上面的代码中,我们使用了DHT11库和OLED库来分别初始化DHT11传感器和OLED屏幕,并在定时器中断处理函数中采集温湿度数据并更新OLED显示。在更新OLED显示时,我们使用了OLED的函数来绘制表盘和柱状图,并将温度和湿度数据显示在屏幕上。
需要注意的是,上面的代码只是一个示例,具体的实现可能需要根据具体的硬件和需求进行修改。
阅读全文