#include”delay。
h”
#include”ds18b20.h"
#include”LCD1602。
h"
#include"ds1302.h”
sfrT2MOD=0xC9;
sbitHeat=P0^4;
sbitIN1=P0^3;
sbitIN2=P3^5;
sbitIN3=P3^6;
sbitIN4=P3^7;
sbitLED1=P3^2;
sbitLED2=P3^3;
//水温控制相关参量
inttempval=0;
floattmp_new=0;
floattmp_old=0;
uchartmp_set1=30;
uchartmp_set2=35;
floattmp_set=50;
floatCtrl_P=0。
8;
floatPWM=0;
floatcnt=0;
//喂食、光照、氧循环相关参量
uintFeedInterval=30;//喂食间隔时间
uintFeedTime=10;//喂食时间
uintOxygenInterval=30;
uintOxygenTime=10;
uintLightInterval=30;
uintLightTime=10;
uintFeedInterval_cnt;
uintFeedTime_cnt;
uintOxygenInterval_cnt;
uintOxygenTime_cnt;
uintLightInterval_cnt;
uintLightTime_cnt;
ucharTime_cnt=0;
//设定参数相关变量
ucharSetTimeFlg=0;
ucharSetTempFlg=0;
ucharSetFeedFlg=0;
ucharSetOxygenFlg=0;
ucharSetLightFlg=0;
ucharFeedFlg=0;
ucharOxygenFlg=0;
ucharLightFlg=0;
uchardata_zancun=0;
ucharTestNum=0;
voidInit_timer(void)
{
RCAP2H=(65536—38400)/256;
RCAP2L=(65536—38400)%256;
TH2=RCAP2H;
TL2=RCAP2L;
T2CON=0;
T2MOD=0;
ET2=1;
TR2=1;
EA=1;
}
voidZhengzhuan(void)
{
uchari;
for(i=0;i〈128;i++)
{
IN1=0;IN2=1;IN3=1;IN4=1;
delay1ms
(1);
IN1=0;IN2=0;IN3=1;IN4=1;
delay1ms
(1);
IN1=1;IN2=0;IN3=1;IN4=1;
delay1ms
(1);
IN1=1;IN2=0;IN3=0;IN4=1;
delay1ms
(1);
IN1=1;IN2=1;IN3=0;IN4=1;
delay1ms
(1);
IN1=1;IN2=1;IN3=0;IN4=0;
delay1ms
(1);
IN1=1;IN2=1;IN3=1;IN4=0;
delay1ms
(1);
IN1=0;IN2=1;IN3=1;IN4=0;
delay1ms
(1);
}
}
voidFanzhuan(void)
{
uchari;
for(i=0;i<128;i++)
{
IN1=0;IN2=1;IN3=1;IN4=0;
delay1ms
(1);
IN1=1;IN2=1;IN3=1;IN4=0;
delay1ms
(1);
IN1=1;IN2=1;IN3=0;IN4=0;
delay1ms
(1);
IN1=1;IN2=1;IN3=0;IN4=1;
delay1ms
(1);
IN1=1;IN2=0;IN3=0;IN4=1;
delay1ms
(1);
IN1=1;IN2=0;IN3=1;IN4=1;
delay1ms
(1);
IN1=0;IN2=0;IN3=1;IN4=1;
delay1ms
(1);
IN1=0;IN2=1;IN3=1;IN4=1;
delay1ms
(1);
}
}
voidPageClear(void)
{
uchari;
write_com(0x80);
for(i=0;i<16;i++)
write_data(’');
write_com(0xc0);
for(i=0;i〈16;i++)
write_data('’);
}
voidKeyScan(void)
{
uchartemp;
P2=0xfe;
temp=P2;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay1ms(10);
temp=P2;
temp=temp&0xf0;
if(temp!
=0xf0)
{
switch(temp)
{
case0xe0:
{
//TestNum=0;
data_zancun=0;
PageClear();
SetLightFlg=0;
SetFeedFlg=0;
SetTempFlg=0;
SetOxygenFlg=0;
SetTimeFlg++;
if(SetTimeFlg==7)
SetTimeFlg=1;
}break;//时间
case0xd0:
{
TestNum=7;
data_zancun++;
if(data_zancun==3)
data_zancun=1;
}break;//数字键7
case0xb0:
{data_zancun++;
if(data_zancun==3)
data_zancun=1;TestNum=4;}break;//数字键4
case0x70:
{data_zancun++;
if(data_zancun==3)
data_zancun=1;TestNum=1;}break;//数字键1
}
while(temp!
=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfd;
temp=P2;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay1ms(10);
temp=P2;
temp=temp&0xf0;
if(temp!
=0xf0)
{
switch(temp)
{
case0xe0:
{data_zancun++;
if(data_zancun==3)
data_zancun=1;TestNum=0;}break;//数字键0
case0xd0:
{data_zancun++;
if(data_zancun==3)
data_zancun=1;TestNum=8;}break;//数字键8
case0xb0:
{data_zancun++;
if(data_zancun==3)
data_zancun=1;TestNum=5;}break;//数字键5
case0x70:
{data_zancun++;
if(data_zancun==3)
data_zancun=1;TestNum=2;}break;//数字键2
}
while(temp!
=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfb;
temp=P2;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay1ms(10);
temp=P2;
temp=temp&0xf0;
if(temp!
=0xf0)
{
switch(temp)
{
case0xe0:
{
//TestNum=8;
PageClear();
SetTempFlg=0;
SetLightFlg=0;
SetOxygenFlg=0;
SetFeedFlg=0;
if(SetTimeFlg!
=0)
{
ds1302set();
SetTimeFlg=0;
}
data_zancun=0;
}break;//确定键
case0xd0:
{data_zancun++;
if(data_zancun==3)
data_zancun=1;
TestNum=9;}break;//数字键9
case0xb0:
{data_zancun++;
if(data_zancun==3)
data_zancun=1;TestNum=6;}break;//数字键6
case0x70:
{data_zancun++;
if(data_zancun==3)
data_zancun=1;TestNum=3;}break;//数字键3
}
while(temp!
=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xf7;
temp=P2;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay1ms(10);
temp=P2;
temp=temp&0xf0;
if(temp!
=0xf0)
{
switch(temp)
{
case0xe0:
{
//TestNum=12;
data_zancun=0;
PageClear();
SetLightFlg=0;
SetFeedFlg=0;
SetTempFlg=0;
SetTimeFlg=0;
SetOxygenFlg++;
if(SetOxygenFlg==3)
SetOxygenFlg=1;}break;//氧气
case0xd0:
{//TestNum=13;
data_zancun=0;
PageClear();
SetFeedFlg=0;
SetTempFlg=0;
SetTimeFlg=0;
SetOxygenFlg=0;
SetLightFlg++;
if(SetLightFlg==3)
SetLightFlg=1;}break;//照明
case0xb0:
{//TestNum=14;
data_zancun=0;
PageClear();
SetLightFlg=0;
SetTempFlg=0;
SetTimeFlg=0;
SetOxygenFlg=0;
SetFeedFlg++;
if(SetFeedFlg==3)
SetFeedFlg=1;}break;//喂食
case0x70:
{
data_zancun=0;
PageClear();
SetLightFlg=0;
SetFeedFlg=0;
SetTimeFlg=0;
SetOxygenFlg=0;
SetTempFlg++;
if(SetTempFlg==3)
SetTempFlg=1;
}break;//温度
}
while(temp!
=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
if(SetTimeFlg)
{
switch(SetTimeFlg)
{
case1:
{
if(data_zancun==1)
{
time_date[6]&=0x0f;
time_date[6]|=TestNum〈<4;
}
elseif(data_zancun==2)
{
time_date[6]&=0xf0;
time_date[6]|=TestNum;
}}break;
case2:
{
if(data_zancun==1)
{
time_date[4]&=0x0f;
time_date[4]|=TestNum〈<4;
}
elseif(data_zancun==2)
{
time_date[4]&=0xf0;
time_date[4]|=TestNum;
}}break;
case3:
{
if(data_zancun==1)
{
time_date[3]&=0x0f;
time_date[3]|=TestNum〈〈4;
}
elseif(data_zancun==2)
{
time_date[3]&=0xf0;
time_date[3]|=TestNum;
}}break;
case4:
{
if(data_zancun==1)
{
time_date[2]&=0x0f;
time_date[2]|=TestNum〈〈4;
}
elseif(data_zancun==2)
{
time_date[2]&=0xf0;
time_date[2]|=TestNum;
}}break;
case5:
{
if(data_zancun==1)
{
time_date[1]&=0x0f;
time_date[1]|=TestNum〈<4;
}
elseif(data_zancun==2)
{
time_date[1]&=0xf0;
time_date[1]|=TestNum;
}}break;
case6:
{
if(data_zancun==1)
{
time_date[0]&=0x0f;
time_date[0]|=TestNum〈〈4;
}
elseif(data_zancun==2)
{
time_date[0]&=0xf0;
time_date[0]|=TestNum;
}}break;
}
}
elseif(SetTempFlg)
{
switch(SetTempFlg)
{
case1:
{
if(data_zancun==1)
{
tmp_set2=TestNum*10+tmp_set2%10;
}
elseif(data_zancun==2)
{
tmp_set2=TestNum+10*(tmp_set2/10);
}}break;
case2:
{
if(data_zancun==1)
{
tmp_set1=TestNum*10+tmp_set1%10;
}
elseif(data_zancun==2)
{
tmp_set1=TestNum+10*(tmp_set1/10);
}}break;
}
}
elseif(SetFeedFlg)
{
switch(SetFeedFlg)
{
case1:
{
if(data_zancun==1)
{
FeedInterval=TestNum*10+FeedInterval%10;
}
elseif(data_zancun==2)
{
FeedInterval=TestNum+10*(FeedInterval/10);
}}break;
case2:
{
if(data_zancun==1)
{
FeedTime=TestNum*10+FeedTime%10;
}
elseif(data_zancun==2)
{
FeedTime=TestNum+10*(FeedTime/10);
}}break;
}
}
elseif(SetLightFlg)
{
switch(SetLightFlg)
{
case1:
{
if(data_zancun==1)
{
LightInterval=TestNum*10+LightInterval%10;
}
elseif(data_zancun==2)
{
LightInterval=TestNum+10*(LightInterval/10);
}}break;
case2:
{
if(data_zancun==1)
{
LightTime=TestNum*10+LightTime%10;
}
elseif(data_zancun==2)
{
LightTime=TestNum+10*(LightTime/10);
}}break;
}
}
elseif(SetOxygenFlg)
{
switch(SetOxygenFlg)
{
case1:
{
if(data_zancun==1)
{
OxygenInterval=TestNum*10+OxygenInterval%10;
}
elseif(data_zancun==2)
{
OxygenInterval=TestNum+10*(OxygenInterval/10);
}}break;
case2:
{
if(data_zancun==1)
{
OxygenTime=TestNum*10+OxygenTime%10;
}
elseif(data_zancun==2)
{
OxygenTime=TestNum+10*(OxygenTime/10);
}}break;
}
}
}
voidMainPage(void)//主界面
{
uchari;
tmp_set=(float)(tmp_set1+tmp_set2)/2。
0;
tmp_set+=1。
0;
TR0=0;
tempval=0;
ds1302get();//读取当前时间
TR2=0;
for(i=0;i<5;i++)
{
sendChangeCmd();
tempval+=getTmpValue()/5。
0;
}
TR2=1;
tmp_new=(float)tempval/100。
0;
if(tmp_new—tmp_old>0.1)
Ctrl_P=0.5;
elseCtrl_P=0.65;
if(tmp_set—tmp_new〉=3)
{
PWM=1;
}
elseif(tmp_set>tmp_new)
{
PWM=Ctrl_P*(tmp_set—tmp_new)/3.0;
}
elsePWM=0;
tmp_old=tmp_new;
TR0=1;
write_com(0x8b);
write_data(tempval/1000+’0');
write_data(tempval%1000/100+'0’);
write_data('。
’);
write_data(tempval%100/10+'0');
write_data(tempval%10+’0');
write_com(0xc0);
write_data('0’+((time_date[2]&0xf0)〉〉4));//显示时
write_data(’0’+(time_date[2]&0x0f));
write_data(':
’);
write_data(’0’+((time_date[1]&0xf0)>>4));//显示分
write_data('0’+(time_date[1]&0x0f));
write_data(':
’);
write_data('0’+((time_date[0]>>4)&0x0f));//显示秒
write_data(’0’+((time_date[0]&0x0f)));
write_data(’’);
if(LightFlg)
write_string("ON");
else
write_string(”OFF”);
write_data(’');
if(OxygenFlg)
write_string("ON”);
else
write_string("OFF”);
write_com(0x80);
write_data(0x32);
write_data(0x30);
write_data('0'+((time_date[6]>>4)&0x0f));