|
/*
控制窗簾開(kāi)關(guān)主函數(shù)
*/
#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自動(dòng),Ma手動(dòng)。自動(dòng)手動(dòng)切換變量
unsigned char StSp; //sr=start,sp=stop。開(kāi)\關(guān)
unsigned char light; //光照強(qiáng)度
//***********************************************************************/
void Automatic();
void Manual();
void main()
{
LCD_init();
DS_read_temperature();
if(DS_OK==0)
return;//如果讀取錯(cuò)誤,返回從新再讀
display_temperature();
IE=0x85;
PX0=1; //中斷優(yōu)先
IT0=1;
AuMa=1; //0為自動(dòng),1為手動(dòng)(初始為手動(dòng))
StSp=1; //0表示開(kāi),1表示關(guān)(初始為關(guān))
while(1)
{
DS_read_temperature();//讀取溫度
if(DS_OK==0)
return;//如果讀取錯(cuò)誤,返回從新再讀
display_temperature();
//MotorData=0x00; //設(shè)電機(jī)轉(zhuǎn)動(dòng)初值
//MA=0;MB=0; //初始不轉(zhuǎn)動(dòng)
//status=1; //初始窗戶(hù)關(guān)閉
light = Get_ADC0832();//讀取光照強(qiáng)度
light = light/2.5; //縮小光照檢測(cè)結(jié)果在(0-99)
if(light>99) //如果大于99
light=99; //則依然保持99
if(AuMa == 0) { //進(jìn)入自動(dòng)模式
Automatic();
delay(1);
}
else { //進(jìn)入手動(dòng)模式
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);
}
}
}
/*******************手動(dòng)模式***********************/
/*首先選擇手動(dòng)模式,再手動(dòng)選擇開(kāi)還是關(guān)窗簾*/
void Manual()
{
if(StSp == 0 ) {//命令開(kāi)并且當(dāng)前窗戶(hù)是關(guān)閉的
buffer_line1[14]='0';//*********修改成0,表示開(kāi)
zhengzhuan();//電機(jī)正轉(zhuǎn),打開(kāi)窗簾
}
else if(StSp == 1 ) {//命令關(guān)并且窗戶(hù)當(dāng)前是打開(kāi)的
buffer_line1[14]='1';//*********修改成1,表示關(guān)
fanzhuan();//電機(jī)反轉(zhuǎn),關(guān)閉窗簾
}
//MA=0;MB=0;
}
/*******************自動(dòng)模式*************************/
/*
首先選擇自動(dòng)模式
光照太強(qiáng)自動(dòng)關(guān)窗簾,溫度太高太低都會(huì)自動(dòng)關(guān)窗簾;
只有在溫度范圍(15-30)且光線(xiàn)不強(qiáng)才會(huì)自動(dòng)打開(kāi)窗簾。
*/
void Automatic()
{
uchar gLight = 40; //窗簾開(kāi)關(guān)的閾值
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) ) { //當(dāng)前狀態(tài)為開(kāi),執(zhí)行關(guān)命令
buffer_line1[14]='1'; //*********修改成1,表示關(guān)
fanzhuan();//電機(jī)反轉(zhuǎn),關(guān)閉窗簾
}
else { //當(dāng)前狀態(tài)為關(guān),執(zhí)行開(kāi)命令
buffer_line1[14]='0'; //*********修改成0,表示開(kāi)
zhengzhuan();//電機(jī)正轉(zhuǎn),打開(kāi)窗簾
}
}
//INT0中斷函數(shù)--控制模式切換:自動(dòng)/手動(dòng)
void EX_INT0() interrupt 0
{
AuMa = (AuMa+1)%2;
}
//INT1中斷函數(shù)--手動(dòng)控制開(kāi)關(guān)切換:開(kāi)/關(guān)
void EX_INT1() interrupt 2
{
StSp = (StSp+1)%2;
}
|
|