stm32f103rct6使用dht11获取温湿度并在tftlcd上显示的代码
时间: 2024-02-19 09:58:50 浏览: 172
stm32f103c8t6+OLED+DHT11+串口显示温湿度
5星 · 资源好评率100%
以下是使用STM32F103RCT6获取DHT11传感器温湿度数据并在TFTLCD上显示的代码:
```c
#include "stm32f10x.h"
#include "delay.h"
#include "ili9325.h"
GPIO_InitTypeDef GPIO_InitStructure;
void GPIO_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void Delay_us(uint32_t us)
{
uint32_t i;
while(us--)
{
i=7;
while(i--);
}
}
uint8_t ReadDHT11(void)
{
uint8_t i, j;
uint8_t data = 0, check_sum = 0;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_1);
Delay_us(1000);
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
Delay_us(18000);
GPIO_SetBits(GPIOA, GPIO_Pin_1);
Delay_us(30);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
i = 0;
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
i = 0;
while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
i = 0;
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
for(j=0; j<8; j++)
{
i = 0;
while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
i = 0;
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
if(i > 40)
data |= (1 << (7-j));
}
for(j=0; j<8; j++)
{
i = 0;
while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
i = 0;
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) && i < 100)
{
Delay_us(1);
i++;
}
if(i >= 100)
return 0;
if(i > 40)
check_sum |= (1 << (7-j));
}
if(check_sum == (data>>8))
return data;
else
return 0;
}
int main(void)
{
uint8_t temp, humi;
char buffer[20];
SystemInit();
Delay_Init();
GPIO_Configuration();
ILI9325_Init();
ILI9325_Clear(0xFFFF);
while(1)
{
temp = ReadDHT11();
humi = ReadDHT11();
sprintf(buffer, "Temp: %d.%dC", temp>>8, temp&0xff);
ILI9325_Puts(50, 50, buffer, 0x0000, 0xFFFF);
sprintf(buffer, "Humi: %d.%d%%", humi>>8, humi&0xff);
ILI9325_Puts(50, 100, buffer, 0x0000, 0xFFFF);
Delay_Ms(1000);
ILI9325_Clear(0xFFFF);
}
}
```
该代码通过STM32F103RCT6的GPIO口读取DHT11传感器的数据,然后将温度和湿度值显示在TFTLCD上。注意,该代码需要先初始化GPIO口、延时函数和TFTLCD。在本例中,我们使用的是ILI9325 TFTLCD。
阅读全文