📄 rtc_dsp.lst
字号:
428 4 {
429 5 if(DspCtrl1&0x40) i = 0x01;
430 5 }
431 4 else if(DspPtr==17) //电池偏低报警
432 4 {
433 5 if(Battery==1) i = 0x01;
434 5 }
435 4 else DspPtr = 0xFF;
436 4 }
437 3
438 3 } while(i==0x00);
439 2
440 2 if(DspPtr<8)
441 2 {
442 3 if((DspPtr>0x01)&&(DspPtr<0x05)) //当前总、峰、谷电量
443 3 {
444 4 Addr[0] = 0xA0;
445 4
446 4 if(DspPtr==0x02) //当前总电量
447 4 {
448 5 Addr[1] = 0xC1;
449 5 DspExch[0] = EryTmp[0];
450 5 }
451 4 else if(DspPtr==0x03) //当前峰电量
452 4 {
453 5 Addr[1] = 0xC5;
454 5 DspExch[0] = EryTmp[1];
455 5 }
456 4 else //当前谷电量
457 4 {
458 5 Addr[1] = 0xCD;
459 5 DspExch[0] = EryTmp[3];
460 5 }
461 4
462 4 Len[1] = 0x03;
463 4 ReadData(&DspExch[1]); //读取电量整数数据
464 4 }
465 3
466 3 if(DspPtr==0x05) //局编号处理
467 3 {
468 4 //ID检查
469 4 Addr[0] = 0xA0;
470 4 Addr[1] = 0xF0;
471 4 Len[1] = 0x07;
472 4 do
473 4 {
474 5 ReadData(DspBuf);
475 5 i = SumCHK(DspBuf,6);
476 5 }while((i!=DspBuf[6])&&(Addr[0]<=0xA4));
477 4
478 4 if( i!=DspBuf[6] ) ArrayInit(DspBuf,8); //局号默认为“000000000000”
479 4
480 4 ErrorModify(0xA4,DspBuf); //保存区数据重置
481 4
482 4 for(i=0;i<6;i++)DspExch[i] = DspBuf[i];//数据入显示交换区
483 4
484 4 ArrayInit(DspBuf,8);
485 4 }
486 3 }
487 2
488 2 else//显示指针>8
489 2 {
C51 COMPILER V7.50 RTC_DSP 04/13/2007 13:24:54 PAGE 9
490 3 if(DspPtr<16)
491 3 {
492 4 i = 0x00; //上月
493 4 if(DspPtr>11) i=0x01; //上上月
494 4 Addr[1] = LastMonthSN(i)*16+(DspPtr%4)*4; //子地址
495 4 Addr[0] = 0xA2;
496 4 Len[1] = 0x04;
497 4 ReadData(DspExch); //读取历史电量数据
498 4 }
499 3 }
500 2 }
501 1
502 1 //******************************
503 1 if(DspSec>=(DspTime>>1))DspPage = 1; //按无锡恒通要求改进
504 1 //******************************
505 1
506 1 if((DspPtr<0x02)||(DspPtr==0x05)||(DspPtr==0x06))
507 1 {
508 2 if(DspPtr==0x00) //当前日期显示
509 2 {
510 3 DspBuf[7] = Year;
511 3 DspBuf[5] = Month;
512 3 DspBuf[3] = Day;
513 3 }
514 2
515 2 else if(DspPtr==0x01) //当前时间显示
516 2 {
517 3 DspBuf[7] = Hour;
518 3 DspBuf[5] = Min;
519 3 DspBuf[3] = Sec;
520 3 }
521 2
522 2 else if(DspPtr==0x05) //电表局号显示
523 2 {
524 3 //电表局号高6位
525 3 DspBuf[7] = DspExch[5];
526 3 DspBuf[5] = DspExch[4];
527 3 DspBuf[3] = DspExch[3];
528 3
529 3 //电表局号低6位
530 3 if( DspPage==1 )
531 3 {
532 4 DspBuf[7] = DspExch[2];
533 4 DspBuf[5] = DspExch[1];
534 4 DspBuf[3] = DspExch[0];
535 4 }
536 3 }
537 2 else
538 2 {
539 3 if(DspPage==0)
540 3 {
541 4 if( Battery ==1 ) DspBuf[3] |= 0x01; //电池情况
542 4 if( Hardware==1 ) DspBuf[3] |= 0x10; //硬件情况
543 4 if( RsComm ==1 ) DspBuf[5] |= 0x01; //通讯情况
544 4 if( AdjTime ==1 ) DspBuf[5] |= 0x10; //时钟情况
545 4 if( AdjDate ==1 ) DspBuf[7] |= 0x01; //校时情况
546 4 DspBuf[7] |= 0xF0; //显示"F"=a+e+f+g
547 4 }
548 3 }
549 2
550 2 DspBuf[2] = DspBuf[3]&0x0F; //显示数据拆分
551 2 DspBuf[3] = DspBuf[3]>>4;
C51 COMPILER V7.50 RTC_DSP 04/13/2007 13:24:54 PAGE 10
552 2
553 2 DspBuf[4] = DspBuf[5]&0x0F;
554 2 DspBuf[5] = DspBuf[5]>>4;
555 2
556 2 DspBuf[6] = DspBuf[7]&0x0F;
557 2 DspBuf[7] = DspBuf[7]>>4;
558 2 }
559 1
560 1 else
561 1 {
562 2 if(DspType==0) //5位整数+1位小数
563 2 {
564 3 //十万位不处理
565 3 DspBuf[7] = DspExch[3]&0x0F; //万位
566 3
567 3 DspBuf[6] = DspExch[2]>>4; //千位
568 3 DspBuf[5] = DspExch[2]&0x0F; //百位
569 3
570 3 DspBuf[4] = DspExch[1]>>4; //十位
571 3 DspBuf[3] = DspExch[1]&0x0F; //个位
572 3
573 3 DspBuf[2] = DspExch[0]>>4; //小数位
574 3 }
575 2
576 2 else //先显示整数,再显示小数
577 2 {
578 3 if((DspPtr>0x01)&&(DspPtr<0x05))
579 3 {
580 4 i = DspExch[0];
581 4
582 4 if(DspPtr==0x02) DspExch[0] = EryTmp[0]; //当前总电量小数
583 4
584 4 else if(DspPtr==0x03) DspExch[0] = EryTmp[1]; //当前峰电量小数
585 4
586 4 else DspExch[0] = EryTmp[3]; //当前谷电量小数
587 4
588 4 if((i!=DspExch[0])&&(DspExch[0]==0x00)) //小数进位
589 4 BCDINC(&DspExch[1],3,1);
590 4 }
591 3
592 3 DspBuf[3] = DspExch[0]; //显示小数(默认显示小数屏)
593 3 if(DspPage==0) //显示整数
594 3 {
595 4 DspBuf[7] = DspExch[3];
596 4 DspBuf[5] = DspExch[2];
597 4 DspBuf[3] = DspExch[1];
598 4 }
599 3
600 3 DspBuf[2] = DspBuf[3]&0x0F; //显示数据拆分
601 3 DspBuf[3] = DspBuf[3]>>4;
602 3
603 3 DspBuf[4] = DspBuf[5]&0x0F;
604 3 DspBuf[5] = DspBuf[5]>>4;
605 3
606 3 DspBuf[6] = DspBuf[7]&0x0F;
607 3 DspBuf[7] = DspBuf[7]>>4;
608 3 }
609 2 /*
610 2 if(DspBuf[7]==0x00) //前导"0"处理
611 2 {
612 2 DspBuf[7]=0x10;
613 2 if(DspBuf[6]==0x00)
C51 COMPILER V7.50 RTC_DSP 04/13/2007 13:24:54 PAGE 11
614 2 {
615 2 DspBuf[6]=0x10;
616 2 if(DspBuf[5]==0x00)
617 2 {
618 2 DspBuf[5]=0x10;
619 2 if(DspBuf[4]==0x00) DspBuf[4]=0x10;
620 2 }
621 2 }
622 2 }
623 2 */
624 2 //if((DspType==1)&&(DspPage==0)&&(DspBuf[4]==0x10)&&(DspBuf[3]==0x00))DspBuf[3]=0x10;
625 2 if((DspType==1)&&(DspPage==0)) //整数页处理
626 2 {
627 3 if((DspBuf[4]==0x10)&&(DspBuf[3]==0x00))DspBuf[3]=0x10;
628 3 }
629 2
630 2 }
631 1
632 1 for(i=2;i<8;i++) DspBuf[i] = LcdCoding[DspBuf[i]]; //显示编码转换
633 1
634 1 if( EryRev==1) DspBuf[1] |= 0x02; //反向状态显示
635 1
636 1 //LCD"通讯"标志显示
637 1 if(CommSec>CommLCDTime) DspBuf[1] |= 0x04; //通讯状态显示
638 1
639 1 switch(DspPtr)
640 1 {
641 2 case 0x00://当前日期
642 2 DspBuf[0] |= 0x80; //"日期"
643 2 DspBuf[4] |= 0x10;
644 2 DspBuf[6] |= 0x10;
645 2 break;
646 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -