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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1808|回復: 1
收起左側

基于單片機DHT11濕度測量與控制-CO2光照報警系統程序和仿真

[復制鏈接]
ID:190577 發表于 2023-11-26 19:32 | 顯示全部樓層 |閱讀模式
一、系統方案
1、本設計采用這51單片機作為主控器。
2、DHT11溫濕度、CO2、光照強度送到液晶1602顯示。
3、按鍵設置報警值。
4、蜂鳴器報警。
1.png

二、硬件設計
原理圖如下:
2.png

三、單片機軟件設計
  1. 1、首先是系統初始化
  2. //初始化LCD************************************************************
  3. void LCD_Initial()
  4. {
  5.     E=0;
  6.     LCD_Write(LCD_COMMAND,0x38);           //8位數據端口,2行顯示,5*7點陣
  7.     LCD_Write(LCD_COMMAND,0x38);
  8.     LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //開啟顯示, 無光標
  9.     LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  10.     LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC遞增, 畫面不動
  11. }
  12. 2、液晶顯示程序
  13. //1602程序
  14. //內部等待函數*************************************************************
  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寫入命令或數據********************************************************
  24. #define LCD_COMMAND         0      // Command
  25. #define LCD_DATA            1      // Data
  26. #define LCD_CLEAR_SCREEN    0x01      // 清屏
  27. #define LCD_HOMING          0x02      // 光標返回原點
  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)                               //調整按鍵檢測
  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)//溫度上限設置
  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)//溫度下限設置
  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)//濕度上限設置
  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)//濕度下限設置
  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)//濕度下限設置
  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)//濕度下限設置
  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)//濕度下限設置
  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]);              //設定值寫入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. }
復制代碼

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

評分

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

查看全部評分

回復

使用道具 舉報

無效樓層,該帖已經被刪除
ID:1112098 發表于 2024-4-16 09:45 | 顯示全部樓層
您好,可以在附件分享一下電路圖設計和仿真圖設計嗎
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲一区二区三区在线观看 | 黄色免费在线观看 | 久久久人成影片免费观看 | www.久久 | 羞羞羞视频| av 一区二区三区 | 欧美视频成人 | 97精品国产 | 无吗视频 | 亚洲一区二区三区桃乃木香奈 | 国产欧美精品区一区二区三区 | 色又黄又爽网站www久久 | 狠狠爱网址| 亚洲精品久久久久久久不卡四虎 | 国产欧美日韩一区 | 国产成人精品在线播放 | 精品免费国产一区二区三区四区 | 亚洲欧洲在线视频 | 欧美区日韩区 | 麻豆毛片 | 欧美日韩专区 | 黄免费看 | 日韩美女在线看免费观看 | 精品一区二区三区视频在线观看 | 日韩福利在线 | 国产高清av免费观看 | 国产97在线视频 | 黄网站在线播放 | 色综合天天天天做夜夜夜夜做 | 人人玩人人添人人澡欧美 | 最新免费黄色网址 | 国产精品视频yy9299一区 | 亚洲视频一区二区 | 在线色网站 | 精品久 | 黄色毛片在线观看 | 91精品在线播放 | 亚洲精品成人av久久 | 爱草视频 | 蜜桃视频在线观看www社区 | av中文在线|