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

📄 复件 main.c

📁 ucos II操作系统的源代码。程序完整
💻 C
📖 第 1 页 / 共 3 页
字号:
    				flgs.key = 0;
					break;
				}
    		    else
    			{
    				OSTimeDly(20);	//100ms
    			}    			
    		}  
		} 
	//}	
}	    	    		
/*********************************************************************************************************
** 函数名称: KeyDecode
** 功能描述: 键盘解码
** 输 入: key_value :采集到的键盘编码       
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		
void KeyDecode(INT8U key_value){
	INT8U temp;

    switch (key_value){	
		case  0x0a : {	//fre up 
    		flgs.fre = 1;
    		
    		if (flgs.freconvswitch)
    		{
    			fre_group = (fre_group >= MaxGroupNo ) ? MinGroupNo : (fre_group + 1);
    			temp = fre_group;
    		} 
    		else 
    		{
        		fre_value = (fre_value >= MaxFreValue) ? MinFreValue  : (fre_value + 1);
        		temp = fre_value;
        	}
			LedRefresh(temp,0x03);  
			break;
			}
    	case  0x05 : {	//fre down
        	flgs.fre = 1;
        	
        	if (flgs.freconvswitch)
        	{
        		fre_group = (fre_group <= MinGroupNo) ? MaxGroupNo : (fre_group - 1);
        		temp = fre_group;
        	} 
        	else 
        	{
        		fre_value = (fre_value <= MinFreValue ) ? MaxFreValue : (fre_value - 1);
        		temp = fre_value;
        	}
			LedRefresh(temp,0x03);
			break;
			} 
    	case  0x07 : {
	    	flgs.test_change = 1;
	    	break;
			}
		case  0x0b	: {
			flgs.freconvkey = 1;
			break;
			}	
		case  0x06 : {	//pow up
    		if (!flgs.test && !flgs.warn) 
    		{      
         	  	flgs.pow=1;
            	pow_value = (pow_value >= 0x04) ? 0x01 : (pow_value + 1);
				LedRefresh(pow_value,0x0f);
			}
			break;
		 	} 
    	case  0x09 : {	//pow down
            if (!flgs.test && !flgs.warn) 
            {      
         	  	flgs.pow=1;
             	pow_value = (pow_value == 0x01) ? 0x04 : (pow_value - 1);
			 	LedRefresh(pow_value,0x0f);
		 	}  
		 	break;
			}
		default: break;			
	}		
	if (flgs.key)
	{
		FrePowChange();
	}
} 
    		
/*********************************************************************************************************
** 函数名称: fre_pow_change
** 功能描述: 更新设备状态
** 输 入: 无        
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人: 黄凯
** 日 期: 2006年12月08日
** 备  注:消除键盘误动作
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		      
void FrePowChange(void){
#if OS_CRITICAL_METHOD == 3 
    OS_CPU_SR  cpu_sr;
#endif
	
	INT8U temp[5];

	if (flgs.fre){
		flgs.fre = 0;
		if (flgs.freconvswitch)
		{	//更新跳频图谱组号
			LedRefresh(fre_group, 0x03);
			OS_ENTER_CRITICAL(); 
			memcpy(fre_char2, fre_char3[fre_group], EachGroupLen);
			OS_EXIT_CRITICAL(); 
			CtrlOut(fre_char2[0], 0x03);
			
			temp[0] = FreConvAddr; 
			temp[1] = fre_group;
			temp[2] = (INT8U)I2cWrite(CAT1025, temp, 2);	//保存跳频图谱组号
			
			Uart1Send();
		}
		else 
		{	
			if (back.ffre != fre_value) 
			{					
				back.ffre = fre_value;
				CtrlOut(fre_value-1,0x03);

				temp[0] = FreSaveAddr; 
				temp[1] = fre_value;
				temp[2] = (INT8U)I2cWrite(CAT1025, temp, 2);	//保存频率值
			}		
		}
	}
	if (flgs.pow)
	{
		flgs.pow = 0;
		
		if (back.ppow !=  pow_value) 
		{
			back.ppow = pow_value;
			CtrlOut(pow_value,0x0f);

			temp[0] = PowSaveAddr; 
			temp[1] = pow_value;
			temp[2] = (INT8U)I2cWrite(CAT1025, temp, 2);	//保存功率值
		}
	}
	if (flgs.freconvkey)
	{
		flgs.freconvkey = 0;
		flgs.freconvswitch = ~flgs.freconvswitch;
		if (flgs.freconvswitch)
		{	//显示当前跳频图谱组号
			LedRefresh(fre_group, 0x03);
			CtrlOut(fre_char2[0], 0x03);
			sel_led_on();
		} 
		else 
		{
			LedRefresh(fre_value, 0x03);
			CtrlOut(fre_value-1, 0x03);
			sel_led_off();
		}	
	}							
	if (flgs.test_change)
	{
		  flgs.test_change = 0;
		  
		  flgs.test = ~flgs.test;
      	  if (flgs.test)
      	  { 	//test
		  		test_value = 0xf1;
				test_on(); 
				pow_value = 0x01;
		  } 
		  else 
		  { 
				test_value = 0xf2;
				test_off();
				pow_value = back.ppow;
		  }		  
		  CtrlOut(pow_value,0x0f);
		  LedRefresh(pow_value,0x0f);  								
    }		
}
/*********************************************************************************************************
** 函数名称: CtrlOut
** 功能描述: 输出控制字
** 输 入: 控制字类别        
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		      
void CtrlOut(INT8U ctrl_data, INT8U ctrl_no){
	if (ctrl_no == 0x03)
	{   //fre
      	IO0PIN = IO0PIN & 0XFFFF00FF |(ctrl_data << 10); 
	}     
    if (ctrl_no == 0x0f)
    {   //pow
      	IO0PIN = IO0PIN & 0XFFFCFFFF |((ctrl_data -1) << 16);
	}   
}
/*********************************************************************************************************
** 函数名称: LedRefresh
** 功能描述: 更新8字管状态
** 输 入: 更新类别        
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		      
void LedRefresh(INT8U dat,INT8U fresh_no){
#if OS_CRITICAL_METHOD == 3 
    OS_CPU_SR  cpu_sr;
#endif
	INT8U data_h;
	INT8U data_l;

    OS_ENTER_CRITICAL();  
  if (fresh_no == 0x03) 
  {
  	  data_h = dat /10;
	  data_l = dat %10;

      IO0CLR = 0X04 << 24;	//le 1
      IO1PIN = IO1PIN & 0XFFF0FFFF | (data_h << 16);
      IO0SET = 0X04 << 24;
      
      IO0CLR = 0X08 << 24;	//le 2
      IO1PIN = IO1PIN & 0XFFF0FFFF | (data_l << 16);
      IO0SET = 0X08 << 24;
  }
  if (fresh_no == 0x0f) 
  {      
      IO0CLR = 0X10 << 24;	//le 3
      IO1PIN = IO1PIN & 0XFFF0FFFF;
      IO0SET = 0X10 << 24;
      
      IO0CLR = 0X20 << 24;	//le 4     
      IO1PIN = IO1PIN & 0XFFF0FFFF | (dat << 16);
      IO0SET = 0X20 << 24;
   }
   OS_EXIT_CRITICAL();
}

/*********************************************************************************************************
** 函数名称: Eint3Exception
** 功能描述: 外部中断3服务程序
** 输 入: 无        
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		      
void Eint3Exception(void){	
	if (fre_cnt >= 0x00000f01)
	{
		 fre_cnt=0;
	}
	else
	{
		 fre_cnt++;	
	}
	if(flgs.freconvon)
	{		 
       	CtrlOut(fre_char2[fre_cnt], 0x03);                                 
    }
	EXTINT      = 0X08;
	VICVectAddr = 0 ;
}
/*********************************************************************************************************
** 函数名称: Eint2Exception
** 功能描述: 外部中断2服务程序
** 输 入: 无        
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年12月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		      
void Eint2Exception(void){		
	fre_cnt = 0x00000002;
	EXTINT      = 0X04;
	VICVectAddr = 0 ;
}		
/*********************************************************************************************************
** 函数名称: main
** 功能描述: c语言的主函数,由它启动多任务环境
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int main (void){
    OSInit();
    OSTaskCreate(FreTabUpdate, (void *)0, &FreTabUpdataStk[FreTabUpdataLen - 1], 2);
    OSTaskCreate(Uart1Rece, (void *)0, &Uart1ReceStk[Uart1ReceStkLen - 1], 3); 
    OSTaskCreate(Each3sComm, (void *)0, &Each3sCommStk[Each3sCommStkLen - 1], 4);
    OSTaskCreate(InfoGather, (void *)0, &InfoGatherStk[InfoGatherStkLen - 1], 5);
    OSStart();
    return 0;
}
	
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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