/*
*********************************************************************************************************
*
*	模块名称 :  
*	文件名称 :  
*	版    本 :  V0.1
*	说    明 :	EC11旋转处理
---------------------------------------------------------------------------------------------------------

*  对应EC11编码器旋转时候的处理
*  在不同窗口，不同属性下，EC11旋转对应不同的处理



---------------------------------------------------------------------------------------------------------              
*	修改记录 :  
*	
*
*********************************************************************************************************
*/
#include "delay.h"
#include "sys.h"
#include "usart.h"

#include "EC11_Spin_Process.h"

#include "Menu.h"
#include "CW_menu.h"
#include "CH2_Freq_Set.h"
#include "Amp_Set.h" 

#include "bsp_ec11.h"
#include "EC11_Key_Process.h"


/*
*********************************************************************************************************
											宏定义
*********************************************************************************************************
*/




/*
*********************************************************************************************************
											变量
*********************************************************************************************************
*/



/*

*********************************************************************************************************
											外部变量
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*	函 数 名: _EC11_Spin_LableSel_Count
*	功能说明: EC11旋转下对应标签选中的计数

*	形    参:  
*	返 回 值:  
*********************************************************************************************************
*/
void _EC11_Spin_LableSel_Count()
{

	if ((TIM8->CR1 & 0x10) != 0)//向下计数
	{
		EC11_Direct	 = COUNT_DOWN;	//向下计数标志
		if(EC11_Count_LableSel <= 0)
		{
			EC11_Count_LableSel = 0xFFFF;
		}
		else 
			EC11_Count_LableSel--;

	}
	else//向上计数
	{
		EC11_Direct	 = COUNT_UP;//向上计数标志
		if(EC11_Count_LableSel >= 0xFFFF)
		{
			EC11_Count_LableSel = 0;
		}
		else 
			EC11_Count_LableSel++;
	}

}


/*
*********************************************************************************************************
*	函 数 名: _EC11_Spin_LableSel_Process
*	功能说明: EC11旋转下对应标签选中的计数

*	形    参:  
*	返 回 值:  
*********************************************************************************************************
*/
void _EC11_Spin_LableSel_Process()
{

	if(EC11_Direct == COUNT_DOWN)
	{
		if(CW_Edit_Sel <= 0)
			CW_Edit_Sel = 3;
		else 
			CW_Edit_Sel--;					
	}
	else if(EC11_Direct == COUNT_UP)
	{
		if(CW_Edit_Sel >= 3)
			CW_Edit_Sel = 0;
		else
			CW_Edit_Sel++;					
	}			
	oled_refresh = 1; //OLED显示有变化，需要更新	

}


/*
*********************************************************************************************************
*	函 数 名: _EC11_Spin_EditSel_Count
*	功能说明: EC11旋转下对应编辑选中的计数

*	形    参:  
*	返 回 值:  
*********************************************************************************************************
*/
void _EC11_Spin_EditSel_Count()
{
	if ((TIM8->CR1 & 0x10) != 0)//向下计数
	{
		EC11_Direct	 = COUNT_DOWN;	//向下计数标志
		if(EC11_Count_EditSel <= 0)
		{
			EC11_Count_EditSel = 0xFFFF;
		}
		else 
			EC11_Count_EditSel--;

	}
	else//向上计数
	{
		EC11_Direct	 = COUNT_UP;//向上计数标志
		if(EC11_Count_EditSel >= 0xFFFF)
		{
			EC11_Count_EditSel = 0;
		}
		else 
			EC11_Count_EditSel++;
	}
}



