📄 backup4.c
字号:
//backup5.c
//======================= 12-27 =========================//
// printf("\n====== (1) ======\n");
// printf("\n====== (2) ======\n");
// printf("\n====== (3) ======\n");
//按键未绑定的程序:
////////////////////////////////*** 1-1 ***////////////////////////////////////
//====== 协议三: 每秒5次 ======//
if(tim_5)
{
for(i=0;i<20;i++)
{
KeySPIData[i] &= 0xC0; //清空低6位(1100 0000)
if(Keychanlflg) //高2位代表信号的模式(0x71指令)
{
if((InputState[i][9]>0)&&(InputState[i][9]<5)) //范围(1 — 4)
KeySPIData[i] |= (((InputState[i][9]-1)<<6)& 0xC0); //1100 0000
else
KeySPIData[i] |= ((1<<6)& 0xC0); //默认值
Keychanlflg = 0;
}
KeySPIData[i] |= (KeyDataBK[i]& 0x3F); //低6位按键信息
}
SPI_FLASH_CS_LOW();
SPI_SendByte(0xAC);
for(i=0;i<20;i++)
SPI_SendByte(KeySPIData[i]); //KeyDataBK[i]
SPI_FLASH_CS_HIGH();
tim_5 = 0;
}
//======================= 12-31 =========================//
//原程序-临时场景分开保存:
// I2C_EE_PageWrite(revdata,EEP_InputState_Address,240);
// I2C_EE_PageWrite(HotFireSet,EEP_HotFire_Address,4);
// I2C_EE_PageWrite(OutputSet,EEP_OutputSet_Address,20);
// I2C_EE_PageWrite(OutputGainSet,EEP_OutputGain_Address,7);
//u8 Keychanlflg = 1; //标记"高2位代表信号的模式"(协议三)(0x71指令)
IP4_ADDR(&ipaddr, ReadEEPData[0], ReadEEPData[1], ReadEEPData[2], ReadEEPData[3]);
IP4_ADDR(&netmask,ReadEEPData[4], ReadEEPData[5], ReadEEPData[6], ReadEEPData[7]);
IP4_ADDR(&gw, ReadEEPData[8], ReadEEPData[9], ReadEEPData[10], ReadEEPData[11]);
//======================= 01-04 =========================//
//0x71指令设置标记
//bit0 : 0x71指令设置标记
//bit1 : 高2位代表信号的模式,低6位表示按键状态
//bit2 :
//bit3 :
//server.c
///////////////////////////////////////////////////////////////////////////////
extern u8 UDPAsk[]; //返回的应答
extern u8 UDPData[]; //返回的数据(0x72)
__IO uint8_t iptab[4];
uint8_t iptxt[20];
/* We have received the UDP Echo from a client */
/* read its IP address */
iptab[0] = (uint8_t)((uint32_t)(addr->addr) >> 24);
iptab[1] = (uint8_t)((uint32_t)(addr->addr) >> 16);
iptab[2] = (uint8_t)((uint32_t)(addr->addr) >> 8);
iptab[3] = (uint8_t)((uint32_t)(addr->addr));
sprintf((char*)iptxt, "%d.%d.%d.%d", iptab[3], iptab[2], iptab[1], iptab[0]);
/* Display the client's IP address */
/* If there is more than one client connected,
the IP address of the last one connected will be displayed */
printf("\nClient's IP address : %s\n",iptxt);
// askdata[5] = '\0';
printf("\n---------------------------------\n");
for(j=0;j<5;j++)
{
printf("askdata[%d] = 0x%X\n",j,askdata[j]);
UDPAsk[j] = askdata[j];
}
printf("---------------------------------\n\n");
//======================= 01-04 =========================//
//server.c
//话筒输入板加幻想电压问题:
//设置输入通道数据
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 1;
if(InputAddr[0] != 0)
{
for(j=0;j<4;j++)
{
if(InputState[j][10] == 0x01)
TxMessage.Data[0] |= 1<<j; //加幻想电压,置1
else
TxMessage.Data[0] &= ~(1<<j); //非话筒板或不加,则清零
}
TxMessage.Data[0] = TxMessage.Data[0] & 0x0F;
printf("(1).The AddVoltage = 0x%X\n",TxMessage.Data[0]);
TxMessage.StdId = InputAddr[0];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
if(InputAddr[1] != 0)
{
for(u=0,j=4;j<8;j++)
{
if(InputState[j][10] == 0x01)
TxMessage.Data[0] |= 1<<u; //加幻想电压,置1
else
TxMessage.Data[0] &= ~(1<<u); //非话筒板或不加,则清零
u++;
}
TxMessage.Data[0] = TxMessage.Data[0] & 0x0F;
printf("(2).The AddVoltage = 0x%X\n",TxMessage.Data[0]);
TxMessage.StdId = InputAddr[1];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
if(InputAddr[2] != 0)
{
for(u=0,j=8;j<12;j++)
{
if(InputState[j][10] == 0x01)
TxMessage.Data[0] |= 1<<u; //加幻想电压,置1
else
TxMessage.Data[0] &= ~(1<<u); //非话筒板或不加,则清零
u++;
}
TxMessage.Data[0] = TxMessage.Data[0] & 0x0F;
printf("(3).The AddVoltage = 0x%X\n",TxMessage.Data[0]);
TxMessage.StdId = InputAddr[2];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
if(InputAddr[3] != 0)
{
for(u=0,j=12;j<16;j++)
{
if(InputState[j][10] == 0x01)
TxMessage.Data[0] |= 1<<u; //加幻想电压,置1
else
TxMessage.Data[0] &= ~(1<<u); //非话筒板或不加,则清零
u++;
}
TxMessage.Data[0] = TxMessage.Data[0] & 0x0F;
printf("(4).The AddVoltage = 0x%X\n",TxMessage.Data[0]);
TxMessage.StdId = InputAddr[3];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
if(InputAddr[4] != 0)
{
for(u=0,j=16;j<20;j++)
{
if(InputState[j][10] == 0x01)
TxMessage.Data[0] |= 1<<u; //加幻想电压,置1
else
TxMessage.Data[0] &= ~(1<<u); //非话筒板或不加,则清零
u++;
}
TxMessage.Data[0] = TxMessage.Data[0] & 0x0F;
printf("(5).The AddVoltage = 0x%X\n",TxMessage.Data[0]);
TxMessage.StdId = InputAddr[4];
while(((CAN2->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN2, &TxMessage);
}
//加幻相电压
for(j=0;j<20;j++)
{
// if((InputState[i][7] & 0x0F)== 0x03) //与推子模块绑定的是否是话筒输入板
if((InputState[i][10]& 0x0F)== 0x01) //加幻相电压
{
if(((InputState[i][8]>>4)& 0x0F) == 0x01) //话筒输入板为第一个板卡
{
if((InputState[i][8]& 0x0F) == 0x0A)
{
AddVoltage[0][0] = 1;
}
else if((InputState[i][8]& 0x0F) == 0x0B)
{
AddVoltage[0][1] = 1;
}
else if((InputState[i][8]& 0x0F) == 0x0C)
{
AddVoltage[0][2] = 1;
}
else if((InputState[i][8]& 0x0F) == 0x0D)
{
AddVoltage[0][3] = 1;
}
}
else if(((InputState[i][8]>>4)& 0x0F) == 0x02)
{
}
else if(((InputState[i][8]>>4)& 0x0F) == 0x03)
{
}
else if(((InputState[i][8]>>4)& 0x0F) == 0x04)
{
}
else if(((InputState[i][8]>>4)& 0x0F) == 0x05)
{
}
}
}
//设置对讲人地址之后,对讲按键才有效
if(HotFireSet[0] || HotFireSet[1] || HotFireSet[2] || HotFireSet[3])
if(HotFireSet[2]) //处理"热线"按键
{
for(i=0;i<20;i++)
{
if(HotFireSet[2] == InputState[i][8])
break;
}
// HotFireClear = InputState[i][0];
HotFireClear = (((InputState[i][0]>>4)& 0x0F)-1)*4 + ((InputState[i][0]& 0x0F)-9);
}
//======================= 01-05 =========================//
//[**备份**]
//取消"设置"键,"效果"键无效,但不发送取消效果帧:
if(KeySetData>0) //有"设置"按键按下的时候再判断(必须有此判断)
{
if((KeySetDataBK & KeySetData) == 0)//按下不同的"设置"按键
{
KeySetDataBK = 0;
for(i=0;i<20;i++) //只能有一个"设置"键有效
{
if(((KeySetData>>i)& 0x01) == 0x01)
{
KeySetDataBK |= 1<<i; //KeySetDataBK ^= 1<<i;
//按下有效"设置"键才发送效果设置(按下"效果"键,只发送一次)
//因为不同"设置"键可能对应于不同效果,若按下不同的"设置"键,
//则对应的"效果"键亮,也发送一次效果 (*** 设置效果记忆 ***)
//可能并未按下"效果"键,只是记忆上次的效果设置
EffectSetFlg = 1;
break;
}
}
}
else //按下相同的"设置"按键
{
for(i=0;i<20;i++)
{
if(((KeySetDataBK>>i)& 0x01) == 0x01) //判断哪一个"设置"按键被取消
{
if(EffectAddr[i][1]) //被取消的"设置"键是否已经设置效果(若设置,则发送取消效果帧)
{
TxMessage.StdId = (((EffectAddr[i][0] & 0xF0)<<4)|(EffectAddr[i][1] & 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;
}
}
}
KeySetDataBK = 0;
EffectSetFlg = 0;
}
}
//[**备份**]
//协议三:"设置"键对应的位用来表示话筒输入板的位置(直播间)
//====== 协议三: 每秒5次 ======//
if(tim_5)
{
if(Cmd71_SetFlg == 0) //推子与输入模块未绑定
{
SPI_FLASH_CS_LOW();
SPI_SendByte(0xAC);
for(i=0;i<20;i++)
SPI_SendByte(KeyDataBK[i]& 0x3F); //高2位默认为0(表示立体声)
SPI_FLASH_CS_HIGH();
}
else
{
for(i=0,h=0;i<20;i++)
{
//高2位代表信号的模式(0x71指令)
if(CmdAC_SetFlg)
{
CmdAC_SetFlg = 0;
KeySPIData[i] = 0;
if((InputState[i][9]>0)&&(InputState[i][9]<5)) //范围(1 — 4)
KeySPIData[i] |= (((InputState[i][9]-1)<<6)& 0xC0); //1100 0000
else
KeySPIData[i] |= ((1<<6)& 0xC0); //默认值
}
// KeySPIData[i] |= (KeyDataBK[i]& 0x3F); //低6位按键信息
// KeySPIData[i] &= ~(1<<3); //清空"设置"键对应的位
KeySPIData[i] |= (KeyDataBK[i]& 0x37); //低6位按键信息(清空"设置"键对应位)
cnt = InputState[i][11];//话筒(麦克风)输入板卡的位置
if(cnt == 1)
KeySPIData[i] |= 1<<3;
h = InputState[i][8]; //与推子模块某一路绑定的输入板卡地址
switch(h)
{
}
}
}
}
//======================= 01-06 =========================//
u8 CmdAC_SetFlg = 0;
extern u8 CmdAC_SetFlg; //0xAC协议设置标记
//====== 协议三: 每秒5次 ======//
if(tim_5)
{
if(Cmd71_SetFlg == 0) //推子与输入模块未绑定
{
SPI_FLASH_CS_LOW();
SPI_SendByte(0xAC);
for(i=0;i<20;i++)
SPI_SendByte(KeyDataBK[i]& 0x3F); //高2位默认为0(表示立体声)
SPI_FLASH_CS_HIGH();
}
else
{
for(i=0,h=0;i<20;i++)
{
//高2位代表信号的模式(0x71指令)
// if(CmdAC_SetFlg)
// {
// CmdAC_SetFlg = 0;
KeySPIData[i] = 0;
if((InputState[i][9]>0)&&(InputState[i][9]<5)) //范围(1 — 4)
KeySPIData[i] |= (((InputState[i][9]-1)<<6)& 0xC0); //1100 0000
else
KeySPIData[i] |= ((1<<6)& 0xC0); //默认值
cnt = InputState[i][11]; //话筒(麦克风)输入板卡的位置
if(cnt == 1)
KeySPIData[i] |= 1<<3; //直播间
// }
KeySPIData[i] |= (KeyDataBK[i]& 0x37); //低6位按键信息(清空"设置"键对应位)
h = InputState[i][8]; //与推子模块某一路绑定的输入板卡地址
switch(h)
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -