微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > DHT11温湿度和STC12C5A60S2的程序,读出来的数据有问题,求教用过的高手!

DHT11温湿度和STC12C5A60S2的程序,读出来的数据有问题,求教用过的高手!

时间:10-02 整理:3721RD 点击:
程序如下:
#include<reg52.h>
#include<intrins.h>
sbit dat=P1^0;
sbit P1_2=P1^2;
unsigned char rh_z,rh_x,th_z,th_x,xy;
void delay20ms(void)   //误差 -0.000000000002us
{
    unsigned char a,b,c;
    for(c=14;c>0;c--)
        for(b=168;b>0;b--)
            for(a=22;a>0;a--);
}
void delay40us(void)   //误差 -0.033275462963us
{
    unsigned char a,b;
    for(b=43;b>0;b--)
        for(a=1;a>0;a--);
}
void delay80us(void)   //误差 -0.066550925926us
{
    unsigned char a;
    for(a=218;a>0;a--);
}
void delay28us(void)   //误差 0us
{
    unsigned char a;
    for(a=81;a>0;a--);
}
void delay1s(void)   //误差 -0.000000000056us
{
    unsigned char a,b,c;
    for(c=182;c>0;c--)
        for(b=164;b>0;b--)
            for(a=99;a>0;a--);
}

void delay50us(void)   //误差 0us
{
    unsigned char a;
    for(a=147;a>0;a--);
}
void init_dht11()          //dht11程序初始化
{
unsigned char x=0;
do{
dat=1;
dat=0;
delay20ms();
dat=1;
delay40us();
x=dat;
}while(x);
dat=1;
delay80us();
}
unsigned char readbyte()           //读取一个字节数据(8位数据)
{
unsigned char da=0;
unsigned char a=0,temp;
for(a=0;a<8;a++)
{
loop1:
dat=0;
delay50us();
dat=1;
temp=dat;
if(temp==0)
{
goto loop1;
}
delay28us();
if(dat)
{
da|=dat;
dat=0;
}
da<<=1;
}
return(da);
}
void re_dht()         //读取32位数据
{
init_dht11();
rh_z=readbyte();
rh_x=readbyte();
th_z=readbyte();
th_x=readbyte();
xy=readbyte();
dat=1;
}

void main()
{
unsigned char a=0;
unsigned char e[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x80,0xf8,0x80,0x90};
while(1)
{
re_dht();
P0=e[th_z/10];
P2=0xef;
delay1s();
P0=e[th_z%10];
P2=0xdf;
delay1s();

}
}
我先做了一个读取温度的,结果温度显示不正确,求教,哪里出了问题,怎么保证数据读取正确,谢谢。
STC12C5A60S2是单时钟的单片机。
P0端口是数码管段选,P2端口是数码管位选。

具体问题?你试过对显示模块进行修改?

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

网站地图

Top