请帮我写一段关于DHT11温湿度的C语言代码,配置的IO口是STM32F103CBT6中的PC13
时间: 2023-06-10 18:05:02 浏览: 43
好的,请稍等,下面是关于DHT11温湿度的C语言代码:
```
#include "stm32f10x.h"
#define DHT11_PORT GPIOC
#define DHT11_PIN GPIO_Pin_13
void delay_us(uint32_t us)
{
if (us <= 1) {
return;
}
us *= 8;
while (us--) {
__nop();
}
}
void dht11_start_signal(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = DHT11_PIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(DHT11_PORT, &GPIO_InitStruct);
GPIO_ResetBits(DHT11_PORT, DHT11_PIN);
delay_us(18000);
GPIO_SetBits(DHT11_PORT, DHT11_PIN);
delay_us(40);
}
static uint8_t dht11_read_signal(void)
{
uint8_t i = 0;
uint8_t data = 0;
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = DHT11_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DHT11_PORT, &GPIO_InitStruct);
for (i = 0; i < 8; i++){
while (GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN) == 0);
delay_us(40);
if (GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN)){
data |= (1 << (7 - i));
}
while (GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN));
}
return data;
}
int main(void)
{
uint8_t humi_int, humi_deci, temp_int, temp_deci, check_sum;
float humi, temp;
while(1)
{
dht11_start_signal();
humi_int = dht11_read_signal();
humi_deci = dht11_read_signal();
temp_int = dht11_read_signal();
temp_deci = dht11_read_signal();
check_sum = dht11_read_signal();
if (check_sum == humi_int + humi_deci + temp_int + temp_deci) {
humi = (float)humi_int + ((float)humi_deci / 10);
temp = (float)temp_int + ((float)temp_deci / 10);
printf("humi : %3.1f, temp : %3.1f\r\n", humi, temp);
}
delay_us(2000000);
}
}
```
注意:以上代码仅供参考,请根据自己的需求进行修改和调试,谨慎使用。