⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dso_fft.lst

📁 在采用 320x240 屏的设计实验箱上运行
💻 LST
📖 第 1 页 / 共 3 页
字号:
 494   2                      rPartKB = xr[k+1] ;
 495   2                      xr[k+1]=xr[k]-rPartKB ;
 496   2                      xr[k]=xr[k]+rPartKB;
 497   2              }
 498   1      
 499   1              for(L=2;L<=N;L++)//L=1
 500   1              {
 501   2                      B=1<<(L-1);
 502   2                      for(J=0;J<=B-1;J++)
 503   2                      {
 504   3                              P=J*(1<<(N-L));
 505   3                              for(k=J;k<=Sam_N-1;k+=1<<L)
 506   3                              {
 507   4                                      if(P==0)
 508   4                                      {
 509   5                                              rPartKB=xr[k+B];
 510   5                                              iPartKB=xi[k+B];
 511   5                                              xr[k+B]=xr[k]-rPartKB;
 512   5                                              xi[k+B]=xi[k]-iPartKB;
 513   5                                              xr[k]=xr[k]+rPartKB;
 514   5                                              xi[k]=xi[k]+iPartKB;
 515   5                                      }
 516   4                                      else if(P==32)
 517   4                                      {
 518   5                                              rPartKB=-xi[k+B];
 519   5                                              iPartKB=xr[k+B];
 520   5                                              xr[k+B]=xr[k]-rPartKB;
 521   5                                              xi[k+B]=xi[k]-iPartKB;
 522   5                                              xr[k]=xr[k]+rPartKB;
 523   5                                              xi[k]=xi[k]+iPartKB;
 524   5                                      }
 525   4                                      else if(P==64)
 526   4                                      {
 527   5                                              rPartKB=-xr[k+B];
 528   5                                              iPartKB=-xi[k+B];
 529   5                                              xr[k+B]=xr[k]-rPartKB;
 530   5                                              xi[k+B]=xi[k]-iPartKB;
 531   5                                              xr[k]=xr[k]+rPartKB;
 532   5                                              xi[k]=xi[k]+iPartKB;
 533   5                                      }
 534   4                                      else if(P==96)
 535   4                                      {
 536   5                                              rPartKB=xi[k+B];
 537   5                                              iPartKB=-xr[k+B];
 538   5                                              xr[k+B]=xr[k]-rPartKB;
 539   5                                              xi[k+B]=xi[k]-iPartKB;
 540   5                                              xr[k]=xr[k]+rPartKB;
 541   5                                              xi[k]=xi[k]+iPartKB;
 542   5                                      }
 543   4                                      else{
 544   5                                              rPartKB=xr[k+B]*rCf[P]-xi[k+B]*iCf[P];
 545   5                                              iPartKB=xi[k+B]*rCf[P]+xr[k+B]*iCf[P];
 546   5                                              rPartKB=rPartKB>>7;
 547   5                                              iPartKB=iPartKB>>7;
 548   5                                              xr[k+B]=xr[k]-rPartKB;
 549   5                                              xi[k+B]=xi[k]-iPartKB;
 550   5                                              xr[k]=xr[k]+rPartKB;
 551   5                                              xi[k]=xi[k]+iPartKB;
C51 COMPILER V7.06   DSO_FFT                                                               02/25/2007 18:04:19 PAGE 10  

 552   5                                      }
 553   4                              }
 554   3                      }
 555   2              } 
 556   1      }
 557          /***************************************************************
 558          *名称:ChangeOrder(float xr[],float xi[],int N)
 559          *描述:ChangeOrder
 560          *参数:
 561          *返回:
 562          ****************************************************************/
 563          void ChangeOrder()
 564          {
 565   1              uchar I,J,K;
 566   1              int T;
 567   1              long sum_xr = 0 ;
 568   1              Ram_cs = 0 ;
 569   1              J=Sam_N>>1;
 570   1              for(I=1;I<=Sam_N-2;I++)
 571   1              {
 572   2                      if(I<J)
 573   2                      {
 574   3                              T=xr[I];xr[I]=xr[J];xr[J]=T;
 575   3                      }
 576   2                      K=Sam_N>>1;
 577   2                      while(J>=K)
 578   2                      {
 579   3                              J=J-K;
 580   3                              K=(int)(K/2+0.5);
 581   3                      }
 582   2                      J=J+K;
 583   2              }
 584   1              for(I=0;I<Sam_N;I++)
 585   1              {
 586   2                      sum_xr = sum_xr + xr[I] ;
 587   2              }
 588   1              sum_xr = sum_xr>>7 ;
 589   1              for(I=0;I<Sam_N;I++)
 590   1              {
 591   2                      xr[I]=xr[I]-sum_xr ;
 592   2              }
 593   1      }
 594          /***************************************************************
 595          *名称:Fft_out (float xr[] , float xi[])
 596          *描述:计算频谱分析结果
 597          *参数:fft计算结果的实虚序列
 598          *返回:
 599          ****************************************************************/
 600          void Fft_out (void)
 601          {
 602   1              uchar i ;
 603   1              for(i=0;i<Sam_N>>1;i=i+1)
 604   1              { 
 605   2                      w[i]=sqrt(xr[i]*xr[i]+xi[i]*xi[i]);
 606   2                      w[i]=w[i]>>6;
 607   2              }
 608   1      }
 609          /***************************************************************
 610          *名称:showsine (void)
 611          *描述:显示采样的结果,采64个点但显示256点
 612          *参数:xr_temp[]显示数组,N_temp数组元素个数,
 613                     start_add图形开始的x地址,last上次显示最后一个元素
C51 COMPILER V7.06   DSO_FFT                                                               02/25/2007 18:04:19 PAGE 11  

 614          *返回:
 615          ****************************************************************/
 616          void showsine (uchar xr_temp[],uchar N_temp,uchar start_add,uchar last)
 617          {
 618   1              uchar i ;
 619   1              WriteD(start_add,xr_temp[1]>>1);
 620   1              vector(start_add-1,last>>1,xr_temp[1]>>1);
 621   1              for(i=2;i<N_temp;i++)
 622   1              {
 623   2                      WriteD(i-1+start_add,xr_temp[i]>>1);
 624   2                      vector(i-2+start_add,xr_temp[i-1]>>1,xr_temp[i]>>1);
 625   2              }
 626   1      }
 627          
 628          void main()
 629          {
 630   1              uchar temp[32] ,temp_1,temp_2;
 631   1              uchar i ;
 632   1      
 633   1              Ram_cs = 1 ;//转向对液晶操作
 634   1              lcd_a0 = 0 ;
 635   1              lcd_wr = 1 ;
 636   1              initall() ;
 637   1      
 638   1          while(1)
 639   1          {
 640   2                      Ram_cs = 0 ;
 641   2                      //采样,采128点 
 642   2                      P0 = 0xff ;
 643   2                      Adc_work() ;
 644   2              
 645   2                      lcd_a0 = 1 ;//转向对ram操作
 646   2                      lcd_wr = 1 ;
 647   2                      Ram_cs = 0 ;
 648   2      
 649   2                      Fft() ;
 650   2                      Fft_out() ;
 651   2              
 652   2                      for(i=0;i<32;i++)
 653   2                      {
 654   3                              temp[i]=xr_show[i];
 655   3                      }
 656   2      
 657   2                      temp_1=temp[31];
 658   2              
 659   2                      Ram_cs = 1 ;//转向对液晶操作
 660   2                      lcd_a0 = 0 ;
 661   2                      lcd_wr = 1 ;
 662   2                      initram_1();
 663   2                      WriteD(25,temp[0]/2);
 664   2                      showsine(temp,32,25+1,temp[0]);
 665   2              
 666   2                      lcd_a0 = 1 ;//转向对ram操作
 667   2                      lcd_wr = 1 ;
 668   2                      Ram_cs = 0 ;
 669   2                      for(i=32;i<64;i++)
 670   2                      {
 671   3                              temp[i-32]=xr_show[i];
 672   3                      }
 673   2                      temp_2=temp[31];
 674   2              
 675   2                      Ram_cs = 1 ;//转向对液晶操作
C51 COMPILER V7.06   DSO_FFT                                                               02/25/2007 18:04:19 PAGE 12  

 676   2                      lcd_a0 = 0 ;
 677   2                      lcd_wr = 1 ;
 678   2                      showsine(temp,32,25+31,temp_1);
 679   2              
 680   2                      lcd_a0 = 1 ;//转向对ram操作
 681   2                      lcd_wr = 1 ;
 682   2                      Ram_cs = 0 ;
 683   2                      for(i=64;i<96;i++)
 684   2                      {
 685   3                              temp[i-64]=xr_show[i];
 686   3                      }
 687   2                      temp_1=temp[31];
 688   2              
 689   2                      Ram_cs = 1 ;//转向对液晶操作
 690   2                      lcd_a0 = 0 ;
 691   2                      lcd_wr = 1 ;
 692   2                      showsine(temp,32,25+63,temp_2);
 693   2              
 694   2                      lcd_a0 = 1 ;//转向对ram操作
 695   2                      lcd_wr = 1 ;
 696   2                      Ram_cs = 0 ;
 697   2                      for(i=96;i<128;i++)
 698   2                      {
 699   3                              temp[i-96]=xr_show[i];
 700   3                      }
 701   2              
 702   2                      Ram_cs = 1 ;//转向对液晶操作
 703   2                      lcd_a0 = 0 ;
 704   2                      lcd_wr = 1 ;
 705   2                      showsine(temp,32,25+95,temp_1);
 706   2                      showchin() ;
 707   2              
 708   2                      lcd_a0 = 1 ;//转向对ram操作
 709   2                      lcd_wr = 1 ;
 710   2                      Ram_cs = 0 ;
 711   2                      for(i=0;i<32;i++)temp[i]=w[i];
 712   2       
 713   2                      Ram_cs = 1 ;
 714   2                      lcd_a0 = 0 ;
 715   2                      lcd_wr = 1 ;
 716   2                      pinpu(temp,32,25) ;
 717   2              
 718   2                      lcd_a0 = 1 ;//转向对ram操作
 719   2                      lcd_wr = 1 ;
 720   2                      Ram_cs = 0 ;
 721   2                      for(i=0;i<32;i++)temp[i]=w[i+32];
 722   2      
 723   2                      Ram_cs = 1 ;
 724   2                      lcd_a0 = 0 ;
 725   2                      lcd_wr = 1 ;
 726   2                      pinpu(temp,32,32*2+25) ;
 727   2      
 728   2          }
 729   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   4289    ----
   CONSTANT SIZE    =    794    ----
   XDATA SIZE       =   1792    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      93
C51 COMPILER V7.06   DSO_FFT                                                               02/25/2007 18:04:19 PAGE 13  

   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -