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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6793|回復: 8
打印 上一主題 下一主題
收起左側

單片機大棚溫濕度監測系統的Proteus仿真程序

  [復制鏈接]
跳轉到指定樓層
樓主
僅供學習師兄參考,文件中包括原理圖和程序,有問題評論
仿真原理圖如下(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;//設置鍵
  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;//設置標志

  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)//設置鍵按下
  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)//按下次數超過4次,退出設置
  40.                         {
  41.                                  setn = 0;
  42.                                 lcd_write_com(0x0c);//關閉光標
  43.                                 lcd_write_str(0,0,"Tem:  C  Hum:  %");
  44.                           lcd_write_str(0,1,"                ");
  45.                         }
  46.                         if(setn == 1)//設置溫度下限
  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.                            //讀出溫濕度,只取整數部分
  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)//濕度高于上限,除濕繼電器開啟。否則關閉
  187.                                          relay4 = 0;
  188.                                  else
  189.                                          relay4 = 1;
  190.                                  if(humidity<=hl)//濕度低于下限,加濕繼電器開啟。否則關閉
  191.                                          relay3 = 0;
  192.                                  else
  193.                                          relay3 = 1;
  194.                           if(temperature>=th)//溫度高于上限,降溫繼電器開啟。否則關閉
  195.                                         relay2 = 0;
  196.                                 else
  197.                                         relay2 = 1;
  198.                                 if(temperature<=tl)//溫度低于下限,加熱繼電器開啟。否則關閉
  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. }
復制代碼

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


評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

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

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

1.png
回復

使用道具 舉報

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

proteus打開呀
回復

使用道具 舉報

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

使用道具 舉報

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

應該是設置了溫度下限
回復

使用道具 舉報

7#
ID:909346 發表于 2022-12-19 13:38 | 只看該作者
heloo.. 發表于 2022-12-19 10:58
應該是設置了溫度下限

DHT11的濕度測量范圍是20到90
回復

使用道具 舉報

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

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

025736.png
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区三区福利 | 国产1区2区3区 | 成人亚洲精品 | 国产激情视频在线观看 | 国产一区二区三区免费观看在线 | 精品av天堂毛片久久久借种 | 日韩乱码在线 | 欧美精品三区 | 99热最新网址 | 欧美精品 在线观看 | 女人夜夜春| 日韩三级在线观看 | 最近免费日本视频在线 | 一区二区福利视频 | 国产精品色 | 精品毛片 | 欧洲亚洲一区二区三区 | 欧美激情五月 | 国产一区二区三区在线 | 成人久久网 | 国产91亚洲精品一区二区三区 | 91视频在线看 | 国产欧美日韩一区二区三区在线 | 欧美无乱码久久久免费午夜一区 | 国产美女永久免费无遮挡 | 色婷婷综合久久久中字幕精品久久 | 亚洲精品乱码久久久久久9色 | 伊人久久综合影院 | 亚洲精品在线免费看 | 婷婷综合网 | 欧美一区二区三区视频在线观看 | av性色 | 亚洲精品99久久久久久 | 亚洲自拍偷拍av | 国产成人一区二区 | 自拍偷拍小视频 | 亚洲欧美男人天堂 | 国产精品色综合 | 久久精品视频网站 | 精品欧美| 日韩电影一区二区三区 |