/*
*********************************************************************************************************
*	函 数 名: _EC11_Spin_EditSel_Process
*	功能说明: EC11旋转下对应编辑选中的计数

*	形    参:  
*	返 回 值:  
*********************************************************************************************************
*/
void _EC11_Spin_EditSel_Process()
{
	uint8_t i;
	
	if(EC11_Direct == COUNT_DOWN)
	{					
		switch(CW_Edit_Sel)//根据不同的标签来执行不同的处理
		{
			case CW_FREQ_SEL: //之前选中的是Freq标签
					//将要小数点位置操作多一次强行跳过
					if((CW_Freq_Show_Position == 4) || (CW_Freq_Show_Position == 8) ||
					  (CW_Freq_Show_Position == 12))
					{							
						CW_Freq_Show_Position = CW_Freq_Show_Position - 2;
					}
					else//其余位正常操作
					{
						if(CW_Freq_Show_Position <= 0)
							CW_Freq_Show_Position = 14;
						else
							CW_Freq_Show_Position--;							
					}	
					
					//对应的字符的反显位置
					for(i = 0 ; i < 16; i++)
					{
						CW_Freq_Show_Position_Anti[i] = 0;
					}
					CW_Freq_Show_Position_Anti[CW_Freq_Show_Position] = 1;
											
					oled_refresh = 1; //OLED显示有变化，需要更新																							
			break;
		
			case CW_AMP_SEL: //幅度标签标签进入编辑选中状态

					if(CW_Amp_Show_Position == 6)
					{
						CW_Amp_Show_Position = CW_Amp_Show_Position - 2;
					}
					else
					{
						if(CW_Amp_Show_Position <= 0)
							CW_Amp_Show_Position = 6;
						else
							CW_Amp_Show_Position--;							
					}								
					oled_refresh = 1; //OLED显示有变化，需要更新			
					
			break;		
		
			case CW_OUT_SEL: //输出通道标签标签进入编辑选中状态
					CW_Out_Type = DDS_OUT; //为DDS
					oled_refresh = 1; //OLED显示有变化，需要更新				
			break;
			
			case CW_FREQ_UNIT_SEL: //频率单位标签
					if(CW_Freq_Uint <= 0)
						CW_Freq_Uint = 3;
					else
						CW_Freq_Uint--;
						
					oled_refresh = 1; //OLED显示有变化，需要更新
																		
			break;			
			
			case CW_AMP_UNIT_SEL: //幅度单位标签
																			
			break;					
			
			default:
			
			break;
		}						
	}
	else if(EC11_Direct == COUNT_UP)
	{
		switch(CW_Edit_Sel)//根据不同的标签来执行不同的处理
		{
			case CW_FREQ_SEL: //Freq标签进入编辑选中状态

					//小数点位置强行跳过
					if((CW_Freq_Show_Position == 2) || 
					  (CW_Freq_Show_Position == 6) ||
					  (CW_Freq_Show_Position == 10))
					{
						CW_Freq_Show_Position = CW_Freq_Show_Position + 2;
					}
					else
					{
						if(CW_Freq_Show_Position >= 14)
							CW_Freq_Show_Position = 0;
						else
							CW_Freq_Show_Position++;							
					}					
					//对应的字符的反显位置
					for(i = 0 ; i < 16; i++)
					{
						CW_Freq_Show_Position_Anti[i] = 0;
					}
					CW_Freq_Show_Position_Anti[CW_Freq_Show_Position] = 1;						
					oled_refresh = 1; //OLED显示有变化，需要更新	

			break;
		
			case CW_AMP_SEL: //幅度标签标签进入编辑选中状态

					if(CW_Amp_Show_Position == 4)
					{
						CW_Amp_Show_Position = CW_Amp_Show_Position + 2;
					}
					else
					{
						if(CW_Amp_Show_Position >= 6)
							CW_Amp_Show_Position = 0;
						else
							CW_Amp_Show_Position++;							
					}	

					oled_refresh = 1; //OLED显示有变化，需要更新										
						
			break;		
		
			case CW_OUT_SEL: //输出通道标签标签进入编辑选中状态
					CW_Out_Type = PLL_OUT; //为PLL
					oled_refresh = 1; //OLED显示有变化，需要更新
									
			break;

			case CW_FREQ_UNIT_SEL: //频率单位标签

					if(CW_Freq_Uint >= 3)
						CW_Freq_Uint = 0;
					else
						CW_Freq_Uint++;
						
					oled_refresh = 1; //OLED显示有变化，需要更新
																		
			break;			
			
			case CW_AMP_UNIT_SEL: //幅度单位标签
																			
			break;	
			
			default: //
			
			break;
		}
	}


}


/*
*********************************************************************************************************
*	函 数 名: _EC11_Spin_Edit_Count
*	功能说明: EC11旋转下对应数字编辑的计数

*	形    参:  
*	返 回 值:  
*********************************************************************************************************
*/
void _EC11_Spin_Edit_Count()
{

	if ((TIM8->CR1 & 0x10) != 0)//向下计数
	{
		EC11_Direct	 = COUNT_DOWN;	//向下计数标志
		if(EC11_Count_EditNum <= 0)
		{
			EC11_Count_EditNum = 0xFFFF;
		}
		else 
			EC11_Count_EditNum--;

	}
	else//向上计数
	{
		EC11_Direct	 = COUNT_UP;//向上计数标志
		if(EC11_Count_EditNum >= 0xFFFF)
		{
			EC11_Count_EditNum = 0;
		}
		else 
			EC11_Count_EditNum++;
	}

}


