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

📄 inandout.c

📁 前两天一个朋友要我写一个51例程
💻 C
字号:
/*按钮的输入说明:
	1.按钮只能是自复位按钮,即按下接通,松开后即断开
	2.按钮编号24个,1-3为特殊功能按钮,1代表总开关,
		总开关功能: 一只作为关闭所有输出的回路使用,具体的使用过程是,
		             主开关按下时如果当前有工作的回路,则保存该当前的工作状态,并将电源关闭
					 如果当前没有任何工作的回路,则按照上次的保存打开工作的回路.


		 2代表调光第一路,3代表调光第二路,其他按钮均可以设定

通过通讯设置按钮与开关的对应模式
除前3个按钮不可以设置外,其他的按钮都可以设置: 具体设置方法如下
1. 	每个按钮都可以设定3个对应的输出继电器.即一个按钮可以对应3个输出.
2.  输出的的方法有多种,由以下组和的数字表示,组和结构如下所示顺序
    
	按钮编号(4-24)   按钮所控制的输出个数(1-3)
	输出编号1(1-23)  输出模式  附加参数1,附加参数2,附加参数3
	输出编号2(1-23)  输出模式  附加参数1,附加参数2,附加参数3	(如果按钮所控制的输出个数>=2,则具备该项)
	输出编号3(1-23)  输出模式  附加参数1,附加参数2,附加参数3	(如果按钮所控制的输出个数=3,则具备该项)
功能: 
1. 除上述的描述外,另外具备掉电存储的功能,即停电前存储当前的状态,来电后,按照停电前的状态接通外部回路
      该功能只针对即时打开的开关和调光的开关起作用,其他的特别是延时操作的开关不起作用.
2. 支持通信配置以上参数的功能,暂时不支持开关操作的通信命令,
3. 以上与通信相关的条款,由通信规约负责解析.
*/
#include <inandout.h>

#include <hardconfig.h>

#define	MaxButton	24
#define	MaxTest		10
sbit		OEN		=	P2^7;	
sbit		AL1		=	P2^5 ;
sbit		AL2		=	P2^6 ;
sbit		RL17	=	P2^4 ;
sbit		RL18	=	P2^3 ;
sbit		RL19	=	P2^2 ;
sbit		RL20	=	P2^1 ;
sbit		RL21	=	P2^0 ;
sbit		RL22	=	P1^5 ;
sbit		RL23	=	P1^6 ;

sbit		CS0		=	P3^7;	
sbit		CS1		=	P3^6 ;
sbit		CS2		=	P3^5 ;

sbit		ZMADJ1=	P1^0;
sbit		ZMADJ2=	P1^1 ;


uchar	bdata	IN1,IN2,IN3;
uchar	bdata	OUTREG1=0,OUTREG2=0;
uchar	ButtonCt[MaxButton+1];
sbit	RL1		=  OUTREG1^0;
sbit	RL2		=  OUTREG1^1;
sbit	RL3		=  OUTREG1^2;
sbit	RL4		=  OUTREG1^3;
sbit	RL5		=  OUTREG1^4;
sbit	RL6		=  OUTREG1^5;
sbit	RL7		=  OUTREG1^6;
sbit	RL8		=  OUTREG1^7;
sbit	RL9		=  OUTREG2^0;
sbit	RL10	=  OUTREG2^1;
sbit	RL11	=  OUTREG2^2;
sbit	RL12	=  OUTREG2^3;
sbit	RL13	=  OUTREG2^4;
sbit	RL14	=  OUTREG2^5;
sbit	RL15	=  OUTREG2^6;
sbit	RL16	=  OUTREG2^7;

