Proteus仿真实例_基于51单片机的智能鱼缸系统(仿真文件+程序)24-32f-19

一.系统概述

智能鱼缸系统的主要功能如下:

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,"*");
						}
				}
		}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小常硬件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值