完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 chinaukuk 于 2011-8-26 23:49 编辑
#include #include #include #include #defineIN0 XBYTE[0x7FF8]; #definePI 3.1415926; typedefunsigned char uchar; ucharI=0; ucharj=0; ucharM=4; //进行16点DFT ucharN=16; floatMAX; //取DFT_FFT变换中幅度的最大值 ucharK; //最大值所对应的K即频率 ucharxdata *ad_adr; ucharflag=0; staticfloat xdata ar[16]; //***** 1.6ms内对通道0的采样数据的存储区 staticfloat xdata ai[16]; staticfloat xdatahk[16]; ***itp1_0=P1^0; ***itp1_1=P1^1; ***itp1_2=P1^2; ***itp1_3=P1^3; ***itp1_4=P1^4; ***itp1_5=P1^5; ***itp1_6=P1^6; ***itp1_7=P1^7; ***itp3_0=P3^0; ***itp3_1=P3^1; voidsig_G(float Ar[],float Ai[]); voidDFT_FFT(float AR[],float AI[],uchar m,uchar n); voidfp_G (float aR[],float aI[],uchar n); voiddisplay(float max,uchar k); voidmain(void) { IT1=0; //***** 驱动0809 利用中断进行采样,采样时间(即采样点数)有定时器T0决定 EX1=1; TMOD=0x11; // *****定时器0计时方式1 TH0=0xF9; TL0=0xC0; ET0=1; //****定时器0开中断 TR0=1; EA=1; //********CPU开中断 ad_adr=&IN0; *ad_adr=j; while(1) { if(flag==1) {DFT_FFT(ar,ai,M,N); fp_G(ar,ai,N); display(MAX,K); flag=0; EX1=1; TR0=1;} elseif(flag==0); } } //*************外部中断子程序*即*读取0809转换结果******** voidint_serv(void) interrupt 2 {p3_0=0; //*********测试中端信号产生 ar[I]=*ad_adr; I++; *ad_adr=j; p3_0=1;} //********确定终端产生 //***************时钟0中断子程序*************** voidtime0_int(void) interrupt 1 { { flag=1; //**********置标志位 p3_1=0; TR0=0; EX1=0; sig_G(ar,ai); p3_1=1; } } //*************适合DFT的信号产生子程序************ voidsig_G(float Ar[],float Ai[]) {ucharn; for(n=I;n Ar[n]=0; for(n=0;n Ai[n]=0; I=0;} //********************************DFT子程序************************** voidDFT_FFT(float AR[],float AI[],uchar m,uchar n) {inti,il,jl,j,LH,nl,k,b; floattr,ti,p,p1; LH=(int)n/2; j=LH; nl=n-2; for(i=1;i<=nl;i++) {if(i {il=i;jl=j; tr=AR[il]; ti=AI[il]; AR[il]=AR[jl]; AI[il]=AI[jl]; AR[jl]=tr; AI[jl]=ti; } k=LH; while(j>=k) {j=j-k; k=(int)k/2; } j=j+k; } for(i=1;i<=m;i++) {b=(int)pow(2,(i-1)); for(j=0;j<=(b-1);j++) { p1=(float)pow(2,(m-i))*j*2.0*PI; p=p1/(float)n; for(k=j;k<=(n-1);) {tr=(float)(AR[k+b]*cos(p)+AI[k+b]*sin(p)); ti=(float)(AI[k+b]*cos(p)-AR[k+b]*sin(p)); AR[k+b]=AR[k]-tr; AI[k+b]=AI[k]-ti; AR[k]=AR[k]+tr; AI[k]=AI[k]+ti; k+=b*2; } } } } //**************显示幅度与所对应频率的产生****************** voidfp_G (float aR[],float aI[],uchar n) { inti; for(i=0;i {hk=sqrt(pow(aR,2)+pow(aI,2));} MAX=hk[0]; K=0; for(i=1;i {if(hk>MAX) {MAX=hk; K=i;} } } //**************显示子程序********************************* voiddisplay(float max,uchar k) {if((k>=0)&&(k<3)) {p1_0=0;p1_1=0;p1_2=0;} if((k>=3)&&(k<5)) {p1_0=1;p1_1=0;p1_2=0;} if((k>=5)&&(k<7)) {p1_0=0;p1_1=1;p1_2=0;} if((k>=7)&&(k<9)) {p1_0=1;p1_1=1;p1_2=0;} if((k>=9)&&(k<11)) {p1_0=0;p1_1=0;p1_2=1;} if((k>=11)&&(k<13)) {p1_0=1;p1_1=0;p1_2=1;} if((k>=13)&&(k<17)) {p1_0=0;p1_1=1;p1_2=1;} if((max>=0)&&(max<=0.2)) {p1_3=1;p1_4=0;p1_5=0;p1_6=0;p1_7=0;} if((max>0.2)&&(max<=0.5)) {p1_3=1;p1_4=1;p1_5=0;p1_6=0;p1_7=0;} if((max>0.5)&&(max<=0.9)) {p1_3=1;p1_4=1;p1_5=1;p1_6=0;p1_7=0;} if((max>0.9)&&(max<=1.5)) {p1_3=1;p1_4=1;p1_5=1;p1_6=1;p1_7=0;} if((max>1.5)&&(max<=5)) {p1_3=1;p1_4=1;p1_5=1;p1_6=1;p1_7=1;} }
|
|
相关推荐
14个回答
|
|
怎么没原理图?朋友,你现在仿真通过了?
|
|
|
|
|
|
|
|
老兄,程序要结合原理图啊?
|
|
|
|
没得原理图
|
|
|
|
这谁知道啊,硬件什么都不说
|
|
|
|
|
|
|
|
老兄,程序要结合原理图啊?
|
|
|
|
|
|
配合上电路图啊!!
|
|
|
|
电路图都没有,怎么防真?
|
|
|
|
电路图都没有,怎么防真?
|
|
|
|
试试代码功能怎么样 |
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2675 浏览 3 评论
4002 浏览 1 评论
4249 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
5970 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1161 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-21 10:41 , Processed in 0.909252 second(s), Total 70, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号