📄 backup5.c
字号:
//backup5.c
//======================= 01-02 =========================//
//原来效果处理程序:
///////////////////////////////////////////////////////////////////////////////
// u8 EffectDelFlg = 0;//效果取消标记(为了使"效果"键亮时,熄灭效果键,发送取消效果帧)
// for(i=0;i<4;i++)
// {
// if(((EfctKeyBK>>i)& 0x01) == 0x01)
// {
// EffectDelFlg &= ~(1<<i); //清零
// break;
// }
// }
//[**备份**]
//"效果"按键处理程序:
///////////////////////////////////////////////////////////////////////////////
if(EfctKey) //效果按键(四个按键,每次只能显示一个按键)
{
if((EfctKeyBK & EfctKey) == 0) //按下不同"效果"键(设置不同效果)
{
EfctKeyBK = 0;
//不同"效果"键按下时发送效果设置(按下"效果"键,只发送一次)
//不用判断 EffectSetFlg 哪一位置位,因为一次只有一个"设置"键有效
//EffectSetFlg : 一位代表一个推子模块是否有"设置"按键按下
EffectSetFlg |= 0x1F;
for(i=0;i<4;i++)
{
if(((EfctKey>>i)& 0x01) == 0x01)
{
EfctKeyBK ^= 1<<i;
break;
}
}
}
else //按下相同"效果"键(取消效果)
{
//推子模块"设置"键按下时,"效果"键才有效
for(i=0;i<20;i++)
{
// if(((EfctKeyBK>>i)& 0x01) == 0x01) //哪个"效果"键按下
if(((KeySetDataBK>>i)& 0x01) == 0x01) //哪个"设置"键按下
{
if(EffectAddr[i][1]) //某路推子"设置"键是否已经设置效果(与话筒输入板绑定)
{
// EffectDelFlg |= 1<<i; //"效果"键亮时,再次按下"效果"键,发送取消效果帧
EffectAddr[i][1] = 0; //取消某路推子"设置"键设置的效果
TxMessage.StdId = (((EffectAddr[i][0] & 0xF0)<<4)|(EffectAddr[i][1] & 0x0F))& 0x7FF;
printf("Effect Delete Addr = 0x%X\n",TxMessage.StdId);
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;
}
}
}
EfctKeyBK = 0;
}
EfctKey = 0;
}
//[**备份**]
//推子模块"设置"按键处理程序:
///////////////////////////////////////////////////////////////////////////////
if(KeySetData>0) //有"设置"按键按下的时候再判断(必须有此判断)
{
printf("KeySetData = 0x%X\n",KeySetData);
if((KeySetDataBK & KeySetData) == 0)//按下不同的"设置"按键
{
// EffectSetFlg = 1; //按下有效"设置"键才发送效果设置
KeySetDataBK = 0;
for(i=0;i<20;i++) //只能有一个"设置"键亮
{
if(((KeySetData>>i)& 0x01) == 0x01)
{
KeySetDataBK |= 1<<i; //KeySetDataBK ^= 1<<i;
//按下有效"设置"键才发送效果设置(按下"效果键",只发送一次)
//(一个推子模块4个"设置"按键,只有一个"设置"键有效)
if(i<4)
EffectSetFlg |= 1<<0; //推子模块1
else if(i<8)
EffectSetFlg |= 1<<1; //推子模块2
else if(i<12)
EffectSetFlg |= 1<<2; //推子模块3
else if(i<16)
EffectSetFlg |= 1<<3; //推子模块4
else if(i<20)
EffectSetFlg |= 1<<4; //推子模块5
else
EffectSetFlg = 0;
break;
}
}
}
else //按下相同的"设置"按键
KeySetDataBK = 0;
}
//推子模块1有键按下
if(((can1_flag>>0)& 0x01) == 0x01)
{
can1_flag &= ~(1<<0);
h = 0;
for(i=0;i<4;i++)
{
cnt = 6;
while(cnt)
{
cnt--;
if(((KeyData[i]>>cnt) & 0x01) == 0x01)
KeyDataBK[i] ^= 1<<cnt;
}
KeyData[i] = 0;
if(KeySetData) //处理设置按键
{
KeyRefresh = 1;
if(((KeySetDataBK>>i)& 0x01) == 0x01)
KeyDataBK[i] |= 1<<3;
else
KeyDataBK[i] &= ~(1<<3);
}
// if((InputState[i][7] & 0x0F)!= 0x03)
// KeyDataBK[i] &= ~(1<<3);
TxMessage.Data[h] = KeyDataBK[i];
TempKeyState[i] = KeyDataBK[i];
h++;
}
TxMessage.StdId = 0x101;
CAN_Transmit(CAN1, &TxMessage);
}
//[**备份**]
//原来"设置"按键扫描程序:
/////////////////////////////////////////////////////////////////////////////////////
//"设置"按键扫描
if((KeyRefresh == 1)) //(tim_3)||
{
if(KeyRefresh == 1) //所有推子模块"设置"按键扫描(保证只有一个"设置"按键有效)
{
for(i=0;i<20;i++) //清除前一个"设置"按键
{
if(((KeySetDataBK>>i)& 0x01) == 0x01) continue; //保留最新"设置"按键
KeyDataBK[i] &= ~(1<<3); //清除以前"设置"按键
TempKeyState[i] = KeyDataBK[i]; //保存临时场景按键状态
}
if(!ScenKeyBK) //"场景"按键未按下时(临时场景)
I2C_EE_PageWrite(TempKeyState,EEP_TempKeyState_Address,20);
}
KeyRefresh = 0;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
if(TuiziAddr[0] != 0)
{
for(i=0;i<4;i++)
TxMessage.Data[i] = KeyDataBK[i];
TxMessage.StdId = 0x101;
h = 0;
while(((CAN1->TSR>>26)& 0x07) == 0);//只有3个发送邮箱,若都满,则数据会丢失
// { //等待有空邮箱时再发送。
// h++;
// if(h>250)break;
// }
CAN_Transmit(CAN1, &TxMessage);
}
if(TuiziAddr[1] != 0)
{
for(i=0;i<4;i++)
TxMessage.Data[i] = KeyDataBK[i+4];
TxMessage.StdId = 0x201;
h = 0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
if(TuiziAddr[2] != 0)
{
for(i=0;i<4;i++)
TxMessage.Data[i] = KeyDataBK[i+8];
TxMessage.StdId = 0x301;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
if(TuiziAddr[3] != 0)
{
for(i=0;i<4;i++)
TxMessage.Data[i] = KeyDataBK[i+12];
TxMessage.StdId = 0x401;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
if(TuiziAddr[4] != 0)
{
for(i=0;i<4;i++)
TxMessage.Data[i] = KeyDataBK[i+16];
TxMessage.StdId = 0x501;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
//刷新效果按键(即按下推子某路"设置"键时,若已经设置效果,则对于的"效果"键灯亮)
for(i=0;i<20;i++)
{
// if((InputState[i][7] & 0x0F)== 0x03) //与推子模块绑定的是否是话筒输入
{
if(((KeySetDataBK>>i)& 0x01) == 0x01) //是否按下"设置"按键
{
EfctKeyBK = 0; //"效果"键清零
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;
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);
break;
}
}
}
// tim_3 = 0;
}
//[**备份**]
//(New)效果设置程序:
//////////////////////////////// ***效果设置*** /////////////////////////////////////////
if(KeySetDataBK)//有"设置"键按下,才可能发送效果设置
{
for(i=0;i<20;i++)
{
if(((KeySetDataBK>>i)& 0x01) == 0x01) //按下哪一个"设置"按键
{
if(EffectSetFlg) //为了使按下"效果"键时,只发送一次
{
EffectSetFlg = 0;
if(EfctKeyBK) //是否按下"效果"键(或者"效果"键是否有效)
{
EffectAddr[i][0] = InputState[i][8];//保存话筒输入板地址
// printf("\rAddr[%d] = 0x%X\n",i,EffectAddr[i][0]);
TxMessage.StdId = (((InputState[i][8] & 0xF0)<<4)|(InputState[i][8] & 0x0F))& 0x7FF;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 7;
switch(EfctKeyBK & 0x0F) //按下哪一个效果键
{
case (0x01)://效果1
EffectAddr[i][1] = 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
EffectAddr[i][1] = 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 (0x04)://效果3
EffectAddr[i][1] = 3; //保存对应的效果
TxMessage.Data[0] = 0x01; //帧编号(0x01)
for(h=1,cnt=0;h<6;h++)
{
TxMessage.Data[h] = EffectData[2][cnt];
cnt += 2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -