⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 水泵控制器源代码
💻 C
字号:




#include "STC12C2052AD.H"
#include"2jinzhi.h"

unsigned char code DIS_TABLE[]={b11,b111111,b1001001,b11001,b110101,b10010001,b10000001,b111011,b1,b10001,b11111111};

void rest_drive();
void rest_data();
void display();
void dis_jia();
void key_in();
void shuiwei();
void kongzhi();
void baocun();
void delay(unsigned int k);

unsigned char dis_num2;

unsigned char dis_bit=0;
unsigned char l_time=5;
unsigned char l_timeset=5;
unsigned char l_dis;
unsigned char r_time=5;
unsigned char r_timeset=5;
unsigned char r_dis;
unsigned char r_jishu;
unsigned char l_jishu;

unsigned char baohu_time;
unsigned char baohu_jishu;


unsigned char ll_time1;
unsigned char ll_time2;
unsigned char lh_time1;
unsigned char lh_time2;
unsigned char hl_time1;
unsigned char hl_time2;
unsigned char hh_time1;
unsigned char hh_time2;

unsigned char key_on;

unsigned char time_jishu=10;

unsigned char key_time1;
unsigned char key_time2;

bit key_st;
bit display_enable;
bit l_enable;
bit r_enable;




bit ll_st;
bit lh_st;
bit hl_st;
bit hh_st;

bit key2_enable;
bit key3_enable;
bit key4_enable;
bit key5_enable;
bit key6_enable;
bit key7_enable;
bit kongzhi_enable;

bit led4_enable;
bit baohu_enable;

bit key3_on;
bit key2_on;

bit baocun_enable;

unsigned char led5;
unsigned char led4;
unsigned char led6;

sbit dis_p1=P1^6;		//显示输出,电源指示
sbit dis_p2=P1^7;		//显示输出,上水箱高水位指示
sbit dis_p3=P3^2;		//显示输出,保护水位指示
sbit dis_p4=P3^3;		//显示输出,上水泵保护水位
sbit key=P3^7;			//按键输入

sbit led_ssm=P1^4;    	//上水泵
sbit led_m1=P1^5;		//1号泵
sbit led_m2=P1^3;		//2号泵
sbit led_bsm=P1^2;		//补水泵


sbit HH=P1^1;			//上水箱高水位
sbit HL=P1^0;			//上水箱低水位
sbit LH=P3^5;			//下水箱高水位
sbit LL=P3^4;			//下水箱低水位

//*****************
//延时函数
void delay(unsigned int k)
{
unsigned	int i;
	for (i=0;i<k;i++);
}


//*******************
txd(unsigned char x)
{
	SBUF=x;
	while(TI==0);
	{
	}
	TI=0;
}


//*****************************
//
void IAP_Disable()
{
	ISP_CONTR=0;
	ISP_CMD=0;	
	ISP_TRIG=0;
	ISP_ADDRH=0;
	ISP_ADDRL=0;
}
//**********************************
//EEPROM_read
byte_read(unsigned char DPH,DPL)
{
	unsigned char read_temp;
	ISP_CONTR=0x84;
	ISP_CMD=1;
	ISP_ADDRH=DPH;
	ISP_ADDRL=DPL;
	EA=0;
	ISP_TRIG=0X46;
	ISP_TRIG=0XB9;
	read_temp=ISP_DATA;
	IAP_Disable();
	EA=1;
	return (read_temp);
}

//**********************************
//EEPROM_program
byte_program(unsigned char DPH,DPL,program_temp)
{

	ISP_CONTR=0x84;
	ISP_CMD=2;
	ISP_ADDRH=DPH;
	ISP_ADDRL=DPL;
	ISP_DATA=program_temp;
	EA=0;
	ISP_TRIG=0X46;
	ISP_TRIG=0XB9;
	
	IAP_Disable();
	EA=1;
}

//**********************************
//EEPROM_erase
sector_erase(unsigned char DPH,DPL)
{

	ISP_CONTR=0x84;
	ISP_CMD=3;
	ISP_ADDRH=DPH;
	ISP_ADDRL=DPL;
	EA=0;
	ISP_TRIG=0X46;
	ISP_TRIG=0XB9;
	
	IAP_Disable();
	EA=1;
}

//****************************
//保存数据
void baocun()
{
	if(baocun_enable)
	{
		baocun_enable=0;
		sector_erase(0x10,0x0);
		byte_program(0x10,0x0,l_timeset);
		byte_program(0x10,0x1,r_timeset);
		byte_program(0x10,0x2,key_on);
	}
}
//*********************
//主程序
void main()
{
	
	rest_drive();	
	rest_data();

	while(1)
	{
		WDT_CONTR=B00111010;
		display();
		
		shuiwei();
		kongzhi();

		key_in();
		baocun();
	}
}

