新闻中心

EEPW首页>嵌入式系统>设计应用> FFT算法在单片机中的使用&&LCD12864驱动

FFT算法在单片机中的使用&&LCD12864驱动

作者: 时间:2016-11-30 来源:网络 收藏

void clear(uchar dat) //清屏函数

{

uchar i,j,k;

uchar addr=0x80;

for(i=0;i<2;i++)

{

for(j=0;j<32;j++)

{

for(k=0;k<8;k++)

{

WriteCommandLCM(0x36);

WriteCommandLCM(0x80+j);

WriteCommandLCM(addr+k);

WriteDataLCM(dat);

WriteDataLCM(dat);

}

}

addr=0x88;

}

WriteCommandLCM(0x36);

WriteCommandLCM(0x30);

}

void heng(uchar a)

{

uchar i;

for(i=0;i<127;i++)

point(i,a);

}

void su(uchar a)

{

uchar i;

for(i=0;i<63;i++)

point(a,i);

}

void FFT()

{

int i,j,k,t,P,B,m;

complex up,down,product;

for (i=0;i<7;i++)

{

B=1< for (j=0;j {

t=1<<(6-i);

P=t*j;

for (k=j;k {

complex product;

product.real=x[k+B].real*cos(2*PI*P/N)+x[k+B].img*sin(2*PI*P/N);

product.img=x[k+B].real*(-1)* sin(2*PI*P/N)+x[k+B].img*cos(2*PI*P/N);

x[k+B].real=x[k].real-product.real;

x[k+B].img=x[k].img-product.img;

x[k].real=x[k].real+product.real;

x[k].img=x[k].img+product.img;

}

}

}

}

void initw() //初始化旋转因子

{

int i;

for (i=0;i vis[i]=0;

}

void bitReverse() //比特反转

{

int i,j=0;

int k=0;

int q=0;

complex tmp3;

for (i=0;i {

int tmp=i,tmp2=0,j;

for(j=0;j<7;j++)

tmp2+=((tmp>>j)&1)*(1<<(6-j));

if(vis[i]==0)

{

tmp3=x[i];

x[i]=x[tmp2];

x[tmp2]=tmp3;

vis[i]=1;

vis[tmp2]=1;

}

}

}

void xian(uchar x,uchar y)

{

uchar i;

for(i=63;i>=y;i--)

point(x,i);

}

//主函数

void main(void)

{

uchar ii,y;

float tmp;

//端口初始化

DDRA=0xff;

PORTA=0xff;

DDRB=0xff;

PORTB=0xff;

DDRD=0xff;

PORTD=0x00;

delayms(20);

delayms(20);

LCMInit(); //LCM初始化 //液晶初始化

delayms(100);

clear(0x00);

heng(0);

heng(63);

su(0);

su(127);

for (ii=0;ii<20;ii++)

{

x[ii].real=3;

x[ii].img=0;

}

for (ii=20;ii<128;ii++)

{

x[ii].real=0;

x[ii].img=0;

}

initw();

bitReverse();

FFT();

for(ii=64;ii<128;ii++)

{

tmp=sqrt((x[ii].real*x[ii].real)+(x[ii].img*x[ii].img));

y= 63-(int)tmp;

point(ii-64,y);

xian(ii-64,y);

}

for(ii=0;ii<64;ii++)

{

tmp=sqrt((x[ii].real*x[ii].real)+(x[ii].img*x[ii].img));

y= 63-(int)tmp;

point(ii+64,y);

xian(ii+64,y);

}

while(1);

}


上一页 1 2 3 下一页

评论


技术专区

关闭