/*
*********************************************************************************************************
*	函 数 名: _EC11_Spin_Edit_Process
*	功能说明: EC11旋转下对应数字编辑的计数

*	形    参:  
*	返 回 值:  
*********************************************************************************************************
*/
void _EC11_Spin_Edit_Process()
{
	if(EC11_Direct == COUNT_DOWN)
	{
		if(CW_Edit_Sel == CW_FREQ_SEL)
			_EC11_Freq_Step_Down();
		else if(CW_Edit_Sel == CW_AMP_SEL)
			_EC11_Amp_Step_Down();
		else
			__nop();					
	}
	else if(EC11_Direct == COUNT_UP)
	{
		if(CW_Edit_Sel == CW_FREQ_SEL)
			_EC11_Freq_Step_Up();
		else if(CW_Edit_Sel == CW_AMP_SEL)
			_EC11_Amp_Step_Up();
		else
			__nop();					
	}
}





/*
*********************************************************************************************************
*	函 数 名: _EC11_Freq_Step_Down
*	功能说明: 频率步进

*	形    参:  
*	返 回 值:  
*********************************************************************************************************
*/
void _EC11_Freq_Step_Down()
{
	uint32_t temp_u32;
	uint64_t temp_u64;
	
	if(CW_Out_Type == DDS_OUT)//DDS输出模式
	{				
		DDS_Freq_Hz_Buf = Freq_ASC_to_Value();//获得当前频率值
		temp_u32 = DDS_Freq_Hz_Buf;//操作前缓冲值
	}
	else if(CW_Out_Type == PLL_OUT)//PLL输出模式
	{
		PLL_Freq_Hz_Buf	=  Freq_ASC_to_Value_PLL();//获得当前频率值
		temp_u64 = PLL_Freq_Hz_Buf;
	}
	else
		__nop();
		
	//根据CW_Freq_Show_Position判断步进数值
	switch(CW_Freq_Show_Position)
	{
		case 3: //小数和结束符不参与计算
		case 7:
		case 11:
		case 15:
				__nop();
		break;
		
		case 0: //GHz范围，DDS无法操作，必须是PLL的操作
		case 1: //暂不支持10GHz以上的操作
		break;
		
		case 2:								
				if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					if(temp_u64 > 1000000000)
					{
						temp_u64  = temp_u64 - 1000000000;
					}					
				}
				else
					__nop();
		break;
		
		case 4: //百位MHz	
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{
					if(temp_u32 > 100000000)//保证不产生负数和零，否则就无法显示了
					{
						temp_u32 = temp_u32 - 100000000;
					}				
				}					
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					if(temp_u64 > 100000000)
					{
						temp_u64  = temp_u64 - 100000000;
					}					
				}
				else
					__nop();
										
		break;
		
		case 5: //十位MHz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{
					if(temp_u32 > 10000000)
					{
						temp_u32 = temp_u32 - 10000000;
					}			
				}					
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					if(temp_u64 > 10000000)
					{
						temp_u64  = temp_u64 - 10000000;
					}					
				}
				else
					__nop();
				
		break;

		case 6: //个位MHz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{
					if(temp_u32 > 1000000)
					{
						temp_u32 = temp_u32 - 1000000;
					}			
				}					
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					if(temp_u64 > 1000000)
					{
						temp_u64  = temp_u64 - 1000000;
					}					
				}
				else
					__nop();				
		break;

		case 8: //百位KHz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{
					if(temp_u32 > 100000)
					{
						temp_u32 = temp_u32 - 100000;
					}			
				}					
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					if(temp_u64 > 100000)
					{
						temp_u64  = temp_u64 - 100000;
					}					
				}
				else
					__nop();					
		break;
		
		case 9: //十位KHz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{
					if(temp_u32 > 10000)
					{
						temp_u32 = temp_u32 - 10000;
					}		
				}					
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					if(temp_u64 > 10000)
					{
						temp_u64  = temp_u64 - 10000;
					}					
				}
				else
					__nop();					
		break;

		case 10: //个位KHz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{
					if(temp_u32 > 1000)
					{
						temp_u32 = temp_u32 - 1000;
					}		
				}					
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					if(temp_u64 > 1000)
					{
						temp_u64  = temp_u64 - 1000;
					}					
				}
				else
					__nop();					
		break;

		case 12: //百位Hz	
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{
					if(temp_u32 > 100)
					{
						temp_u32 = temp_u32 - 100;
					}		
				}					
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					if(temp_u64 > 100)
					{
						temp_u64  = temp_u64 - 100;
					}					
				}
				else
					__nop();				
		break;
		
		case 13: //十位Hz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{
					if(temp_u32 > 10)
					{
						temp_u32 = temp_u32 - 10;
					}	
				}					
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					if(temp_u64 > 10)
					{
						temp_u64  = temp_u64 - 10;
					}					
				}
				else
					__nop();				
		break;

		case 14: //个位Hz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{
					if(temp_u32 > 1)
					{
						temp_u32 = temp_u32 - 1;
					}
				}					
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					if(temp_u64 > 1)
					{
						temp_u64  = temp_u64 - 1;
					}					
				}
				else
					__nop();					
		break;								

	}
	//判断计算结果是否有效
	//对范围进行判断
	if(CW_Out_Type == DDS_OUT)//DDS输出模式
	{		
		if(temp_u32 > 230000000)//大于230MHz输出无效
		{								
			printf("\r\n Too High , DDS Freq Out of the range! \r\n" ); //报错
		}
		else if(temp_u32 < 1000000)//小于1MHz输出无效
		{
			printf("\r\n Too Low, DDS Freq Out of the range! \r\n" ); //报错
		}
		else //正确的值
		{
			DDS_Freq_Hz_Buf = temp_u32;//计算结果正确，更新值			
			Freq_Value_to_ASCII(DDS_Freq_Hz_Buf);//将值转换为要显示的asi码							
			oled_refresh = 1; //OLED显示有变化，需要更新
			Out_Process = 1; //此时频率数值发生变化，需要触发输出处理
		}
	}
	else if(CW_Out_Type == PLL_OUT)//PLL输出模式
	{
		if(temp_u64 > 7100000000)//大于7.1GHz输出无效
		{								
			printf("\r\n Too High , PLL Freq Out of the range! \r\n" ); //报错
		}
		else if(temp_u64 < 9000)//小于9KHz输出无效
		{
			printf("\r\n Too Low, PLL Freq Out of the range! \r\n" ); //报错
		}
		else //正确的值
		{
			PLL_Freq_Hz_Buf = temp_u64;//计算结果正确，更新值			
			Freq_Value_to_ASCII_PLL(PLL_Freq_Hz_Buf);//将值转换为要显示的asi码							
			oled_refresh = 1; //OLED显示有变化，需要更新
			Out_Process = 1; //此时频率数值发生变化，需要触发输出处理
		}	
	}
	else
		__nop();
}


