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

📄 opm-main.lst

📁 用C8051F060开发的光功率计 由C51编写的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 333   1              {
 334   2                      ShowPage3[i] = BS_Pape[i];
 335   2                      ip ++;
 336   2              }
 337   1              for (i = 0;i < 256;i ++)
 338   1              {
 339   2                      ShowPage4[i] = BS_Pape[i + 256];
 340   2              }
 341   1              for (i = 0;i < 256;i ++)
 342   1              {
 343   2                      ShowPage1[i] = BS_Pape[i + 512];
 344   2              }
 345   1              for (i = 0;i < 256;i ++)
 346   1              {
 347   2                      ShowPage2[i] = BS_Pape[i + 768];
 348   2              }
 349   1      
 350   1              for (i = 0;i < 256;i ++)
 351   1              {
 352   2                      ShowPage7[i] = Meter_Pape[i];
 353   2                      ip ++;
 354   2              }
 355   1              for (i = 0;i < 256;i ++)
 356   1              {
 357   2                      ShowPage8[i] = Meter_Pape[i + 256];
 358   2              }
 359   1              for (i = 0;i < 256;i ++)
 360   1              {
 361   2                      ShowPage5[i] = Meter_Pape[i + 512];
 362   2              }
 363   1              for (i = 0;i < 256;i ++)
 364   1              {
 365   2                      ShowPage6[i] = Meter_Pape[i + 768];
C51 COMPILER V7.07   OPM_MAIN                                                              09/11/2008 15:25:32 PAGE 7   

 366   2              }
 367   1      
 368   1              LCD_Command(0x3f);
 369   1              LCD_Command(0xc0);
 370   1      
 371   1              LCD_DataRefurbish1();
 372   1      
 373   1      
 374   1      }
 375          /*------------------------------------LCD单字符定位更换*/
 376          LCD_number_Refurbish(uchar P,uchar x,uchar DD)
 377          {
 378   1              uchar i;
 379   1      
 380   1              DD = DD + 0x10;
 381   1      
 382   1              switch (P)      
 383   1              {
 384   2                      case 5 : {
 385   3                              for (i = 0;i < 8;i ++)
 386   3                              {
 387   4                                      ShowPage5[x + i] = Asc_Z[(DD * 8) + i];
 388   4                              }
 389   3                      }; break;
 390   2                      case 6 : {
 391   3                              for (i = 0;i < 8;i ++)
 392   3                              {
 393   4                                      ShowPage6[x + i] = Asc_Z[(DD * 8) + i];
 394   4                              }
 395   3                      }; break;
 396   2                      case 7 : {
 397   3                              for (i = 0;i < 8;i ++)
 398   3                              {
 399   4                                      ShowPage7[x + i] = Asc_Z[(DD * 8) + i];
 400   4                              }
 401   3                      }; break;
 402   2                      case 8 : {
 403   3                              for (i = 0;i < 8;i ++)
 404   3                              {
 405   4                                      ShowPage8[x + i] = Asc_Z[(DD * 8) + i];
 406   4                              }
 407   3                      }; break;
 408   2                      default: ; break;
 409   2              }
 410   1      
 411   1      }
 412          
 413          
 414          
 415          /*==========================================系统中断处理*/
 416          
 417          /*====================================显示刷新延时*****/
 418          Refurbish_LCD(void) interrupt 1 
 419          {               
 420   1              TT --;
 421   1              if (TT == 0)
 422   1              {
 423   2                      Instrument = 0;
 424   2                      TT = 500;
 425   2              }
 426   1      }
 427          
C51 COMPILER V7.07   OPM_MAIN                                                              09/11/2008 15:25:32 PAGE 8   

 428          /*====================================URAT0*****/
 429          URAT_PC(void) interrupt 4 
 430          {               
 431   1          SFRPAGE   = UART0_PAGE;
 432   1              if (RI0 == 1)                                                   //接收中断到
 433   1              {
 434   2                      RI0 = 0;
 435   2                      Command = SBUF0;
 436   2                      DataCapture = 0;
 437   2              }
 438   1      }
 439          
 440          /*======================================================*/
 441          
 442          void main ()
 443          {
 444   1              Init_Device();
 445   1      
 446   1              P0 = 0xff;
 447   1              P1 = 0xff;
 448   1              P2 = 0xff;
 449   1      
 450   1              LCD_initialize();
 451   1              RDflash();
 452   1      
 453   1              REN0 = 1;
 454   1              ES0 = 1;
 455   1              EA = 1;
 456   1      
 457   1              TR0 = 1;
 458   1              ET0 = 1;
 459   1      
 460   1          SFRPAGE   = ADC0_PAGE;                                      //首次采样(通道1-2)作为历史值
 461   1              AD0INT = 0;
 462   1              AD0BUSY = 1;
 463   1              while (AD0INT == 0);
 464   1              ADC0_M = ADC0H;
 465   1              ADC0_M = (ADC0_M << 8) + ADC0L;
 466   1      
 467   1          SFRPAGE   = ADC1_PAGE;
 468   1              AD1INT = 0;
 469   1              AD1BUSY = 1;
 470   1              while (AD1INT == 0);
 471   1              ADC1_M = ADC1H;
 472   1              ADC1_M = (ADC1_M << 8) + ADC1L;
 473   1      
 474   1              for (N = 0;N < 20;N ++)                                 //获得第一个数组(通道1-2)
 475   1              {
 476   2                  SFRPAGE   = ADC0_PAGE;
 477   2                      AD0INT = 0;
 478   2                      AD0BUSY = 1;
 479   2                      while (AD0INT == 0);
 480   2                      ADC0G[N] = ADC0H;
 481   2                      ADC0G[N] = (ADC0G[N] << 8) + ADC0L;
 482   2      
 483   2                  SFRPAGE   = ADC1_PAGE;
 484   2                      AD1INT = 0;
 485   2                      AD1BUSY = 1;
 486   2                      while (AD1INT == 0);
 487   2                      ADC1G[N] = ADC1H;
 488   2                      ADC1G[N] = (ADC1G[N] << 8) + ADC1L;
 489   2              }
C51 COMPILER V7.07   OPM_MAIN                                                              09/11/2008 15:25:32 PAGE 9   

 490   1      
 491   1      xxx:
 492   1      
 493   1      /*========================主循环体======================*/
 494   1      
 495   1      
 496   1              for (N = 0;N < 20;N ++)                                 //去除首位(数组左移挤出首部)
 497   1              {
 498   2                      ADC0G[N] = ADC0G[N + 1];
 499   2                      ADC1G[N] = ADC1G[N + 1];
 500   2              }
 501   1      
 502   1          SFRPAGE   = ADC0_PAGE;                                      //增补末位(实时采样加入数组尾部)
 503   1              AD0INT = 0;
 504   1              AD0BUSY = 1;
 505   1              while (AD0INT == 0);
 506   1              ADC0G[19] = ADC0H;
 507   1              ADC0G[19] = (ADC0G[19] << 8) + ADC0L;
 508   1      
 509   1          SFRPAGE   = ADC1_PAGE;
 510   1              AD1INT = 0;
 511   1              AD1BUSY = 1;
 512   1              while (AD1INT == 0);
 513   1              ADC1G[19] = ADC1H;
 514   1              ADC1G[19] = (ADC1G[19] << 8) + ADC1L;
 515   1      
 516   1              ADC0_S = 0;
 517   1              ADC1_S = 0;
 518   1      
 519   1              for (N = 0;N < 20;N ++)                                 //新数组求和;均值组求最大最小值
 520   1              {
 521   2                      ADC0_S = ADC0_S + ADC0G[N];
 522   2                      ADC1_S = ADC1_S + ADC1G[N];
 523   2              }
 524   1      
 525   1              ADC0_S = ADC0_S + ADC0_M;                               //加入历史项
 526   1              ADC1_S = ADC1_S + ADC1_M;
 527   1      
 528   1              ADC0_M = ADC0_S / 21;                                   //求滑动后的平均
 529   1              ADC1_M = ADC1_S / 21;
 530   1      
 531   1              if (Instrument == 0)
 532   1              {
 533   2                      Instrument = 1;
 534   2                      TR0 = 0;
 535   2      
 536   2                  SFRPAGE   = CONFIG_PAGE;
 537   2      
 538   2                      ADC0_F = (ADC0_M * Vref) / 65536;                       //转换为实际测量电压值
 539   2                      ADC0_F = ((ADC0_F -1.4) * 50) + 0.0005 - 0.2;           //转换为dBm值
 540   2      
 541   2                      ADC1_F = (ADC1_M * Vref) / 65536;
 542   2                      ADC1_F = ((ADC1_F -1.4) * 50) + 0.0005 + 0.84;
 543   2      
 544   2                      ADC0_M1 = ADC0_M2;
 545   2                      ADC0_M2 = ADC0_F;
 546   2                      ADC1_M1 = ADC1_M2;
 547   2                      ADC1_M2 = ADC1_F;
 548   2      
 549   2                      ADC0_MP = fabs(ADC0_M1 - ADC0_M2) + 0.0005;
 550   2                      ADC1_MP = fabs(ADC1_M1 - ADC1_M2) + 0.0005;
 551   2      
C51 COMPILER V7.07   OPM_MAIN                                                              09/11/2008 15:25:32 PAGE 10  

 552   2                      if (ADC0_F >= 0)
 553   2                      {
 554   3                              LCD_number_Refurbish(7,168,'+'-0x30);
 555   3                      }
 556   2                      else if (ADC0_F < 0)
 557   2                      {
 558   3                              LCD_number_Refurbish(7,168,'-'-0x30);
 559   3                              ADC0_F = ADC0_F * -1;
 560   3                      }
 561   2      
 562   2                      FloatDec = modf(ADC0_F, ip);                            //分离出浮点数小数部分
 563   2                      F_Dec = FloatDec * 1000;                                        //取出小数部分,转换为整数
 564   2                      F_Int = ADC0_F;                                                         //取出整数部分
 565   2      
 566   2                      Hex_Asc(F_Int);
 567   2                      LCD_number_Refurbish(7,176,Bcd[4]);
 568   2                      LCD_number_Refurbish(7,184,Bcd[5]);
 569   2                      Hex_Asc(F_Dec);
 570   2                      LCD_number_Refurbish(5,136,Bcd[3]);
 571   2                      LCD_number_Refurbish(5,144,Bcd[4]);
 572   2                      LCD_number_Refurbish(5,152,Bcd[5]);
 573   2      
 574   2                      FloatDec = modf(ADC0_MP, ip);
 575   2                      F_Dec = (FloatDec + 0.0005) * 1000;
 576   2                      F_Int = ADC0_MP;        
 577   2      
 578   2                      Hex_Asc(F_Int);
 579   2                      LCD_number_Refurbish(7,240,Bcd[4]);
 580   2                      LCD_number_Refurbish(7,248,Bcd[5]);
 581   2                      Hex_Asc(F_Dec);
 582   2                      LCD_number_Refurbish(5,200,Bcd[3]);
 583   2                      LCD_number_Refurbish(5,208,Bcd[4]);
 584   2                      LCD_number_Refurbish(5,216,Bcd[5]);
 585   2      
 586   2                      if (ADC1_F >= 0 )
 587   2                      {
 588   3                              LCD_number_Refurbish(8,104,'+'-0x30);
 589   3                      }
 590   2                      else if (ADC1_F < 0)
 591   2                      {
 592   3                              LCD_number_Refurbish(8,104,'-'-0x30);
 593   3                              ADC1_F = ADC1_F * -1;
 594   3                      }
 595   2      
 596   2                      FloatDec = modf(ADC1_F, ip);
 597   2                      F_Dec = FloatDec * 1000;
 598   2                      F_Int = ADC1_F; 
 599   2      
 600   2                      Hex_Asc(F_Int);
 601   2                      LCD_number_Refurbish(8,112,Bcd[4]);
 602   2                      LCD_number_Refurbish(8,120,Bcd[5]);
 603   2                      Hex_Asc(F_Dec);
 604   2                      LCD_number_Refurbish(6,72,Bcd[3]);
 605   2                      LCD_number_Refurbish(6,80,Bcd[4]);
 606   2                      LCD_number_Refurbish(6,88,Bcd[5]);
 607   2      
 608   2                      FloatDec = modf(ADC1_MP, ip);
 609   2                      F_Dec = (FloatDec + 0.0005) * 1000;
 610   2                      F_Int = ADC1_MP;        
 611   2      
 612   2                      Hex_Asc(F_Int);
 613   2                      LCD_number_Refurbish(8,176,Bcd[4]);
C51 COMPILER V7.07   OPM_MAIN                                                              09/11/2008 15:25:32 PAGE 11  

 614   2                      LCD_number_Refurbish(8,184,Bcd[5]);
 615   2                      Hex_Asc(F_Dec);
 616   2                      LCD_number_Refurbish(6,136,Bcd[3]);
 617   2                      LCD_number_Refurbish(6,144,Bcd[4]);
 618   2                      LCD_number_Refurbish(6,152,Bcd[5]);
 619   2      
 620   2                      LCD_DataRefurbish2();
 621   2                      TR0 = 1;
 622   2              }
 623   1              else if (DataCapture == 0)
 624   1              {
 625   2                      if (Command == 's')
 626   2                      {
 627   3                              Data_PC(ADC0_M,ADC1_M);
 628   3                              Command = 0;
 629   3                      }
 630   2                      else if (Command == 'c')
 631   2                      {
 632   3                              Data_PC(ADC0_M,ADC1_M);
 633   3                      }
 634   2                      else if (Command == 'r')
 635   2                      {
 636   3                              ;
 637   3                      }
 638   2                      else if (Command != 'w')
 639   2                      {
 640   3                              uchar i;
 641   3      
 642   3                              for (i = 0;i < 16;i ++)
 643   3                                      HoldData[i] = 0;
 644   3      
 645   3                              WRflash();
 646   3                      }
 647   2                      else if (Command == 'w')
 648   2                      {
 649   3                              ;
 650   3                      }
 651   2              }
 652   1      
 653   1      /*======================================================*/
 654   1      
 655   1      goto xxx;
 656   1      
 657   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3002    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   2064    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       1
   IDATA SIZE       =    140    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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