|
/*
控制窗簾開關主函數
*/
#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;
}
|
|