标题: 最近弄了DHT11,做好了,分享下 [打印本页]

作者: goer.lu    时间: 2015-6-4 19:25
标题: 最近弄了DHT11,做好了,分享下
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>

typedef unsigned char  U8;
typedef unsigned int   U16;   

sbit  DataPort= P2^0 ;
U8    U8FLAG;
U8    U8temp;
U16         U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U16   U8comdata;  
U8  count;

void Delay(int j)
{      
        U8 i;
        for(;j>0;j--)
        {        
                for(i=0;i<27;i++);
        }
}
       

void  Delay_10us(void)
{
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
}
       

                         
void  dht11_init(void)
{
        U8 i;
        for(i=0;i<8;i++)          
        {
                U8FLAG=2;       
          while((!DataPort)&&U8FLAG++);
                Delay_10us();
                Delay_10us();
                Delay_10us();
          U8temp=0;
          if(DataPort)
                U8temp=1;
                U8FLAG=2;
                while((DataPort)&&U8FLAG++);                  
          if(U8FLAG==1)break;
           U8comdata<<=1;
          U8comdata|=U8temp;        
         }
          
        }

        void RH(void)
        {
          //Ö÷»úà-μí18ms
       DataPort=0;
           Delay(180);
           DataPort=1;
           Delay_10us();
           Delay_10us();
           Delay_10us();
           Delay_10us();

           DataPort=1;          
           if(!DataPort)                 //T !          
           {
           U8FLAG=2;
           while((!DataPort)&&U8FLAG++);
           U8FLAG=2;

           while((DataPort)&&U8FLAG++);         
           dht11_init();
           U8RH_data_H=U8comdata;
           dht11_init();
           U8RH_data_L=U8comdata;
           dht11_init();
           U8T_data_H=U8comdata;
           dht11_init();
           U8T_data_L=U8comdata;
           dht11_init();
           U8checkdata=U8comdata;
           DataPort=1;
           }

        }
void uart_init()
{
        TMOD = 0x20;
        TH1 = 0xfd;   
        TL1 = 0xfd;
        TR1 = 1;  
        SCON = 0x50;
        ES = 1;
        EA = 1;  
        TI = 0;
        RI = 0;
}


void main()
{
        uart_init();
        Delay(1);
        while(1)
        {  
          RH();
                U8RH_data_L=U8RH_data_L>>8;
                TI=1;
                ES=0;
                printf("目前温度是:");
                printf("%d",U8T_data_H);
                printf("摄氏度");
                printf(" \r\n");
                printf(“目前的湿度是");
                printf("%d",U8RH_data_L);
                printf("%%");
                printf("\r\n");
          Delay(20000);
        }
       
}

好东西就要分享


作者: admin    时间: 2015-6-4 20:40
分享万岁,这个应该是串口显示的吧!!
作者: lehigh    时间: 2016-4-16 11:05
看了,不错,真好
作者: WFX777888    时间: 2016-11-19 18:11
谢谢分享资料
作者: 5511hh    时间: 2017-4-12 18:06
谢谢分享,串口输出一切正常
作者: 一方大佬    时间: 2017-4-16 14:01
这个怎么和别的不一样啊?这里边U8、U6的是什么啊
作者: cp66    时间: 2017-8-24 13:46
没有显示啊
作者: 持勤补拙    时间: 2017-9-2 22:15
一方大佬 发表于 2017-4-16 14:01
这个怎么和别的不一样啊?这里边U8、U6的是什么啊

是位数长度
作者: 持勤补拙    时间: 2017-9-2 22:16
串口显示
作者: molo    时间: 2018-11-22 12:25
谢谢分享!
作者: gzhoney    时间: 2018-12-4 20:37
刚好需要,感谢感谢
作者: 51lcx    时间: 2018-12-5 14:44
E4 1B D0 2E DE AE E3 98 CB 99 BA EA 66 23 90 A3 A8 E0 1B D0 99 65 23 E2 6C EB 9C A3 2A 8D E1 这个是在hex模式下显示的。??蕻銟訍宏f#悾ㄠ袡e#鈒霚R*嶀??蕻鐪藱宏f#悾ㄠ袡e#阬霕V6咇??蕻銟脨衡n#悾犱袡e#鈒霚R:嶑这个是在文本模式下显示的。在串口助手上面调试结果是这样子的。求帮助
作者: qiangge66    时间: 2018-12-10 15:05
谢谢分享
作者: molo    时间: 2018-12-18 16:25
void Delay(int j)
{      
        U8 i;
        for(;j>0;j--)
        {         
                for(i=0;i<27;i++);
        }
}
这个延时是多少呢?
作者: molo    时间: 2018-12-18 17:14
查看了一下,应该是100us.对吧?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1