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

📄 backup4.c

📁 LWIP在STM32裸机上的移植
💻 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 + -