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

📄 main.c

📁 利用SMALL RTOS51做的一个项目
💻 C
📖 第 1 页 / 共 4 页
字号:
	for(;;)
	{
		
		if(_Flag_Beep)
		{
			LED_NUM_OFF();
			OSWait(K_TMO, OS_TICKS_PER_SEC/10 );
			LED_NUM_ON();

			if(_Flag_KeyLock)
			{
				_Beep=1;
				
				OSWait(K_TMO, OS_TICKS_PER_SEC/10 );
		
				_Beep=0;
				LED_NUM_OFF();

				OSWait(K_TMO, OS_TICKS_PER_SEC/10 );

				_Beep=1;
				LED_NUM_ON();

				OSWait(K_TMO, OS_TICKS_PER_SEC/10 );
			
				_Beep=0;
			}
			else
			{
				_Beep=1;
				
				OSWait(K_TMO, OS_TICKS_PER_SEC/10 );
			
				_Beep=0;
			}

			if(!_Flag_AutoMode)
			{
				LED_NUM_OFF();
			}
		
			_Flag_Beep=0;
		}
		
		
		EA=0;
		EX1=1;
		IE1=0;
		EA=1;
		
		OSQPend(&temp,CommandData,0); 				/* 接收一个命令        */

		EA=0;
		EX1=0;
		IE1=0;
		EA=1;
			
KEY_RESOLVE:
		switch(temp)
		{
			case 	MODE_SWITCH		:	if(!_Flag_KeyLock)
										{
											if((!_Flag_State_TaskAccepted)&&(!_Flag_State_Producing))
											{
												_Flag_AutoMode=!_Flag_AutoMode;

												_TempValue=0;

												for(temp=0;temp<12;temp++)
												{
													Write728x(temp,0xFF);
												}

												_TargetValue=0;

												DispNum(0,_TargetValue);
	
												_CurrentValue=0;
											
												DispNum(1,_CurrentValue);
												
												_ProducedPersent=0;
												
												DispNum(2,_ProducedPersent);

												_Flag_CounteEnable=0;
												_Flag_State_TaskAccepted=0;
												_Flag_State_Producing=0;
												_Flag_State_Finish=0;
												_Flag_SetupMode=0;

												if(_Flag_AutoMode)
												{
													ES=1;
													TI=0;
													RI=0;
													REN=1;
												
													DispNum(2,_ProduceSpeed);
													
												}
												else
												{
													ES=0;
													REN=0;
													DispNum(2,_ProduceSpeed);
													_Flag_DispSpeed=1;
													_LedProduceSpeed=1;
													_LedProducedPersent=0;

												}
	
												Write728x(0x10,0xFF);
												Write728x(0x19,0xFF);
	
												_TargetValue=0;
												_CurrentValue=0;
												_ProducedPersent=0;

												_Flag_State_Error=FALSE;
												_Flag_State_Producing=FALSE;
												_Flag_State_Finish=FALSE;
												_Flag_State_TaskAccepted=FALSE;

	
												_Flag_DispChanged=1;
	
												_Flag_Beep=1;
												_ProduceSpeed=0;
											}
										}
										else
											_Flag_Beep=1;
										break;
			case 	SWITCH_LINE		:	if(!_Flag_KeyLock)
										{
											if(_Flag_AutoMode)
											{
												if(!_Flag_State_Error)
												{
														if(_Flag_State_Producing)
														{
															//OSSemPend(SEM_SendBuffer,0);
														
															OSQIntPost(SerialOutData,LOCOAL_ADDR);
															_Sum=LOCOAL_ADDR;
													
															OSQIntPost(SerialOutData,LOCOAL_ADDR);
															_Sum+=LOCOAL_ADDR;
													
															OSQIntPost(SerialOutData,CMD_SWITCH_LINE);
															_Sum+=CMD_SWITCH_LINE;

															temp=_CurrentValue>>16;

															_Sum+=temp;
		
															OSQIntPost(SerialOutData,temp);

															temp=_CurrentValue>>8;
															_Sum+=temp;

															OSQIntPost(SerialOutData,temp);

															temp=_CurrentValue;
															_Sum+=temp;

															OSQIntPost(SerialOutData,temp);

															//EX1=0;
															OSQIntPost(SerialOutData,_Sum);
															//EX1=1;

															_Flag_RequestAccept=0;


															FeedBack();

															OSWait(K_SIG|K_TMO,OS_TICKS_PER_SEC*5);
															
															if(!_Flag_RequestAccept)
															{
																OSWait(K_SIG|K_TMO,OS_TICKS_PER_SEC*5);
															
															}
															
															if(_Flag_RequestAccept)
															{
																_Flag_CounteEnable=FALSE;

																_Flag_State_Producing=FALSE;
																_Flag_State_TaskAccepted=FALSE;
																_Flag_State_Finish=TRUE;
	
																_ProduceSpeed=0;	

																_Flag_Beep=1;
															}
															else
																_Flag_RequestAccept=1;
														}
														
													}
											}
											
										}
										else
											_Flag_Beep=1;
										
										break;
			case 	KEY_LOCK		:	for(i=0;i<15;i++)
										{
											OSWait(K_TMO, OS_TICKS_PER_SEC/10 );
					
											EX1=1;

											j=OSQPend(&temp,CommandData,10); 
											
											if(j!=OS_Q_TMO)
											{
												if(temp==KEY_LOCK)
												{
													if(i==14)
													{
														_Flag_KeyLock=!_Flag_KeyLock;
														_Flag_Beep=1;
														break;
													}
												}
												else
													break;
											}
											else
												break;
										}
										break;
			case 	ACTION			:	if(!_Flag_KeyLock)
										{
											if(!_Flag_SetupMode)
											{		
												

												if(_Flag_AutoMode)
												{
														
													if(_Flag_State_Error)
													{
												//		OSSemPend(SEM_SendBuffer,0);
											
														OSQIntPost(SerialOutData,LOCOAL_ADDR);

														_Sum=LOCOAL_ADDR;
												
														OSQIntPost(SerialOutData,LOCOAL_ADDR);

														_Sum+=LOCOAL_ADDR;
												
														OSQIntPost(SerialOutData,CMD_START);
	
														_Sum+=CMD_START;
													
														OSQIntPost(SerialOutData,0);
		
														OSQIntPost(SerialOutData,0);
		
														OSQIntPost(SerialOutData,0);
	
														OSQIntPost(SerialOutData,_Sum);
														
														_Flag_RequestAccept=0;


														FeedBack();

														OSWait(K_SIG|K_TMO,OS_TICKS_PER_SEC*5);
															
														if(!_Flag_RequestAccept)
														{
															OSWait(K_SIG|K_TMO,OS_TICKS_PER_SEC*5);
														}
															
														if(_Flag_RequestAccept)
														{
															_Flag_State_Error=0;

															_Flag_Beep=1;
														}
														else
															_Flag_RequestAccept=1;
													}
													else if(!_Flag_State_Error)
 												    {
														OSWait(K_TMO,OS_TICKS_PER_SEC/2);
														_Flag_State_Error=1;
													}
												}
												else if(!_Flag_AutoMode)
												{	
													_Flag_State_Error=!_Flag_State_Error;
												}
	
												if(_Flag_State_Error)
												{
													_Flag_CounteEnable=0;

													Write728x(0x10,0x00);
													Write728x(0x19,0x00);
													
													EX0=0;
												}
												else
												{
													_Flag_CounteEnable=1;

													Write728x(0x10,0xFF);
													Write728x(0x19,0xFF);
	
													EX0=1;
		
												}
												
											}
										}
										_Flag_Beep=1;
										break;
			case 	REQUEST			:	if(!_Flag_KeyLock)
										{
											if(_Flag_AutoMode)
											{
												if(!_Flag_State_Error)
												{
													if(!_Flag_State_Producing)
													{
														if(!_Flag_State_TaskAccepted)
														{
													//		OSSemPend(SEM_SendBuffer,0);
														
															OSQIntPost(SerialOutData,LOCOAL_ADDR);
															_Sum=LOCOAL_ADDR;
														
															OSQIntPost(SerialOutData,LOCOAL_ADDR);
															_Sum+=LOCOAL_ADDR;
														
															OSQIntPost(SerialOutData,CMD_REQUEST);
															_Sum+=CMD_REQUEST;
															
															OSQIntPost(SerialOutData,0);
	
															OSQIntPost(SerialOutData,0);

															OSQIntPost(SerialOutData,0);

															OSQIntPost(SerialOutData,_Sum);

															_Flag_RequestAccept=0;


															FeedBack();

															OSWait(K_SIG|K_TMO,OS_TICKS_PER_SEC*5);
															
															if(!_Flag_RequestAccept)
															{
																OSWait(K_SIG|K_TMO,OS_TICKS_PER_SEC*5);
															
															}
															
															if(_Flag_RequestAccept)
															{
																_Flag_Beep=1;
															}
															else
																_Flag_RequestAccept=1;

														}

													}										
												}
											}
										}
										else
											_Flag_Beep=1;
										break;
			case 	ENTER			:	if(!_Flag_KeyLock)
										{
											if(!_Flag_AutoMode)
											{
												if(!_Flag_State_Error)
												{
													if(_Flag_SetupMode)
													{
														_Flag_SetupMode=0;
	
														_Flag_CounteEnable=1;
														_Flag_State_Finish=0;
	
														_Flag_State_Producing=0;
	
														if(_Flag_Set)
														{
															_TargetValue=_TempValue;	
														}
														else
														{
															_CurrentValue=_TempValue;	
														}
														Write728x(0x10,0xFF);
														Write728x(0x19,0xFF);
				
														_Flag_DispChanged=1;

														_Flag_Beep=1;
													}									
												
													else
													{
														if(_Flag_State_Producing)
														{
															_Flag_CounteEnable=0;

															_Flag_State_Producing=0;
															_Flag_State_Finish=1;
															_Flag_State_TaskAccepted=0;

														//	_CurrentValue=_TargetValue;
															_Flag_DispChanged=1;

															if(_Flag_DispSpeed)
															{
																_ProduceSpeed=0;
																DispNum(2,_ProduceSpeed);
															}												
															_Flag_Beep=1;
	
														}
													}
														
												}
											}
											else
											{
												if(!_Flag_State_Error)
												{
													if(_Flag_State_Producing)
													{
														
													
														//OSSemPend(SEM_SendBuffer,0);
			
														OSQIntPost(SerialOutData,LOCOAL_ADDR);
														_Sum=LOCOAL_ADDR;
	
														OSQIntPost(SerialOutData,LOCOAL_ADDR);
														_Sum+=LOCOAL_ADDR;
	
														OSQIntPost(SerialOutData,CMD_FINISHED);
														_Sum+=CMD_FINISHED;
														
														temp=_CurrentValue>>16;

														_Sum+=temp;

														OSQIntPost(SerialOutData,temp);

														temp=_CurrentValue>>8;
														_Sum+=temp;

														OSQIntPost(SerialOutData,temp);

														temp=_CurrentValue;
														_Sum+=temp;

														OSQIntPost(SerialOutData,temp);
															
														//EX1=0;
														OSQIntPost(SerialOutData,_Sum);
														//EX1=1;

														_Flag_RequestAccept=0;


														FeedBack();

														OSWait(K_SIG|K_TMO,OS_TICKS_PER_SEC*5);
															
														if(!_Flag_RequestAccept)
														{
															OSWait(K_SIG|K_TMO,OS_TICKS_PER_SEC*5);
															
														}
															
														if(_Flag_RequestAccept)
														{
															_Flag_CounteEnable=0;

															_Flag_State_Producing=0;

															_Flag_State_TaskAccepted=0;
	

															_Flag_State_Finish=1;

															if(_Flag_DispSpeed)
															{
																_ProduceSpeed=0;
																DispNum(2,_ProduceSpeed);
															}												
															
	
														//	_CurrentValue=_TargetValue;
															_Flag_DispChanged=1;
															_Flag_Beep=1;
														}
														else
															_Flag_RequestAccept=1;
													
													}
												}										
											}
										}
										else	
											_Flag_Beep=1;
										break;
			case 	SETUP			:	if(!_Flag_KeyLock)
										{
											if(!_Flag_AutoMode)
											{
												if((!_Flag_State_Error)&&(!_Flag_State_Producing))
												{
													if(!_Flag_SetupMode)
													{
														_Flag_SetupMode=1;
														_CurrentValue=0;
														_TargetValue=0;
														_TempValue=_TargetValue;
														_Flag_Set=1;
														_ProduceSpeed=0;
														for(i=0;i<12;i++)
														{
															Write728x(i,0xFF);
														}
														DispNum(0,_TargetValue);
														DispNum(1,_CurrentValue);
														_Flag_DispChanged=1;
														Write728x(0x10,0xC0);
														Write728x(0x19,0xFF);
													}
													else
													{
														_Flag_Set=!_Flag_Set;
	
														if(_Flag_Set)
														{
															_CurrentValue=_TempValue;
															_TempValue=_TargetValue;
															DispNum(0,_TargetValue);
															_Flag_DispChanged=1;
															Write728x(0x10,0xC0);
															Write728x(0x19,0xFF);
														}
														else
														{
															_TargetValue=_TempValue;
															_TempValue=_CurrentValue;
															DispNum(1,_CurrentValue);

⌨️ 快捷键说明

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