找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 518|回复: 0
收起左侧

单片机智能窗帘控制系统keil5工程及原理图

[复制链接]
ID:1136761 发表于 2024-12-18 22:42 | 显示全部楼层 |阅读模式
2d9d7f7bd6e8cfa02771d88d23a87fd.png

  1. /*
  2.   控制窗帘开关主函数
  3. */
  4. #include<reg52.h>
  5. #include<intrins.h>
  6. #include"define.h"
  7. #include"delay.h"
  8. #include"LCD1602.h"
  9. #include"DS18B20.h"
  10. #include"ADC0832.h"
  11. #include"L298.h"
  12. unsigned char AuMa; //Au自动,Ma手动。自动手动切换变量
  13. unsigned char StSp; //sr=start,sp=stop。开\关
  14. unsigned char light; //光照强度
  15. //***********************************************************************/
  16. void Automatic();
  17. void Manual();
  18. void main()
  19. {
  20.       
  21.         LCD_init();
  22.         DS_read_temperature();
  23.         if(DS_OK==0)
  24.           return;//如果读取错误,返回从新再读
  25.         display_temperature();
  26.       
  27.   IE=0x85;
  28.         PX0=1; //中断优先
  29.         IT0=1;
  30.       
  31.       
  32.         AuMa=1; //0为自动,1为手动(初始为手动)
  33.         StSp=1; //0表示开,1表示关(初始为关)
  34.         while(1)
  35.         {
  36.                 DS_read_temperature();//读取温度      
  37.                 if(DS_OK==0)
  38.                         return;//如果读取错误,返回从新再读
  39.                 display_temperature();
  40.                
  41.                 //MotorData=0x00;  //设电机转动初值
  42.                 //MA=0;MB=0;  //初始不转动
  43.                 //status=1; //初始窗户关闭
  44.                
  45.                 light = Get_ADC0832();//读取光照强度
  46.                 light = light/2.5;    //缩小光照检测结果在(0-99)
  47.                  if(light>99)         //如果大于99
  48.          light=99;        //则依然保持99                  
  49.                         
  50.                   
  51.                           if(AuMa == 0) { //进入自动模式
  52.                                   Automatic();
  53.                             delay(1);
  54.                          }
  55.                         
  56.                          else         { //进入手动模式
  57.                                   IT1=1;
  58.                                         buffer_line1[10]='M';//*********修改成MAN
  59.                                         buffer_line1[11]='A';//*********修改成MAN
  60.                                         buffer_line1[12]='N';//*********修改成MAN
  61.                                         buffer_line1[13]=' ';//*********修改成MAN
  62.                                         buffer_line1[14]=' ';//*********修改成MAN
  63.                                   Manual();
  64.                             delay(1);
  65.                          }
  66.       
  67.         }
  68.       
  69. }
  70. /*******************手动模式***********************/
  71. /*首先选择手动模式,再手动选择开还是关窗帘*/
  72. void Manual()
  73. {
  74.                  if(StSp == 0 ) {//命令开并且当前窗户是关闭的
  75.                                 buffer_line1[14]='0';//*********修改成0,表示开
  76.                                 zhengzhuan();//电机正转,打开窗帘
  77.                  }
  78.                  else if(StSp == 1 )  {//命令关并且窗户当前是打开的
  79.                                 buffer_line1[14]='1';//*********修改成1,表示关
  80.                                 fanzhuan();//电机反转,关闭窗帘
  81.                  }
  82.                  
  83.                  //MA=0;MB=0;
  84.                  
  85. }
  86. /*******************自动模式*************************/
  87. /*
  88.   首先选择自动模式
  89.   光照太强自动关窗帘,温度太高太低都会自动关窗帘;
  90.   只有在温度范围(15-30)且光线不强才会自动打开窗帘。
  91. */
  92. void Automatic()
  93. {
  94.     uchar gLight = 40;   //窗帘开关的阈值
  95.                
  96.                 buffer_line1[10]='A';//*********修改成AUT
  97.                 buffer_line1[11]='U';//*********修改成AUT
  98.                 buffer_line1[12]='T';//*********修改成AUT
  99.                 buffer_line1[13]=' ';//*********修改成AUT      
  100.                 buffer_line1[14]=' ';//*********修改成AUT      
  101.                
  102.                 if((sign_temp<=15 || sign_temp>=30 || light>=gLight) ) { //当前状态为开,执行关命令
  103.                          buffer_line1[14]='1'; //*********修改成1,表示关
  104.                    fanzhuan();//电机反转,关闭窗帘
  105.                 }
  106.                
  107.                 else  { //当前状态为关,执行开命令
  108.                          buffer_line1[14]='0'; //*********修改成0,表示开
  109.                    zhengzhuan();//电机正转,打开窗帘
  110.                 }
  111.                
  112. }
  113. //INT0中断函数--控制模式切换:自动/手动
  114. void EX_INT0() interrupt 0
  115. {
  116.           AuMa = (AuMa+1)%2;
  117. }
  118. //INT1中断函数--手动控制开关切换:开/关
  119. void EX_INT1() interrupt 2
  120. {
  121.    StSp = (StSp+1)%2;        
  122. }   
复制代码


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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