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

📄 main.c

📁 采用1*4,4*4键盘同时控制,带有8位数码显示的数控直流电源驱动及应用程序(Keil c51)
💻 C
📖 第 1 页 / 共 2 页
字号:
		{
			if(ubit<=3)
			{
				U_Buf[ubit]=9;
				Disp_changei(U_Buf[ubit]);
				ubit=ubit+1;
			}
			else
			{
				ubit=0;
			}
		}break;

		case ESC:
		{
			I_data = temp;
			i_ds=0;
			ubit=0;
			Sys_sta = IDLE_STA;
		}break;

		case OK:
		case ISET:
		{
			if (ubit == 4)
			{
				if((U_Buf[0]==1 && U_Buf[2]==2 && U_Buf[3]>=4) || U_Buf[0]>=2)
				{
					I_data = U_Buf[1]*100+U_Buf[2]*10+U_Buf[3];	
				}
				else
				{	
					I_data = U_Buf[0]*1000+U_Buf[1]*100+U_Buf[2]*10+U_Buf[3];
				}
			}
			else if(ubit == 3)
			{
				I_data = U_Buf[0]*100+U_Buf[1]*10+U_Buf[2];
			}
            else if(ubit == 2)
            {
				I_data = U_Buf[0]*10+U_Buf[1];
			}
            else if(ubit  == 1)
            {
				I_data = U_Buf[0];
			}

			SEND_5615_I(I_data);

			U_Buf[0]=0;
			U_Buf[1]=0;
			U_Buf[2]=0;
			U_Buf[3]=0;

			i_ds=0;
			ubit=0;
			Sys_sta = IDLE_STA;
		}break;
	}

	while(keytemp!=0xff)
	{
		keytemp = Key();
		Disp();
		Delay(10);
	}
}
//1mul8电压设定状态下的服务程序
void U_SETu_Mange(void)
{
	unsigned int temp;
	temp = U_data;

	flashbuf = flashbuf++;

	if(flashbuf==15)
	{
		flash = ~flash;
		flashbuf = 0;
	}

	if(flash==1)
	{
		Disp_U_set(U_data);
	}
	else if(flash==0)
	{
		Disp_Buf[uset_bit]=18;
		Disp();
	}
	Disp_I_Real();

	keytemp = Key();
	switch(keytemp)
	{
		case ESC:
		{
			U_data = temp;
			Sys_sta = IDLE_STA;
			uset_bit=3;
			flashbuf=0;
		}break;

		case OK:
		case USET:
		{
			SEND_5615_U(U_data);
			Sys_sta = IDLE_STA;
			uset_bit=3;
			flashbuf=0;
		}break;

		case USEL:
		{
			if(uset_bit==3)
				uset_bit=2;
			else if(uset_bit==2)
					uset_bit=1;
			else if(uset_bit==1)
			 		uset_bit=3;
		}break;

		case VADD:
		{
			switch(uset_bit)
			{
				case 3:
				{
					U_data=U_data+1;
				}break;
				case 2:
				{
					U_data=U_data+10;
				}break;
				case 1:
				{
					U_data=U_data+100;
				}break;
			}
			flashbuf=0;
		}break;

		case VSUB:
		{
			switch(uset_bit)
			{
				case 3:
				{
					U_data=U_data-1;
				}break;
				case 2:
				{
					U_data=U_data-10;
				}break;
				case 1:
				{
					U_data=U_data-100;
				}break;
			}
			flashbuf=0;
		}break;
	}

	while(keytemp!=0xff)
	{
		keytemp = Key();
		Disp_U_set(U_data);
		Disp_I_Real();
		Delay(10);
	}
}
//1mul8电流设定状态下的服务程序
void I_SETi_Mange(void)
{
	unsigned int temp;
	temp = I_data;

	flashbuf = flashbuf++;

	if(flashbuf==15)
	{
		flash = ~flash;
		flashbuf = 0;
	}

	if(flash==1)
	{
		Disp_I_set(I_data);
	}
	else if(flash==0)
	{
		Disp_Buf[iset_bit]=18;
		Disp();
	}

	Disp_U_Real();

	keytemp = Key();
	switch(keytemp)
	{
		case ESC:
		{
			I_data = temp;
			Sys_sta = IDLE_STA;
			flashbuf = 0;
			iset_bit=7;
		}break;

		case OK:
		case ISET:
		{
			SEND_5615_I(I_data);
			Sys_sta = IDLE_STA;
			flashbuf = 0;
			iset_bit=7;
		}break;

		case ISEL:
		{
			if(iset_bit==7)
				iset_bit=6;
			else if(iset_bit==6)
					iset_bit=5;
			else if(iset_bit==5)
			 		iset_bit=7;
		}break;

		case IADD:
		{
			switch(iset_bit)
			{
				case 7:
				{
					I_data=I_data+1;
				}break;
				case 6:
				{
					I_data=I_data+10;
				}break;
				case 5:
				{
					I_data=I_data+100;
				}break;
			}
			flashbuf = 0;
		}break;

		case ISUB:
		{
			switch(iset_bit)
			{
				case 7:
				{
					I_data=I_data-1;
				}break;
				case 6:
				{
					I_data=I_data-10;
				}break;
				case 5:
				{
					I_data=I_data-100;
				}break;
			}
			flashbuf = 0;
		}break;
	}

	while(keytemp!=0xff)
	{
		keytemp = Key();
		Disp_I_set(I_data);
		Disp_U_Real();
		Delay(10);
	}
}
//用户设置状态下的服务程序
void USER_SET_Mange(void)
{
	if(i_ds==0)
	{
		i_ds=1;//显示uset
		Disp_Buf[0]=5;
		Disp_Buf[1]=14;
		Disp_Buf[2]=21;
		Disp_Buf[3]=userbit;	
		Disp_Buf[4]=18;
		Disp_Buf[5]=18;
		Disp_Buf[6]=18;
		Disp_Buf[7]=18;	
		Disp();
	}
	Disp();

	keytemp = Key();

	switch(keytemp)
	{
		case 0:
		{
			if(ubit<=3)
			{
				U_Buf[ubit]=0;
				Disp_changei(U_Buf[ubit]);
				ubit=ubit+1;
			}
			else
			{
				ubit=0;
			}
		}break;

		case 1:
		{
			if(ubit<=3)
			{
				U_Buf[ubit]=1;
				Disp_changei(U_Buf[ubit]);
				ubit=ubit+1;
			}
			else
			{
				ubit=0;
			}
		}break;

		case 2:
		{
			if(ubit<=3)
			{
				U_Buf[ubit]=2;
				Disp_changei(U_Buf[ubit]);
				ubit=ubit+1;
			}
			else
			{
				ubit=0;
			}
		}break;

		case 3:
		{
			if(ubit<=3)
			{
				U_Buf[ubit]=3;
				Disp_changei(U_Buf[ubit]);
				ubit=ubit+1;
			}
			else
			{
				ubit=0;
			}
		}break;

		case 4:
		{
			if(ubit<=3)
			{
				U_Buf[ubit]=4;
				Disp_changei(U_Buf[ubit]);
				ubit=ubit+1;
			}
			else
			{
				ubit=0;
			}
		}break;

		case 5:
		{
			if(ubit<=3)
			{
				U_Buf[ubit]=5;
				Disp_changei(U_Buf[ubit]);
				ubit=ubit+1;
			}
			else
			{
				ubit=0;
			}
		}break;

		case 6:
		{
			if(ubit<=3)
			{
				U_Buf[ubit]=6;
				Disp_changei(U_Buf[ubit]);
				ubit=ubit+1;
			}
			else
			{
				ubit=0;
			}
		}break;

		case 7:
		{
			if(ubit<=3)
			{
				U_Buf[ubit]=7;
				Disp_changei(U_Buf[ubit]);
				ubit=ubit+1;
			}
			else
			{
				ubit=0;
			}
		}break;

		case 8:
		{
			if(ubit<=3)
			{
				U_Buf[ubit]=8;
				Disp_changei(U_Buf[ubit]);
				ubit=ubit+1;
			}
			else
			{
				ubit=0;
			}
		}break;

		case 9:
		{
			if(ubit<=3)
			{
				U_Buf[ubit]=9;
				Disp_changei(U_Buf[ubit]);
				ubit=ubit+1;
			}
			else
			{
				ubit=0;
			}
		}break;

		case ESC:
		{
			i_ds = 0;
			Sys_sta = IDLE_STA;
		}break;

		case OK:
		case USET:
		{
			if(uset == 0)
			{	
				if (ubit == 4)
				{
					if((U_Buf[0]==1 && U_Buf[2]==2 && U_Buf[3]>=4) || U_Buf[0]>=2)
					{
						user[userbit].U = U_Buf[1]*100+U_Buf[2]*10+U_Buf[3];	
					}
					else
					{	
						user[userbit].U = U_Buf[0]*1000+U_Buf[1]*100+U_Buf[2]*10+U_Buf[3];
					}
				}
				else if(ubit == 3)
				{
					user[userbit].U = U_Buf[0]*100+U_Buf[1]*10+U_Buf[2];
				}
	            else if(ubit == 2)
	            {
					user[userbit].U = U_Buf[0]*10+U_Buf[1];
				}
	            else if(ubit  == 1)
	            {
					user[userbit].U = U_Buf[0];
				}
				U_Buf[0]=0;
				U_Buf[1]=0;
				U_Buf[2]=0;
				U_Buf[3]=0;
					
				i_ds = 0;
				u_ds=0;
				ubit=0;
				i_ds = 0;
				uset=~uset;
			}
			else if(uset == 1)
			{
				
				if (ubit == 4)
				{
					if((U_Buf[0]==1 && U_Buf[2]==2 && U_Buf[3]>=4) || U_Buf[0]>=2)
					{
						user[userbit].I = U_Buf[1]*100+U_Buf[2]*10+U_Buf[3];	
					}
					else
					{	
						user[userbit].I = U_Buf[0]*1000+U_Buf[1]*100+U_Buf[2]*10+U_Buf[3];
					}
				}
				else if(ubit == 3)
				{
					user[userbit].I = U_Buf[0]*100+U_Buf[1]*10+U_Buf[2];
				}
	            else if(ubit == 2)
	            {
					user[userbit].I = U_Buf[0]*10+U_Buf[1];
				}
	            else if(ubit  == 1)
	            {
					user[userbit].I = U_Buf[0];
				}
				
				U_Buf[0]=0;
				U_Buf[1]=0;
				U_Buf[2]=0;
				U_Buf[3]=0;
				
				userbit = userbit+1;
				if(userbit == 7)
				{
					userbit = 0;
				}

				i_ds = 0;
				u_ds=0;
				ubit=0;
				uset=~uset;
				Sys_sta = IDLE_STA;
			}
		}break;
	}
	while(keytemp!=0xff)
	{
		keytemp = Key();
		Disp();
		Delay(10);
	}
	//==============
}
//调用用户预置状态下的服务程序
void CALL_USER_Mange(void)
{
	unsigned int temp1,temp2;

	if(i_ds==0)
	{
		i_ds=1;//显示call
		Disp_Buf[0]=12;
		Disp_Buf[1]=10;
		Disp_Buf[2]=20;
		Disp_Buf[3]=20;	
		Disp_Buf[4]=18;
		Disp_Buf[5]=18;
		Disp_Buf[6]=18;
		Disp_Buf[7]=18;	

		Disp();
	}
	Disp();
	keytemp = Key();

	switch(keytemp)
		{
			case 0:
			{
				Disp_Buf[7]=0;
				temp1=user[0].U;
				temp2=user[0].I;

			}break;

			case 1:
			{
				Disp_Buf[7]=1;
				temp1=user[1].U;
				temp2=user[1].I;
			}break;

			case 2:
			{
				Disp_Buf[7]=2;
				temp1=user[2].U;
				temp2=user[2].I;
			}break;
			case 3:
			{
				Disp_Buf[7]=3;
				temp1=user[3].U;
				temp2=user[3].I;
			}break;

			case 4:
			{
				Disp_Buf[7]=4;
				temp1=user[4].U;
				temp2=user[4].I;
			}break;
			case 5:
			{
				Disp_Buf[7]=5;
				temp1=user[5].U;
				temp2=user[5].I;
			}break;

			case 6:
			{
				Disp_Buf[7]=6;
				temp1=user[6].U;
				temp2=user[6].I;
			}break;

			case 7:
			{
				Disp_Buf[7]=7;
				temp1=500;
				temp2=800;
			}break;

			case 8:
			{
				Disp_Buf[7]=8;
				temp1=330;
				temp2=500;
			}break;

			case 9:
			{
				Disp_Buf[7]=9;
				temp1=180;
				temp2=300;
			}break;

			case ESC:
			{
				i_ds=0;
				Sys_sta = IDLE_STA;
			}break;

			case OK:
			case ISET:
			{
				i_ds=0;
				I_data = temp2;
				U_data = temp1;

				SEND_5615_I(I_data);
				SEND_5615_U(U_data);
	
				Sys_sta = IDLE_STA;
			}break;
		}

		while(keytemp!=0xff)
		{
			keytemp = Key();
			Disp();
			Delay(10);
		}
}

//主函数
void main (void)
{
	Init();

	while(1)
	{
		Delay(5);//状态机
		switch(Sys_sta)
		{
			case IDLE_STA:
			{	
				IDLE_Mange();//for idle state
			}break;

			case U_SET_STA:
			{
				U_SET_Mange();//set u by 4*4
			}break;

			case I_SET_STA://set i by 4*4
			{
				I_SET_Mange();
			}break;

			case U_SETu://set u by 1*8
			{
				U_SETu_Mange();
			}break;

			case I_SETi://set i by 1*8
			{
				I_SETi_Mange();
			}break;

			case USER_SET_STA://for user set
			{
				USER_SET_Mange();
			}break;

			case CALL_USER_STA://for user call
			{
				CALL_USER_Mange();
			}break;

			default:break;
		}
	}
}

⌨️ 快捷键说明

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