sbit	Bt1		=	IN1^0; 
sbit	Bt2		=	IN1^1;
sbit	Bt3		=	IN1^2;
sbit	Bt4		=	IN1^3;
sbit	Bt5		=	IN1^4;
sbit	Bt6		=	IN1^5;
sbit	Bt7		=	IN1^6;
sbit	Bt8		=	IN1^7;
sbit	Bt9		=	IN2^0; 
sbit	Bt10	=	IN2^1;
sbit	Bt11	=	IN2^2;
sbit	Bt12	=	IN2^3;
sbit	Bt13	=	IN2^4;
sbit	Bt14	=	IN2^5;
sbit	Bt15	=	IN2^6;
sbit	Bt16	=	IN2^7;
sbit	Bt17	=	IN3^0; 
sbit	Bt18	=	IN3^1;
sbit	Bt19	=	IN3^2;
sbit	Bt20	=	IN3^3;
sbit	Bt21	=	IN3^4;
sbit	Bt22	=	IN3^5;
sbit	Bt23	=	IN3^6;
sbit	Bt24	=	IN3^7;
#define	DateBus	P0
//初始化输出IO	,全部初始化为低电平(低电平即继电器不工作)
void	GPIO_OUT_Config()
{
	AL1		=	0;
	AL2		=	0;
	DateBus	=	0;
	OEN		=	0;
	AL1		=	1;
	AL1		=	0;
	AL2		=	1;
	AL2		=	0;
	RL17	=	0;
	RL18	=	0;
	RL19	=	0;
	RL20	=	0;
	RL21	=	0;
	RL22	=	0;
	RL23	=	0;
	Disable_InputChip();	
}
void	ButtonDataConfig()
{
	uchar	iloop;
	for(iloop	=	0;iloop < MaxButton;iloop++)  
	{
		ButtonCt[iloop]	=	0;	
	}
}
/*输出继电器,参数Number代表第几路,OnOff=0关,=1开*/
void	RelayOut(unsigned	char	Number,bit	OnOff)
{
	DisableInterrupt();
	switch(Number)
	{
		case	1:
			RL1		=	OnOff;
			DateBus	=	OUTREG1;
			AL1=1;
			AL1=0;
			break;
		case	2:
			RL2		=	OnOff;
			DateBus	=	OUTREG1;
			AL1=1;
			AL1=0;
			break;
		case	3:
			RL3		=	OnOff;
			DateBus	=	OUTREG1;
			AL1=1;
			AL1=0;
			break;
		case	4:
			RL4		=	OnOff;
			DateBus	=	OUTREG1;
			AL1=1;
			AL1=0;
			break;
		case	5:
			RL5=OnOff;
			DateBus=OUTREG1;
			AL1=1;
			AL1=0;
			break;
		case	6:
			RL6=OnOff;
			DateBus=OUTREG1;
			AL1=1;
			AL1=0;
			break;
		case	7:
			RL7=OnOff;
			DateBus=OUTREG1;
			AL1=1;
			AL1=0;
			break;
		case	8:
			RL8=OnOff;
			DateBus=OUTREG1;
			AL1=1;
			AL1=0;
			break;
		case	9:
			RL9=OnOff;
			DateBus=OUTREG2;
			AL2=1;
			AL2=0;
			break;
		case	10:
			RL10=OnOff;
			DateBus=OUTREG2;
			AL2=1;
			AL2=0;
			break;
		case	11:
			RL11=OnOff;
			DateBus=OUTREG2;
			AL2=1;
			AL2=0;
			break;
		case	12:
			RL12=OnOff;
			DateBus=OUTREG2;
			AL2=1;
			AL2=0;
			break;
		case	13:
			RL13=OnOff;
			DateBus=OUTREG2;
			AL2=1;
			AL2=0;
			break;
		case	14:
			RL14=OnOff;
			DateBus=OUTREG2;
			AL2=1;
			AL2=0;
			break;
		case	15:
			RL15=OnOff;
			DateBus=OUTREG2;
			AL2=1;
			AL2=0;
			break;
		case	16:
			RL16=OnOff;
			DateBus=OUTREG2;
			AL2=1;
			AL2=0;
			break;
		case	17:
			RL17=OnOff;
			break;
		case	18:
			RL18=OnOff;
			break;
		case	19:
			RL19=OnOff;
			break;
		case	20:
			RL20=OnOff;
			break;
		case	21:
			RL21=OnOff;
			break;
		case	22:
			RL22=OnOff;
			break;
		case	23:
			RL23=OnOff;
			break;
		default:
			break;
	}
 	EnableInterrupt();
}
 /*按钮检测程序*/
