利用stm32f103c6t6和DHT11实现温湿度测量
制作出来的实物图如下:
STM32单片机源程序如下:
- #include "stm32f10x.h" // Device header
- #include "Delay.h"
- #define MCU_Output 1
- #define MCU_Input 0
- extern uint8_t DHT11_exist_Plag;// DHT11状态标志位,0表示DHT11不存在,1表示DHT11存在
- extern uint8_t Hum_Tem_Data[];// 存放温湿度数据数组
- /****
- *@brief 引脚初始化,将DHT11与PA10相连
- *@parameter MCU_State:MCU_State=1时,单片机引脚配置为输出模式。MCU_State=0则配置为输入模式
- *@ReturnValue 无
- */
- void DHT11_DataPin_Init(uint8_t MCU_State)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
- GPIO_InitTypeDef GPIO_InitStructure;
- if(MCU_State)
- {
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
- }else
- {
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
- }
- GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- }
- /****
- *@brief DHT11起始信号
- *@parameter
- *@ReturnValue
- */
- void DHT11_Start(void)
- {
- Delay_s(1);
- DHT11_DataPin_Init(MCU_Output);
- GPIO_SetBits(GPIOA,GPIO_Pin_10);
- GPIO_ResetBits(GPIOA,GPIO_Pin_10);
- Delay_ms(20);
- GPIO_SetBits(GPIOA,GPIO_Pin_10);
- Delay_us(30);
- DHT11_DataPin_Init(MCU_Input);
- if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==0)
- {
- DHT11_exist_Plag=1;
- while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==0);
- while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==1);
- }
- }
- /****
- *@brief DHT11温湿度测量
- *@parameter 无
- *@ReturnValue 无
- */
- void DHT11_GetData(void)
- {
- int8_t i,j,Temp=0x00;
- if(DHT11_exist_Plag==1)// 检测DHT11是否存在,若DHT11不存在,则不必进行下面步骤
- {
- for(j=0;j<5;j++)
- {
-
- for(i=0;i<8;i++)
- {
- while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==0);
- Delay_us(30);
- if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==1)
- {
- Temp=Temp|(0x80>>i);// DHT11数据高位先出
- while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==1);
- }
- }
- Hum_Tem_Data[j]=Temp;
- Temp=0x00;
- }
- if(Hum_Tem_Data[0]+Hum_Tem_Data[1]+Hum_Tem_Data[2]+Hum_Tem_Data[3]!=Hum_Tem_Data[4])// 校验数据是否正确,若不正确则数组全部写1
- {
- Hum_Tem_Data[0]=0xff;
- Hum_Tem_Data[1]=0xff;
- Hum_Tem_Data[2]=0xff;
- Hum_Tem_Data[3]=0xff;
-
- }
- }else
- {
- DHT11_Start();
- }
- }
复制代码
DHT11_数据手册.pdf
(681.04 KB, 下载次数: 29)
Keil代码下载:
Keil代码.7z
(176.88 KB, 下载次数: 107)
|