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

📄 chongqibeng.c

📁 基于C51的充气泵控制系统程序源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <reg51.h>
#include <intrins.h>
#include <absacc.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
void warning();
void initial();
void gengxin(uchar b);
void LED_DISPLAY(uint b,uchar i);
void LED_DISPLAY1(uchar i);
void delay1(unsigned int time);
void delay2(unsigned int time);
void delay3(unsigned int time);
void WriteEeprom(uchar t_addr,uchar dataa,uchar datab,uchar datac);
void EraseEeprom(uchar t_addr);
uchar kbscan();
uchar kbscan1();
uchar ReadEeprom(uchar s_addr,uchar addl);
uint TLC1549read();
unsigned char code table1[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x76,0x38,0x39};
unsigned char code table2[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
sbit P1_0=P1^0;//检漏按钮
sbit P1_1=P1^1;//设置按钮
sbit P1_2=P1^2;//-1按钮
sbit P1_3=P1^3;//+1按钮
sbit P1_5=P1^5;//报警指示灯
sbit P1_6=P1^6;//充气指示灯
sbit P1_7=P1^7;//检漏指示灯
sbit P2_1=P2^1;//蜂鸣器开关
sbit P2_0=P2^0;//外接报警装置
sbit P2_2=P2^2;
sbit P3_2=P3^2;//tlc1549时钟
sbit P3_3=P3^3;//tlc1549I/O
sbit P3_5=P3^5;//tlc1549使能
sbit P3_6=P3^6;//充气泵工作控制端
sbit P3_7=P3^7;//切断阀工作控制端
sfr  isp_wdt=0xe1; 
sfr  isp_data=0xe2; 
sfr  isp_addrh=0xe3; 
sfr  isp_addrl=0xe4; 
sfr  isp_cmd=0xe5; 
sfr  isp_trig=0xe6; 
sfr  isp_contr=0xe7; 
long int value=0;
uchar b=0,cc=0,max=10,min=3,e=0,cishu=9,a1,a2,a3;
uint qiya,z1,z2,z3,z4,z5,z6,z7,z8,z;
void timer0(void) interrupt 1 using 1
{
	TH0=60;
	TL0=176;
	value++;
}
main()
{
	uchar jianhao;
    long int T1,Time;
	int tempDisplay=0;
	int tempDisplay1=0;
	int tempDisplay2=0;
	initial();//初始化
	a1=ReadEeprom(0x20,0x00);
	a2=ReadEeprom(0x20,0x01);
	a3=ReadEeprom(0x20,0x02);
	for(;;)
	{
		z1=TLC1549read();
		z2=TLC1549read();
		z3=TLC1549read();
		z4=TLC1549read();
		//z5=TLC1549read();
		//z6=TLC1549read();
		qiya=(z1+z2+z3+z4)/4;
		for (tempDisplay=0;tempDisplay<30;tempDisplay++)
		{
	    	jianhao=kbscan();
			if (jianhao==0x03||jianhao==0x04)
				break;
		}
		if(jianhao==0x03)//功能键按下反应
	    {
			cc++;
			P2_1=1;
			delay1(8);
			P2_1=0;
			gengxin(b);
			for(;;)
			{
				jianhao=kbscan();
				LED_DISPLAY(b,0);
				if(jianhao==0)
					break;
			}
	    }
	    else if(jianhao==0x04)//检漏状态启动
		{
			P1_7=0;//检漏指示灯亮
			P2_1=1;
			delay1(10);
			P2_1=0;
			for(;;)
			{
				z1=TLC1549read();
				z2=TLC1549read();
				z3=TLC1549read();
				z4=TLC1549read();
				//z5=TLC1549read();
				//z6=TLC1549read();
				qiya=(z1+z2+z3+z4)/4;
				jianhao=kbscan();
				if(jianhao==0)
					break;//判断按键是否已经放开,若放开,退出循环
			}
			for(;;)
			{
				z1=TLC1549read();
				z2=TLC1549read();
				z3=TLC1549read();
				z4=TLC1549read();
				//z5=TLC1549read();
				//z6=TLC1549read();
				qiya=(z1+z2+z3+z4)/4;
				for (tempDisplay=0;tempDisplay<30;tempDisplay++)
				{
	    			jianhao=kbscan();
					if (jianhao==0x04)
						break;
				}
			 	if(jianhao==0x04)
				{
					P1_7=1;//检漏指示灯灭
					P2_1=1;
					delay1(10);
					P2_1=0;
					break;
				}	
		    }
			for(;;)
			{
				z1=TLC1549read();
				z2=TLC1549read();
				z3=TLC1549read();
				z4=TLC1549read();
				//z5=TLC1549read();
				//z6=TLC1549read();
				qiya=(z1+z2+z3+z4)/4;
				jianhao=kbscan();
				if(jianhao==0)
					break;
				LED_DISPLAY(b,4);
			}
		} 
		Time=value;
		if(Time>1728000)//时间差大于24小时
		{
			initial();	
		}
		if(qiya<(a2*50))
		{
			if(e==0)
				b=b+1;
			if(b>a3)
			{
				P2_0=1;
				P2_1=1;
				P1_5=0;
			}
			T1=value;
			P3_6=0;
			P3_7=0;
			P1_6=0;//充气开始且指示灯亮
		    for(;;)
		  	{				
				Time=value;
				z1=TLC1549read();
				z2=TLC1549read();
				z3=TLC1549read();
				z4=TLC1549read();
				//z5=TLC1549read();
				//z6=TLC1549read();
				qiya=(z1+z2+z3+z4)/4;
				delay1(1);
		        if(((Time-T1)<=36000)&&(qiya>=(a1*50)))
				{
					P3_6=1;
					P3_7=1;
					P1_6=1;
					e=0;
					break;
				}
		        else if(((Time-T1)>36000)&&(qiya<(a1*50)))
				{
					for(;;)
					{	
 				    	LED_DISPLAY(b,0);
						warning();//循环充气停机,并不停报警
						if(qiya>=a1*50)
							break;
					}
					break;
				}
				
			    jianhao=kbscan();
			
				if(jianhao==0x03)//功能键按下反应
	    		{
					e=1;
					P3_6=1;
					P3_7=1;
					P1_6=1;
					cc++;
					P2_1=1;
					delay1(8);
					P2_1=0;
					gengxin(b);
					for(;;)
					{
						jianhao=kbscan();
						//LED_DISPLAY(b,0);
						if(jianhao==0)
							break;
					}
					break;
	    		}
	    		else if(jianhao==0x04)//检漏状态启动
				{
					e=1;
					P3_6=1;
					P3_7=1;
					P1_6=1;
					P1_7=0;//检漏指示灯亮
					P2_1=1;
					delay1(8);
					P2_1=0;
					for(;;)
					{
						jianhao=kbscan();
						if(jianhao==0)
							break;//判断按键是否已经放开,若放开,退出循环
					}
					for(;;)
					{
						z1=TLC1549read();
						z2=TLC1549read();
						z3=TLC1549read();
						z4=TLC1549read();
						//z5=TLC1549read();
						//z6=TLC1549read();
						qiya=(z1+z2+z3+z4)/4;
						for (tempDisplay=0;tempDisplay<30;tempDisplay++)
						{
					    	jianhao=kbscan();
							if (jianhao==0x04)
								break;
						}
			 			if(jianhao==0x04)
						{
							P1_7=1;//检漏指示灯灭
							P2_1=1;
							delay1(8);
							P2_1=0;
							break;
						}
						LED_DISPLAY(b,4);
		    		}
					for(;;)
					{
						z1=TLC1549read();
						z2=TLC1549read();
						z3=TLC1549read();
						z4=TLC1549read();
						//z5=TLC1549read();
						//z6=TLC1549read();
						qiya=(z1+z2+z3+z4)/4;
						LED_DISPLAY(b,4);
						//delay1(3);
						jianhao=kbscan();
						if(jianhao==0)
							break;
						LED_DISPLAY(b,4);
					}
					break;
				} 
			}	
	  	}
	}
}	
void warning()//执行充气一小时停一小时的操作,其中报警器一直报警,报警灯始终亮,直到气压达到上限为止跳出
{
	long int T,Time;
	uchar i,key;
	T=value;
	P1_5=0;//报警灯亮
	P2_1=1;//蜂鸣器响
	P2_0=1;//遥信接口报警
	P3_6=1;
	P3_7=1;//停止充气
	P1_6=1;//充气灯灭
	for(;;)//做停机一小时处理
   	{
		z1=TLC1549read();
		z2=TLC1549read();
		z3=TLC1549read();
		z4=TLC1549read();
		//z5=TLC1549read();
		//z6=TLC1549read();
		qiya=(z1+z2+z3+z4)/4;
		LED_DISPLAY(b,5);
		for(i=0;i<30;i++)
		{
			key=kbscan();
		}
		Time=value;
    	if(Time-T>=72000)
      	{	
			P3_6=0;
			P3_7=0;
			P1_6=0; 
			break;
		}
    }
	T=value;
	for(;;)//做充气一小时处理
   	{
		z1=TLC1549read();
		z2=TLC1549read();
		z3=TLC1549read();
		z4=TLC1549read();
		//z5=TLC1549read();
		//z6=TLC1549read();
		qiya=(z1+z2+z3+z4)/4;
		LED_DISPLAY(b,5);
   		Time=value;
		if(Time-T>72000)
      	{
			P3_6=1;
			P3_7=1;
			P1_6=1;
			break;
		}
		if(qiya>=a1*50)
		{
			P3_6=1;
			P3_7=1;
			P1_6=1;
			P1_5=1;
			P2_1=0;
			P2_0=0;
			break;
		}
	}
}
void gengxin(uchar b)//参数b为已经充气的次数//该函数表示当功能键按下一次即进入该函数处理和显示,直到功能键按下4次为止退出
{
	uchar t,key;//cc为功能键按下次数%4
	uint i=0;
	for(;;)//进入该函数的条件为功能键按下,此循环保证了不松开按键只做按键一次响应
	{
		LED_DISPLAY(b,cc);
		key=kbscan();
			if(key==0)
		break;
	}
	for(;;)//最大值状态,最小值状态,显示次数状态得显示和操作程序,当功能键按下四次时,跳出该循环,进而退出函数
   	{
			for(i=1;i<70;i++)
			{
				key=kbscan();
				if(key==0x01)
				{	
					P2_1=1;
					delay1(8);
					P2_1=0;
					if(cc==0x01)
					{	
						if(a1<0x14)
						{
							a1=a1+1;
						}				
						LED_DISPLAY(b,cc);
					}
					else if(cc==0x02)
					{	
						if(a1-a2>1)
						{
							a2=a2+1;
						}
						LED_DISPLAY(b,cc);
					}
					else if(cc==0x03)
					{
						if(a3<0xff)
						{
							a3=a3+1;
						}
						LED_DISPLAY(b,cc);
					}
					for(;;)
					{
						key=kbscan();
						if(key==0)
							break;
					}
				}
	        	else if(key==0x02)
				{
					P2_1=1;
					delay1(8);
					P2_1=0;
					if(cc==0x01)
					{
						if(a1>0x02&&a1-a2>1)
						{
							a1=a1-1;
						}		
						LED_DISPLAY(b,cc);
					}
					else if(cc==0x02)
					{
						if(a2>0x01)
						{
							a2=a2-1;
						}
						LED_DISPLAY(b,cc);
					}
					else if(cc==0x03)
					{
						if(a3>0x01)
						{
							a3=a3-1;
						}						
						LED_DISPLAY(b,cc);
					}
					for(;;)
					{
						key=kbscan();
						if(key==0)
							break;
					}
				}
	      		else if(key==0x03)
				{
					cc=(cc+1)%4;
					if(cc!=0)
					{
						P2_1=1;
						delay1(8);
						P2_1=0;
					}
					if(cc==0)
					{	
						P2_1=1;
						delay2(60);
						P2_1=0;
						WriteEeprom(0x20,a1,a2,a3);
						break;
					}
					for(;;)
					{
						key=kbscan();
						if(key==0)
							break;
					}
				}
			}
			if(cc==0)
				break;
			for(i=1;i<70;i++)
			{
				key=kbscan1();
				delay2(4);
				for(t=0;t<220;t++);
				if(key==0x01)
				{	
					P2_1=1;
					delay1(8);
					P2_1=0;
					if(cc==0x01)
					{
						if(a1<0x14)
						{
							a1=a1+1;
						}
					}
					else if(cc==0x02)
					{
						if(a1-a2>1)
						{
							a2=a2+1;
						}	
					}
					else if(cc==0x03)
					{
						if(a3<0xff)
						{
							a3=a3+1;
						}
					}
					P2_2=0;
					for(;;)
					{
						key=kbscan();
						if(key==0)
							break;
					}
					break;
				}
	        	else if(key==0x02)
				{
					P2_1=1;
					delay1(8);
					P2_1=0;
					if(cc==0x01)
					{
						if(a1>0x01&&a1-a2>1)
						{
							a1=a1-1;
						}
					}
					else if(cc==0x02)
					{
						if(a2>0x01)
						{
							a2=a2-1;
						}
					}
					else if(cc==0x03)

⌨️ 快捷键说明

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