迷你板的STM32F1 03RTC6中没有DHT11温湿度的实验例程,最近刚好用到这部分,所以根据DS18B20的实验改了一下,将它改成了温湿度的实验。
首先DHT11的接法是跟DS18B20的接法是一样的,DATA引脚接在PA0
最后把工程上传给各位,请参考
- tical-align: inherit;">#包括“dht11.h”
- #包括“delay.h”
- void DHT11_Rst(void)
- {
- DHT11_IO_OUT();
- DHT11_DQ_OUT = 0;
- delay_ms(20);
- DHT11_DQ_OUT = 1;
- delay_us(30);
- }
- u8 DHT11_Check(无效)
- {
- u8重试= 0;
- DHT11_IO_IN(); // SET INPUT
- 而(DHT11_DQ_IN &&重试<100)
- {
- 重试++;
- delay_us(1);
- };
- if(retry> = 100)返回1;
- 否则重试= 0;
- while(!DHT11_DQ_IN && retry <100)
- {
- 重试++;
- delay_us(1);
- };
- if(retry> = 100)返回1;
- 返回0;
- }
- u8 DHT11_Read_Bit(无效)
- {
- u8重试= 0;
- 而(DHT11_DQ_IN &&重试<100)
- {
- 重试++;
- delay_us(1);
- }
- 重试= 0;
- while(!DHT11_DQ_IN && retry <100)
- {
- 重试++;
- delay_us(1);
- }
- delay_us(40); //μÈ'ý40usif
- (DHT11_DQ_IN)返回1;
- 否则返回0;
- }
- u8 DHT11_Read_Byte(无效)
- {
- u8 i,dat;
- dat = 0;
- for(i = 0; 我<8; i ++)
- {
- dat << = 1;
- DAT | = DHT11_Read_Bit();
- }
- 返回数据;
- }
- u8 DHT11_Read_Data(u8 * temp,u8 * humi)
- {
- u8 buf [5];
- 我爱你
- DHT11_Rst();
- if(DHT11_Check()== 0)
- {
- for(i = 0; 我<5; i ++)//¶ÁÈ¡40λÊý¾
- {
- buf = DHT11_Read_Byte();
- }
- if((buf [0] + buf [1] + buf [2] + buf [3])== buf [4])
- {
- * humi = buf [0];
- * temp = buf [2];
- }
- }返回1;
- 返回0;
- }
- u8 DHT11_Init(无效)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOG,&GPIO_InitStructure);
- GPIO_SetBits(GPIOG,GPIO_Pin_11);
- DHT11_Rst();
- 返回DHT11_Check();
- }
- #IFNDEF __DHT11_H
- #定义__DHT11_H
- #包括“sys.h”
- #定义DHT11_IO_IN(){GPIOA-> CRL&= 0XFFFFFFF0; GPIOA-> CRL | = 8 << 0;}
- #定义DHT11_IO_OUT(){GPIOA-> CRL&= 0XFFFFFFF0; GPIOA-> CRL | = 3 << 0;}
- #限定DHT11_DQ_OUT PAOUT(0)
- #限定DHT11_DQ_IN疼痛(0)
- u8 DHT11_Init(无效); //³õʼ»DHT11
- u8 DHT11_Read_Data(u8 * temp,u8 * humi);
- u8 DHT11_Read_Byte(无效);
- u8 DHT11_Read_Bit(无效);
- u8 DHT11_Check(无效);
- void DHT11_Rst(void); #
- ENDIF
- #包括“led.h”
- #包括“delay.h”
- #包括“sys.h”
- #包括“usart.h中”
- #包括“lcd.h用于”
- #包括“ds18b20.h”
- #包括“ dht11.h“
- int main(void)
- {
- u8 t = 0;
- U8温度;
- U8湿度;
- SystemInit();
- delay_init();
- uart_init(9600);
- LED_Init();
- LCD_Init();
- POINT_COLOR = RED;
- LCD_ShowString(60,50,200,16,16“赠送STM32”);
- LCD_ShowString(60,70,200,16,16,“TEST DHT11”);
- LCD_ShowString(60,90,200,16,16,“@ ATOM ALIENTEK”);
- LCD_ShowString(60,200,200,16,16,“由莱昂改性”);
- LCD_ShowString(60,110,200,16,16,“2018年7月22日”);
- while(DHT11_Init())//DHT11³õʼ»¯
- {
- LCD_ShowString(60,130,200,16,16,“DHT11错误”);
- delay_ms(200);
- LCD_Fill(60,130,239,130 + 16,WHITE);
- delay_ms(200);
- }
- LCD_ShowString(60,130,200,16,16,“OK DHT11”);
- POINT_COLOR =蓝色; //ÉèÖÃ×ÖÌåΪÀ¶É«
- LCD_ShowString(60,150,200,16,16,“温度:C”);
- LCD_ShowString(60,170,200,16,16“HUMI:%”);
- 而(1)
- {
- if(t%10 == 0)//
- {
- DHT11_Read_Data(温度,湿度);
- LCD_ShowNum(60 + 40,150,温度,2,16);
- LCD_ShowNum(60 + 40,170,湿度,2,16);
- }
- delay_ms(10);
- 吨++;
- if(t == 20)
- {
- t = 0;
- LED0 = LED0!;
- }
- }
- }
复制代码
|