[mw_shl_code=c,true] [/mw_shl_code]
[mw_shl_code=c,true] /****************************************************************************
* 名 称:ADCValueDisplay_MainLoop(void)
* 功 能:ADC采集数据输出函数,液晶显示函数
* LCD显示电压值主循环
* 入口参数:
* 出口参数:无
* 说 明:
* 调用方法:直接调用
****************************************************************************/
void ADCValueDisplay_MainLoop(u8 Mode_flag)
{
static u16 Mode;
static u32 i,j,k,value,temp;
static u32 ArrDataBuffer[N];//N个数据
Mode=Mode_flag;
if(1==Mode)
{
value=GlideaverageValueFilter(uwADC3ConvertedVoltage*3300/0xFFF);
// printf("uwADC3ConvertedVoltage is: %d\r\n",uwADC3ConvertedVoltage );
GUI_SetFont(&GUI_Font24_1);
GUI_SetColor(GUI_RED);
GUI_DispStringAt("V",260,90);
GUI_SetColor(GUI_YELLOW);
GUI_DispDecAt(value,120,90,4);
GUI_DispStringAt(".",220,90);
GUI_DispDecAt(value/1000,210,90,1);
GUI_DispDecAt((value%1000)/10,230,90,2); //实际电压值
// printf("PA3: %0.2f V\r\n",uwVoltage);
}
if(2==Mode)
{
value=GlideaverageValueFilter(uwADC1ConvertedVoltage*3300/0xFFF)*2;
// printf("uwADC1ConvertedVoltage is: %d\r\n",uwADC1ConvertedVoltage );
GUI_SetFont(&GUI_Font24_1);
GUI_SetColor(GUI_RED);
GUI_DispStringAt("V",260,120);
GUI_SetColor(GUI_YELLOW);
GUI_DispDecAt(value,120,120,4);
GUI_DispStringAt(".",220,120);
GUI_DispDecAt(value/1000,210,120,1);
GUI_DispDecAt((value%1000)/10,230,120,2); //实际电压值
// printf("PA6: %0.2f V\r\n",uwMVoltage);
}
}
/****************************************************************************
* 名 称:?void ADC_Key(void)
* 功 能: 按键处理函数,设置ADC采集通道
* 入口参数:
* 出口参数:无
* 说 明:
* 调用方法:直接调用
****************************************************************************/
void ADC_Key(void)
{
key=KEY_Scan(0); //得到键值
if(key)
{
switch(key)
{
case KEY1_PRES:
ADC_flag=1;
break;
case KEY2_PRES:
ADC_flag=2;
break;
}
}
else delay_nms(10);
}
/****************************************************************************
* 名 称:?char GlideaverageValueFilter(char Value)
* 功 能: 递推平均滤波
* 入口参数:
* 出口参数:
* 说 明:带返回值的函数
* 调用方法:直接调用
****************************************************************************/
u32 GlideaverageValueFilter(u32 Value)
{
static u32 i,value;
static u32 Sum;
Sum=0;
Data[10]=Filter(Value); //采集数据放在最高位 mV
for(i=0;i<10;i++)
{
Data=Data[i+1]; //所有数据左移,地位扔掉
Sum+=Data;
}
value=Sum/10;
return(value);
}
/****************************************************************************
* 名 称:?uchar MaxValueFilter(u32 Value)
* 功 能: 寻找最大值
* 入口参数:
* 出口参数:
* 说 明:带返回值的函数
* 调用方法:直接调用
****************************************************************************/
u32 MaxValueFilter(u32 Value)
{
static u32 i,j,k,value,temp;
static u32 ArrDataBuffer[N];//2400个数据
for(i=0;i<N;i++)
{
ArrDataBuffer = GlideaverageValueFilter(Value);
}
//采样由小到大排列,排序采样冒泡法
for(j=0;j<N-1;j++) //冒泡
{
for(k=0;k<N-1-j;k++)
{
if(ArrDataBuffer[k]>ArrDataBuffer[k+1])
{
temp=ArrDataBuffer[k];
ArrDataBuffer[k]=ArrDataBuffer[k+1];
ArrDataBuffer[k+1]=temp;
}
}
}
value=ArrDataBuffer[N-1];
return(value);
}[/mw_shl_code]
|