📄 rtc_dsp.lst
字号:
647 2 case 0x01://当前时间+":"
648 2 DspBuf[0] |= 0x28;//"时间"+P7
649 2 DspBuf[1] |= 0x80;//P8
650 2 DspBuf[4] |= 0x10;//P4
651 2 DspBuf[6] |= 0x10;//P2
652 2
653 2 if(Fee1==1)
654 2 {
655 3 if(Fee0==1) DspBuf[1] |= 0x40; //显示谷
656 3 else DspBuf[0] |= 0x04; //显示平
657 3 }
658 2 else DspBuf[1] |= 0x10; //显示峰
659 2 break;
660 2
661 2 case 0x05:
662 2 if(DspPage==0)
663 2 {
664 3 DspBuf[1] |= 0x20;
665 3 DspBuf[2] |= 0x10;
666 3 }
667 2 break;
668 2
669 2 case 0x06:
670 2 if(DspPage==0)DspBuf[7] |= 0x10;
671 2 else
672 2 {
673 3 DspBuf[7] = 0x00;
674 3 DspBuf[6] = 0x00;
675 3
C51 COMPILER V7.50 RTC_DSP 04/13/2007 13:24:54 PAGE 12
676 3 i = Temp_Read();//读温度值
677 3
678 3 if(i&0x80)
679 3 {
680 4 DspBuf[6] = 0x02;//"-"
681 4 i = ~i+1;
682 4 }
683 3
684 3 DspBuf[5] = LcdCoding[i/10];
685 3 DspBuf[4] = LcdCoding[i%10];
686 3
687 3 //摄氏度符号
688 3 DspBuf[3] = 0xAA;//"0"
689 3 DspBuf[2] = 0x8D;//"C"
690 3 }
691 2 break;
692 2
693 2 default:
694 2 DspBuf[1] |= 0x09; //"电量"+"kW/h"
695 2
696 2 if(DspType==0) DspBuf[3] |= 0x10; //小数点
697 2 if(DspType==1&&DspPage==1) DspBuf[4] |= 0x10; //小数点
698 2
699 2 if(DspPtr>0x07) DspBuf[0] |= 0x02; //上月
700 2 if(DspPtr>0x0B) DspBuf[0] |= 0x42; //上上月
701 2
702 2 if( DspPtr==0x02||DspPtr==0x08||DspPtr==0x0C) DspBuf[0] |= 0x01; //总
703 2 else if(DspPtr==0x03||DspPtr==0x09||DspPtr==0x0D) DspBuf[1] |= 0x10; //峰
704 2 else if(DspPtr==0x0A||DspPtr==0x0E) DspBuf[0] |= 0x04; //平
705 2 else DspBuf[1] |= 0x40; //谷
706 2 break;
707 2 }
708 1
709 1 //满屏测试显示
710 1 if(DspPtr==16)
711 1 {
712 2 for(i=0x00;i<0x08;i++) DspBuf[i]=0xFF;
713 2 }
714 1
715 1 if(DspPtr==17)
716 1 {
717 2 ArrayInit(DspBuf,8);
718 2 DspBuf[7] = 0x8F;//"E"
719 2 DspBuf[6] = 0x6A;//"4"
720 2 }
721 1
722 1 Display(DspBuf); //输送显示数据
723 1 }
724
725
726
727
728 //**********************************************************
729 //读取显示控制数据
730 //**********************************************************
731 void DspPara_Read(void)
732 {
733 1 uchar Temp;
734 1
735 1 Addr[0] = 0xA0;
736 1 Addr[1] = 0xDC;
737 1 Len[1] = 0x04;
C51 COMPILER V7.50 RTC_DSP 04/13/2007 13:24:54 PAGE 13
738 1 do
739 1 {
740 2 ReadData(DspPara);
741 2 Temp = DspPara[0]+DspPara[1]+DspPara[2];//SumCHK(DspPara,3);
742 2 }while((DspPara[3]!=~Temp)&&(Addr[0]<=0xA4));
743 1
744 1 if(DspPara[3]!=~Temp) //显示数据默认值,必要时可以更改
745 1 {
746 2 DspTime = 0x10; //10秒,BCD码
747 2 DspCtrl2 = 0x00;
748 2 DspCtrl1 = 0x7F;
749 2 DspParaCHK = 0x70; //校验和反码
750 2 }
751 1
752 1 ErrorModify(0xA4,DspPara); //保存区数据恢复
753 1 }
754
755
756
757
758
759 //**********************************************************
760 // 名称:DateTerm
761 // 功能:校时期判断(25天判断)
762 // 说明:
763 //**********************************************************
764 bit DateTerm(void)
765 {
766 1 uchar Temp;
767 1 uchar DataTime[5];
768 1
769 1 if(Prog_Flag==1)return(1);
770 1 else
771 1 {
772 2 Addr[0] = 0xA2;//读取上次较时时间
773 2 Addr[1] = 0xF8;
774 2 Len[1] = 0x05;
775 2 do
776 2 {
777 3 ReadData(DataTime);
778 3 Temp = SumCHK(DataTime,4);
779 3 } while((Temp!=DataTime[4])&&(Addr[0]<=0xA6));
780 2
781 2 if(Temp!=DataTime[4])
782 2 {
783 3 DataTime[0] = 0x00; //分
784 3 DataTime[1] = 0x00; //时
785 3 DataTime[2] = 0x01; //日
786 3 DataTime[3] = 0x01; //月
787 3 }
788 2
789 2 //============================================
790 2 //月判断
791 2 //============================================
792 2 Temp = BCD2HEX(Month); //当前月份
793 2 DataTime[3] = BCD2HEX(DataTime[3]); //上次校时月份
794 2
795 2 if(Temp<DataTime[3]) Temp += 12; //跨年
796 2 DataTime[4] = Temp-DataTime[3];
797 2
798 2 if(DataTime[4]>1) return(1); //相隔两个月,满足校表日期条件
799 2 else
C51 COMPILER V7.50 RTC_DSP 04/13/2007 13:24:54 PAGE 14
800 2 {
801 3 //========================================
802 3 //日判断
803 3 //========================================
804 3 Temp = BCD2HEX(Day); //当前日期
805 3 DataTime[2] = BCD2HEX(DataTime[2]); //上次校时日期
806 3
807 3 if(DataTime[4]==1)
808 3 {
809 4 if( DataTime[3]==2 ) //上次校时月份
810 4 {
811 5 if((BCD2HEX(Year)%0x04)==0x00) Temp += 29;//闰月判断,百年问题不考虑
812 5 else Temp += 28;
813 5 }
814 4 else if(DataTime[3]==4||DataTime[3]==6||DataTime[3]==9||DataTime[3]==11) Temp += 30;
815 4
816 4 else Temp += 31;
817 4 }
818 3
819 3 if(Temp>DataTime[2])
820 3 {
821 4 Temp -= DataTime[2];
822 4
823 4 //校时限制天数(25天)判断
824 4 if(Temp>DateErrorTerm) return(1);
825 4 else if(Temp==DateErrorTerm)//天数相等
826 4 {
827 5 //小时、分比较
828 5 if((Hour>DataTime[1])||((Hour==DataTime[1])&&(Min>=DataTime[0])))return(1);
829 5 else return(0);
830 5 }
831 4 else return(0);
832 4 }
833 3 else return(0);
834 3 }
835 2 }
836 1 }
837
838
839
840
841 //**********************************************************
842 // 名称:Ery_Balance
843 // 功能:电量结算
844 // 说明:
845 //**********************************************************
846 void Ery_Balance(void)
847 {
848 1 uchar Temp;
849 1 uchar TMonth[2];
850 1 uchar TBalance[3];
851 1
852 1 ES = 0;
853 1 TR0 = 0; //关闭超时监控定时器
854 1
855 1 CommTimer = 0x00;
856 1 ComPtr = 0x00;
857 1
858 1 //读取上次结算月份
859 1 Addr[0] = 0xA2;
860 1 Addr[1] = 0xCC;
861 1 Len[1] = 0x02;
C51 COMPILER V7.50 RTC_DSP 04/13/2007 13:24:54 PAGE 15
862 1 do
863 1 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -