找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2275|回复: 1
收起左侧

51单片机 DHT11 oled显示温湿度 人流量检测

[复制链接]
ID:517589 发表于 2020-3-21 15:08 | 显示全部楼层 |阅读模式
51单片机 DHT11 oled显示温湿度 人流量检测 蓝牙串口控制开关  
部分代码

  1. #include "reg52.h"
  2. #include "oled.h"
  3. #include<intrins.h>

  4. #define MAIN_Fosc                24000000L        //define main clock
  5. #define Baudrate                500000L                //define the baudrate
  6.                                                 //12T mode: 600~115200 for 22.1184MHZ, 300~57600 for 11.0592MHZ
  7.                                                 //1T  mode: 7200~1382400 for 22.1184MHZ, 3600~691200 for 11.0592MHZ
  8. #define BRT_Reload                (256 - MAIN_Fosc / 16 / Baudrate)        //Calculate the timer1 reload value ar 1T mode


  9. u8 person=0;
  10. u8 rec_RH,rec_TH;

  11. void DHT11_delay_us(u8 n)
  12. {
  13.     while(--n);
  14. }

  15. void DHT11_delay_ms(u8 z)
  16. {
  17.    u8 i,j;
  18.    for(i=z;i>0;i--)
  19.       for(j=110;j>0;j--);
  20. }


  21. void DHT11_start()
  22. {
  23.    Data=1;
  24.    DHT11_delay_us(2);
  25.    Data=0;
  26.    DHT11_delay_ms(20);   
  27.    Data=1;
  28.    DHT11_delay_us(30);
  29. }

  30. u8 DHT11_rec_byte()
  31. {
  32.    u8 i,dat=0;
  33.   for(i=0;i<8;i++)  
  34.    {         
  35.       while(!Data);  
  36.       DHT11_delay_us(8);
  37.       dat<<=1;         
  38.       if(Data==1)
  39.          dat+=1;
  40.       while(Data);     
  41.     }  
  42.     return dat;
  43. }

  44. void DHT11_receive()     
  45. {
  46.     u8 R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  47.     DHT11_start();
  48.     if(Data==0)
  49.     {
  50.         while(Data==0);   
  51.         DHT11_delay_us(40);  
  52.         R_H=DHT11_rec_byte();  
  53.         R_L=DHT11_rec_byte();   
  54.         T_H=DHT11_rec_byte();   
  55.         T_L=DHT11_rec_byte();   
  56.         revise=DHT11_rec_byte();
  57.         DHT11_delay_us(25);   
  58.         if((R_H+R_L+T_H+T_L)==revise)     
  59.         {
  60.             RH=R_H;
  61.             RL=R_L;
  62.             TH=T_H;
  63.             TL=T_L;
  64.         }
  65.         rec_RH=RH;
  66.         rec_TH=TH;
  67.     }
  68. }



  69. void Person_num()
  70. {
  71.         while(red1 == 0&&red2 == 1)
  72.         {
  73.                 if(red1 == 1&&red2 == 1)
  74.                         person++;
  75.         }
  76.         while(red2 == 0&&red1 == 1&&person > 0)
  77.         {
  78.                 if(red1 == 1&&red2 == 1)
  79.                         person--;
  80.         }
  81. }

  82. void uart_init(void)
  83. {
  84.         EA=1;
  85.         ES=1;
  86.         TMOD=0x20;
  87.         SCON=0x70;
  88.         PCON|=0x00;
  89.         TH1=0xfd;//9600bps;
  90.         TR1=1;
  91. }



  92. /*******************************Main*******************************/
  93. void main(void)
  94. {
  95.         Initial_M096128x64_ssd1306();
  96.         Delay_1ms(5);
  97.         OLED_Clear();
  98.         OLED_ShowCHinese(0,0,0); //显示"温"
  99.         OLED_ShowCHinese(20,0,2);//显示"度"
  100.         OLED_ShowCHinese(40,0,5);//显示":"
  101.         OLED_ShowNum(60,0,0);
  102.         OLED_ShowCHinese(80,0,6);
  103.         OLED_ShowCHinese(0,2,1); //显示"湿"
  104.         OLED_ShowCHinese(20,2,2);//显示"度"
  105.         OLED_ShowCHinese(40,2,5);//显示":"
  106.         OLED_ShowNum(60,2,0);
  107.         OLED_ShowChar(80,2,10);
  108.         OLED_ShowCHinese(0,4,3); //显示"人"
  109.         OLED_ShowCHinese(20,4,4);//显示"数"
  110.         OLED_ShowCHinese(40,4,5);//显示":"
  111.         OLED_ShowNum(60,4,0);
  112.         Delay_50ms(25);
  113.         while(1)
  114.         {
  115.                 uart_init();
  116.                 OLED_ShowNum(60,0,rec_TH);
  117.                 OLED_ShowNum(60,2,rec_RH);
  118.                 DHT11_receive();
  119.                 Person_num();
  120.                 OLED_ShowNum(60,4,person);
  121.                 DHT11_delay_us(100);  
  122.         }
  123. }


  124. void uart0_interrupt (void) interrupt 4
  125. {
  126.         if(RI)  
  127.         {
  128.                 u8 receive = SBUF;
  129.                 RI = 0;
  130.                 switch(receive)
  131.                 {
  132.                         case '0': key1 = 0;break;
  133.                         case '1': key1 = 1;break;
  134.                         case '2': key2 = 0;break;
  135.                         case '3': key2 = 1;break;
  136.                 }
  137.         }
  138. }

复制代码


显示温湿度 - 改进.zip

73.75 KB, 下载次数: 56, 下载积分: 黑币 -5

回复

使用道具 举报

ID:1 发表于 2020-3-22 15:23 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表