久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1675|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于單片機(jī)DHT11濕度測量與控制-CO2光照報警系統(tǒng)程序和仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:190577 發(fā)表于 2023-11-26 19:32 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
一、系統(tǒng)方案
1、本設(shè)計采用這51單片機(jī)作為主控器。
2、DHT11溫濕度、CO2、光照強(qiáng)度送到液晶1602顯示。
3、按鍵設(shè)置報警值。
4、蜂鳴器報警。


二、硬件設(shè)計
原理圖如下:

三、單片機(jī)軟件設(shè)計
  1. 1、首先是系統(tǒng)初始化
  2. //初始化LCD************************************************************
  3. void LCD_Initial()
  4. {
  5.     E=0;
  6.     LCD_Write(LCD_COMMAND,0x38);           //8位數(shù)據(jù)端口,2行顯示,5*7點(diǎn)陣
  7.     LCD_Write(LCD_COMMAND,0x38);
  8.     LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //開啟顯示, 無光標(biāo)
  9.     LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  10.     LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC遞增, 畫面不動
  11. }
  12. 2、液晶顯示程序
  13. //1602程序
  14. //內(nèi)部等待函數(shù)*************************************************************
  15. unsigned char LCD_Wait(void)
  16. {
  17.     RS=0;
  18.     RW=1;    _nop_();
  19.     E=1;    _nop_();           
  20.     E=0;
  21.     return DBPort;  
  22. }
  23. //向LCD寫入命令或數(shù)據(jù)********************************************************
  24. #define LCD_COMMAND         0      // Command
  25. #define LCD_DATA            1      // Data
  26. #define LCD_CLEAR_SCREEN    0x01      // 清屏
  27. #define LCD_HOMING          0x02      // 光標(biāo)返回原點(diǎn)
  28. void LCD_Write(bit style, unsigned char input)
  29. {
  30.     E=0;
  31.     RS=style;
  32.     RW=0;        _nop_();
  33.     DBPort=input;   _nop_();//注意順序
  34.     E=1;        _nop_();//注意順序
  35.     E=0;        _nop_();
  36.     LCD_Wait();
  37. }
  38. 3、按鍵程序
  39. void key()
  40. {
  41.    uchar m;
  42.    if (k1==0)                               //調(diào)整按鍵檢測
  43.    {
  44.       delay(10);
  45.       if (k1==0)
  46.       {
  47.          LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  48.                                 presskeynum++;
  49.          if(presskeynum==8)
  50.                                  {
  51.          presskeynum=0;
  52.                                 
  53.                                  }
  54.          while(k1==0);
  55.          
  56.       }
  57.    }
  58.    if(presskeynum==1)//溫度上限設(shè)置
  59.    {
  60.       if(k2==0)// 加
  61.       {
  62.          delay(300);
  63.          temp_high++;
  64.          if (temp_high>99)
  65.          temp_high=0;
  66.          if (temp_high<0)
  67.          temp_high=99;
  68.          while(k2==0);       //加上此句必須松按鍵才處理
  69.       }
  70.       if(k3==0)//減
  71.       {
  72.          delay(300);
  73.          temp_high--;
  74.          if (temp_high>99)
  75.          temp_high=0;
  76.          if (temp_high<0)
  77.          temp_high=99;
  78.          while(k3==0);       //加上此句必須松按鍵才處理
  79.       }
  80.    }
  81.    if(presskeynum==2)//溫度下限設(shè)置
  82.    {
  83.       if(k2==0)// 加
  84.       {
  85.          delay(300);
  86.          temp_low++;
  87.          if (temp_low>99)
  88.          temp_low=0;
  89.          if (temp_low<0)
  90.          temp_low=99;
  91.          while(k2==0);
  92.       }
  93.       if(k3==0)
  94.       {
  95.          delay(300);
  96.          temp_low--;
  97.          if (temp_low>99)
  98.          temp_low=0;
  99.          if (temp_low<0)
  100.          temp_low=99;
  101.          while(k3==0);
  102.       }
  103.    }
  104.    if(presskeynum==3)//濕度上限設(shè)置
  105.    {
  106.       if(k2==0)// 加
  107.       {
  108.           delay(300);
  109.           humi_high++;
  110.           if (humi_high>99)
  111.           humi_high=0;
  112.           if (humi_high<0)
  113.           humi_high=99;
  114.           while(k2==0);
  115.       }
  116.       if(k3==0)
  117.       {
  118.           delay(300);
  119.           humi_high--;
  120.           if (humi_high>99)
  121.           humi_high=0;
  122.           if (humi_high<0)
  123.           humi_high=99;
  124.           while(k3==0);
  125.       }
  126.    }
  127.    if(presskeynum==4)//濕度下限設(shè)置
  128.    {
  129.       if(k2==0)//加
  130.       {
  131.           delay(300);
  132.           humi_low++;
  133.           if (humi_low>99)
  134.           humi_low=0;
  135.           if (humi_low<0)
  136.           humi_low=99;
  137.           while(k2==0);
  138.       }
  139.       if(k3==0)// 減
  140.       {
  141.           delay(300);
  142.           humi_low--;
  143.           if (humi_low>99)
  144.           humi_low=0;
  145.           if (humi_low<0)
  146.           humi_low=99;
  147.           while(k3==0);
  148.       }
  149.    }
  150.          if(presskeynum==5)//濕度下限設(shè)置
  151.    {
  152.       if(k2==0)//加
  153.       {
  154.           delay(300);
  155.           gh++;
  156.           if (gh>99)
  157.           gh=0;
  158.       
  159.           while(k2==0);
  160.       }
  161.       if(k3==0)// 減
  162.       {
  163.           delay(300);
  164.          gh--;
  165.         
  166.          gh=99;
  167.           while(k3==0);
  168.       }
  169.    }
  170.          if(presskeynum==6)//濕度下限設(shè)置
  171.    {
  172.       if(k2==0)//加
  173.       {
  174.           delay(300);
  175.          gl++;
  176.           if (gl>99)
  177.          gl=0;
  178.          
  179.           humi_low=99;
  180.           while(k2==0);
  181.       }
  182.       if(k3==0)// 減
  183.       {
  184.           delay(300);
  185.           gl--;
  186.         
  187.           if (gl<0)
  188.          gl=99;
  189.           while(k3==0);
  190.       }
  191.    }
  192.          if(presskeynum==7)//濕度下限設(shè)置
  193.    {
  194.       if(k2==0)//加
  195.       {
  196.           delay(300);
  197.           CO2++;
  198.           if (CO2>99)
  199.          CO2=0;
  200.          
  201.           while(k2==0);
  202.       }
  203.       if(k3==0)// 減
  204.       {
  205.           delay(300);
  206.           CO2--;
  207.          
  208.           if (CO2<0)
  209.           CO2=99;
  210.           while(k3==0);
  211.       }
  212.    }
  213.         
  214.    if(k4==0)// 退出鍵
  215.    {
  216.       delay(10);
  217.       if(k4==0)
  218.       {
  219.           while(k4==0);
  220.                                 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);                           //清屏
  221.           presskeynum=0;
  222.           temp_humi_cache[0]=temp_high;
  223.      
  224.           temp_humi_cache[1]=temp_low;
  225.      
  226.      
  227.           temp_humi_cache[2]=humi_high;
  228.           temp_humi_cache[3]=humi_low;
  229.          
  230.                                 
  231.                                    temp_humi_cache[4]=gh;
  232.         
  233.           temp_humi_cache[5]=gl;
  234.       
  235.           temp_humi_cache[6]=CO2;
  236.          
  237.                                 
  238.                                 
  239.                                        
  240.                                 
  241.           for(m=0;m<=6;m++)
  242.           {  
  243.                WriteIIC(W_cmd,0x00+m,temp_humi_cache[m]);              //設(shè)定值寫入24c02
  244.                                                 
  245.           }
  246.          
  247.        }
  248.    
  249.         
  250.          }
  251. }
  252. 4、核心算法程序
  253. unsigned char adc0832(unsigned char CH)
  254. {
  255.      unsigned char i,test,adval;
  256.      adval = 0x00;
  257.      test = 0x00;
  258.      Clk = 0;      
  259.      DATI = 1;
  260.      _nop_();
  261.      CS = 0;
  262.      _nop_();
  263.      Clk = 1;
  264.      _nop_();
  265.     if ( CH == 0x00 )      
  266.     {
  267.        Clk = 0;
  268.        DATI = 1;      
  269.        _nop_();
  270.        Clk = 1;
  271.        _nop_();
  272.        Clk = 0;
  273.        DATI = 0;      
  274.        _nop_();
  275.        Clk = 1;
  276.        _nop_();
  277.      }
  278.      else
  279.      {
  280.        Clk = 0;
  281.        DATI = 1;      
  282.        _nop_();
  283.        Clk = 1;
  284.        _nop_();
  285.        Clk = 0;
  286.        DATI = 1;      
  287.        _nop_();
  288.        Clk = 1;
  289.        _nop_();
  290.      }
  291.       Clk = 0;
  292.       DATI = 1;
  293.      for( i = 0;i < 8;i++ )      
  294.      {
  295.        _nop_();
  296.        adval <<= 1;
  297.        Clk = 1;
  298.        _nop_();
  299.        Clk = 0;
  300.        if (DATO)
  301.           adval |= 0x01;
  302.       else
  303.           adval |= 0x00;
  304.     }
  305.       for (i = 0; i < 8; i++)      
  306.       {
  307.            test >>= 1;
  308.            if (DATO)
  309.               test |= 0x80;
  310.            else
  311.               test |= 0x00;
  312.           _nop_();
  313.           Clk = 1;
  314.           _nop_();
  315.           Clk = 0;
  316.       }
  317.       if (adval == test)      
  318.            dat = test;
  319.       _nop_();
  320.        CS = 1;        
  321.        DATO = 1;
  322.        Clk = 1;
  323.       return dat;
  324. }
