📄 opm-main.lst
字号:
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 + -