/*
*********************************************************************************************************
*	函 数 名: _EC11_Freq_Step_Up
*	功能说明: 频率步进，数字操作，自动进位

*	形    参:  
*	返 回 值:  
*********************************************************************************************************
*/
void _EC11_Freq_Step_Up()
{
	uint32_t temp_u32;
	uint64_t temp_u64;
	
	if(CW_Out_Type == DDS_OUT)//DDS输出模式
	{				
		DDS_Freq_Hz_Buf = Freq_ASC_to_Value();//获得当前频率值
		temp_u32 = DDS_Freq_Hz_Buf;//操作前缓冲值
	}
	else if(CW_Out_Type == PLL_OUT)//PLL输出模式
	{
		PLL_Freq_Hz_Buf	=  Freq_ASC_to_Value_PLL();//获得当前频率值
		temp_u64 = PLL_Freq_Hz_Buf;
	}
	else
		__nop();
	
	//根据CW_Freq_Show_Position判断步进数值
	switch(CW_Freq_Show_Position)
	{
		case 3: //小数和结束符不参与计算
		case 7:
		case 11:
		case 15:
				__nop();
		break;
		
		//GHz范围，DDS无法操作，必须是PLL的操作
		case 0: 
				__nop(); //暂不支持100GHz以上的操作
		break;
		
		case 1: //暂不支持10GHz以上的操作
				__nop(); 
		break;	
		
		case 2:								
				if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					temp_u64  = temp_u64 + 1000000000;
				}
				else
					__nop();
		break;
		
		case 4: //百位MHz//保证不溢出				
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{				
					if(temp_u32 < 0xffffffff - 100000000)
					{
						temp_u32 = temp_u32 + 100000000;
					}
				}
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					temp_u64 = temp_u64 + 100000000;
				}
				else
					__nop();				
				
		break;
		
		case 5: //十位MHz				
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{				
					if(temp_u32 < 0xffffffff - 10000000)
					{
						temp_u32 = temp_u32 + 10000000;
					}	
				}
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					temp_u64 = temp_u64 + 10000000;
				}
				else
					__nop();	
				
		break;

		case 6: //个位MHz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{				
					if(temp_u32 < 0xffffffff - 1000000)
					{
						temp_u32 = temp_u32 + 1000000;
					}
				}
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					temp_u64 = temp_u64 + 1000000;
				}
				else
					__nop();					
		break;

		case 8: //百位KHz	
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{				
					if(temp_u32 < 0xffffffff - 100000)
					{
						temp_u32 = temp_u32 + 100000;
					}
				}
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					temp_u64 = temp_u64 + 100000;
				}
				else
					__nop();					
		break;
		
		case 9: //十位KHz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{				
					if(temp_u32 < 0xffffffff - 10000)
					{
						temp_u32 = temp_u32 + 10000;
					}
				}
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					temp_u64 = temp_u64 + 10000;
				}
				else
					__nop();				
		break;

		case 10: //个位KHz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{				
					if(temp_u32 < 0xffffffff - 1000)
					{
						temp_u32 = temp_u32 + 1000;
					}
				}
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					temp_u64 = temp_u64 + 1000;
				}
				else
					__nop();					
		break;

		case 12: //百位Hz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{				
					if(temp_u32 < 0xffffffff - 100)
					{
						temp_u32 = temp_u32 + 100;
					}
				}
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					temp_u64 = temp_u64 + 100;
				}
				else
					__nop();					
		break;
		
		case 13: //十位Hz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{				
					if(temp_u32 < 0xffffffff - 10)
					{
						temp_u32 = temp_u32 + 10;
					}
				}
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					temp_u64 = temp_u64 + 10;
				}
				else
					__nop();				
		break;

		case 14: //个位Hz
				if(CW_Out_Type == DDS_OUT)//DDS输出模式
				{				
					if(temp_u32 < 0xffffffff - 1)
					{
						temp_u32 = temp_u32 + 1;
					}
				}
				else if(CW_Out_Type == PLL_OUT)//PLL输出模式
				{
					temp_u64 = temp_u64 + 1;
				}
				else
					__nop();					
		break;								

	}
	//判断计算结果是否有效
	//对范围进行判断
	if(CW_Out_Type == DDS_OUT)//DDS输出模式
	{		
		if(temp_u32 > 230000000)//大于230MHz输出无效
		{								
			printf("\r\n Too High , DDS Freq Out of the range! \r\n" ); //报错
		}
		else if(temp_u32 < 1000000)//小于1MHz输出无效
		{
			printf("\r\n Too Low, DDS Freq Out of the range! \r\n" ); //报错
		}
		else //正确的值
		{
			DDS_Freq_Hz_Buf = temp_u32;//计算结果正确，更新值			
			Freq_Value_to_ASCII(DDS_Freq_Hz_Buf);//将值转换为要显示的asi码							
			oled_refresh = 1; //OLED显示有变化，需要更新
			Out_Process = 1; //此时频率数值发生变化，需要触发输出处理
		}
	}
	else if(CW_Out_Type == PLL_OUT)//PLL输出模式
	{
		if(temp_u64 > 7100000000)//大于7.1GHz输出无效
		{								
			printf("\r\n Too High , PLL Freq Out of the range! \r\n" ); //报错
		}
		else if(temp_u64 < 9000)//小于9KHz输出无效
		{
			printf("\r\n Too Low, PLL Freq Out of the range! \r\n" ); //报错
		}
		else //正确的值
		{
			PLL_Freq_Hz_Buf = temp_u64;//计算结果正确，更新值			
			Freq_Value_to_ASCII_PLL(PLL_Freq_Hz_Buf);//将值转换为要显示的asi码							
			oled_refresh = 1; //OLED显示有变化，需要更新
			Out_Process = 1; //此时频率数值发生变化，需要触发输出处理
		}	
	}
	else
		__nop();
}



