TI CC2530 学习笔记-21-NewBit-CC2530-DHT11-温湿度传感器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21352095/article/details/83047906

TI CC2530 学习笔记-目录

功能描述:程序运行正常时Radio Shield UNO 板子上的红灯(P06)会1s翻转一次,同时OLED和串口会打印温湿度数据 eg. T&H: 30, 86。

1、屏蔽宏:TIMER_DELAY、TIMER_REFINE,运行在阻塞延时模式(使用halMcuMicroWait()延时),

使用halMcuMicroWait(20); 延时20ms后,使用下下面的函数计时,主要是获取40bit数据;

static void vGetTemHuiData(void)
{
   uint8 i =0;
   uint8 Counter =1;
  
   while(!HAL_DHT11_IO && Counter++);
   while(HAL_DHT11_IO && Counter++);//响应信号

   if(!HAL_DHT11_IO && Counter >1)//first bit
   {
     for(i = 0;  i < HAL_DHT11_DATA_BITS; i++)
     {  
        Counter=1;
        while((!HAL_DHT11_IO) && (Counter++));  //低电平
        Counter=1;
        while((HAL_DHT11_IO) && Counter++);  //高电平,可以分辨是1还是0
  
        if(Counter>50) //50是根据下面的打印取的平均值
          HalOneBusAddBit(1);
        else
          HalOneBusAddBit(0);
        
//        buff = Counter;
     
        if(u8RxBitIdx >= HAL_DHT11_DATA_BITS)
        {
             onebusState = ONEBUS_UNINIT;
            
             u8RxBitIdx =0;
            
             if(HalOneBus_Check())  //校验
             {
               HalLcdWriteStringValueValue("T&H", u8SensorValueBuff[2], 10, u8SensorValueBuff[0], 10, 3);
               printf("T&H: %d, %d\n", u8SensorValueBuff[2], u8SensorValueBuff[0]);
             }
//             for(i = 0;  i < HAL_DHT11_DATA_BITS; i++)
//             {
//              
//               printf("%03d ", buff);//打印1和0对应的Counter值
//               if(i%8 == 7)
//               printf("\n");
//             }
//             printf("\n");
         }
      }
   }
}

2、添加宏:TIMER_DELAY,运行在定时器延时模式,但是读取DHT11数据时是延时模式,使用定时器延时18毫秒后采用static void vGetTemHuiData(void)获取40bit数据;

3、添加宏:TIMER_DELAY、TIMER_REFINE,运行在定时器模式,使用中断+定时器计数读取DHT11数据,使用定时器延时18毫秒后用定时器+IO中断的方式获取40bit数据,在DHT11产生下降沿的时候(IO中断)打开定时器,那么在下一bit开始的时候就可以知道前一个bit的时间了。
DHT11

代码:NewBit-ZDK CC2530 基础例程

猜你喜欢

转载自blog.csdn.net/qq_21352095/article/details/83047906