历史上的今天
返回首页

历史上的今天

今天是:2025年01月22日(星期三)

正在发生

2020年01月22日 | 16x16音乐频谱(源代码 原理图)

2020-01-22 来源:51hei

6x16音乐频谱(源代码 原理图)

#include "STC12C5A.h"

#include       

#include

#include "DS1302.h"

#include "Led.h"

#define uchar unsigned char

#define uint unsigned int

#define BinToHex(n) (((n>>21)&0x80)|((n>>18)&0x40)|((n>>15)&0x20)|((n>>12)&0x10)|((n>>9)& 0x08)|((n>>6)&0x04)|((n>>3)&0x02)|((n)&0x01))

#define B(n) BinToHex(0x##n##l)                                // 8位2进制宏


uchar code ColScan_2[16]   =  {0x17,0x13,0x15,0x11,0x16,0x12,0x14,0x10,

                                     0x27,0x23,0x25,0x21,0x26,0x22,0x24,0x20};                                            // 74hc138 进行列扫描

float code iw[64]=

{

        1.000,0,0.9952,-0.0980,0.9808,-0.1951,0.9569,-0.2903,0.9239,-0.3827,0.8819,-0.4714,0.8315,-0.5556,

        0.7730,-0.6344,0.7071,-0.7071,0.6344,-0.7730,0.5556,-0.8315,0.4714,-0.8819,0.3827,-0.9239,0.2903,-0.9569,

        0.1951,-0.9808,0.0980,-0.9952,0.0,-1.0000,-0.0980,-0.9952,-0.1951,-0.9808,-0.2903,0.9569,-0.3827,-0.9239,

        -0.4714,-0.8819,-0.5556,-0.8315,-0.6344,-0.7730,-0.7071,-0.7071,-0.7730,-0.6344,-0.8315,-0.5556,-0.8819,-0.4714,

        -0.9239,-0.3827,-0.9569,-0.2903,-0.9808,-0.1951,-0.9952,-0.0980

};

uint  data LEDBuf[16];

uint idata refreshflag[16];

uchar fft_sign = 0;                                // 进行fft变换标志位


struct compx

{

        float real;

        float imag;

};

struct compx dd[65];                         // FFT数据   

data struct compx temp; 


void delay500ms(void)  

{

    unsigned char a,b,c,n;

    for(c=218;c>0;c--)

        for(b=79;b>0;b--)

            for(a=238;a>0;a--);

    for(n=4;n>0;n--);

}


void Delay(uint n)

{

    uint x;

    while (n--)

    {

        x = 5000;

        while (x--);

    }

}


void GPIO_Init()                                                 // GPIO口的初始化

{

        P1M1  = B(00000011);

        P1M0  = B(00000000);

        P1    = B(00000011);

        P1ASF = B(00000011);

}


void Interrupt_Init(void)                                // 单片机中断初始化

{

        TMOD = 0x01;                                                 // 高4位控制T/C1 

        EA = 1;                                                             // 开总中断

        TH0 = 0x00;                                                  // 16位计数寄存器T1高8位

        TL0 = 0x00;                                                  // 16位计数寄存器T1低8位

        ET0 = 1;                                                     // T/C1中断开

    TR0 = 1;                                                     // T/C1启动


}


void ADC_Init()                                                        // 集成ADC的初始化(官方函数)

{

    ADC_RES = 0;                                   //Clear previous result

    ADC_CONTR = ADC_POWER | ADC_SPEEDLL;

    Delay(2);                                      //ADC power-on and delay

}


uchar GetADCResult(uchar ch)                           // 进行AD转换(官方函数)

{

    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;

    _nop_();                        //Must wait before inquiry

    _nop_();

    _nop_();

    _nop_();

    while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag

    ADC_CONTR &= ~ADC_FLAG;         //Close ADC

    return ADC_RES;                 //Return ADC result

}


void ee(struct compx b1,uchar b2)                         //复数乘法

        temp.real=b1.real*iw[2*b2]-b1.imag*iw[2*b2+1];

        temp.imag=b1.real*iw[2*b2+1]+b1.imag*iw[2*b2]; 


uint mypow(uchar  nbottom,uchar  ntop)                 //乘方函数

