// 滑动平均法
//a0,a1,a2,a3,a4,a5
#include <stdio.h>
#include <stdint.h>
#define u8 uint8_t
#define u16 uint16_t
#define accNUM 6
u16 Data[2][accNUM] = {0};
u16 AccProcess( u8 SerialNum , u16 NewData )
{
u16 sum = 0;
static u8 FirstCnt = 0;
if( FirstCnt != 2 )
{
FirstCnt++;
for(u8 i=0;i<accNUM;i++)
Data[SerialNum][i]=NewData;
}
else
{
for(u8 j=(accNUM-1);j>=1;j--)
{
Data[SerialNum][j]=Data[SerialNum][j-1];
}
Data[SerialNum][0]=NewData;
}
for(u8 k=0;k<accNUM;k++)
{
sum+=Data[SerialNum][k];
}
return sum/accNUM;
}
void Display( u16 FinalData1 , u16 FinalData2 )
{
printf("FinalData1 = %x\n",FinalData1);
printf("FinalData2 = %x\n",FinalData2);
for(u8 i=0;i<accNUM;i++)
printf("%x ",Data[0][i]);
printf("\n");
for(u8 i=0;i<accNUM;i++)
printf("%x ",Data[1][i]);
printf("\n");
}
int main()
{
u16 NewData1=1;
u16 NewData2=2;
u16 FinalData1 = 0;
u16 FinalData2 = 0;
FinalData1 = AccProcess( 0 , NewData1 );
FinalData2 = AccProcess( 1 , NewData2 );
Display(FinalData1,FinalData2);
NewData1 = 100;
NewData2 = 10;
FinalData1 = AccProcess( 0 , NewData1 );
FinalData2 = AccProcess( 1 , NewData2 );
Display(FinalData1,FinalData2);
NewData1 = 60;
NewData2 = 80;
FinalData1 = AccProcess( 0 , NewData1 );
FinalData2 = AccProcess( 1 , NewData2 );
Display(FinalData1,FinalData2);
NewData1 = 30;
NewData2 = 40;
FinalData1 = AccProcess( 0 , NewData1 );
FinalData2 = AccProcess( 1 , NewData2 );
Display(FinalData1,FinalData2);
return 0;
}
结果:
FinalData1 = 1
FinalData2 = 2
1 1 1 1 1 1
2 2 2 2 2 2
FinalData1 = 11
FinalData2 = 3
64 1 1 1 1 1
a 2 2 2 2 2
FinalData1 = 1b
FinalData2 = 10
3c 64 1 1 1 1
50 a 2 2 2 2
FinalData1 = 20
FinalData2 = 16
1e 3c 64 1 1 1
28 50 a 2 2 2