DHT11

来源:互联网 发布:淘宝策划工资多少 编辑:程序博客网 时间:2024/05/21 22:40
DHT11你到底哪里出错了   有心人帮我看看  我把代码贴了
#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int// #define size 5//  #define ERROR 0sbit DHT=P2^0;uchar flag;uchar  value_arr[5];uchar temp,shidu;//此表为 LED 的字模, 共阴数码管 0-9  - unsigned char code   arr[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};  //段码控制void delay10us(){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}void delayms(uint i){uchar x,y;for(x=i;x>0;x--){for(y=124;y>0;y--);}}uchar readvalue()  //读一字节{uchar dat=0,i;for(i=8;i>0;i--){DHT=0;delay10us();delay10us();delay10us();delay10us();delay10us();DHT=1;DHT=dat&0x80;if(DHT==0){delay10us();delay10us();delay10us();}else{delay10us();delay10us();delay10us();delay10us();delay10us();delay10us();delay10us();  /*while(DHT!=0){dat=1;}  */}dat<<=1;}DHT=0;delay10us();delay10us();delay10us();delay10us();delay10us();return dat;}void readtempandshidu(void) //读数据{uchar i=0,check_dat=0,count=0;EA=0;DHT=0;delayms(18);//if(flag==18)//{//flag=0;DHT=1;delay10us();delay10us();delay10us();//delay10us();DHT=0;while(DHT==0&&count++<20);DHT=1;while(DHT!=0&&count++<20);/*while(DHT==0){delay10us();delay10us();delay10us();delay10us();delay10us();delay10us();delay10us();delay10us();}DHT=1;delay10us();delay10us();delay10us();delay10us();delay10us();delay10us();delay10us();delay10us();DHT=0; */for(i=0;i<5;i++){value_arr[i]=readvalue();if(i!=4){check_dat+=value_arr[i];}}if(check_dat==value_arr[4]){shidu=value_arr[0];temp=value_arr[2];DHT=1;EA=1;}//}/* else { EA=1;//return 0; } */} void display(uchar dat){uchar ge,shi,bai;bai=dat%1000/100;shi=dat%100/10;ge=dat%10;P1=0XFE;P0=arr[bai];delayms(2);P1=0XFD;P0=arr[shi];delayms(2);P1=0XFB;P0=0X80;delayms(2);P1=0xf7;P0=arr[ge];}  void  init0(){TMOD=0X01;TH0=(65535-50000)%256;TL0=(65535-50000)/256;EA=1;ET0=1;TR0=1;}void t0() interrupt 1{TH0=(65535-50000)%256;TL0=(65535-50000)/256;flag++;}void main(){uchar biao=0;delayms(1000);readtempandshidu();delayms(3000);init0();while(1){if(flag==60){flag=0;biao++;readtempandshidu();}if(biao%3==0){display(temp);}else{display(shidu);}}}