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

📄 backup8.c

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

//======================= 01-15 =========================//

//[**备份**]
//场景设置程序

///////////////////////////////// *** 场景设置 *** //////////////////////////////////////

		if(SceneSetFlag)
		{	
			switch(SceneSetFlag)
			{	
				case (0x01):	//场景一
					I2C_EE_BufferRead(ReadEEPData,EEP_ScenNum1_Address,311);
					break;
				case (0x02):	//场景二
					I2C_EE_BufferRead(ReadEEPData,EEP_ScenNum2_Address,311);
					break;
				case (0x04):	//场景三
					I2C_EE_BufferRead(ReadEEPData,EEP_ScenNum3_Address,311);
					break;
				case (0x08):	//场景四
					I2C_EE_BufferRead(ReadEEPData,EEP_ScenNum4_Address,311);
					break;			
				default:				
					break;				
			}				
			SceneSetFlag = 0;
			KeySetDataBK = 0;
			
			////////////////////////////////////////////////////
			//按下"场景"键,临时场景中"设置"键对应的"效果"键无效
			if(EfctKeyBK)EfctKeyBK = 0;
			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);
			////////////////////////////////////////////////////

			//=== 推子模块按键状态(场景) ===//
			for(i=0,h=0;i<40;i++)
			{
				ScenKeyState[h] = ReadEEPData[i++];		//按键状态
				ScenEffectState[h] = ReadEEPData[i];	//"设置"键对应的效果
				h++;	
			}

			//=== 推子模块状态(场景) ===//
			h=0;L=0;
			for(i=40;i<280;i++)			//输入通道状态设置数据
			{
				InputState[L][h] = ReadEEPData[i];
				h++;
				if(h%12==0)
				{
					L++;
					h=0;
				}
			}

			//=== 协议四(0xAD协议)(场景) ===//
			for(h=0,i=280;i<284;i++)	//热线设置数据
			{
				HotFireSet[h] = ReadEEPData[i];
				h++;
			}
			
			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;
			
			//=== 刷新场景按键 ===//	
			TxMessage.RTR = CAN_RTR_DATA;
			TxMessage.IDE = CAN_ID_STD;
			TxMessage.DLC = 4;			
			if(TuiziAddr[0] != 0)
			{
				for(i=0;i<4;i++)
				{
					if(InputState[i][7] != 0x03)
						ScenKeyState[i] &= ~(1<<3);
					if(HotFireClear == i)
						ScenKeyState[i] &= ~(1<<1);	
					TxMessage.Data[i] = ScenKeyState[i];
					KeyDataBK[i] = ScenKeyState[i];
				}
				TxMessage.StdId = 0x101;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);
			}

			if(TuiziAddr[1] != 0)
			{
				for(h=0,i=4;i<8;i++)
				{
					if(InputState[i][7] != 0x03)
						ScenKeyState[i] &= ~(1<<3);
					if(HotFireClear == i)
						ScenKeyState[i] &= ~(1<<1);	
					TxMessage.Data[h++] = ScenKeyState[i];
					KeyDataBK[i] = ScenKeyState[i];
				}
				TxMessage.StdId = 0x201;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);
			}
			
			if(TuiziAddr[2] != 0)
			{
				for(h=0,i=8;i<12;i++)
				{	
					if(InputState[i][7] != 0x03)
						ScenKeyState[i] &= ~(1<<3);
					if(HotFireClear == i)
						ScenKeyState[i] &= ~(1<<1);	
					TxMessage.Data[h++] = ScenKeyState[i];
					KeyDataBK[i] = ScenKeyState[i];
				}
				TxMessage.StdId = 0x301;
				while(((CAN1->TSR>>26)& 0x07) == 0); 
				CAN_Transmit(CAN1, &TxMessage);
			}		 
			
			if(TuiziAddr[3] != 0)
			{
				for(h=0,i=12;i<16;i++)
				{
					if(InputState[i][7] != 0x03)
						ScenKeyState[i] &= ~(1<<3);
					if(HotFireClear == i)
						ScenKeyState[i] &= ~(1<<1);
					TxMessage.Data[h++] = ScenKeyState[i];
					KeyDataBK[i] = ScenKeyState[i];
				}
				TxMessage.StdId = 0x401;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);
			}

			if(TuiziAddr[4] != 0)
			{
				for(h=0,i=16;i<20;i++)
				{
					if(InputState[i][7] != 0x03)
						ScenKeyState[i] &= ~(1<<3);
					if(HotFireClear == i)
						ScenKeyState[i] &= ~(1<<1);
					TxMessage.Data[h++] = ScenKeyState[i];
					KeyDataBK[i] = ScenKeyState[i];
				}
				TxMessage.StdId = 0x501;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);
			}

			//=== 设置推子模块状态(场景) ===//	
			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];
				}
			}
		}
			
/////////////////////////////// *** 恢复临时场景 *** ////////////////////////////////////
		if(SceneDelFlag)
		{
			SceneDelFlag = 0;
			I2C_EE_BufferRead(TempKeyState,EEP_TempKeyState_Address,20);//读取上一时刻按键状态
			I2C_EE_BufferRead(ReadEEPData,EEP_TempScene_Address,271);	//读取临时状态
			h = 0;
			L = 0;
			for(i=0;i<240;i++)			//输入通道状态设置数据
			{
				InputState[L][h] = ReadEEPData[i];
				h++;
				if(h%12==0)
				{
					L++;

⌨️ 快捷键说明

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