微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机与DHT11温湿度传感器(最简单程序)

51单片机与DHT11温湿度传感器(最简单程序)

时间:10-02 整理:3721RD 点击:
#include<reg52.h>//用KEIL编写的程序
#include "temp.h"
sbit a=P3^0;
sbit b=P3^1;
sbit c=P3^2;
unsigned char k,l;
extern unsigned char  num[4];
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char dot0,shi,ge,dot1,shi1,ge1;
void delay2();
void main()
{
        while(1)
        {
                k=qudong();
                shi=num[2]/10%10;
                ge=num[2]%10;
                 dot0=num[3]/100;
                shi1=num[0]/10%10;
                ge1=num[0]%10;
                dot1=num[1]/100;
                delay2();
        }
}
void delay2()
{
        unsigned char m,n;
        for(m=3;m>0;m--)
        for(n=110;n>0;n--)
       
                for(k=0;k<6;k++)
                {           l=200;
                        switch(k)
                        {
                                case 0:a=0;b=0;c=0;P0=table[shi];while(l--);break;
                                case 1:a=1;b=0;c=0;P0=table[ge];while(l--);break;
                                case 2:a=0;b=1;c=0;P0=table[dot0];while(l--);break;
                                case 3:a=1;b=1;c=0;P0=table[shi1];while(l--);break;
                                case 4:a=0;b=0;c=1;P0=table[ge1];while(l--);break;
                                case 5:a=1;b=0;c=1;P0=table[dot1];while(l--);break;
                        }
                }
}
#ifndef _TEMP_H_//"temp.h"头文件
#define _TEMP_H
#include<reg52.h>
sbit send=P1^1;
unsigned char qudong();
#endif

#include"temp.h"//模块化编程
#include<reg52.h>
unsigned char t;
unsigned char  num[5];
unsigned char i,j;
void delay(unsigned char x)
{
        unsigned char y;
        for(;x>0;x--)
        for(y=110;y>0;y--);
}
void delay1()
{
        unsigned char i;
        i=10;
        for(;i>0;i--);
}
void star()
{
        TH0=0;
        TL0=0;
        TMOD=0x01;
        ET0=1;
        EA=1;
        TR0=0;
}
unsigned char qudong()
{
        star();
        send=1;
        delay(20);
        send=0;
        delay(20);
        send=1;
        while(send==1);
        delay1();
        while(send==0);
        delay1();
        while(send==1);
        for(j=0;j<5;j++)
        for(i=0;i<8;i++){
        while(send==0);TR0=1;
        while(send==1);TR0=0;
        if(TL0>20&&TL0<30)num[j]=(num[j]<<1)|0;
        else num[j]=(num[j]<<1)|1;
        TL0=0;
        }
        send=1;
        delay(20);
        return 0;
}

可以具体解释一下吗,我不是很懂

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top