基于迷你STM32开发板和DHT11的环境温湿度监测系统的c语言全代码(要求在显示屏上显示温度,湿度,达到温湿度阈值时发出警报)与设计,并且给出全部代码注释与头文件函数
时间: 2024-03-25 14:42:14 浏览: 91
以下是基于迷你STM32开发板和DHT11的环境温湿度监测系统的C语言全代码,包括注释和头文件函数。
```c
#include "stm32f10x.h"
#include "dht11.h" // DHT11传感器库
// 宏定义
#define LED_GPIO_PIN GPIO_Pin_13
#define LED_GPIO_PORT GPIOC
#define BEEP_GPIO_PIN GPIO_Pin_8
#define BEEP_GPIO_PORT GPIOB
#define DHT11_GPIO_PIN GPIO_Pin_0
#define DHT11_GPIO_PORT GPIOA
// 温湿度阈值
#define TEMP_THRESHOLD 25
#define HUMI_THRESHOLD 50
// 函数声明
void GPIO_Configuration(void);
void USART_Configuration(void);
void delay_ms(uint16_t n);
// 主函数
int main(void)
{
float temp, humi;
uint8_t status;
GPIO_Configuration();
USART_Configuration();
while (1)
{
status = DHT11_Read_Data(&temp, &humi); // 读取温湿度数据
if (status == SUCCESS)
{
printf("Temp: %.1f C, Humi: %.1f %%\n", temp, humi); // 在串口终端上显示温湿度
if (temp > TEMP_THRESHOLD || humi > HUMI_THRESHOLD) // 判断是否超过阈值
{
GPIO_SetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN); // 发出警报
GPIO_SetBits(LED_GPIO_PORT, LED_GPIO_PIN); // 打开LED灯
}
else
{
GPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN); // 关闭警报
GPIO_ResetBits(LED_GPIO_PORT, LED_GPIO_PIN); // 关闭LED灯
}
}
else
{
printf("Read DHT11 error.\n");
}
delay_ms(1000); // 延时1秒
}
}
// GPIO初始化函数
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);
// LED初始化
GPIO_InitStructure.GPIO_Pin = LED_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStructure);
// 蜂鸣器初始化
GPIO_InitStructure.GPIO_Pin = BEEP_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(BEEP_GPIO_PORT, &GPIO_InitStructure);
// DHT11传感器初始化
GPIO_InitStructure.GPIO_Pin = DHT11_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStructure);
}
// 串口初始化函数
void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
// 延时函数
void delay_ms(uint16_t n)
{
uint32_t i, j;
for (i = 0; i < n; i++)
for (j = 0; j < 2000; j++);
}
```
以上是环境温湿度监测系统的完整代码,包括GPIO和USART的初始化函数,以及温湿度读取和阈值判断的主要逻辑。通过调用DHT11传感器库中的函数,可以方便地读取温湿度数据,并根据阈值控制LED灯和蜂鸣器发出警报。同时,通过USART串口通信,可以将温湿度数据输出到终端上进行实时监测。
阅读全文