復(fù)制代碼

四、 proteus仿真設(shè)計
Proteus軟件是一款應(yīng)用比較廣泛的工具,它可以在沒有硬件平臺的基礎(chǔ)上通過自身的軟件仿真出硬件平臺的運(yùn)行情況,這樣就可以通過軟件仿真來驗證我們設(shè)計的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達(dá)到我們設(shè)定的目的,避免我們搭建實物的時候,如果當(dāng)初選擇的方案有問題,我們器件都已經(jīng)焊接好了,再去卸載下去,再去焊接新的方案的器件,測試,這樣會浪費(fèi)人力和物力,也給開發(fā)者帶來一定困惑,Proteus仿真軟件就很好的解決這個問題,我們在設(shè)計之初,就使用該軟件進(jìn)行模擬仿真,測試,選擇滿足我們設(shè)計的最優(yōu)方案。最后根據(jù)測試沒問題的仿真圖紙,焊接實物,調(diào)試,最終完成本設(shè)計的作品。

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1112098 發(fā)表于 2024-4-16 09:45 | 只看該作者
您好,可以在附件分享一下電路圖設(shè)計和仿真圖設(shè)計嗎
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一级电影网 | 一本色道久久综合亚洲精品高清 | 日日爽| 精品一区二区在线观看 | 免费国产视频在线观看 | 欧美一区二区三区大片 | 丁香色婷婷 | 中文字幕一区二区视频 | 亚洲精品一区在线观看 | 欧美日韩国产三级 | 欧美中文字幕一区二区三区 | 色毛片 | 两性午夜视频 | 久久国产精品网 | 国产一区二区三区四区 | 国产成人精品久久二区二区 | 免费观看的黄色网址 | 一级毛片视频在线观看 | 日韩欧美手机在线 | 日产久久 | 久久精品二区 | 免费福利视频一区二区三区 | 国产中文原创 | 香蕉大人久久国产成人av | 日日干天天操 | 欧洲视频一区二区 | 久久久区 | 亚洲www啪成人一区二区麻豆 | 91欧美精品成人综合在线观看 | 欧美片网站免费 | 在线免费国产视频 | 精品亚洲一区二区 | 99久久精品一区二区成人 | 亚洲一区二区电影网 | 我想看一级黄色毛片 | 亚洲美女在线一区 | 麻豆国产一区二区三区四区 | 精品欧美一区二区在线观看视频 | 日韩一区二区在线视频 | 亚洲第1页| 日韩欧美在线观看视频 |