{

    uint  result=1;

    uchar t;    

    for(t=0;t    return result;

}

  

void fft(struct compx *xin,uchar data N)         //快速傅立叶变换

{

        uchar data  fftnum,i,j,k,l,m,n,disbuff,dispos,dissec;

        data struct compx t;

        fftnum=N;                         //傅立叶变换点数

        for(m=1;(fftnum=fftnum/2)!=1;m++);//求得M的值 

        for(k=0;k<=N-1;k++)               //码位倒置

        {

                n=k;

                j=0; 

                for(i=m;i>0;i--)             //倒置

                {

                        j=j+((n%2)<<(i-1));

                        n=n/2;

                } 

                if(k        }  

        for(l=1;l<=m;l++)                //FFT运算

        {

                disbuff=mypow(2,l);          //求得碟间距离

                dispos=disbuff/2;            //求得碟形两点之间的距离

                for(j=1;j<=dispos;j++)

                        for(i=j;i                        {

                                dissec=i+dispos;     //求得第二点的位置

                                ee(xin[dissec],(uint)(j-1)*(uint)N/disbuff);//复数乘法

                                t=temp;

                                xin[dissec].real=xin[i].real-t.real;

                                xin[dissec].imag=xin[i].imag-t.imag;

                                xin[i].real=xin[i].real+t.real;

                                xin[i].imag=xin[i].imag+t.imag;

                        }

        }


void processfft(uchar num)

    uchar  pt;

        uint  tmp; 

    for(pt=1;pt<65;pt++)

    {

        dd[pt].imag=0;                //清零虚部 

    }

    fft(dd,64);                       //对当前数据进行傅立叶变换                 

    for(pt=1;pt<33;pt++)

推荐阅读

史海拾趣

ANOVA公司的发展小趣事

ANOVA公司的故事始于2018年,当时四个在物联网领域颇具影响力的品牌——Dataonline、Wikon、Wesroc和Itank,看到了工业远程监控领域的巨大潜力和商机,于是决定联手共创未来。这四个品牌都拥有超过一个世纪的工业监控经验,它们的联合不仅仅是资源的整合,更是技术与智慧的融合。ANOVA的创立,标志着电子行业中一个新的力量正在崛起。

Centellax Inc公司的发展小趣事

Centellax深知人才是公司发展的核心动力。因此,公司一直致力于打造一支高素质、专业化的团队。通过招聘优秀的研发、销售、管理等人才,为公司的长期发展提供有力的人才保障。

在团队建设方面,Centellax注重培养员工的团队协作精神和创新能力。通过定期举办团队建设活动、培训课程等,提升员工的凝聚力和归属感。同时,公司还鼓励员工积极参与创新项目,为公司的技术进步和业务发展贡献智慧和力量。

Active-Semi公司的发展小趣事

为了确保产品质量和客户满意度,Centellax建立了完善的质量管理体系。公司从原材料采购、生产制造到产品销售等各个环节都严格把控质量,确保产品性能稳定可靠。

同时,Centellax还引入了国际先进的质量管理理念和方法,不断提升员工的质量意识和技能水平。通过持续改进和优化生产流程,降低生产成本,提高产品竞争力。此外,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。

Hayashi Denko Co Ltd公司的发展小趣事

为了确保产品质量和客户满意度,Centellax建立了完善的质量管理体系。公司从原材料采购、生产制造到产品销售等各个环节都严格把控质量,确保产品性能稳定可靠。

同时,Centellax还引入了国际先进的质量管理理念和方法,不断提升员工的质量意识和技能水平。通过持续改进和优化生产流程,降低生产成本,提高产品竞争力。此外,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。

Azoteq公司的发展小趣事

随着触控技术的兴起,Azoteq在2004年增加了第二条产品线,以应对新兴的电容式触摸和接近感应产品市场。这一举措使得Azoteq能够紧跟市场趋势,为客户提供更多样化的产品选择。通过不断的技术创新和市场拓展,Azoteq在这一领域逐渐取得了领先地位。

GE Solid State公司的发展小趣事
在嘈杂的环境中,声音信号可能受到干扰,影响用户的判断。

问答坊 | AI 解惑

鬼吹灯

听朋友介绍鬼吹灯这本书不错,但我怕太大传不上来,所以在这里只能给大家引荐一下,有空大家可以去下个电子版的看…

查看全部问答>

手把手教你单片机试验程序

手把手教你单片机试验程序…

查看全部问答>

牛人的心得

DSP硬件调试经验与个人心得 ,本人没有全看不过感觉还行。…

查看全部问答>

VirtualCopy在WinCE6下面不能用

在wince6下面写一个应用程序,要访问物理地址,发现不能用VirtualCopy,返回错误时87,表示参数错误 代码如下:         LPVOID VIDEO_BUFFER=VirtualAlloc(                 0, ...…

查看全部问答>

北京某外企生物特征高科技项目招聘

硬件工程师 1 人 职位描述: 1.        设计和优化电路,制作样机,配合其他软硬件工程师完成调试 2.        分析问题、解决问题,改进设计,提高质量 3.     &nb ...…

查看全部问答>

【求助】 有关晶振?? 示波器测不出波形????

在msp430f149 只供电的的情况下,其晶振的两管脚输出电压约为 2.5v 1.9v 当焊入2m晶振时,用示波器观察,晶振两脚对地的电压是2.5v 1.9v ,晶振两脚间为50hz的方波,高低电平并不规则,这是怎么回事啊???…

查看全部问答>

MSP430的USB

MSP430的5系列和6系列,都支持USB,不知道好不好用  …

查看全部问答>

求单片机与GTM900连接电路,有软件更好

RT,求解。51单片机与GTM900连接电路,我只要GPRS功能就可以了。多谢各位大虾…

查看全部问答>

求Altera USB Blaster下载线 一个 USB的

求Altera USB Blaster下载线 一个 USB的刚开始学习,贵的买不起,带价格,谢谢   本下载电缆适用于ALTERA CPLD/FPGA芯片的下载调试,支持JTAG、AS、PS下载模式。   USB Blaster下载电缆…

查看全部问答>

STM32加密问题:怎样预置一段Flash读保护和清除读保护的程序?

怎样预置一段Flash读保护和清除读保护的程序?谢谢…

查看全部问答>