当前位置:文档之家› (完整word版)自动控制鱼缸电路图

(完整word版)自动控制鱼缸电路图

附录1。

电路图2.程序代码#include <reg52.h〉#include ”delay。

h”#include ”ds18b20.h"#include ”LCD1602。

h"#include "ds1302.h”sfr T2MOD = 0xC9;sbit Heat = P0^4;sbit IN1=P0^3;sbit IN2=P3^5;sbit IN3=P3^6;sbit IN4=P3^7;sbit LED1=P3^2;sbit LED2=P3^3;//水温控制相关参量int tempval = 0;float tmp_new=0;float tmp_old=0;uchar tmp_set1 = 30;uchar tmp_set2 = 35;float tmp_set = 50;float Ctrl_P = 0。

8;float PWM = 0;float cnt=0;//喂食、光照、氧循环相关参量uint FeedInterval=30;//喂食间隔时间uint FeedTime=10;//喂食时间uint OxygenInterval=30;uint OxygenTime=10;uint LightInterval=30;uint LightTime=10;uint FeedInterval_cnt;uint FeedTime_cnt;uint OxygenInterval_cnt;uint OxygenTime_cnt;uint LightInterval_cnt;uint LightTime_cnt;uchar Time_cnt=0;//设定参数相关变量uchar SetTimeFlg=0;uchar SetFeedFlg=0;uchar SetOxygenFlg=0;uchar SetLightFlg=0;uchar FeedFlg=0;uchar OxygenFlg=0;uchar LightFlg=0;uchar data_zancun=0;uchar TestNum=0;void Init_timer(void){RCAP2H=(65536—38400)/256;RCAP2L=(65536—38400)%256;TH2=RCAP2H;TL2=RCAP2L;T2CON=0;T2MOD=0;ET2=1;TR2=1;EA=1;}void Zhengzhuan(void){uchar i;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);}void Fanzhuan(void){uchar i;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);}}void PageClear(void){uchar i;write_com(0x80);for(i=0;i<16;i++)write_data(’ ');write_com(0xc0);for(i=0;i〈16;i++)write_data(' ’);}void KeyScan(void){uchar temp;P2 = 0xfe;temp = P2;temp = temp&0xf0;if(temp != 0xf0){delay1ms(10);temp = P2;if(temp != 0xf0){switch(temp){case 0xe0:{//TestNum=0;data_zancun=0;PageClear();SetLightFlg=0;SetFeedFlg=0;SetTempFlg=0;SetOxygenFlg=0;SetTimeFlg++;if(SetTimeFlg==7)SetTimeFlg=1;}break;//时间case 0xd0:{TestNum=7;data_zancun++;if(data_zancun==3)data_zancun=1;}break;//数字键7case 0xb0:{data_zancun++;if(data_zancun==3)data_zancun=1;TestNum=4;}break;//数字键4case 0x70:{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;{switch(temp){case 0xe0:{data_zancun++;if(data_zancun==3)data_zancun=1;TestNum=0;}break;//数字键0case 0xd0:{data_zancun++;if(data_zancun==3)data_zancun=1;TestNum=8;}break;//数字键8case 0xb0:{data_zancun++;if(data_zancun==3)data_zancun=1;TestNum=5;}break;//数字键5case 0x70:{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){case 0xe0:{//TestNum=8;PageClear();SetTempFlg=0;SetLightFlg=0;SetOxygenFlg=0;SetFeedFlg=0;if(SetTimeFlg!=0){SetTimeFlg=0;}data_zancun=0;}break;//确定键case 0xd0:{data_zancun++;if(data_zancun==3)data_zancun=1;TestNum=9;}break;//数字键9case 0xb0:{data_zancun++;if(data_zancun==3)data_zancun=1;TestNum=6;}break;//数字键6case 0x70:{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){case 0xe0:{//TestNum=12;data_zancun=0;PageClear();SetLightFlg=0;SetFeedFlg=0;SetTempFlg=0;SetTimeFlg=0;SetOxygenFlg++;if(SetOxygenFlg==3)SetOxygenFlg=1;}break;//氧气data_zancun=0;PageClear();SetFeedFlg=0;SetTempFlg=0;SetTimeFlg=0;SetOxygenFlg=0;SetLightFlg++;if(SetLightFlg==3)SetLightFlg=1;}break;//照明case 0xb0:{//TestNum=14;data_zancun=0;PageClear();SetLightFlg=0;SetTempFlg=0;SetTimeFlg=0;SetOxygenFlg=0;SetFeedFlg++;if(SetFeedFlg==3)SetFeedFlg=1;}break; //喂食case 0x70:{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){case 1:{if(data_zancun==1){time_date[6]&=0x0f;else if(data_zancun==2){time_date[6]&=0xf0;time_date[6]|=TestNum;} }break;case 2:{if(data_zancun==1){time_date[4]&=0x0f;time_date[4]|=TestNum〈<4;}else if(data_zancun==2){time_date[4]&=0xf0;time_date[4]|=TestNum;} }break;case 3:{if(data_zancun==1){time_date[3]&=0x0f;time_date[3]|=TestNum〈〈4;}else if(data_zancun==2){time_date[3]&=0xf0;time_date[3]|=TestNum;} }break;case 4:{if(data_zancun==1){time_date[2]&=0x0f;time_date[2]|=TestNum〈〈4;}else if(data_zancun==2){time_date[2]&=0xf0;time_date[2]|=TestNum;}}break;case 5:{if(data_zancun==1){time_date[1]&=0x0f;time_date[1]|=TestNum〈<4;}time_date[1]&=0xf0;time_date[1]|=TestNum;}}break;case 6:{if(data_zancun==1){time_date[0]&=0x0f;time_date[0]|=TestNum〈〈4;}else if(data_zancun==2){time_date[0]&=0xf0;time_date[0]|=TestNum;} }break;}}else if(SetTempFlg){switch(SetTempFlg){case 1:{if(data_zancun==1){tmp_set2=TestNum*10+tmp_set2%10;}else if(data_zancun==2){tmp_set2=TestNum+10*(tmp_set2/10);} }break;case 2:{if(data_zancun==1){tmp_set1=TestNum*10+tmp_set1%10;}else if(data_zancun==2){tmp_set1=TestNum+10*(tmp_set1/10);}}break;}}else if(SetFeedFlg){switch(SetFeedFlg){case 1:{{FeedInterval=TestNum*10+FeedInterval%10;}else if(data_zancun==2){FeedInterval=TestNum+10*(FeedInterval/10);} }break;case 2:{if(data_zancun==1){FeedTime=TestNum*10+FeedTime%10;}else if(data_zancun==2){FeedTime=TestNum+10*(FeedTime/10);} }break;}}else if(SetLightFlg){switch(SetLightFlg){case 1:{if(data_zancun==1){LightInterval=TestNum*10+LightInterval%10;}else if(data_zancun==2){LightInterval=TestNum+10*(LightInterval/10);} }break;case 2:{if(data_zancun==1){LightTime=TestNum*10+LightTime%10;}else if(data_zancun==2){LightTime=TestNum+10*(LightTime/10);}}break;}}else if(SetOxygenFlg){switch(SetOxygenFlg)case 1:{if(data_zancun==1){OxygenInterval=TestNum*10+OxygenInterval%10;}else if(data_zancun==2){OxygenInterval=TestNum+10*(OxygenInterval/10);} }break;case 2:{if(data_zancun==1){OxygenTime=TestNum*10+OxygenTime%10;}else if(data_zancun==2){OxygenTime=TestNum+10*(OxygenTime/10);}}break;}}}void MainPage(void)//主界面{uchar i;tmp_set = (float)(tmp_set1+tmp_set2)/2。

相关主题