📄 backup2.c
字号:
//backup2.c
//======================= 11-28 ===========================//
if(SlaveAddr != 0)
{
if(InputFlag == 1)
{
TxMessage.StdId = SlaveAddr;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 1;
TxMessage.Data[0] = 0xFA;
CAN_Transmit(CAN2, &TxMessage);
InputFlag = 0;
SlaveAddr = 0;
}
if(Outputflag == 1)
{
TxMessage.StdId = SlaveAddr;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
TxMessage.Data[0] = 0x0;
TxMessage.Data[1] = 0x0;
TxMessage.Data[2] = 0x0;
TxMessage.Data[3] = 0x0;
CAN_Transmit(CAN2, &TxMessage);
InputFlag = 0;
SlaveAddr = 0;
}
}
//================== 11-28 =====================//
if(InputFlag == 1)
{
InputAddr[0] = RxMessage2.StdId & 0x7FF;
}
else if(InputFlag == 2)
{
InputAddr[1] = RxMessage2.StdId & 0x7FF;
}
else if(InputFlag == 3)
{
InputAddr[2] = RxMessage2.StdId & 0x7FF;
}
else
{
InputFlag = 3;
InputAddr[2] = RxMessage2.StdId & 0x7FF; //若存满,则刷新
}
//=================== 11-28 =====================//
//推子响应(标识符低8位为2表示数据为增益值)
if(MasterAddr2 != 0)
{
// TxMessage.StdId = MasterAddr2;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 6;
TxMessage.Data[5] = LR_Show[5];
switch(MasterAddr2)
{
//ID: 0x102 - 0x502 表示5个模块增益返回值
//(一个模块4路,每路分左右声道,用一个字节(8位)表示)
case (0x102):
for(i=0;i<8;i++)
{
if(RxData[i]>0xD8 && RxData[i]<0x18) //范围:-40 ~ 40
LR_Show[0] |= 1<<i;
else if(RxData[i] == 0x80) //值为:-128 表示模块没有接
LR_Show[0] &= 0<<i;
else
continue; //否则,保持前一时刻的值
}
TxMessage.Data[0] = LR_Show[0];
TxMessage.StdId = 0x102;
if((can_flag2 == 1))
CAN_Transmit(CAN2, &TxMessage);
for(i=0;i<8;i++)
RxData[i] = 0x0;
if(MasterAddr2 == 0x102)
{
can_flag2 = 0;
MasterAddr2 = 0;
}
break;
case (0x202):
break;
default:
break;
}
if(tim_cnt%250 == 0)
CAN_Transmit(CAN2, &TxMessage);
}
//======================== 12-05 ==========================//
if(tim_1) printf("KeySetData = 0x%X\n",KeySetData);
if(tim_1)
{
printf("KeySetDataBK = 0x%X\n",KeySetDataBK);
tim_1 = 0;
}
//为什么添加这段程序,运行一段时间便无法接受到推子模块的按键?? === 12-05 ===
if(tim_3)
{
printf("\n===================\n");
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
for(i=0;i<4;i++)
TxMessage.Data[i] = KeyDataBK[i];
TxMessage.StdId = 0x101;
CAN_Transmit(CAN1, &TxMessage);
for(i=0;i<4;i++)
TxMessage.Data[i] = KeyDataBK[i+4];
TxMessage.StdId = 0x201;
CAN_Transmit(CAN1, &TxMessage);
for(i=0;i<4;i++)
TxMessage.Data[i] = KeyDataBK[i+8];
TxMessage.StdId = 0x301;
CAN_Transmit(CAN1, &TxMessage);
for(i=0;i<4;i++)
TxMessage.Data[i] = KeyDataBK[i+12];
TxMessage.StdId = 0x401;
CAN_Transmit(CAN1, &TxMessage);
for(i=0;i<4;i++)
TxMessage.Data[i] = KeyDataBK[i+16];
TxMessage.StdId = 0x501;
CAN_Transmit(CAN1, &TxMessage);
tim_3 = 0;
}
// if(tim_cnt%250 == 0) //(can_flag1 == 1) ||
// CAN_Transmit(CAN1, &TxMessage);
// can_flag1 = 0;
// MasterAddr1 = 0;
// for(i=0;i<20;i++)
// KeyData[i] = 0x0;
printf("\nTxData[0] = 0x%X\n",TxData[0]);
printf("TxData[1] = 0x%X\n",TxData[1]);
// printf("TxData[8] = 0x%X\n",TxData[8]);
// printf("TxData[16] = 0x%X\n",TxData[16]);
// printf("TxData[24] = 0x%X\n",TxData[24]);
printf("TxData[32] = 0x%X\n",TxData[32]);
printf("TxData[39] = 0x%X\n\n",TxData[39]);
printf("RxData[0] = 0x%X\n",RxData[0]);
printf("RxData[1] = 0x%X\n",RxData[1]);
printf("RxData[39] = 0x%X\n\n",RxData[39]);
//==================== 12-06 ======================//
printf("\n(1).KeySetData = 0x%X\n",KeySetData);
printf("(1).KeySetDataBK = 0x%X\n",KeySetDataBK);
printf("\n(2).KeySetData = 0x%X\n",KeySetData);
printf("(2).KeySetDataBK = 0x%X\n",KeySetDataBK);
//==================== 12-07 ======================//
//对于总控模块,只能响应一个按键,发送时已处理。我这边无需再次判断。
if((FaceKeyBK & FaceKey) == 0) //界面按键(六个个按键,每次只能显示一个按键)
{
FaceKeyBK = 0;
for(i=0;i<6;i++)
{
if(((FaceKey>>i)& 0x01) == 0x01)
{
FaceKeyBK ^= 1<<i;
break;
}
}
}
else
{
FaceKeyBK = 0;
}
for(i=0;i<4;i++) //对讲按键(四个按键,每次可以显示多个按键)
{
if(((TalkKey>>i)& 0x01) == 0x01)
TalkKeyBK ^= 1<<i;
}
if((EfctKeyBK & EfctKey) == 0) //效果按键(四个按键,每次只能显示一个按键)
{
EfctKeyBK = 0;
for(i=0;i<4;i++)
{
if(((EfctKey>>i)& 0x01) == 0x01)
{
EfctKeyBK ^= 1<<i;
break;
}
}
}
else
{
EfctKeyBK = 0;
}
if((ScenKeyBK & ScenKey) == 0) //场景按键(四个按键,每次只能显示一个按键)
{
ScenKeyBK = 0;
for(i=0;i<4;i++)
{
if(((ScenKey>>i)& 0x01) == 0x01)
{
ScenKeyBK ^= 1<<i;
break;
}
}
}
else
{
ScenKeyBK = 0;
}
if(ManKeyFlg == 1) //在这里判断不合理。比如,程序运行在此处时按下按键,则还未
{ //处理按键信息,便发送按键状态,则发送的是上一次的按键状态。
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
TxMessage.StdId = 0x011;
TxMessage.Data[0] = FaceKeyBK;
TxMessage.Data[1] = ScenKeyBK;
TxMessage.Data[2] = EfctKeyBK;
TxMessage.Data[3] = TalkKeyBK;
CAN_Transmit(CAN1, &TxMessage);
ManKeyFlg = 0;
}
//改进的方法:(12-07)
//将if(ManKeyFlg == 1)这句判断语句放到前面,所有按键的处理,均在if(){}语句中。这样,
//无论什么时候有按键到来,也一定会在if(ManKeyFlg == 1)语句中执行到,不会出现前面的
//误操作的情况。
//对于每分钟发送刷新三次按键状态,则在if(ManKeyFlg == 1){}语句完成之后,再发送。
printf("FaceKey = 0x%X\n",FaceKey);
printf("TalkKey = 0x%X\n",TalkKey);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -