k60 的DHT11时序写法注意

第一次发帖,不怎么会,承认了。就仅仅是记录一下心得

下面是时序图

  1. 初始化时序图

 

 

 

 

  2. 读取数据时序图

以上的图是从别人的博客复制的。

下面看一下我的

void DHT11WriteStart(void)//开始标志
{
    DHT11_GPIO_OUT(); //输出
    gpio_set (DTH11_PORT, 1);
    gpio_set (DTH11_PORT, 0);
    DELAY_MS(20);
    gpio_set (DTH11_PORT, 1);
    DELAY_US(30) ;
    DHT11_GPIO_IN(); //主机发送信号等待
  
}


u8 DHT11ReadByte(void)
{
  u8 temp=0,i,cout;
for(i=0;i<8;i++)
  {
     
    while( gpio_get(DTH11_PORT)==0);//DHT11输出低电平
     DELAY_US(60) ;
   
    if(gpio_get(DTH11_PORT)==1) //60us是否高电平,是标志1
      {
       while(gpio_get(DTH11_PORT)==1)
        temp|=(u8)(0x01<<(7-i));
 
       }
    
   else //否表示0
    {
      temp&=(u8)~(0x01<<(7-i));
        
   }
  
   
 }
return temp;
}

char a[5];
int temp;


//时序图编写的接受函数
void DHT11Read(void)
{   
    int count=0;
    DHT11WriteStart(); 
    if(DHT11_DATA_IN==0)
      {
       while(gpio_get(DTH11_PORT)==0);
 
        while(gpio_get(DTH11_PORT) ==1);
          
        DHT11.RH= DHT11ReadByte(); 
        DHT11.RL= DHT11ReadByte(); 
        DHT11.TH= DHT11ReadByte(); 
        DHT11.TL= DHT11ReadByte(); 
        DHT11.sum= DHT11ReadByte(); 

        DHT11_GPIO_OUT(); 
        DHT11_DATA_OUT=1; 
      }
      if(DHT11.sum== DHT11.RH+DHT11.RL+DHT11.TH+DHT11.TL) 
	{        
              
		printf("当前湿度%d.%d,当前温宿%d.%d\r\n",DHT11.RH,DHT11.RL,DHT11.TH,DHT11.TL);
		DHT11.TL=2;
	}	
   else
   {
     
      printf("\n读取错误");
    
   }

}

 

 

我调试时序的时候用了一个串口调试,重点来了,串口发送是需要很多时间,发送一下,就耽误了好多时间。导致时序不对。

如有什么问题,联系一下小弟我就行了

 

下面的csdn的资源下载,就其实网上那个免费下载的网站复制链接就不用积分, 因为我不知道这个怎么设计积分,我上传了都是5个积分的。大家都懂

https://download.csdn.net/download/zmy_zhiyu/11953066

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值