找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4164|回复: 6
收起左侧

51单片机温室控制系统(源代码和仿真)

[复制链接]
ID:258375 发表于 2017-12-7 01:02 | 显示全部楼层 |阅读模式
温室控制仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.jpg 0.png

单片机源程序如下:
  1. #include<reg52.h>
  2. #include"sht10.h"
  3. #include"ds1302.h"
  4. #include"lcd1602.h"
  5. unsigned char TempBuffer[4];
  6. unsigned char humBuffer[4];
  7. unsigned char set[4];
  8. unsigned char set_temp=20,set_hum=20;
  9. unsigned char mode=6;
  10. //unsigned char Key3_val=0;
  11. sbit JIARE=P2^5;//定义加热 降温 加湿 干燥四个端口
  12. sbit JIANGWEN=P2^4;
  13. sbit JIASHI=P2^6;
  14. sbit GANZAO=P2^7;

  15. sbit JIARE_FLAG=P1^5;//定义模式标志位
  16. sbit JIANGWEN_FLAG=P1^6;
  17. sbit JIASHI_FLAG=P1^7;
  18. sbit GANZAO_FLAG=P3^6;
  19. sbit ZIDONG_FLAG=P3^7;

  20. sbit KEY0=P3^2;//定义按键
  21. sbit KEY1=P3^3;
  22. sbit KEY2=P3^4;
  23. void delay_ms(unsigned char k)//延时k ms
  24. {
  25.         unsigned char i,j;
  26.         for(i=0;i<k;i++)
  27.         for(j=0;j<110;j++);
  28. }
  29. //INT 数据转字符串
  30. /*t为int型数据用n个字节存放*/
  31. void IntToStr(unsigned int t, unsigned char *str, unsigned char n)
  32. {
  33.         unsigned char a[5]; char i, j;                                         
  34.         a[0]=(t/10000)%10;                    
  35.         a[1]=(t/1000)%10;                                             
  36.         a[2]=(t/100)%10;                                             
  37.         a[3]=(t/10)%10;                                               
  38.         a[4]=(t/1)%10;                                                
  39.                                                       
  40.         for(i=0; i<5; i++)                        
  41.                 a[i]=a[i]+'0';                                            
  42.         for(i=0; a[i]=='0' && i<=3; i++);                             
  43.         for(j=5-n; j<i; j++)                              
  44.                 { *str=' ';  str++; }                                    
  45.         for(; i<5; i++)                                               
  46.                 { *str=a[i]; str++; }               
  47.         *str='\0';
  48. }
  49. void Int_init(void)//初始化外部中断
  50. {
  51.         IT0=1;
  52.         EX0=1;
  53.         IT1=1;
  54.         EX1=1;
  55.         PX1=1;
  56.         EA=1;
  57. }
  58. void TH_set(void)//显示设定的温湿度
  59. {
  60.    GotoXY(6,1);
  61.          IntToStr(set_temp,&set[0],2);
  62.          Print(set);
  63.          GotoXY(10,1);
  64.          IntToStr(set_hum,&set[0],2);
  65.          Print(set);
  66.          GotoXY(15,1);
  67.          IntToStr(mode,&set[0],1);
  68.          Print(set);
  69. }
  70. void Key2Scan(void)//按键扫描
  71. {
  72.         static unsigned char key_status=1;
  73.   if(key_status&&(KEY2==0))
  74.         {
  75.                 delay_ms(5);
  76.                 if(KEY2==0)
  77.                 { key_status=0;
  78.                         if(mode==6){set_temp--;if(set_temp<16)set_temp++;}
  79.                         else if(mode==7){set_hum--;if(set_hum<20)set_hum++;}
  80.     }
  81.         }else if(KEY2)key_status=1;
  82. }
  83. void LED_show_mode(void)//模式指示灯显示
  84. {
  85.                 if(mode==1){JIARE_FLAG=0;JIANGWEN_FLAG=1;JIASHI_FLAG=1;GANZAO_FLAG=1;ZIDONG_FLAG=1;}
  86.                 else if(mode==2){JIARE_FLAG=1;JIANGWEN_FLAG=0;JIASHI_FLAG=1;GANZAO_FLAG=1;ZIDONG_FLAG=1;}
  87.                 else if(mode==3){JIARE_FLAG=1;JIANGWEN_FLAG=1;JIASHI_FLAG=0;GANZAO_FLAG=1;ZIDONG_FLAG=1;}
  88.                 else if(mode==4){JIARE_FLAG=1;JIANGWEN_FLAG=1;JIASHI_FLAG=1;GANZAO_FLAG=0;ZIDONG_FLAG=1;}
  89.                 else if(mode==5){JIARE_FLAG=1;JIANGWEN_FLAG=1;JIASHI_FLAG=1;GANZAO_FLAG=1;ZIDONG_FLAG=0;}
  90.     else if(mode==6){JIARE_FLAG=1;JIANGWEN_FLAG=1;JIASHI_FLAG=1;GANZAO_FLAG=1;ZIDONG_FLAG=1;}
  91.     else if(mode==7){JIARE_FLAG=1;JIANGWEN_FLAG=1;JIASHI_FLAG=1;GANZAO_FLAG=1;ZIDONG_FLAG=1;}
  92. }
  93. void ModeNot5_handler(void)//模式1到4的处理函数
  94. {
  95.         if(mode==1){JIARE=1;JIANGWEN=0;JIASHI=0;GANZAO=0;}
  96.         else if(mode==2){JIARE=0;JIANGWEN=1;JIASHI=0;GANZAO=0;}
  97.         else if(mode==3){JIARE=0;JIANGWEN=0;JIASHI=1;GANZAO=0;}
  98.         else if(mode==4){JIARE=0;JIANGWEN=0;JIASHI=0;GANZAO=1;}
  99. //  else if(mode==6){JIARE=0;JIANGWEN=0;JIASHI=0;GANZAO=0;}
  100. //  else if(mode==7){JIARE=0;JIANGWEN=0;JIASHI=0;GANZAO=0;}
  101. }
  102. void Mode5handler(void)//模式5到7的处理函数
  103. {

  104.     if(mode>=5)
  105.                 {

  106.                          if(shidu>set_hum){JIASHI=0;GANZAO=1;}
  107.                          else if(shidu<set_hum){JIASHI=1;GANZAO=0;}
  108.                          else if(shidu==set_hum){JIASHI=0;GANZAO=0;}
  109.                         
  110.                          if(wendu>set_temp){JIARE=0;JIANGWEN=1;}
  111.                          else if(wendu<set_temp){JIARE=1;JIANGWEN=0;}
  112.                          else if(wendu==set_temp){JIARE=0;JIANGWEN=0;}
  113.     }
  114. }
  115. void main()
  116. {
  117.          JIARE=JIANGWEN=JIASHI=GANZAO=0;
  118.          Int_init();
  119.           LCD_Initial();
  120.          s_connectionreset();//sht10的初始化
  121.          GotoXY(0,0);
  122.          Print("Real:T:   R:  %");
  123.          GotoXY(0,1);
  124.          Print("Set:T:  R:  %M: ");
  125.          TH_set();
  126.          while(1)
  127.          {
  128.                  
  129.            Get_TH();//获取温湿度
  130.                  GotoXY(7,0);
  131.            IntToStr(wendu,&TempBuffer[0],2);
  132.                  Print(TempBuffer);
  133.                  GotoXY(12,0);
  134.            IntToStr(shidu,&humBuffer[0],2);
  135.                  Print(humBuffer);
  136.                         
  137.                  TH_set();
  138.                   LED_show_mode();
  139.                   ModeNot5_handler();
  140.                   Mode5handler();
  141.                   Key2Scan();
  142.          }
  143. ……………………

  144. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
智能温室控制系统.rar (193.99 KB, 下载次数: 132)
回复

使用道具 举报

ID:295989 发表于 2018-6-4 17:30 | 显示全部楼层
链接挂掉了
回复

使用道具 举报

ID:438324 发表于 2018-12-28 10:27 | 显示全部楼层
我打不开仿真,显示PDS.EXE停止工作
回复

使用道具 举报

ID:313557 发表于 2019-1-16 12:55 | 显示全部楼层
楼主链接没了
回复

使用道具 举报

ID:358467 发表于 2019-4-30 14:22 | 显示全部楼层
原理图打不开是怎么回事呀 我今天刚买的
回复

使用道具 举报

ID:661538 发表于 2020-4-27 11:42 | 显示全部楼层
连接没了
回复

使用道具 举报

ID:712167 发表于 2020-5-25 22:50 | 显示全部楼层
哥,你这里面的DS1302代码是多余的吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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