//********************************
//显示
void display()
{

	unsigned char l_10;
	unsigned char l_1;
	unsigned char r_10;
	unsigned char r_1;
	
	if(display_enable)
	{


	if(key3_on)
	{
		r_dis=r_time;
	}
	else
	{
		r_dis=r_timeset;
	}

	if(key2_on)
	{
		l_dis=l_time;
	}
	else
	{
		l_dis=l_timeset;
	}

	l_10=l_dis/10;
	l_1=l_dis%10;	
	r_10=r_dis/10;
	r_1=r_dis%10;

	if(led4_enable)
	{
		l_10=10;
		l_1=10;
		r_10=10;
		r_1=10;
	}
		
	switch (dis_bit)
	{
		case 0:
		{
			txd(DIS_TABLE[l_10]&b11111110);
			

			dis_p1=0;
			dis_p2=1;
			dis_p3=1;
			dis_p4=1;
			dis_bit=1;
		}break;
		case 1:
		{
			txd(DIS_TABLE[l_1]&(b11111110|led4));

			dis_p1=1;
			dis_p2=0;
			dis_p3=1;
			dis_p4=1;
			dis_bit=2;
		}break;
		case 2:
		{
			txd(DIS_TABLE[r_10]&(b11111110|led5));

			dis_p1=1;
			dis_p2=1;
			dis_p3=0;
			dis_p4=1;
			dis_bit=3;
		}break;
		case 3:
		{
			txd(DIS_TABLE[r_1]&(b11111110|led6));

			dis_p1=1;
			dis_p2=1;
			dis_p3=1;
			dis_p4=0;
			dis_bit=0;
		}break;

	}
	delay(1000);
	}
}
//****************************
//初始化设备
void rest_drive()
{
	/*P1M0=b00000011;
	P1M1=b11111100;
	P1=b11000011;
	
	P3M0=b00110000;
	P3M1=b00001100;
	P3=b11111111;*/
	SCON=0;
	TMOD=1;
	TL0=0X90;
	TH0=0X4E;
	IE=0X82;
	TR0=1;
	WDT_CONTR=B00111010;

}

