123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #include "DHT11.h"
- #include "hi_time.h"
- void GPIO_mode_out()
- {
- IoTGpioInit(DHT11_DQ_GPIO);
- IoTGpioSetFunc(DHT11_DQ_GPIO, IOT_GPIO_FUNC_GPIO_13_GPIO);
- IoTGpioSetDir(DHT11_DQ_GPIO, IOT_GPIO_DIR_OUT); // 设置为输出模式
- }
- void GPIO_mode_in()
- {
- IoTGpioInit(DHT11_DQ_GPIO);
- IoTGpioSetFunc(DHT11_DQ_GPIO, IOT_GPIO_FUNC_GPIO_13_GPIO);
- IoTGpioSetDir(DHT11_DQ_GPIO, IOT_GPIO_DIR_IN); // 设置为输入模式
- }
- static uint8_t DHT11_DQ_IN(void)
- {
- IotGpioValue temp = {0};
- IoTGpioGetInputVal(DHT11_DQ_GPIO,&temp);
- return temp;
- }
- //Reset DHT11
- void DHT11_Rst(void)
- {
- GPIO_mode_out(); //SET OUTPUT
- DHT11_DQ_OUT_OFF; //GPIOA.0=0
- osDelay(2); //Pull down Least 18ms
- DHT11_DQ_OUT_ON; //GPIOA.0=1
- hi_udelay(30); //Pull up 20~40us
- }
- uint8_t DHT11_Check(void)
- {
- uint8_t retry=0;
- GPIO_mode_in();//SET INPUT
- while (DHT11_DQ_IN()&&retry<100)//DHT11 Pull down 40~80us
- {
- retry++;
- hi_udelay(1);
- };
- if(retry>=100)
- return 1;
- else
- retry=0;
- while (!DHT11_DQ_IN()&&retry<100)//DHT11 Pull up 40~80us
- {
- retry++;
- hi_udelay(1);
- };
- if(retry>=100)
- return 1;//chack error
- return 0;
- }
- uint8_t DHT11_Read_Bit(void)
- {
- uint8_t retry=0;
- while(DHT11_DQ_IN()&&retry<100)//wait become Low level
- {
- retry++;
- hi_udelay(1);
- }
- retry=0;
- while(!DHT11_DQ_IN()&&retry<100)//wait become High level
- {
- retry++;
- hi_udelay(1);
- }
- hi_udelay(50);//wait 40us
- if(DHT11_DQ_IN())
- return 1;
- else
- return 0;
- }
- uint8_t DHT11_Read_Byte(void)
- {
- uint8_t i,dat;
- dat=0;
- for (i=0;i<8;i++)
- {
- dat<<=1;
- dat|=DHT11_Read_Bit();
- }
- return dat;
- }
- uint8_t DHT11_Read_Data(uint8_t *temperature,uint8_t *humidity)
- {
- uint8_t buf[5];
- uint8_t i;
- DHT11_Rst();
- if(DHT11_Check()==0)
- {
- for(i=0;i<5;i++)
- {
- buf[i]=DHT11_Read_Byte();
- }
- if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
- {
- *humidity=buf[0];
- *temperature=buf[2];
- }
- }
- else
- return 1;
- return 0;
- }
|