📄 inandout.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 + -