void	task_ruputT1(void) interrupt 3 using 1
{
   DateBus=0xFF;
   Sel_InputChip_One();
   IN1=	DateBus;
   Sel_InputChip_Two();	
   IN2=	DateBus;
   Sel_InputChip_Three();	
   IN3=	DateBus;
   Disable_InputChip();
   /**/
   if((!Bt1)&&(ButtonCt[1]<MaxTest))
   {
   		ButtonCt[1]++;
   }
   else	if((!Bt4)&&(ButtonCt[4]<MaxTest))
   {
   		ButtonCt[4]++;
   }
   else	if((!Bt5)&&(ButtonCt[5]<MaxTest))
   {
   		ButtonCt[5]++;
   }
   else	if((!Bt6)&&(ButtonCt[6]<MaxTest))
   {
   		ButtonCt[6]++;
   }
   else	if((!Bt7)&&(ButtonCt[7]<MaxTest))
   {
   		ButtonCt[7]++;
   }
   else	if((!Bt8)&&(ButtonCt[8]<MaxTest))
   {
   		ButtonCt[8]++;
   }
   else	if((!Bt9)&&(ButtonCt[9]<MaxTest))
   {
   		ButtonCt[9]++;
   }
   else	if((!Bt10)&&(ButtonCt[10]<MaxTest))
   {
   		ButtonCt[10]++;
   }
   else	if((!Bt11)&&(ButtonCt[11]<MaxTest))
   {
   		ButtonCt[11]++;
   }
   else	if((!Bt12)&&(ButtonCt[12]<MaxTest))
   {
   		ButtonCt[12]++;
   }
   else	if((!Bt13)&&(ButtonCt[13]<MaxTest))
   {
   		ButtonCt[13]++;
   }
   else	if((!Bt14)&&(ButtonCt[14]<MaxTest))
   {
   		ButtonCt[14]++;
   }
   else	if((!Bt15)&&(ButtonCt[15]<MaxTest))
   {
   		ButtonCt[15]++;
   }
   else	if((!Bt16)&&(ButtonCt[16]<MaxTest))
   {
   		ButtonCt[16]++;
   }
   if((!Bt17)&&(ButtonCt[17]<MaxTest))
   {
   		ButtonCt[17]++;
   }
   else	if((!Bt18)&&(ButtonCt[18]<MaxTest))
   {
   		ButtonCt[18]++;
   }
   else	if((!Bt19)&&(ButtonCt[19]<MaxTest))
   {
   		ButtonCt[19]++;
   }
   else	if((!Bt20)&&(ButtonCt[20]<MaxTest))
   {
   		ButtonCt[20]++;
   }
   else	if((!Bt21)&&(ButtonCt[21]<MaxTest))
   {
   		ButtonCt[21]++;
   }
   else	if((!Bt22)&&(ButtonCt[22]<MaxTest))
   {
   		ButtonCt[22]++;
   }
   else	if((!Bt23)&&(ButtonCt[23]<MaxTest))
   {
   		ButtonCt[23]++;
   }
   else	if((!Bt24)&&(ButtonCt[24]<MaxTest))
   {
   		ButtonCt[24]++;
   }

}
/*设置照明调光PWM输出函数*/
void	SetAdjLight()
{
	 if(!Bt2) 	ZMADJ1=0;
	 else		ZMADJ1=1;	
	 if(!Bt3) 	ZMADJ2=0;
	 else		ZMADJ2=1;
}
uchar	GetButton()
{
	uchar	buttonret=0;
	if(Bt1)
	{
		if((ButtonCt[1]>=MaxTest))	
		{
			buttonret= 	1;
		} 
		ButtonCt[1]=0; 
	}
	if(Bt4)
	{
		if((ButtonCt[4]>=MaxTest))	
		{
			buttonret= 	4;
		}  
		ButtonCt[4]=0;

	}
	if(Bt5)
	{
		if((ButtonCt[5]>=MaxTest))	
		{
			buttonret= 	5;
		} 
		ButtonCt[5]=0;

	}
	if(Bt6)
	{
		if((ButtonCt[6]>=MaxTest))	
		{
			buttonret= 	6;
		}
	
		ButtonCt[6]=0;
		
	}
	if(Bt7)
	{
		if((ButtonCt[7]>=MaxTest))	
		{
			buttonret= 	7;
		}
	
		ButtonCt[7]=0;	 	
	}
	if(Bt8)
	{
		if((ButtonCt[8]>=MaxTest))	
		{
			buttonret= 	8;
		}	
		ButtonCt[8]=0;
		
	}
	if(Bt9)
	{
		if((ButtonCt[9]>=MaxTest))	
		{
			buttonret= 	9;
		}
	
		ButtonCt[9]=0;	 	
	}

	if(Bt10)
	{
		if((ButtonCt[10]>=MaxTest))	
			buttonret= 	10;
		
	   	ButtonCt[10]=0;
		
	}
	if(Bt11)
	{
		if((ButtonCt[11]>=MaxTest))	
		{
			buttonret= 	11;
		}
	
		ButtonCt[11]=0;	
	}
	if(Bt12)
	{
		if((ButtonCt[12]>=MaxTest))	
		{
			buttonret= 	12;
		}	
		ButtonCt[12]=0;	
	}
	if(Bt13)
	{
		if((ButtonCt[13]>=MaxTest))	
		{
			buttonret= 	13;
		}	
		ButtonCt[13]=0;
	
	}
	if(Bt14)
	{
		if((ButtonCt[14]>=MaxTest))	
		{
			buttonret= 	14;
		}
		 ButtonCt[14]=0;
	
	}
	if(Bt15)
	{
		if((ButtonCt[15]>=MaxTest))	
		{
			buttonret= 	15;
		} 	
		ButtonCt[15]=0;
	
	}
	if(Bt16)
	{
		if((ButtonCt[16]>=MaxTest))	
		{
			buttonret= 	16;
		}	
		ButtonCt[16]=0;	 	
	}
	if(Bt17)
	{
		if((ButtonCt[17]>=MaxTest))	
		{
			buttonret= 	17;
		} 	
		ButtonCt[17]=0;		
	}
	if(Bt18)
	{
		if((ButtonCt[18]>=MaxTest))	
		{
			buttonret= 	18;
		} 	
		ButtonCt[18]=0;
	
	}
	if(Bt19)
	{
		if((ButtonCt[19]>=MaxTest))	
		{
			buttonret= 	19;
		} 
		ButtonCt[19]=0;
	
	}
	if(Bt20)
	{
		if((ButtonCt[20]>=MaxTest))	
		{
			buttonret= 	20;
		} 	
		ButtonCt[20]=0;
	
	}

	if(Bt21)
	{
		if((ButtonCt[21]>=MaxTest))	
		{
			buttonret= 	21;
		}
	
		ButtonCt[21]=0;	
	}
	if(Bt22)
	{
		if((ButtonCt[22]>=MaxTest))	
		{
			buttonret= 	22;
		} 	
		ButtonCt[22]=0;		
	}
	if(Bt23)
	{
		if((ButtonCt[23]>=MaxTest))	
		{
			buttonret= 	23;
		}	
		ButtonCt[23]=0;	
	}
	if(Bt24)
	{
		if((ButtonCt[24]>=MaxTest))	
		{
			buttonret= 	24;
		}		
		ButtonCt[24]=0;	
	} 

	return	buttonret;
	
}

⌨️ 快捷键说明

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