新聞中心

        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;ivis[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 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 通城县| 芷江| 鞍山市| 泌阳县| 林西县| 车致| 涿鹿县| 祁东县| 淮南市| 武宣县| 安塞县| 兴安盟| 霍州市| 乌兰察布市| 涟源市| 那曲县| 惠东县| 潮安县| 杨浦区| 武乡县| 荣成市| 醴陵市| 南平市| 南陵县| 定结县| 桂平市| 济南市| 淮阳县| 屏东市| 东台市| 汾西县| 莱芜市| 岳普湖县| 白玉县| 张家川| 江阴市| 沂南县| 古丈县| 筠连县| 桑日县| 石阡县|