找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机窗帘的控制文件不知道咋发

[复制链接]
ID:1140382 发表于 2024-12-22 15:20 | 显示全部楼层 |阅读模式
/*
  控制窗帘开关主函数
*/
#include<reg52.h>
#include<intrins.h>
#include"define.h"
#include"delay.h"
#include"LCD1602.h"
#include"DS18B20.h"
#include"ADC0832.h"
#include"L298.h"

unsigned char AuMa; //Au自动,Ma手动。自动手动切换变量
unsigned char StSp; //sr=start,sp=stop。开\关
unsigned char light; //光照强度

//***********************************************************************/

void Automatic();
void Manual();

void main()
{
        
        LCD_init();
        DS_read_temperature();
        if(DS_OK==0)
          return;//如果读取错误,返回从新再读
        display_temperature();
        
  IE=0x85;
        PX0=1; //中断优先
        IT0=1;
        
        
        AuMa=1; //0为自动,1为手动(初始为手动)
        StSp=1; //0表示开,1表示关(初始为关)
        while(1)
        {
                DS_read_temperature();//读取温度        
                if(DS_OK==0)
                        return;//如果读取错误,返回从新再读
                display_temperature();
               
                //MotorData=0x00;  //设电机转动初值
                //MA=0;MB=0;  //初始不转动
                //status=1; //初始窗户关闭
               
                light = Get_ADC0832();//读取光照强度
                light = light/2.5;    //缩小光照检测结果在(0-99)
                 if(light>99)         //如果大于99
         light=99;        //则依然保持99                  
                        
                  
                          if(AuMa == 0) { //进入自动模式
                                  Automatic();
                            delay(1);
                         }
                        
                         else         { //进入手动模式
                                  IT1=1;
                                        buffer_line1[10]='M';//*********修改成MAN
                                        buffer_line1[11]='A';//*********修改成MAN
                                        buffer_line1[12]='N';//*********修改成MAN
                                        buffer_line1[13]=' ';//*********修改成MAN
                                        buffer_line1[14]=' ';//*********修改成MAN
                                  Manual();
                            delay(1);
                         }
        
        }
        
}



/*******************手动模式***********************/
/*首先选择手动模式,再手动选择开还是关窗帘*/
void Manual()
{

                 if(StSp == 0 ) {//命令开并且当前窗户是关闭的
                                buffer_line1[14]='0';//*********修改成0,表示开
                                zhengzhuan();//电机正转,打开窗帘
                 }
                 else if(StSp == 1 )  {//命令关并且窗户当前是打开的
                                buffer_line1[14]='1';//*********修改成1,表示关
                                fanzhuan();//电机反转,关闭窗帘
                 }
                 
                 //MA=0;MB=0;
                 
}

/*******************自动模式*************************/
/*
  首先选择自动模式
  光照太强自动关窗帘,温度太高太低都会自动关窗帘;
  只有在温度范围(15-30)且光线不强才会自动打开窗帘。
*/

void Automatic()
{
    uchar gLight = 40;   //窗帘开关的阈值
               
                buffer_line1[10]='A';//*********修改成AUT
                buffer_line1[11]='U';//*********修改成AUT
                buffer_line1[12]='T';//*********修改成AUT
                buffer_line1[13]=' ';//*********修改成AUT        
                buffer_line1[14]=' ';//*********修改成AUT        

               
                if((sign_temp<=15 || sign_temp>=30 || light>=gLight) ) { //当前状态为开,执行关命令
                         buffer_line1[14]='1'; //*********修改成1,表示关
                   fanzhuan();//电机反转,关闭窗帘
                }
               
                else  { //当前状态为关,执行开命令
                         buffer_line1[14]='0'; //*********修改成0,表示开
                   zhengzhuan();//电机正转,打开窗帘
                }
               
}


//INT0中断函数--控制模式切换:自动/手动
void EX_INT0() interrupt 0
{
          AuMa = (AuMa+1)%2;
}


//INT1中断函数--手动控制开关切换:开/关
void EX_INT1() interrupt 2
{
   StSp = (StSp+1)%2;         
}        


屏幕截图 2024-11-27 094253.png
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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