一.系统概述
智能鱼缸系统的主要功能如下:
1. 通过温度传感器进行水温,当水位低于设定阈值就会控制加热。
2. 实时进行鱼缸内的水位检测,水位过低报警。
3. 通过定时模块设置定时时间,可以定时控制喂食和水循环控制。
4. 通过显示屏实时显示这些检测到的数据并通过按键进行相关阈值设定和页面切换。
二.仿真概述
1. 进入仿真在显示屏端会显示水温、水位以及对应阈值信息,左上角是实时时间,此时系统没有设置定时控制和参数均在阈值范围内,因此没有进行相关控制。
2. 当检测到温度低于设定阈值就会控制加热棒进行加热,并会报警提醒。
3. 按下切换页面按键到水位页面,水位低于设定阈值就会直接蜂鸣器报警提醒。
4. 按下切换页面按键到定时控制页面,此时定时设置7S,再按下模式切换按键就会开始进行计时,当到达计时时间后喂食电机就会旋转2圈(Q代表旋转圈数对应喂食量)。
5. 按下模式切换按键到W处,设置定时时间,此时设置时间为6秒,到达定时时间则控制水循环。
三.程序设计
#include <REGX52.H>
#include "DS18B20.h"
#include "LCD1602.h"
#include "delay.h"
#include "key.h"
#include "Timer0.h"
#include "ADC0832.h"
#include "Current.h"
#include "ds1302.h"
sbit BUZZER = P1^5;
sbit Relay = P2^0;
sbit SRelay = P1^3;
sbit Fan = P1^1;
sbit Relay_1 = P1^6;
sbit Relay_2 = P1^7;
float T,TShow;
int TLow,THigh,ALow,AHigh,LLow,LHigh,DLMAX;
unsigned char KeyNum,flag = 0,flagvalue = 0,flagvalue2 = 0;
unsigned int time1,time2,time3;
unsigned char dis_time_buf[16]={0};
unsigned char TimeValue = 0,ComeFlag = 0,ComeFlag2 = 0,DJFlag = 0,DJFlag2 = 0,Q = 1,Sine,SValue;
void DJ1_Z(int Angle); //水平电机正转 范围0~360
void DJ1_F(int Angle); //水平电机反转 范围0~360
void main()
{
BUZZER = 0;
time=100;
DS18B20_ConverT();
Delay(10);
ds1302_init();
ds1302_write_time(); //写入初始值
THigh = 20;
LHigh = 150;
DLMAX = 72;
if(THigh > 125)
{
THigh = 20;
}
if(LHigh > 300)
{
LHigh = 150;
}
LCD_Init();
LCD_ShowString(1,1,"T:");
LCD_ShowString(2,1,"TH:");
LCD_ShowNum(2,4,THigh,3);
Timer0_Init();
Timer1_Init();
ADC0832(1);
VCCjisuan();
Count();
time2 = Return_V();
while(1)
{
if(TShow < THigh)Relay = 1;
else Relay = 0;
KeyNum = Key();
DS18B20_ConverT();
T = DS18B20_ReadT();
TShow = T;
if(TShow < THigh)
{
BUZZER = 1;
}
if(time < LHigh)
{
BUZZER = 1;
}
if(time >= LHigh && TShow >= THigh)
{
BUZZER = 0;
}
if(KeyNum == 1)
{
if(flag == 0)
{
if(flagvalue == 0)
{
THigh++;
if(THigh > 125){THigh = 125;}
}
if(flagvalue == 1)
{
LHigh = LHigh + 10;
if(LHigh > 300){LHigh = 300;}
}
}
if(flag == 1)
{
if(flagvalue2 == 0)
{
DJFlag = 0;
TimeValue++;
}
if(flagvalue2 == 1)
{
Q++;
}
if(flagvalue2 == 2)
{
DJFlag2 = 0;
SValue++;
}
}
}
if(KeyNum == 2)
{
if(flag == 0)
{
if(flagvalue == 0)
{
THigh--;
if(THigh <= 1){THigh++;}
}
if(flagvalue == 1)
{
LHigh = LHigh - 10;
if(LHigh <= 11){LHigh = LHigh + 10;}
}
}
if(flag == 1)
{
if(flagvalue2 == 0)
{
TimeValue--;
if(TimeValue > 200)TimeValue = 0;
}
if(flagvalue2 == 1)
{
Q--;
if(Q <= 1){Q =1;}
}
if(flagvalue2 == 2)
{
SValue--;
if(SValue <= 1){SValue =1;}
}
}
}
if(KeyNum == 3)
{
if(flag == 0)
{
flagvalue++;
if(flagvalue == 2)flagvalue = 0;
}
if(flag == 1)
{
if(TimeValue != 0)
{
ComeFlag = 1;
DJFlag = 0;
}
else
{
flagvalue2++;
if(flagvalue2 == 3)flagvalue2 = 0;
}
}
}
if(KeyNum == 4)
{
if(flag == 1)
{
if(SValue != 0)
{
DJFlag2 = 0;
ComeFlag2 = 1;
}
}
// ds1302_write_byte(ds1302_control_add,0x00); //关闭写保护
// ds1302_write_byte(ds1302_sec_add,0); //秒
// ds1302_write_byte(ds1302_control_add,0x80); //打开写保护
}
if(KeyNum == 5)
{
SRelay = 0;
LCD_ShowString(1,1," ");
LCD_ShowString(2,1," ");
flag++;
if(flag == 2)
{
flag = 0;
}
}
if(flag == 0)
{
SRelay = 0;
DJFlag = 0;
time = 100;
LCD_ShowString(1,1,"T:");
LCD_ShowString(2,1,"TH:");
LCD_ShowNum(1,4,TShow,3);
LCD_ShowNum(2,4,THigh,3);
LCD_ShowString(2,8,"LH:");
LCD_ShowString(1,8,"L");
LCD_ShowString(1,9,":");
ADC0832(1);
VCCjisuan();
Count();
time2 = Return_V();
LCD_ShowNum(2,11,LHigh,3);
if(flagvalue == 0)
{
LCD_ShowString(2,7,"*");
LCD_ShowString(2,14," ");
}
if(flagvalue == 1)
{
LCD_ShowString(2,7," ");
LCD_ShowString(2,14,"*");
}
}
if(flag == 1)
{
time2 = time3;
LCD_ShowString(1,1,"T:");
LCD_ShowString(2,1,"Q:");
LCD_ShowString(1,8,"W:");
LCD_ShowNum(1,10,SValue,2);
LCD_ShowNum(2,3,Q,2);
LCD_ShowNum(1,3,TimeValue,3);
time3 = (dis_time_buf[12]*10)+dis_time_buf[13];
if(ComeFlag2 == 1)
{
Delay(100);
if(time3 = time2 - 1)SValue--;
if(SValue > 200)SValue = 0;
if(SValue == 0 && DJFlag2 == 0){SRelay = 1;DJFlag2++;ComeFlag2 = 0;}
else SRelay = 0;
}
if(ComeFlag == 1)
{
Delay(100);
if(time3 = time2 - 1)TimeValue--;
if(TimeValue > 200)TimeValue = 0;
if(TimeValue == 0 && DJFlag == 0){LCD_ShowNum(1,3,0,3);DJ1_Z(359*Q);DJFlag++;ComeFlag = 0;}
}
if(flagvalue2 == 0)
{
LCD_ShowString(1,6,"*");
LCD_ShowString(2,5," ");
LCD_ShowString(1,12," ");
}
if(flagvalue2 == 1)
{
LCD_ShowString(1,6," ");
LCD_ShowString(2,5,"*");
LCD_ShowString(1,12," ");
}
if(flagvalue2 == 2)
{
LCD_ShowString(1,6," ");
LCD_ShowString(2,5," ");
LCD_ShowString(1,12,"*");
}
}
}
}