//**********************************
//按键操作
void key_in()
{
	dis_p1=1;
	dis_p2=1;
	dis_p3=1;
	dis_p4=1;
	//---------------------------------
	//-------------------------------------
	//按键1被按下
	txd(b01111110);
	if(key==0)
	{
		if(key_time1>10)
		{
			key_time2=0;


			if(key_st==0)
			{
			//delay(100);
			

			//	if(key==0)
			//	{
					if(key_on>0)
					{
						key_on=0;
						display_enable=0;
						r_enable=0;
						l_enable=0;
						key2_enable=0;
						key3_enable=0;
						key4_enable=0;
						key5_enable=0;
						key6_enable=0;
						key7_enable=0;

						key3_on=0;

						kongzhi_enable=0;
						baohu_enable=0;
						led4_enable=0;
						led_ssm=0;
						led_bsm=0;
						led_m1=0;
						led_m2=0;
						
					}
					else
					{
						key_on=1;
						display_enable=1;
						r_enable=1;
						l_enable=1;
					//	key2_enable=1;
					//	key3_enable=1;
						key4_enable=1;
						key5_enable=1;
						key6_enable=1;
						key7_enable=1;
						kongzhi_enable=1;

					}
					key_st=1;
					baocun_enable=1;
			//	}
			}
	//	return;
		}
		else
		{
			key_time1++;	
		}
		return;
	}

	//-------------------------------------
	//按键3被按下
	if(key3_enable)
	{
		txd(b10111110);
		if(key==0)
		{
			if(key_time1>10)
			{
				key_time2=0;
				if(key_st==0)
				{
				//	delay(100);
				//	if(key==0)
				//	{
						if(!key3_on)
						{
						key3_on=1;
						r_enable=1;
						led_m2=1;
						r_jishu=59;
						key6_enable=0;
						key7_enable=0;
						r_time=r_timeset;
						}
						else
						{
						key3_on=0;
						r_enable=0;
						led_m2=0;					
						key6_enable=1;
						key7_enable=1;
						
						}				
						key_st=1;					
				//	}
				}
			}			
			else
			{
				key_time1++;	
			}
			return;
		}
	}
/*	else
	{
		r_enable=0;
		key6_enable=1;
		key7_enable=1;
		led_m2=0;
		key3_on=0;
	}*/
	
	//-------------------------------------
	//按键4被按下
	if(key4_enable)
	{
		txd(b11011110);
		if(key==0)
		{
			if(key_time1>10)
		{
			key_time2=0;
			if(key_st==0)
			{
			//	delay(100);
			//	if(key==0)
			//	{
					if(l_timeset>1)
					{
						l_timeset--;
						key_st=1;
						baocun_enable=1;
					}				
			//	}
			}
		//	return;
		}
			else
		{
			key_time1++;	
		}
		return;
		}
	}

	//-------------------------------------
	//按键6被按下
	if(key6_enable)
	{
		txd(b11101110);
		if(key==0)
		{
		if(key_time1>10)
		{
			key_time2=0;
			if(key_st==0)
			{
			//	delay(100);
			//	if(key==0)
			//	{
					if(r_timeset>1)
					{
						r_timeset--;
						key_st=1;
						baocun_enable=1;
					}				
			//	}
			}
		//	return;
		}
			else
		{
			key_time1++;	
		}
		return;
		}
	}
	//-------------------------------------
	//按键7被按下
	if(key7_enable)
	{
		txd(b11111010);
		if(key==0)
		{
		if(key_time1>10)
		{
			key_time2=0;
			if(key_st==0)
			{
			//	delay(100);
			//	if(key==0)
			//	{
					if(r_timeset<99)
					{
						r_timeset++;
						key_st=1;
						baocun_enable=1;
					}
			//	}		
			}
		//	return;
		}
			else
		{
			key_time1++;	
		}
		return;
		}
	}
	//-------------------------------------
	//按键5被按下
	if(key5_enable)
	{
		txd(b11110110);
		if(key==0)
		{
		if(key_time1>10)
		{
			key_time2=0;
			if(key_st==0)
			{
				//delay(100);
			///	if(key==0)
			//	{
					if(l_timeset<99)
					{
						l_timeset++;
						key_st=1;
						baocun_enable=1;

					}
			//	}
			
			}
			}
			
			else
		{
			key_time1++;	
		}
		return;
		}
	}

	//-------------------------------------
	//按键2被按下
	if(key2_enable)
	{
		txd(b11111100);
		if(key==0)
		{
		if(key_time1>10)
		{
			key_time2=0;
			if(key_st==0)
			{
			//	delay(100);
			//	if(key==0)
			//	{
					if(!key2_on)
					{
						key2_on=1;
						l_enable=1;
						led_m1=1;
						l_jishu=59;
						key4_enable=0;
						key5_enable=0;
						l_time=l_timeset;
					}
					else
					{
						key2_on=0;
						l_enable=0;
						led_m1=0;					
						key4_enable=1;
						key5_enable=1;
						
					}				
					key_st=1;					
			//	}
			}
			}
			else
		{
			key_time1++;	
		}
			return;
		}
	}
/*	else
	{
		l_enable=0;
		key4_enable=1;
		key5_enable=1;
		led_m1=0;
		key2_on=0;
	}*/
	//---------------------------------
	//没有按键被按下

	if(key_time2>10)
		{
			key_time1=0;
			key_st=0;
		}
		else
		{
			key_time2++;
		}


}
//******************************
//定时0中断
void tmer0()interrupt 1  
{
	TL0=0X90;
	TH0=0X4E;
	TR0=1;

	if(time_jishu==0)
	{
		time_jishu=10;
		
		//----------------------
		if(r_enable)
		{
		
			if(r_jishu==0)
			{
				r_jishu=59;
				if(r_time>1)
				{
					r_time--;
				}
				else
				{
					r_time=0;
					led_m2=0;
					r_enable=0;
					key3_on=0;					
					key6_enable=1;
					key7_enable=1;
				}
			}
			else
			{
				r_jishu--;
			}
		}
		//---------------------
		if(l_enable)
		{
			if(l_jishu==0)
			{
				l_jishu=59;
				if(l_time>1)
				{
					l_time--;
				}
				else
				{
					l_time=0;
					led_m1=0;
					l_enable=0;
					key2_on=0;					
					key4_enable=1;
					key5_enable=1;
				}
			}
			else
			{
				l_jishu--;
			}
		}
		//---------------------------
		if(baohu_enable)
		{
			if(baohu_jishu==0)
			{
				baohu_jishu=59;
				if(baohu_time>1)
				{
					baohu_time--;
				}
				else
				{
					led_ssm=0;
					led_bsm=0;
					led4_enable=1;

				//	display_enable=0;
					r_enable=0;
					l_enable=0;
					key2_enable=0;
					key3_enable=0;
					key4_enable=0;
					key5_enable=0;
					key6_enable=0;
					key7_enable=0;

					key3_on=0;

				//	kongzhi_enable=0;
					baohu_enable=0;
					led_ssm=0;
					led_bsm=0;
					led_m1=0;
					led_m2=0;

				}
			}
			else
			{
				baohu_jishu--;
			}
		}
		else
		{
			baohu_jishu=59;
			baohu_time=2;
		}
		//------------------------
		if(led4_enable)
		{
			led4=~led4;
		}
	}
	else
	{
		time_jishu--;
	}
}