/*
*********************************************************************************************************
*	函 数 名: _EC11_Amp_Step_Up
*	功能说明: 幅度步进
              幅度编辑不分DDS输出还是PLL输出，因为二者范围都是一致的。
*	形    参:  
*	返 回 值:  
*********************************************************************************************************
*/
void _EC11_Amp_Step_Up()
{
	float temp_float;
	
	//数字操作，自动进位
	DDS_Amp_dBm_Buf = Amp_ASC_to_Value();//获得当前幅度值
	temp_float = DDS_Amp_dBm_Buf;//操作前缓冲值
	//根据CW_Freq_Show_Position判断步进数值
	switch(CW_Amp_Show_Position)
	{
		case 5: //小数和结束符不参与计算
		case 7:
				__nop();
		break;
		
		case 0: //符号位强制为﹢			
				__nop();
		break;
		
		case 1: //千位dBm，不操作		
				__nop();
		break;		
		
		case 2: //百位dBm，不操作	
				__nop();			
		break;
		
		case 3: //十位dBm
				temp_float = temp_float + 10.0f;							
		break;

		case 4: //个位dBm
				temp_float = temp_float + 1.0f;									
		break;

		case 6: //第1个小数位dBm
				temp_float = temp_float + 0.1f;									
		break;
				
		default:
				__nop();
		break;

	}

	//对范围进行判断
	if(temp_float > 15.0f)//大于15dBm
	{
		printf("\r\n Too High , DDS Amp Out of the range! \r\n" ); //报错
	}
	else if(temp_float < -80.0f)//小于-80dBm
	{
		printf("\r\n Too Low , DDS Amp Out of the range! \r\n" ); //报错
	}
	else//数值有效
	{			
		DDS_Amp_dBm_Buf = temp_float;
		Amp_Value_to_ASCII(DDS_Amp_dBm_Buf);//将值转换为要显示的asi码
		oled_refresh = 1; //OLED显示有变化，需要更新
		Out_Process = 1; //此时频率数值发生变化，需要触发输出处理
	}	
}


