找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機大棚溫濕度監(jiān)測系統(tǒng)的Proteus仿真程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:853928 發(fā)表于 2020-12-7 20:40 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
僅供學(xué)習(xí)師兄參考,文件中包括原理圖和程序,有問題評論
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include "common.h"
  2. #include "lcd1602.h"
  3. #include "dht.h"

  4. extern unsigned char U8RH_data_H;
  5. extern unsigned char U8T_data_H;

  6. sbit key1 = P1^0;//設(shè)置鍵
  7. sbit key2 = P1^1;//加鍵
  8. sbit key3 = P1^2;//減鍵

  9. sbit relay1 = P1^6;//加熱繼電器
  10. sbit relay2 = P1^7;//降溫繼電器
  11. sbit relay3 = P3^6;//加濕繼電器
  12. sbit relay4 = P3^7;//除濕繼電器

  13. sbit beep = P2^0;//蜂鳴器

  14. unsigned char tl = 10,th = 35,hl = 15,hh = 70;//溫濕度上下限初始值
  15. unsigned char setn = 0;//設(shè)置標(biāo)志

  16. void display_alarm()//顯示報警值
  17. {
  18.          lcd_write_char(4,0,tl/10+0x30);
  19.          lcd_write_char(5,0,tl%10+0x30);
  20.          lcd_write_char(13,0,th/10+0x30);
  21.          lcd_write_char(14,0,th%10+0x30);

  22.          lcd_write_char(4,1,hl/10+0x30);
  23.          lcd_write_char(5,1,hl%10+0x30);
  24.          lcd_write_char(13,1,hh/10+0x30);
  25.          lcd_write_char(14,1,hh%10+0x30);
  26. }

  27. void keyscan()
  28. {
  29.         if(key1 == 0)//設(shè)置鍵按下
  30.         {
  31.                  delay_ms(10);
  32.                 if(key1 == 0)
  33.                 {
  34.                         beep = 0;
  35.                         delay_ms(100);
  36.                         beep = 1;
  37.                          while(key1 == 0);//等待按鍵松開
  38.                         setn++;
  39.                         if(setn > 4)//按下次數(shù)超過4次,退出設(shè)置
  40.                         {
  41.                                  setn = 0;
  42.                                 lcd_write_com(0x0c);//關(guān)閉光標(biāo)
  43.                                 lcd_write_str(0,0,"Tem:  C  Hum:  %");
  44.                           lcd_write_str(0,1,"                ");
  45.                         }
  46.                         if(setn == 1)//設(shè)置溫度下限
  47.                         {
  48.                                  lcd_write_str(0,0,"Tml:  C  Tmh:  C");
  49.                           lcd_write_str(0,1,"Hml:  %  Hmh:  %");

  50.                                 display_alarm();
  51.                                 lcd_write_com(0x80+5);
  52.                                 lcd_write_com(0x0f);
  53.                         }
  54.                         if(setn == 2)//溫度上限
  55.                         {
  56.                                 lcd_write_com(0x80+14);
  57.                                 lcd_write_com(0x0f);
  58.                         }
  59.                         if(setn == 3)//濕度下限
  60.                         {
  61.                                 lcd_write_com(0x80+0x40+5);
  62.                                 lcd_write_com(0x0f);
  63.                         }
  64.                         if(setn == 4)//濕度上限
  65.                         {
  66.                                 lcd_write_com(0x80+0x40+14);
  67.                                 lcd_write_com(0x0f);
  68.                         }
  69.                 }
  70.         }
  71.         if(key2 == 0)//加鍵按下
  72.         {
  73.                  delay_ms(10);
  74.                 if(key2 == 0)
  75.                 {
  76.                         beep = 0;
  77.                         delay_ms(100);
  78.                         beep = 1;
  79.                          while(key2 == 0);
  80.                     if(setn == 1)
  81.                         {
  82.                                  if(th - tl > 1)//上限必須大于下限,下限才能加
  83.                                 tl ++;

  84.                                 display_alarm();
  85.                                 lcd_write_com(0x80+5);
  86.                                 lcd_write_com(0x0f);
  87.                         }
  88.                         if(setn == 2)
  89.                         {
  90.                             if(th < 99)//最大到99
  91.                                 th++;
  92.                                 display_alarm();
  93.                                 lcd_write_com(0x80+14);
  94.                                 lcd_write_com(0x0f);
  95.                         }
  96.                         if(setn == 3)
  97.                         {
  98.                             if(hh - hl > 1)//上限必須大于下限,下限才能加
  99.                                 hl++;
  100.                                 display_alarm();
  101.                                 lcd_write_com(0x80+0x40+5);
  102.                                 lcd_write_com(0x0f);
  103.                         }
  104.                         if(setn == 4)
  105.                         {
  106.                             if(hh < 99)//最大到99
  107.                                 hh++;
  108.                                 display_alarm();
  109.                                 lcd_write_com(0x80+0x40+14);
  110.                                 lcd_write_com(0x0f);
  111.                         }
  112.                 }
  113.         }
  114.         if(key3 == 0)//減鍵按下
  115.         {
  116.                  delay_ms(10);
  117.                 if(key3 == 0 )
  118.                 {
  119.                         beep = 0;
  120.                         delay_ms(100);
  121.                         beep = 1;
  122.                          while(key3 == 0);
  123.                         if(setn == 1)
  124.                         {
  125.                                  if(tl > 0)//最小到0
  126.                                 tl --;

  127.                                 display_alarm();
  128.                                 lcd_write_com(0x80+5);
  129.                                 lcd_write_com(0x0f);
  130.                         }
  131.                         if(setn == 2)
  132.                         {
  133.                             if(th - tl > 1)//上限必須大于下限,上限才能減
  134.                                 th--;
  135.                                 display_alarm();
  136.                                 lcd_write_com(0x80+14);
  137.                                 lcd_write_com(0x0f);
  138.                         }
  139.                         if(setn == 3)
  140.                         {
  141.                             if(hl > 0)
  142.                                 hl--;
  143.                                 display_alarm();
  144.                                 lcd_write_com(0x80+0x40+5);
  145.                                 lcd_write_com(0x0f);
  146.                         }
  147.                         if(setn == 4)
  148.                         {
  149.                             if(hh - hl > 1)//上限必須大于下限,上限才能減
  150.                                 hh--;
  151.                                 display_alarm();
  152.                                 lcd_write_com(0x80+0x40+14);
  153.                                 lcd_write_com(0x0f);
  154.                         }
  155.                 }
  156.         }
  157. }

  158. void main()
  159. {
  160.           unsigned int count;
  161.           short temperature;
  162.           short humidity;

  163.           lcd_init();//1602液晶初始化
  164.           lcd_write_str(0,0,"Tem:  C  Hum:  %");
  165.           lcd_write_str(0,1,"                ");
  166.           do
  167.                 {
  168.                         RH();delay_ms(100);
  169.           }while(U8RH_data_H==0&&U8T_data_H==0);
  170.           while(1)
  171.           {
  172.              keyscan();//按鍵掃描
  173.                  if(count++>=10 && setn == 0)
  174.                  {
  175.                                  count=0;
  176.                                  RH();
  177.                          
  178.                            //讀出溫濕度,只取整數(shù)部分
  179.                humidity = U8RH_data_H;
  180.                temperature = U8T_data_H;
  181.                          
  182.                                  lcd_write_char(4,0,temperature/10+0x30);
  183.                                  lcd_write_char(5,0,temperature%10+0x30);
  184.                                  lcd_write_char(13,0,humidity/10+0x30);
  185.                                  lcd_write_char(14,0,humidity%10+0x30);

  186.                                  if(humidity>=hh)//濕度高于上限,除濕繼電器開啟。否則關(guān)閉
  187.                                          relay4 = 0;
  188.                                  else
  189.                                          relay4 = 1;
  190.                                  if(humidity<=hl)//濕度低于下限,加濕繼電器開啟。否則關(guān)閉
  191.                                          relay3 = 0;
  192.                                  else
  193.                                          relay3 = 1;
  194.                           if(temperature>=th)//溫度高于上限,降溫繼電器開啟。否則關(guān)閉
  195.                                         relay2 = 0;
  196.                                 else
  197.                                         relay2 = 1;
  198.                                 if(temperature<=tl)//溫度低于下限,加熱繼電器開啟。否則關(guān)閉
  199.                                         relay1 = 0;
  200.                                 else
  201.                                         relay1 = 1;
  202.                            if(humidity>=hh || humidity<=hl || temperature>=th || temperature<=tl)//溫濕度超限
  203.                                  {
  204.                                                 beep = ~beep;//蜂鳴器報警
  205.                                           delay_ms(100);
  206.                                  }
  207.                                  else
  208.                                  {
  209.                                                 beep = 1;
  210.                                  }
  211.                  }          
  212.            }
  213. }
