275891381 发表于 2014-8-2 00:45:08

dht11温湿度传感器自己写头文件

piaozhiling 发表于 2015-4-1 13:47:13

亲,给一个注释哈,你这个具体是什么东西,能干什么,然后最好再给一个例子就完美了,我们玩这个Arduino的人,一般都是小白,所以,不好意思哈,我们只能是学习积攒,没有您那个功力的。

275891381 发表于 2015-4-3 16:22:35

piaozhiling 发表于 2015-4-1 13:47 static/image/common/back.gif
亲,给一个注释哈,你这个具体是什么东西,能干什么,然后最好再给一个例子就完美了,我们玩这个Arduino的人 ...


u8 wendu,shidu;
#define   DLT21                   PTP_PTP5                //数据引脚
#define   DLT21DDRDDRP_DDRP5            //数据方向控制 1输出 0输入

//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
//----校验 8位 == U8checkdata-----
u8T_data_H,T_data_L,RH_data_H,RH_data_L,checkdata;
u8T_data_H_temp,T_data_L_temp,RH_data_H_temp,RH_data_L_temp,checkdata_temp;//校验使用
u8jiaoyan;
void initdlt21(void)
{
    DLT21DDR=1;//初始化为引脚输出
    DLT21=0;//低电平
}
void delay1us(void)//1us延时自己改造下移植一下
{
    _asm(nop);_asm(nop);_asm(nop);_asm(nop);
    _asm(nop);_asm(nop);_asm(nop);_asm(nop);
    _asm(nop);_asm(nop);_asm(nop);_asm(nop);
    _asm(nop);_asm(nop);_asm(nop);_asm(nop);
    _asm(nop);_asm(nop);_asm(nop);_asm(nop);
    _asm(nop);_asm(nop);
}
void delay30us(void)
{
      int time=25;
      while(time--)delay1us();
}
u8readbytedlt21(void)
{

    u8 i,num=0,data;

    for(i=0;i<8;i++)          
    {
      while(DLT21==0);   //越过刚开始的低电平

      delay30us();//延时30ms判断高低电平 就知道输入数据为高低电平
       if(DLT21==1) //出现高电平的时候
       {
         data=data<<1;//左移一位
         data=data+1;//加1 相当于读到高电平
          while(DLT21==1);//越过高电平持续时间
       }
      else data=data<<1; //左移一位 相当于读到低电平
    }
    return data;//返回
}

u8 readdlt21(void)
{
    u8 num=0,temp=0;
    DLT21=0;
    delayms(18);
    DLT21=1;//发送一个18毫秒的上升沿,开启传感器发送数据
//   
    DLT21DDR=0;//数据方向改为输入
    delay1us();//等待输入稳定
    while(DLT21==1)
    {
       delay1us ();
       num++;
       if(num>100)//检测高电平持续时间如果超过100us 则读取出错
      goto loop;
    }
    while(DLT21==0);//如果没超过100us 越过低电平
    while(DLT21==1);//越过高电平


           RH_data_H_temp=readbytedlt21();
           RH_data_L_temp=readbytedlt21();
           T_data_H_temp=readbytedlt21();
           T_data_L_temp=readbytedlt21();
           checkdata_temp=readbytedlt21();//读数

    jiaoyan=(T_data_H_temp+T_data_L_temp+RH_data_H_temp+RH_data_L_temp);//校验
    if(jiaoyan==checkdata_temp)
    {
       RH_data_H=RH_data_H_temp;
       RH_data_L=RH_data_L_temp;
       T_data_H=T_data_H_temp;
       T_data_L=T_data_L_temp;
       checkdata=checkdata_temp;
    }
    DLT21DDR=1;//输出模式
    wendu=T_data_H;
    shidu=RH_data_H;
    loop: return 0;
}
       
页: [1]
查看完整版本: dht11温湿度传感器自己写头文件