问下dht11这样该怎么改才好总感觉不对

2019-07-15 18:17发布

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit DHT11=P1^0;
  6. uchar wdz,wdx,sdz,sdx,jy,temp;
  7. uchar code duanxuan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  8. uchar code weixuan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} ;
  9. uchar xianshi[8];
  10. int num;
  11. uchar bai,shi,ge;
  12. void Inittimer0(void);
  13. void DHT11init();
  14. void DHT11receive();
  15. void display();
  16. void DHT11read();
  17. void delay20ms();
  18. void delay30us();
  19. void main()
  20. {
  21.          InitTimer0();
  22.         while(1)
  23.         {
  24.                  DHT11read();
  25.             display();
  26.         }
  27. }
  28. void delay20ms(void)   //误差 0us
  29. {
  30.     unsigned char a,b;
  31.     for(b=215;b>0;b--)
  32.         for(a=45;a>0;a--);
  33.     _nop_();  //if Keil,require use intrins.h
  34.     _nop_();  //if Keil,require use intrins.h
  35. }
  36. void delay30us(void)   //误差 0us
  37. {
  38.     unsigned char a,b;
  39.     for(b=3;b>0;b--)
  40.         for(a=3;a>0;a--);
  41. }
  42. void InitTimer0(void)
  43. {
  44.     TMOD = 0x01;
  45.     TH0 = 0x3C;
  46.     TL0 = 0xB0;
  47.     EA = 1;
  48.     ET0 = 1;
  49.     TR0 = 1;
  50. }
  51. void Timer0Interrupt(void) interrupt 1
  52. {
  53.         uchar a;
  54.         a++;
  55.     TH0 = 0x3C;
  56.     TL0 = 0xB0;
  57.     if(a>=2)
  58.         {
  59.                 a=0;
  60.                 DHT11init();
  61.         }
  62. }
  63. void DHT11init()
  64. {
  65.         DHT11=0;
  66.         delay20ms();
  67.         DHT11=1;
  68. }
  69. void DHT11receive()
  70. {
  71.         uchar a;
  72.         for(a=0;a<8;a++)
  73.         {
  74.                 while(!DHT11);
  75.                 delay30us();
  76.                 if(DHT11==1)
  77.                 {
  78.                         temp=temp+1;
  79.                         temp=_cror_(temp,1);        
  80.                 }
  81.                 if(DHT11==0)
  82.                 {
  83.                         temp=_cror_(temp,1);        
  84.                 }
  85.                 while(DHT11);
  86.         }
  87. }
  88. void DHT11read()
  89. {
  90.         while(DHT11);
  91.         while(!DHT11);
  92.         DHT11receive();
  93.         sdz=temp;
  94.         temp=0;
  95.         DHT11receive();
  96.         sdx=temp;
  97.         temp=0;
  98.         DHT11receive();
  99.         wdz=temp;
  100.         temp=0;
  101.         DHT11receive();
  102.         wdx=temp;
  103.         temp=0;
  104.         DHT11receive();
  105.         jy=temp;
  106.         temp=0;
  107. }
  108. void display()
  109. {
  110.         uchar i;
  111.         num=sdz;
  112.         bai=num/100;
  113.         shi=num%100/10;
  114.         ge=num%10;
  115.         xianshi[1]=duanxuan[bai];
  116.         xianshi[2]=duanxuan[shi];
  117.         xianshi[3]=duanxuan[ge];
  118.         for(i=0;i<4;i++)
  119.         {
  120.                 P2=~xianshi<i>;
  121.                 P3=weixuan<i>;
  122.                 delay20ms();
  123.         }

  124. }</i></i>
复制代码

显示函数稍微慢了点没关系我造的其他问题和我说说

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。