DHT11温湿度传感器C语言读取例程
#include “stm8s.h”
#include “tim1.h”
#include <stdarg.h>
void Init_UART1(void);
void UART1_printf( uint8_t *Data,…);
typedef struct
{
uint8_t humi_int;
uint8_t humi_deci;
uint8_t temp_int;
uint8_t temp_deci;
uint8_t check_sum;
} DHT11_Data_TypeDef;
uint8_t DHT11_Read_TempAndHumidity(DHT11_Data_TypeDef * DHT11_Data);
void main(void)
{
DHT11_Data_TypeDef DHT11_Data;
CLK_HSICmd(ENABLE);//开始内部高频RC
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//不分频
// GPIO_Init(GPIOA, GPIO_PIN_3, GPIO_MODE_IN_PU_IT);
GPIO_Init(GPIOA,GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST);
// IWDG_Conf();
Tim1_Init();
//Tim2_Timer_Init();
Init_UART1();
enableInterrupts();
UART1_printf("\r\n***dht11 温湿度传感器实验***\r\n");
while (1)
{
if( DHT11_Read_TempAndHumidity ( & DHT11_Data ) == SUCCESS)
{
UART1_printf("\r\n\r\n湿度为%d.%d %RH ,温度为 %d.%d℃ \r\n",
DHT11_Data.humi_int,DHT11_Data.humi_deci,DHT11_Data.temp_int,DHT11_Data.temp_deci);
}
delay_ms(7200);
}
}
static uint8_t DHT11_ReadByte ( void )
{
uint8_t i, temp=0;
for(i=0;i<8;i++)
{
/*每bit以50us低电平标置开始,轮询直到从机发出 的50us 低电平 结束*/
while(GPIO_ReadInputPin(GPIOA,GPIO_PIN_3)==RESET);
/*DHT11 以26~28us的高电平表示“0”,以70us高电平表示“1”,
*通过检测 x us后的电平即可区别这两个状 ,x 即下面的延时
*/
delay_ms(2);//延时x us 这个延时需要大于数据0持续的时间即可
if(G