📄 backup8.c
字号:
h=0;
}
}
//加幻相电压
for(L=0;L<5;L++)
for(i=0;i<4;i++)
AddVoltage[L][i] = 0; //清零
for(i=0;i<20;i++)
{
if(InputState[i][7] == 0x03) //与推子模块绑定的是否是话筒输入板
{
L = ((InputState[i][8]>>4)& 0x0F)-0x01;
h = (InputState[i][8]& 0x0F)-0x0A;
if((L>=0x05)||(h>=0x04))continue;
if(InputState[i][10] == 0x01) //加幻相电压
{
AddVoltage[L][h] = 1;
}
else //不加幻相电压
AddVoltage[L][h] = 0;
}
}
//设置输入通道数据
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 1;
if(InputAddr[0] != 0)
{
TxMessage.Data[0] = (AddVoltage[0][0]|(AddVoltage[0][1]<<1)|
(AddVoltage[0][2]<<2)|(AddVoltage[0][3]<<3))& 0x0F;
TxMessage.StdId = InputAddr[0];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
if(InputAddr[1] != 0)
{
TxMessage.Data[0] = (AddVoltage[1][0]|(AddVoltage[1][1]<<1)|
(AddVoltage[1][2]<<2)|(AddVoltage[1][3]<<3))& 0x0F;
TxMessage.StdId = InputAddr[1];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
if(InputAddr[2] != 0)
{
TxMessage.Data[0] = (AddVoltage[2][0]|(AddVoltage[2][1]<<1)|
(AddVoltage[2][2]<<2)|(AddVoltage[2][3]<<3))& 0x0F;
TxMessage.StdId = InputAddr[2];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
if(InputAddr[3] != 0)
{
TxMessage.Data[0] = (AddVoltage[3][0]|(AddVoltage[3][1]<<1)|
(AddVoltage[3][2]<<2)|(AddVoltage[3][3]<<3))& 0x0F;
TxMessage.StdId = InputAddr[3];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
if(InputAddr[4] != 0)
{
TxMessage.Data[0] = (AddVoltage[4][0]|(AddVoltage[4][1]<<1)|
(AddVoltage[4][2]<<2)|(AddVoltage[4][3]<<3))& 0x0F;
TxMessage.StdId = InputAddr[4];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
for(h=0,i=240;i<244;i++)
HotFireSet[h++] = ReadEEPData[i];
for(h=0,i=244;i<264;i++)
OutputSet[h++] = ReadEEPData[i];
//设置输出通道数据
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
if(OutputAddr[0] != 0)
{
for(i=0;i<4;i++)
TxMessage.Data[i] = OutputSet[i];
TxMessage.StdId = OutputAddr[0];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
if(OutputAddr[1] != 0)
{
for(i=0;i<4;i++)
TxMessage.Data[i] = OutputSet[i+4];
TxMessage.StdId = OutputAddr[1];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
if(OutputAddr[2] != 0)
{
for(i=0;i<4;i++)
TxMessage.Data[i] = OutputSet[i+8];
TxMessage.StdId = OutputAddr[2];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
if(OutputAddr[3] != 0)
{
for(i=0;i<4;i++)
TxMessage.Data[i] = OutputSet[i+12];
TxMessage.StdId = OutputAddr[3];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
if(OutputAddr[4] != 0)
{
for(i=0;i<4;i++)
TxMessage.Data[i] = OutputSet[i+16];
TxMessage.StdId = OutputAddr[4];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
for(h=0,i=264;i<271;i++)
OutputGainSet[h++] = ReadEEPData[i];//(OutputGainSet[6]为一个字节SyncMode)
SyncMode = OutputGainSet[6];
if(HotFireSet[2]) //处理"热线"按键
{
for(i=0;i<20;i++)
if(HotFireSet[2] == InputState[i][8])break; //查找"热线"对应哪一路推子模块
HotFireClear = (((InputState[i][0]>>4)& 0x0F)-1)*4 + ((InputState[i][0]& 0x0F)-0x0A);
}
else
HotFireClear = 0xFF;
// printf("\nHotFireClear = %d\n\n",HotFireClear);
//
if(TuiziAddr[0] != 0) //地址1推子
{
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 8;
TxMessage.StdId = TuiziAddr[0];
for(i=0;i<4;i++)
{
TxMessage.Data[0] = (InputState[i][7]<<4)|(i+1); //高4位信号格式,低4位数据包编号
TxMessage.Data[1] = InputState[i][8]; //输入模块地址
for(h=2;h<8;h++)
TxMessage.Data[h] = InputState[i][h-1]; //6字节汉字码
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
//=== 初始化上一时刻按键状态 ===//
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
TxMessage.StdId = 0x101;
for(i=0;i<4;i++)
{
if(HotFireClear == i)
TempKeyState[i] &= ~(1<<1);
TxMessage.Data[i] = TempKeyState[i];
KeyDataBK[i] = TempKeyState[i];
if(((TempKeyState[i]>>3)& 0x01) == 0x01) //"设置"键是否有效
KeySetRenew = 1;
}
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
if(TuiziAddr[1] != 0) //地址2推子
{
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 8;
TxMessage.StdId = TuiziAddr[1];
for(i=4;i<8;i++)
{
TxMessage.Data[0] = (InputState[i][7]<<4)|(i-3); //高4位信号格式,低4位数据包编号
TxMessage.Data[1] = InputState[i][8];
for(h=2;h<8;h++)
TxMessage.Data[h] = InputState[i][h-1];
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
//=== 初始化上一时刻按键状态 ===//
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
TxMessage.StdId = 0x201;
for(h=0,i=4;i<8;i++)
{
if(HotFireClear == i)
TempKeyState[i] &= ~(1<<1);
TxMessage.Data[h++] = TempKeyState[i];
KeyDataBK[i] = TempKeyState[i];
if(((TempKeyState[i]>>3)& 0x01) == 0x01) //"设置"键是否有效
KeySetRenew = 1;
}
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
if(TuiziAddr[2] != 0) //地址3推子
{
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 8;
TxMessage.StdId = TuiziAddr[2];
for(i=8;i<12;i++)
{
TxMessage.Data[0] = (InputState[i][7]<<4)|(i-7); //高4位信号格式,低4位数据包编号
TxMessage.Data[1] = InputState[i][8];
for(h=2;h<8;h++)
TxMessage.Data[h] = InputState[i][h-1];
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
//=== 初始化上一时刻按键状态 ===//
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
TxMessage.StdId = 0x301;
for(h=0,i=8;i<12;i++)
{
if(HotFireClear == i)
TempKeyState[i] &= ~(1<<1);
TxMessage.Data[h++] = TempKeyState[i];
KeyDataBK[i] = TempKeyState[i];
if(((TempKeyState[i]>>3)& 0x01) == 0x01) //"设置"键是否有效
KeySetRenew = 1;
}
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
if(TuiziAddr[3] != 0) //地址4推子
{
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 8;
TxMessage.StdId = TuiziAddr[3];
for(i=12;i<16;i++)
{
TxMessage.Data[0] = (InputState[i][7]<<4)|(i-11); //高4位信号格式,低4位数据包编号
TxMessage.Data[1] = InputState[i][8];
for(h=2;h<8;h++)
TxMessage.Data[h] = InputState[i][h-1];
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
//=== 初始化上一时刻按键状态 ===//
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
TxMessage.StdId = 0x401;
for(h=0,i=12;i<16;i++)
{
if(HotFireClear == i)
TempKeyState[i] &= ~(1<<1);
TxMessage.Data[h++] = TempKeyState[i];
KeyDataBK[i] = TempKeyState[i];
if(((TempKeyState[i]>>3)& 0x01) == 0x01) //"设置"键是否有效
KeySetRenew = 1;
}
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
if(TuiziAddr[4] != 0) //地址5推子
{
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 8;
TxMessage.StdId = TuiziAddr[4];
for(i=16;i<20;i++)
{
TxMessage.Data[0] = (InputState[i][7]<<4)|(i-15); //高4位信号格式,低4位数据包编号
TxMessage.Data[1] = InputState[i][8];
for(h=2;h<8;h++)
TxMessage.Data[h] = InputState[i][h-1];
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
//=== 初始化上一时刻按键状态 ===//
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
TxMessage.StdId = 0x501;
for(h=0,i=16;i<20;i++)
{
if(HotFireClear == i)
TempKeyState[i] &= ~(1<<1);
TxMessage.Data[h++] = TempKeyState[i];
KeyDataBK[i] = TempKeyState[i];
if(((TempKeyState[i]>>3)& 0x01) == 0x01) //"设置"键是否有效
KeySetRenew = 1;
}
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
//读取效果设置信息
I2C_EE_BufferRead(ReadEEPData,EEP_EffectAddr_Address,40);
h=0;
L=0;
for(i=0;i<40;i++)
{
EffectAddr[L][h] = ReadEEPData[i];
h++;
if(h%2 == 0)
{
L++;
h=0;
}
}
//=== 场景"设置"按键对应的效果 ===//
for(i=0;i<20;i++)
{
if(InputState[i][7] == 0x03)
{
//*** 刷新临时场景"效果" ***//
// TxMessage.StdId = (((InputState[i][8] & 0xF0)<<4)|(InputState[i][8] & 0x0F))& 0x7FF;
TxMessage.StdId = (((EffectAddr[i][0] & 0xF0)<<4)|(EffectAddr[i][0] & 0x0F))& 0x7FF;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 7;
switch(EffectAddr[i][1]) //按下哪一个效果键
{
case (0x01)://效果1
TxMessage.Data[0] = 0x01; //帧编号(0x01)
for(h=1,cnt=0;h<6;h++)
{
TxMessage.Data[h] = EffectData[0][cnt];
cnt += 2;
}
TxMessage.Data[6] = EffectData[0][10];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
TxMessage.Data[0] = 0x02; //帧编号(0x02)
for(h=1,cnt=1;h<6;h++)
{
TxMessage.Data[h] = EffectData[0][cnt];
cnt += 2;
}
TxMessage.Data[6] = EffectData[0][11];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
break;
case (0x02)://效果2
TxMessage.Data[0] = 0x01; //帧编号(0x01)
for(h=1,cnt=0;h<6;h++)
{
TxMessage.Data[h] = EffectData[1][cnt];
cnt += 2;
}
TxMessage.Data[6] = EffectData[1][10];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
TxMessage.Data[0] = 0x02; //帧编号(0x02)
for(h=1,cnt=1;h<6;h++)
{
TxMessage.Data[h] = EffectData[1][cnt];
cnt += 2;
}
TxMessage.Data[6] = EffectData[1][11];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
break;
case (0x03)://效果3
TxMessage.Data[0] = 0x01; //帧编号(0x01)
for(h=1,cnt=0;h<6;h++)
{
TxMessage.Data[h] = EffectData[2][cnt];
cnt += 2;
}
TxMessage.Data[6] = EffectData[2][10];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
TxMessage.Data[0] = 0x02; //帧编号(0x02)
for(h=1,cnt=1;h<6;h++)
{
TxMessage.Data[h] = EffectData[2][cnt];
cnt += 2;
}
TxMessage.Data[6] = EffectData[2][11];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
break;
case (0x04)://效果4
EffectAddr[i][1] = 4; //保存对应的效果
TxMessage.Data[0] = 0x01; //帧编号(0x01)
for(h=1,cnt=0;h<6;h++)
{
TxMessage.Data[h] = EffectData[3][cnt];
cnt += 2;
}
TxMessage.Data[6] = EffectData[3][10];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
TxMessage.Data[0] = 0x02; //帧编号(0x02)
for(h=1,cnt=1;h<6;h++)
{
TxMessage.Data[h] = EffectData[3][cnt];
cnt += 2;
}
TxMessage.Data[6] = EffectData[3][11];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
break;
default:
TxMessage.StdId = (((EffectAddr[i][0] & 0xF0)<<4)|(EffectAddr[i][0] & 0x0F))& 0x7FF;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 1;
TxMessage.Data[0] = 0; //取消效果帧
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
break;
}
}
else
{
EffectAddr[i][0] = 0;
EffectAddr[i][1] = 0; //ScenEffectState[i];
}
}
//恢复"设置"按键对应的效果(如果有"设置"按键按下的话,对应的"效果"按键灯亮)
if(KeySetRenew)
{
KeySetRenew = 0;
KeySetDataBK = 0;
for(i=0;i<20;i++)
{
if(((TempKeyState[i]>>3)& 0x01) == 0x01) //是否按下"设置"按键
{
EffectSetFlg = 1; //"效果"设置标记(发送效果)
EfctKeyBK = 0; //"效果"键清零
KeySetDataBK |= 1<<i; //哪一个"设置"键有效
if(EffectAddr[i][1] == 1) //效果一
EfctKeyBK |= 1<<0;
else if(EffectAddr[i][1] == 2) //效果二
EfctKeyBK |= 1<<1;
else if(EffectAddr[i][1] == 3) //效果三
EfctKeyBK |= 1<<2;
else if(EffectAddr[i][1] == 4) //效果四
EfctKeyBK |= 1<<3;
else
continue;
if(!FaceKeyBK)FaceKeyBK |= 0x01;//若"界面"按键不亮,则"主页"按键默认亮
// FaceKeyBK = 0x01;
TxMessage.RTR = CAN_RTR_DATA; //发送主控模块按键状态
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
TxMessage.StdId = 0x011;
TxMessage.Data[0] = FaceKeyBK; //FaceKeyBK | 0x01
TxMessage.Data[1] = EfctKeyBK;
TxMessage.Data[2] = ScenKeyBK;
TxMessage.Data[3] = TalkKeyBK;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
break;
}
}
}
else //临时场景没有按下"设置"按键
{
KeySetDataBK = 0;
/////////////////////////////////////////////////////
//取消"场景",若场景中设置了"效果",则取消"效果"键状态
if(EfctKeyBK)
{
EfctKeyBK = 0;
// FaceKeyBK = 0x01;
if(!FaceKeyBK)FaceKeyBK |= 0x01;//若"界面"按键不亮,则"主页"按键默认亮
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
TxMessage.StdId = 0x011;
TxMessage.Data[0] = FaceKeyBK; //默认"主页"按键有效
TxMessage.Data[1] = EfctKeyBK;
TxMessage.Data[2] = ScenKeyBK;
TxMessage.Data[3] = TalkKeyBK;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
/////////////////////////////////////////////////////
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -