极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9518|回复: 2

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

[复制链接]
发表于 2014-8-2 00:45:08 | 显示全部楼层 |阅读模式

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-4-1 13:47:13 | 显示全部楼层
亲,给一个注释哈,你这个具体是什么东西,能干什么,然后最好再给一个例子就完美了,我们玩这个Arduino的人,一般都是小白,所以,不好意思哈,我们只能是学习积攒,没有您那个功力的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-3 16:22:35 | 显示全部楼层
piaozhiling 发表于 2015-4-1 13:47
亲,给一个注释哈,你这个具体是什么东西,能干什么,然后最好再给一个例子就完美了,我们玩这个Arduino的人 ...


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

//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
//----校验 8位 == U8checkdata-----
u8  T_data_H,T_data_L,RH_data_H,RH_data_L,checkdata;
u8  T_data_H_temp,T_data_L_temp,RH_data_H_temp,RH_data_L_temp,checkdata_temp;//校验使用
u8  jiaoyan;
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();
}
u8  readbytedlt21(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;
}
       
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 20:03 , Processed in 0.051504 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表