//*******************************
//水位检测
void shuiwei()
{

	if(!LL)  //下水箱低水位
	{
		if(ll_time1>200)    //水泵最大工作时间2分钟
		{
			ll_time2=0;     
			ll_st=1;

		}
		else
		{
			ll_time1++;
		}

	}
	else
	{
		if(ll_time2>200)
		{
			ll_time1=0;
			ll_st=0;
		}
		else
		{
			ll_time2++;
		}
	}
	//---------------------------
	if(!LH)
	{
		if(lh_time1>200)
		{
			lh_time2=0;
			lh_st=1;
		}
		else
		{
			lh_time1++;
		}

	}
	else
	{
		if(lh_time2>200)
		{
			lh_time1=0;
			lh_st=0;
		//	led4=1;
		}
		else
		{
			lh_time2++;
		}
	}

	//---------------------------
	if(!HL)
	{
		if(hl_time1>200)
		{
			hl_time2=0;
			hl_st=1;
		}
		else
		{
			hl_time1++;
		}

	}
	else
	{
		if(hl_time2>200)
		{
			hl_time1=0;
			hl_st=0;
		//	led4=1;
		}
		else
		{
			hl_time2++;
		}
	}

	if(!HH)
	{
	//	ll_time2=0;
		if(hh_time1>200)
		{
			hh_time2=0;
			hh_st=1;
		//	led4=0;

		}
		else
		{
			hh_time1++;
		}

	}
	else
	{
		if(hh_time2>200)
		{
			hh_time1=0;
			hh_st=0;
		//	led4=1;
		}
		else
		{
			hh_time2++;
		}
	}
}



//*********************************
//逻辑控制
void kongzhi()
{

	if(kongzhi_enable)
	{
	//-------------------------------
	if(ll_st)
	{
		if(!led4_enable)
		{
			key2_enable=1;
			key3_enable=1;
		}
		led5=0;
	}
	else
	{
		if(!led4_enable)
		{
			key2_enable=0;
			key3_enable=0;

			r_enable=0;
			key6_enable=1;
			key7_enable=1;
			led_m2=0;
			key3_on=0;

			l_enable=0;
			key4_enable=1;
			key5_enable=1;
			led_m1=0;
			key2_on=0;
		}
		led5=1;
	}
	//-----------------------------
	if(lh_st)
	{
	

		if(!led4_enable)
		{
			led_bsm=0;

			if(!hh_st)
			{
				if(!hl_st)
				{
					if(!led_ssm)
					{	
							
	
						led_ssm=1;
						baohu_enable=1;

						baohu_jishu=59;
						baohu_time=2;
					}
				}
			}
			else
			{
				if(!led_ssm)
				{
					baohu_enable=0;
				}
			}
		}
		
		led6=0;
	}
	else
	{
		led6=1;
		if(!led4_enable)
		{
			led_ssm=0;
					
			if(!hh_st)
			{
				if(!led_bsm)
				{
					led_bsm=1;	
					baohu_enable=1;
			
					baohu_jishu=59;
					baohu_time=2;
				}
			}
			else
			{
				baohu_enable=0;
			}
		}
	}
	//----------------------------------
	if(hh_st)
	{
		
		if(!led4_enable)
		{
			led4=0;
			led_bsm=0;
			led_ssm=0;
			baohu_enable=0;
		}
	}
	else
	{
		if(!led4_enable)
		{
			led4=1;
		}
	}
	}
}

//*****************************
//初始化数据
void rest_data()
{
	unsigned char x=0;
	l_timeset=byte_read(0x10,0x00);
	r_timeset=byte_read(0x10,0x01);
	key_on=byte_read(0x10,0x02);

	if(l_timeset>99|l_timeset==0)
	{
		l_timeset=5;
		x=1;
	}
	if(r_timeset>99|r_timeset==0)
	{
		r_timeset=5;
		x=1;
	}
	if(x>0)
	{
		sector_erase(0x10,0x0);
		byte_program(0x10,0x0,l_timeset);
		byte_program(0x10,0x1,r_timeset);
		byte_program(0x10,0x2,key_on);
	}

	if(!key_on)
				{
				//	key_on=0;
					display_enable=0;
					r_enable=0;
					l_enable=0;
					key2_enable=0;
					key3_enable=0;
					key4_enable=0;
					key5_enable=0;
					key6_enable=0;
					key7_enable=0;

					key3_on=0;

					kongzhi_enable=0;
					led_ssm=0;
					led_bsm=0;
					led_m1=0;
					led_m2=0;
						
				}
				else
				{
				//	key_on=1;
					display_enable=1;
					r_enable=1;
					l_enable=1;
				//	key2_enable=1;
				//	key3_enable=1;
					key4_enable=1;
					key5_enable=1;
					key6_enable=1;
					key7_enable=1;
					kongzhi_enable=1;

				}

	baohu_jishu=59;
	baohu_time=2;	
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -