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

📄 mainc.lst

📁 基于F020单片机的简易音频信号分析仪的实现keil程序(C实现)。2007年9月全国大学生电子设计竞赛题目(获得省2等奖)所有要求功能都实现。希望对感兴趣的朋友有帮助!
💻 LST
📖 第 1 页 / 共 3 页
字号:
 452   5                              if(dd==1)//按下失真度键处理
 453   5                                      {
 454   6                                      P_Sum=0;
 455   6                                      sum_temp=0;
 456   6                                  MM=0;
 457   6                      NN=0;
 458   6                      for(i=0;i<hh;i++) 
 459   6                                              MM=MAXIMUM(MM,data_MaxPow[i]);
 460   6                      for(i=0;i<hh;i++)  
 461   6                             if(data_MaxPow[i]==MM)
 462   6                                NN=i;
 463   6      
 464   6                              for(i=0;i<Number/2;i++)
 465   6                                 P_Sum=P_Sum+ram_v_m[i];//求整个频谱上所有功率
 466   6                         
 467   6                              for(i=0;i<10;i++)
 468   6                                                 sum_temp= sum_temp+ram_v_m[index_Maxf[NN]+i];
 469   6                              for(i=0;i<10;i++)
 470   6                                                 sum_temp= sum_temp+ram_v_m[index_Maxf[NN]-i-1];//求单个频点周围功率
 471   6                              n_Szd=(P_Sum-sum_temp)/P_Sum;//计算失真度
 472   6                                      n_Szd=sqrt(n_Szd)*100;                          
 473   6                                      }
 474   5                              /////////求频谱分量功率////////////////////
 475   5                              sum_temp=0;     
 476   5                                      for(i=0;i<Number/2;i++) 
 477   5                                              sum_temp=sum_temp+ram_v_m[i];//得到频谱功率总和
 478   5                      for(i=0;i<Number/2;i++) 
 479   5                                              ram_v_I[i]=PP/sum_temp*ram_v_m[i];
 480   5                      /////////频谱处理:归一化,供LCD显示频谱////////////////////
 481   5                                      sum_temp=0;     
 482   5                                      for(i=0;i<Number/2;i++) 
 483   5                                              sum_temp=MAXIMUM(sum_temp,ram_v_m[i]);
 484   5                      for(i=0;i<Number/2;i++) 
 485   5                                              ram_v_m[i]=ram_v_m[i]/sum_temp*64;
 486   5      
 487   5      ////////////////////////////////////////////////////////////
C51 COMPILER V7.06   MAINC                                                                 09/06/2007 21:49:07 PAGE 9   

 488   5                   for(i=0;i<hh;i++)
 489   5                      { 
 490   6                                         sum_temp=0;                         
 491   6                                            for(k=0;k<hh;k++)
 492   6                                             if(sum_temp<P_Sub[k])
 493   6                                                 {
 494   7                                                   abc=k;                               
 495   7                                                   sum_temp=P_Sub[k]; 
 496   7                                                  }
 497   6                            abcd[i]= data_Maxf[abc];
 498   6      
 499   6                           aaa[i]=sum_temp;
 500   6                           P_Sub[abc]=0;
 501   6                      }
 502   5                      for(i=0;i<hh;i++)  
 503   5                                  {
 504   6                                         P_Sub[i]=aaa[i];
 505   6                         data_Maxf[i]=abcd[i];
 506   6                                      }  
 507   5                              
 508   5                              //2. 调用数据处理和显示部分  如:
 509   5                              //但如果运行完的时间小于5MS则加延时使其达5MS
 510   5                       for(v=0;v<3;v++)
 511   5                                  for(k=0;k<5;k++){
 512   6                              lcd_disp_text(3+k,4+v,0);
 513   6                                       }
 514   5                           for(v=0;v<3;v++)
 515   5                                  for(k=0;k<3;k++){
 516   6                              lcd_disp_text(11+k,4+v,0);
 517   6                                       }
 518   5                          dealdata(PP,1,3); //LCD显示总功率
 519   5                          dealdata(data_Maxf[0],2,2); //LCD显示频点
 520   5                          dealdata(data_Maxf[1],3,2); //LCD显示频点
 521   5                      dealdata(P_Sub[0],2,3); //LCD显示频点1功率分量
 522   5                          dealdata(P_Sub[1],3,3); //LCD显示频点2功率分量
 523   5      
 524   5                              if(dd==1){
 525   6                          lcd_disp1616(0,32,8); lcd_disp1616(2,32,9); lcd_disp1616(4,32,10);
 526   6                            lcd_disp1608(6,32,9); dealdata(n_Szd,5,3);
 527   6                     }       //LCD显示失真度 
 528   5      
 529   5                   if(key_flag == 1) n=0;
 530   5              }
 531   4        } 
 532   3      ////////////////////////////////////////////////////////////////////
 533   3              else  if(key_value==0x0f) n=0;         //暂停
 534   3      ///////////////////////////////////////////////////////////////////
 535   3                  else if(key_value==0x00){          //显示频谱
 536   4                                      lcd_initial();                          //液晶初始化
 537   4                                      lcd_clear_ram();
 538   4      
 539   4                                   for(i=0;i<128;i++)
 540   4                         for(j=0;j<=ram_v_m[i];j++){                  
 541   5                               showdot(i,j);
 542   5                                }
 543   4                }
 544   3      ////////////////////////////////////////////////////////////////////
 545   3              else if(key_value==0x01){   //左移
 546   4                     p++;
 547   4                    if(p<=24){
 548   5                          lcd_initial();                              //液晶初始化
 549   5                      lcd_clear_ram();  
C51 COMPILER V7.06   MAINC                                                                 09/06/2007 21:49:07 PAGE 10  

 550   5                          for(i=0;i<128;i++)
 551   5                    for(j=0;j<=ram_v_m[i+p*16];j++){                  
 552   6                     showdot(i,j);
 553   6                   }
 554   5                 m=128+p*16;
 555   5                         }
 556   4                  }
 557   3      ////////////////////////////////////////////////////////
 558   3                  else if(key_value==0x02){         //右移               
 559   4                     r++;
 560   4                     if(p>=0){
 561   5                           lcd_initial();                             //液晶初始化
 562   5                       lcd_clear_ram();  
 563   5                            for(i=0;i<128;i++)
 564   5                     for(j=0;j<=ram_v_m[m-r*16];j++){                  
 565   6                               showdot(i,j);
 566   6                            }
 567   5                              }
 568   4              }
 569   3       //////////////////////////////////////////////////////////       
 570   3      
 571   3              else if(key_value==0x0e){        //回放显示 
 572   4      
 573   4                      lcd_initial();                          //液晶初始化
 574   4                  lcd_clear_ram();
 575   4            
 576   4                        for(i=0;i<4;i++){
 577   5                      lcd_disp_string(0,i*2,"f   :",5);dealdata(data_Maxf[i],i*2,0); 
 578   5                     lcd_disp_text(1,i*2,i+0x10);
 579   5                      lcd_disp_string(0,i*2+1,"p   :",5);dealdata(P_Sub[i],i*2+1,1); 
 580   5                     lcd_disp_text(1,i*2+1,i+0x10);
 581   5                              }
 582   4                q=0;
 583   4                } 
 584   3      /////////////////////////////////////////////////////////
 585   3                 else if(key_value==0x0d){          //下一屏
 586   4                          q++;
 587   4                          if(q<5){
 588   5                              lcd_initial();                          //液晶初始化
 589   5                          lcd_clear_ram();
 590   5                               for(i=0;i<4;i++){
 591   6                          lcd_disp_string(0,i*2,"f   :",5);dealdata(data_Maxf[i+q*4],i*2,0); 
 592   6              
 593   6                          if(i+q*4<10) lcd_disp_text(1,i*2,i+q*4+0x10);
 594   6              
 595   6                          else if(i+q*4<20 && i+q*4>=10) {
 596   7                                 lcd_disp_text(1,i*2,(i+q*4)/10+0x10);
 597   7                                 lcd_disp_text(2,i*2,(i+q*4)%10+0x10);
 598   7                           }
 599   6               
 600   6                          lcd_disp_string(0,i*2+1,"p   :",5);dealdata(P_Sub[i+q*4],i*2+1,1);
 601   6              
 602   6                          if(i+q*4<10) lcd_disp_text(1,i*2+1,i+q*4+0x10);
 603   6                          else if(i+q*4<20 && i+q*4>=10) {
 604   7                                 lcd_disp_text(1,i*2+1,(i+q*4)/10+0x10);
 605   7                                 lcd_disp_text(2,i*2+1,(i+q*4)%10+0x10);
 606   7                           }
 607   6                                      }
 608   5                        }
 609   4               else if(q>=5){
 610   5                  lcd_initial();                              //液晶初始化
 611   5                      lcd_clear_ram();
C51 COMPILER V7.06   MAINC                                                                 09/06/2007 21:49:07 PAGE 11  

 612   5                  lcd_disp1616(2,32,5);
 613   5                  lcd_disp1616(4,32,6);///显示已完毕
 614   5                  lcd_disp1616(6,32,7);
 615   5                }
 616   4              }
 617   3      //////////////////////////////////////
 618   3            else if(key_value==0x07) {            //判断周期性
 619   4      
 620   4                      if(ff==1){Number=256;index_Number=8;}
 621   4                                      else   {Number=1024;index_Number=10;}
 622   4                              AMX0SL =P2&0x07;
 623   4                          for(i=0;i< Number;i++){                    
 624   5                                              AD0INT = 0;                     //AD中断标志清0
 625   5                                              AD0BUSY = 1;            //启动AD
 626   5                                              while(AD0INT ==0);      //等待转换完毕
 627   5                                              adresult[i] = ADC0H * 0X100 + ADC0L;
 628   5                          for(j=0;j<12;j++) ;                     
 629   5                        }
 630   4           
 631   4                                      for(i=0;i<Number;i++)                   
 632   4                                              ram_v_m[i]=adresult[i];
 633   4                                      sum_temp=0;
 634   4                                      for(i=0;i<Number;i++) 
 635   4                                              sum_temp=sum_temp+ram_v_m[i]/Number; //求平均
 636   4                                      for(i=0;i<Number;i++) 
 637   4                                  ram_v_m[i]=ram_v_m[i]-sum_temp;//降低直流电流
 638   4                                      sum_temp=0;
 639   4                                      for(i=0;i<Number;i++) 
 640   4                                              sum_temp=MAXIMUM(sum_temp,abs(ram_v_m[i]));//求最大值                   
 641   4                                      for(i=0;i<Number;i++) 
 642   4                                              ram_v_m[i]=ram_v_m[i]/sum_temp;  //数据归一化
 643   4                                      //////////周期性判断//////////////////          
 644   4                                  Time=zqpd(ram_v_m);               
 645   4                              lcd_initial();                          //液晶初始化
 646   4                              lcd_clear_ram();
 647   4      
 648   4                          if(Time==0){
 649   5                                  lcd_disp1616(0,0,13);lcd_disp1616(2,0,11);lcd_disp1616(4,0,12);
 650   5                                }
 651   4                              else if(Time!=0){
 652   5                                  lcd_disp1616(0,0,11);lcd_disp1616(2,0,12);//显示周期Time数值
 653   5                                      lcd_disp_string(5,0,":",1);
 654   5                                      dealdata(Time,2,1);
 655   5                                }     
 656   4                                        
 657   4                      }
 658   3      
 659   3            }
 660   2         }
 661   1      }
*** WARNING C280 IN LINE 301 OF MAINC.C: 'zq_Flag': unreferenced local variable
 662          
 663          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =  21360    ----
   CONSTANT SIZE    =   1951    ----
   XDATA SIZE       =  32597    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
C51 COMPILER V7.06   MAINC                                                                 09/06/2007 21:49:07 PAGE 12  

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


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

⌨️ 快捷键说明

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