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

📄 backup7.c

📁 LWIP在STM32裸机上的移植
💻 C
📖 第 1 页 / 共 2 页
字号:

			//=== 设置推子模块状态(场景) ===//	
			TxMessage.RTR = CAN_RTR_DATA;
			TxMessage.IDE = CAN_ID_STD;
			TxMessage.DLC = 8;	
			if(TuiziAddr[0] != 0) 		//地址1推子
			{
				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);
				}
			}
			if(TuiziAddr[1] != 0)		//地址2推子
			{
				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);
				}
			}
			if(TuiziAddr[2] != 0)		//地址3推子
			{
				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);
				}
			}
			if(TuiziAddr[3] != 0)		//地址4推子
			{	
				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);
				}
			}
			if(TuiziAddr[4] != 0)		//地址5推子
			{
				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);
				}
			}
			
			//加幻相电压
			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=284;i<304;i++)	//输出通道状态设置数据
			{
				OutputSet[h] = ReadEEPData[i];
				h++;
			}
			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);
			}

			h=0;
			for(i=304;i<311;i++)		//输出通道增益设置数据
			{
				OutputGainSet[h] = ReadEEPData[i];
				h++;
			}
			SyncMode = ReadEEPData[310];	//同步模式

						
			//=== 场景"设置"按键对应的效果 ===//
			for(i=0;i<20;i++)
			{	
				if(InputState[i][7] == 0x03)
				{	
					EffectAddr[i][0] = InputState[i][8];//保存话筒输入板地址
					EffectAddr[i][1] = ScenEffectState[i];

					//*** 刷新场景"效果" ***//
//					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];
				}
			}
		}

⌨️ 快捷键说明

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