?? 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 + -