/*
*********************************************************************************************************
*	函 数 名: _EC11_Amp_Step_Down
*	功能说明: 幅度步进
              幅度编辑不分DDS输出还是PLL输出，因为二者范围都是一致的。
*	形    参:  
*	返 回 值:  
*********************************************************************************************************
*/
void _EC11_Amp_Step_Down()
{
	float temp_float;
	
	//数字操作，自动进位
	DDS_Amp_dBm_Buf = Amp_ASC_to_Value();//获得当前幅度值
	temp_float = DDS_Amp_dBm_Buf;//操作前缓冲值
	//根据CW_Freq_Show_Position判断步进数值
	switch(CW_Amp_Show_Position)
	{
		case 5: //小数和结束符不参与计算
		case 7:
				__nop();
		break;
		
		case 0: //符号位强制为﹢			
				__nop();
		break;
		
		case 1: //千位dBm，不操作		
				__nop();
		break;		
		
		case 2: //百位dBm，不操作	
				__nop();			
		break;
		
		case 3: //十位dBm
				temp_float = temp_float - 10.0f;							
		break;

		case 4: //个位dBm
				temp_float = temp_float - 1.0f;									
		break;

		case 6: //第1个小数位dBm
				temp_float = temp_float - 0.1f;									
		break;
				
		default:
				__nop();
		break;

	}
	//对范围进行判断
	if(temp_float > 15.0f)//大于15dBm
	{
		printf("\r\n Too High , DDS Amp Out of the range! \r\n" ); //报错
	}
	else if(temp_float < -80.0f)//小于-80dBm
	{
		printf("\r\n Too Low , DDS Amp Out of the range! \r\n" ); //报错
	}
	else//数值有效
	{			
		DDS_Amp_dBm_Buf = temp_float;
		Amp_Value_to_ASCII(DDS_Amp_dBm_Buf);//将值转换为要显示的asi码
		oled_refresh = 1; //OLED显示有变化，需要更新
		Out_Process = 1; //此时频率数值发生变化，需要触发输出处理
	}	
}