復(fù)制代碼

所有資料51hei提供下載:
仿真.rar (75.32 KB, 下載次數(shù): 258)
程序.rar (67.44 KB, 下載次數(shù): 221)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:915856 發(fā)表于 2021-5-6 20:08 | 只看該作者
仿真文件要如何打開呢?
回復(fù)

使用道具 舉報

板凳
ID:328014 發(fā)表于 2021-5-6 21:24 | 只看該作者
long919 發(fā)表于 2021-5-6 20:08
仿真文件要如何打開呢?

百度安裝Proteus8.8白菜直裝版,然后雙擊就打開了,如圖,你看我已經(jīng)打開了

1.png (42.95 KB, 下載次數(shù): 100)

1.png
回復(fù)

使用道具 舉報

地板
ID:966373 發(fā)表于 2021-9-15 22:15 | 只看該作者
long919 發(fā)表于 2021-5-6 20:08
仿真文件要如何打開呢?

proteus打開呀
回復(fù)

使用道具 舉報

5#
ID:968456 發(fā)表于 2021-11-18 13:15 | 只看該作者
大佬為什么濕度最低只能到20就不能再往下了
回復(fù)

使用道具 舉報

6#
ID:909346 發(fā)表于 2022-12-19 10:58 | 只看該作者
cool2001 發(fā)表于 2021-11-18 13:15
大佬為什么濕度最低只能到20就不能再往下了

應(yīng)該是設(shè)置了溫度下限
回復(fù)

使用道具 舉報

7#
ID:909346 發(fā)表于 2022-12-19 13:38 | 只看該作者
heloo.. 發(fā)表于 2022-12-19 10:58
應(yīng)該是設(shè)置了溫度下限

DHT11的濕度測量范圍是20到90
回復(fù)

使用道具 舉報

8#
ID:1028184 發(fā)表于 2023-3-5 02:59 | 只看該作者
為啥我仿真后,顯示模塊,沒有亮呢,求大佬解答

025736.png (221.19 KB, 下載次數(shù): 70)

025736.png
回復(fù)

使用道具 舉報

9#
ID:437930 發(fā)表于 2023-4-20 10:18 | 只看該作者
感謝分享,51黑因你而精彩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表