我做的滤波器
#include<reg51.h>
void?InputWave();
float?FIR(); void?da0832(); float?fHn[N]={0.0,0.0,0.001,-0.002,0.01,-0.09, -0.018,0.049,-0.02,0.11,0.28,0.64,0.28,?-0.11,-0.02,0.049,-0.018,-0.009,0.01,
?-0.002,-0.002,0.001,0.0,0.0?
};
float?fXn[N]={0.0};
float?fInput,fOutput;
float?fSignal1,fSignal2;
float?fStepSignal1,fStepSignal2;
float?f2PI;
int?i;
float?FIN[256],FOUT[256];
int?nIn?,nOut;
main(void)
{
?nIn=0;nOut=0;
?f2PI=2*PI;
?fSignal1=0.0;
?fSignal2=PI*0.1;
?fStepSignal1=2*PI/30;
?fStepSignal2=2*PI*1.4;
?while(1)
?{
?//?fInput=InputWave();
?InputWave();
?//?FIN[nIn]=fInput;

?//?nIn++;nIn%=256;
fOutput=FIR();
FOUT[nOut]=fOutput;
nOut++;
if(nOut>=256)
{nOut=0;da0832();
?}
?}
}
void?InputWave()
{
int?i;
for(i=0;i<=15000;i++)
{
fXn[i]=(sin(PI*2*i/N*15000)+1)*5;
}
}
float?FIR()
{
float?fSum;
fSum=0;
for(i=0;i<N;i++)?fSum+=(fXn[i]*fHn[i]);
return(fSum);
}
void?da0832() { unsigned?char?i;da_cs=0;//da转换输出使能标志置位
da_wr1=0;//输入寄存器的官写选通信号,表示单片机要传送数据了
for (i=0;i<255;i++)
P0=FOUT[i];

da_wr1=1;//数据传送完成,使能锁存
da_cs=1;
}


