- void DHT22_IO_OUT(void)
- {
- GPIO_InitType GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);
- GPIO_StructInit(&GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pins = GPIO_Pins_11;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
- GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz; //50
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
读取温湿度的函数为:
- uint8_t DHT22_Read_Data(uint8_t *temp,uint8_t *humi)
- {
- uint8_t buf[5];
- uint8_t i;
- DHT22_Rst();
- if(DHT22_Check()==0)
- {
- for(i=0;i<5;i++)
- {
- buf[i]=DHT22_Read_Byte();
- }
- if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
- {
- *humi=(buf[0]*256+buf[1])/10;
- *temp=(buf[2]*256+buf[3])/10;
- }
- }else return 1;
- return 0;
- }
形成显示效果的主程序为:
- int main(void)
- {
- uint8_t senflag;
- AT32_Board_Init();
- AT32_OLED_Init();
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"AT_START_F407",16);
- OLED_ShowString(0,2,"OLED & DHT22",16);
- Delay_ms(1000u);
- OLED_ShowString(0,2,"T= C H= %RH",16);
- senflag=DHT22_Init();
- if(senflag) OLED_ShowString(112,0,"NO",16);
- else OLED_ShowString(112,0,"OK",16);
- while(1)
- {
- if(!senflag)
- {
- DHT22_Read_Data(&temperature,&humidity);
- OLED_ShowNum(16,2,temperature,2,16);
- OLED_ShowNum(64,2,humidity,2,16);
- }
- Delay_ms(500u);
- }
- }