基于stm32和keil的温湿度显示
时间: 2023-10-19 20:29:16 浏览: 171
以下是基于Keil MDK和HAL库的示例代码,用于读取DHT11传感器的温湿度值并在LCD上显示:
```c
#include "stm32f1xx_hal.h"
#include "dht11.h"
#include "lcd1602.h"
/* 定义DHT11的GPIO口 */
#define DHT11_GPIO_Port GPIOA
#define DHT11_Pin GPIO_PIN_0
/* 定义LCD1602的I2C地址 */
#define LCD1602_ADDR 0x27
/* 定义DHT11的数据结构体 */
DHT11_Data_TypeDef DHT11_Data;
int main(void)
{
/* 初始化HAL库 */
HAL_Init();
/* 初始化系统时钟 */
SystemClock_Config();
/* 初始化DHT11 */
DHT11_Init(&DHT11_Data, DHT11_GPIO_Port, DHT11_Pin);
/* 初始化LCD1602 */
LCD1602_Init(LCD1602_ADDR);
while (1)
{
/* 读取DHT11的温湿度值 */
if (DHT11_Read(&DHT11_Data) == DHT11_OK)
{
/* 显示温湿度值 */
char str[16];
sprintf(str, "Temp:%d.%dC", DHT11_Data.Temperature / 10, DHT11_Data.Temperature % 10);
LCD1602_WriteString(0, 0, str);
sprintf(str, "Humi:%d.%d%%", DHT11_Data.Humidity / 10, DHT11_Data.Humidity % 10);
LCD1602_WriteString(0, 1, str);
}
/* 延时 */
HAL_Delay(2000);
}
}
```
其中,dht11.h和dht11.c文件中定义了DHT11_Init()和DHT11_Read()函数,用于初始化DHT11并读取温湿度值;lcd1602.h和lcd1602.c文件中定义了LCD1602_Init()和LCD1602_WriteString()函数,用于初始化LCD1602并在指定位置写入字符串。需要注意的是,LCD1602的显示需要使用I2C通信,因此代码中使用了HAL库提供的I2C读写函数。
阅读全文