⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 LWIP在STM32裸机上的移植
💻 C
📖 第 1 页 / 共 5 页
字号:
				TxMessage.StdId = OutputAddr[4];
				while(((CAN2->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN2, &TxMessage);
			}

			/////////////////////// *** 推子模块状态 *** //////////////////////

			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;

			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(InputState[i][7] != 0x03)
						TempKeyState[i] &= ~(1<<3);
					if(HotFireClear == i)
						TempKeyState[i] &= ~(1<<1);
					TxMessage.Data[i] = TempKeyState[i];				
					KeyDataBK[i] = TempKeyState[i];
					
					if(SceneDelFlag)
					{
						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(InputState[i][7] != 0x03)
						TempKeyState[i] &= ~(1<<3);
					if(HotFireClear == i)
						TempKeyState[i] &= ~(1<<1);
					TxMessage.Data[h++] = TempKeyState[i];				
					KeyDataBK[i] = TempKeyState[i];
					
					if(SceneDelFlag)
					{
						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(InputState[i][7] != 0x03)
						TempKeyState[i] &= ~(1<<3);
					if(HotFireClear == i)
						TempKeyState[i] &= ~(1<<1);
					TxMessage.Data[h++] = TempKeyState[i];				
					KeyDataBK[i] = TempKeyState[i];
					
					if(SceneDelFlag)
					{
						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(InputState[i][7] != 0x03)
						TempKeyState[i] &= ~(1<<3);
					if(HotFireClear == i)
						TempKeyState[i] &= ~(1<<1);
					TxMessage.Data[h++] = TempKeyState[i];				
					KeyDataBK[i] = TempKeyState[i];
					
					if(SceneDelFlag)
					{
						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(InputState[i][7] != 0x03)
						TempKeyState[i] &= ~(1<<3);
					if(HotFireClear == i)
						TempKeyState[i] &= ~(1<<1);
					TxMessage.Data[h++] = TempKeyState[i];				
					KeyDataBK[i] = TempKeyState[i];
					
					if(SceneDelFlag)
					{
						if(((TempKeyState[i]>>3)& 0x01) == 0x01) //"设置"键是否有效
							KeySetRenew = 1;
					}					
				}
				while(((CAN1->TSR>>26)& 0x07) == 0);					
				CAN_Transmit(CAN1, &TxMessage);
			}

			/////////////////////// *** 输入通道数据 *** //////////////////////

			//加幻相电压
			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(i=0;i<20;i++)
			{
				if(InputState[i][7] == 0x03)
				{			  
					//*** 刷新(临时)场景"效果" ***//
					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;
				}
			}
			
			//恢复临时场景中"设置"按键对应的"效果"键状态(如果有"设置"按键按下的话,对应的"效果"按键灯亮)
			if(SceneDelFlag)
			{
				if(KeySetRenew)
				{
					KeySetRenew = 0;
					KeySetDataBK = 0;
					for(i=0;i<20;i++)
					{
						if(((TempKeyState[i]>>3)& 0x01) == 0x01)  	//是否按下"设置"按键
						{						
							EffectSetFlg = 1; 				//"效果"设置标记(发送效果)							
							KeySetDataBK |= 1<<i;			//哪一个"设置"键有效

							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;
							
							if(!FaceKeyBK)FaceKeyBK |= 0x01;//若"界面"按键不亮,则"主页"按键默认亮
							TxMessage.RTR = CAN_RTR_DATA; 	//发送主控模块按键状态
							TxMessage.IDE = CAN_ID_STD;
							TxMessage.DLC = 4;
							TxMessage.StdId = 0x011;
							TxMessage.Dat

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -