/*
控制窗帘开关主函数
*/
#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;
}
|