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

📄 108.lst

📁 PIC16F876单片机,有4到20MA电流输出,低功耗等特点,使用于工业仪表行业
💻 LST
📖 第 1 页 / 共 4 页
字号:
   635:         K6=da_ee[9]+c+b+a+d;clrwdt();
   636: 
   637:         
   638:         for(i=0;i<6;i++)
   639:         {da_ee[i]=eeprom_read(183-i);clrwdt();}
   640:         d=da_ee[0]*1000;clrwdt();
   641:         e=da_ee[1]*100;clrwdt();
   642:         d=(d+e)*100;
   643:         a=da_ee[2]*1000;clrwdt();
   644:         b=da_ee[3]*100;clrwdt();
   645:         c=da_ee[4]*10;clrwdt();
   646:         Qfull=da_ee[5]+c+b+a+d;clrwdt();
   647:         }
   648: 
   649: void Caculate_pre()
   650:         {
   651:         x2=TMR1H;
   652:         x2<<=8;         clrwdt();
   653:         x2+=TMR1L;   
   654:         
   655:                 fr=x2-x1;
   656:                 clrwdt();  
   657:         }
   658:         
   659: void Caculate(){
   660:                 int b,c;
   661:                 float d;
   662:         x1=x2;
   663:         if(fr>60000)                            //实验证明有跳变,60000为实验数据,限制脉冲跳变
   664:         {fr=frqian;}
   665:         frqian=fr;
   666: if(K1==0)
   667:         {
   668:         Q2=fr;
   669:         Q3INT+=fr;
   670:         disp_buf[12]=0x0e;
   671:         }
   672: else
   673:         {
   674:         disp_buf[12]=0x01;
   675:         
   676: 
   677:         if(fr<=F1)
   678:                 {K=K1;nop();clrwdt();}  //按降序排列列{Q1=Q1*3600/K3;}  clrwdt();
   679:         else if(fr<=F2)
   680:                 {//K=((K2-K1)*(fr-F1)/(F2-F1)+K1);
   681:         //      a=K2-K1;        nop();
   682:                 b=F2-F1;        clrwdt();
   683:                 c=fr-F1;        nop();
   684:                 clrwdt(); //
   685:                 d=(K2-K1)*c/b;  nop();
   686:                 clrwdt(); //
   687:                 K=d+K1; nop();clrwdt();
   688:                 }
   689:         else if(fr<=F3)
   690:                 {//K=((K3-K2)*(fr-F2)/(F3-F2)+K2);
   691:         //      a=K3-K2;        nop();
   692:                 b=F3-F2;        clrwdt();
   693:                 c=fr-F2;        nop();
   694:                 clrwdt(); //
   695:                 d=(K3-K2)*c/b;  nop();
   696:                 clrwdt(); //
   697:                 K=d+K2; nop();clrwdt();
   698:                 }
   699:         else if(fr<=F4)
   700:                 {//K=((K4-K3)*(fr-F3)/(F4-F3)+K3);
   701:         //      a=K4-K3;        nop();
   702:                 b=F4-F3;        clrwdt();
   703:                 c=fr-F3;        nop();
   704:                 clrwdt(); //
   705:                 d=(K4-K3)*c/b;  nop();
   706:                 clrwdt(); //
   707:                 K=d+K3; nop();clrwdt();
   708:                 }       
   709:         else if(fr<=F5)
   710:                 {//K=((K5-K4)*(fr-F4)/(F5-F4)+K4);
   711:         //      a=K5-K4;        nop();
   712:                 b=F5-F4;        clrwdt();
   713:                 c=fr-F4;        nop();
   714:                 clrwdt(); //
   715:                 d=(K5-K4)*c/b;  nop();
   716:                 clrwdt(); //
   717:                 K=d+K4; nop();clrwdt();
   718:                 }
   719:         else if(fr<=F6)
   720:                 {//K=((K6-K5)*(fr-F5)/(F6-F5)+K5);
   721:         //      a=K6-K5;        nop();
   722:                 b=F6-F5;        clrwdt();
   723:                 c=fr-F5;        nop();
   724:                 clrwdt(); //
   725:                 d=(K6-K5)*c/b;  nop();
   726:                 clrwdt(); //
   727:                 K=d+K5; nop();clrwdt();
   728:                 }
   729:         else 
   730:                 {
   731:                 K=K6;   nop();clrwdt();
   732:                 }
   733:         
   734:         if(F2==0||K2==0)
   735:                 {K=K1;}
   736:         else if(F3==0&&fr>F2)
   737:                 {K=K2;}
   738:         
   739:         if(set1==3&&fr>F3&&F3!=0)
   740:         {K=K3;} 
   741:         if(set1==4&&fr>F4&&F4!=0)
   742:         {K=K4;} 
   743:         if(set1==5&&fr>F5&&F5!=0)
   744:         {K=K5;} 
   745:         
   746: 
   747:         qqq=fr/K;       
   748:         Q2=3600*qqq;nop();clrwdt();
   749: 
   750:         Q3DEC+=qqq;     nop();  clrwdt();
   751:         }
   752: 
   753:         if(ti>5)
   754:         ti=1;
   755:         switch(ti)
   756:         {case 1:b0=Q2;
   757:                 break;
   758:         case 2:b1=Q2;
   759:                 break;
   760:         case 3:b2=Q2;
   761:                 break;
   762:         case 4:b3=Q2;
   763:                 break;
   764:         case 5:b4=Q2;
   765:                 break;
   766:         default:
   767:                 break;
   768:         }
   769:         Q1=b0+b1;clrwdt();
   770:         
   771:         Q1=Q1+b2;clrwdt();
   772:         Q1=Q1+b3;clrwdt();
   773:         Q1=Q1+b4;clrwdt();
   774:         Q1=Q1/5;clrwdt();
   775:         Q2=Q1;
   776: //      Q2=b0+b1;
   777:         
   778:         if(Q3DEC>=1)
   779:                 {
   780:                 mm=Q3DEC;               clrwdt();
   781:                         Q3INT+=mm;
   782:                         Q3DEC-=mm;      clrwdt();
   783:                 }
   784: //      Q3INT=K;
   785:         }
   786: 
   787: void Dis_Buf()                          //写显示缓冲
   788:         {
   789:         if(Q2>=10000)
   790:                 {disp_buf[3]=19;        clrwdt();//超出10000,就显示9999.
   791:                 clrwdt();
   792:                 disp_buf[2]=9;
   793:                 clrwdt();
   794:                 disp_buf[1]=9;
   795:                 clrwdt();
   796:                 disp_buf[0]=9;
   797:                 }
   798:         else if(Q2>=1000)
   799:                 {Q2d=Q2;        clrwdt();       
   800:                 disp_buf[3]=Q2d%10;     clrwdt();//以下D~A语句置于if(flag_tmr0){中则不可以
   801:                 Q2d/=10;                clrwdt();
   802:                 disp_buf[2]=Q2d%10;
   803:                 Q2d/=10;                clrwdt();
   804:                 disp_buf[1]=Q2d%10;
   805:                 Q2d/=10;                clrwdt();
   806:                 disp_buf[0]=Q2d%10;
   807:                 }
   808:         else if(Q2>=100)        //瞬时值取各字符                
   809:                 {Q2d=Q2*10;     
   810:                 disp_buf[3]=Q2d%10;  clrwdt();//
   811:                 Q2d/=10;         clrwdt();
   812:                 disp_buf[2]=(Q2d%10)+10;//0显示字符且带小数点
   813:                 Q2d/=10;clrwdt();
   814:                 disp_buf[1]=Q2d%10;
   815:                 Q2d/=10;         clrwdt();
   816:                 disp_buf[0]=Q2d%10;
   817:                 }
   818:         else if(Q2>=10)                 
   819:                 {Q2d=Q2*100;    
   820:                 disp_buf[3]=Q2d%10;  clrwdt();//瞬时值取各字符
   821:                 Q2d/=10;         clrwdt();
   822:                 disp_buf[2]=Q2d%10;
   823:                 Q2d/=10;clrwdt();
   824:                 disp_buf[1]=(Q2d%10)+10;//0显示字符且带小数点
   825:                 Q2d/=10;         clrwdt();
   826:                 disp_buf[0]=Q2d%10;
   827:                 }                               
   828:         else
   829:                 {Q2d=Q2*1000;   clrwdt();
   830:                 disp_buf[3]=Q2d%10;     clrwdt();//以下D~A语句置于if(flag_tmr0){中则不可以
   831:                 Q2d/=10;                clrwdt();
   832:                 disp_buf[2]=Q2d%10;
   833:                 Q2d/=10;                clrwdt();
   834:                 disp_buf[1]=Q2d%10;
   835:                 Q2d/=10;                clrwdt();
   836:                 disp_buf[0]=(Q2d%10)+10;
   837:                 }
   838:                                                 //累计值取各字符,
   839:         if(Q3INT<100)
   840:                 {                               
   841:                 Q3nd=Q3DEC*1000000;
   842:                 disp_buf[11]=Q3nd%10;   clrwdt();               
   843:                 Q3nd/=10;                               
   844:                 disp_buf[10]=Q3nd%10;   clrwdt();
   845:                 Q3nd/=10;
   846:                 disp_buf[9]=Q3nd%10;    clrwdt();
   847:                 Q3nd/=10;       
   848:                 disp_buf[8]=Q3nd%10;    clrwdt();
   849:                 Q3nd/=10;
   850:                 disp_buf[7]=Q3nd%10;    clrwdt();
   851:                 Q3nd/=10;       
   852:                 disp_buf[6]=Q3nd%10;    clrwdt();
   853:                 Q3ud=Q3INT;
   854:                 disp_buf[5]=(Q3ud%10)+10;clrwdt();//正数第二位数字带小数点
   855:                 Q3ud/=10;       
   856:                 disp_buf[4]=Q3ud%10;
   857:                 clrwdt();
   858:                 }
   859:         else if(Q3INT<1000)
   860:                 {                               
   861:                 Q3nd=Q3DEC*100000;
   862:                 disp_buf[11]=Q3nd%10;   clrwdt();               
   863:                 Q3nd/=10;                               
   864:                 disp_buf[10]=Q3nd%10;   clrwdt();
   865:                 Q3nd/=10;
   866:                 disp_buf[9]=Q3nd%10;    clrwdt();
   867:                 Q3nd/=10;       
   868:                 disp_buf[8]=Q3nd%10;    clrwdt();
   869:                 Q3nd/=10;
   870:                 disp_buf[7]=Q3nd%10;    clrwdt();
   871:                 Q3ud=Q3INT;
   872:                 disp_buf[6]=(Q3ud%10)+10;       clrwdt();
   873:                 Q3ud/=10;
   874:                 disp_buf[5]=Q3ud%10;    clrwdt();//正数第三位数字带小数点
   875:                 Q3ud/=10;       
   876:                 disp_buf[4]=Q3ud%10;    
   877:                 clrwdt();
   878:                 }
   879:          else if(Q3INT<10000)
   880:                 {                               
   881:                 Q3nd=Q3DEC*10000;
   882:                 disp_buf[11]=Q3nd%10;   clrwdt();               
   883:                 Q3nd/=10;                               
   884:                 disp_buf[10]=Q3nd%10;   clrwdt();
   885:                 Q3nd/=10;
   886:                 disp_buf[9]=Q3nd%10;    clrwdt();
   887:                 Q3nd/=10;       
   888:                 disp_buf[8]=Q3nd%10;    clrwdt();
   889:                 Q3ud=Q3INT;
   890:                 disp_buf[7]=(Q3ud%10)+10;       clrwdt();
   891:                 Q3ud/=10;
   892:                 disp_buf[6]=Q3ud%10;    clrwdt();
   893:                 Q3ud/=10;
   894:                 disp_buf[5]=Q3ud%10;    clrwdt();//正数第四位数字带小数点
   895:                 Q3ud/=10;       
   896:                 disp_buf[4]=Q3ud%10;    
   897:                 clrwdt();
   898:                 }
   899:         else if(Q3INT<100000)
   900:                 {                       
   901:                 Q3nd=Q3DEC*1000;
   902:                 disp_buf[11]=Q3nd%10;   clrwdt();               
   903:                 Q3nd/=10;                               
   904:                 disp_buf[10]=Q3nd%10;   clrwdt();
   905:                 Q3nd/=10;
   906:                 disp_buf[9]=Q3nd%10;    clrwdt();
   907:                 Q3ud=Q3INT;     
   908:                 disp_buf[8]=(Q3ud%10)+10;       clrwdt();
   909:                 Q3ud/=10;
   910:                 disp_buf[7]=Q3ud%10;    clrwdt();
   911:                 Q3ud/=10;
   912:                 disp_buf[6]=Q3ud%10;    clrwdt();
   913:                 Q3ud/=10;
   914:                 disp_buf[5]=Q3ud%10;    clrwdt();//正数第五位数字带小数点
   915:                 Q3ud/=10;       
   916:                 disp_buf[4]=Q3ud%10;    
   917:                 clrwdt();
   918:                 }
   919:            else 
   920:                 {                       
   921:                 Q3nd=Q3DEC*100;
   922:                 disp_buf[11]=Q3nd%10;   clrwdt();               
   923:                 Q3nd/=10;                               
   924:                 disp_buf[10]=Q3nd%10;   clrwdt();
   925:                 Q3ud=Q3INT;
   926:                 disp_buf[9]=(Q3ud%10)+10;       clrwdt();
   927:                 Q3ud/=10;       
   928:                 disp_buf[8]=Q3ud%10;    clrwdt();
   929:                 Q3ud/=10;
   930:                 disp_buf[7]=Q3ud%10;    clrwdt();
   931:                 Q3ud/=10;
   932:                 disp_buf[6]=Q3ud%10;    clrwdt();
   933:                 Q3ud/=10;
   934:                 disp_buf[5]=Q3ud%10;    clrwdt();//正数第六位数字带小数点
   935:                 Q3ud/=10;       
   936:                 disp_buf[4]=Q3ud%10;    
   937:                 clrwdt();
   938:                 }                                       
   939:         }
   940:         
   941: void Caculate_Q3()                              //计算累计流量Q3,误差小,允许
   942:         {
   943:         Q3=Q3INT+Q3DEC;
   944: 
   945:         }               
   946: 
   947: void Read_Sum_flux()                    //读累计流量,问题是,只有运行一段时间才能读的出来
   948: {
   949: save_adr=eeprom_read(0);clrwdt();
   950: if(save_adr==0||save_adr>169)
   951:         {

⌨️ 快捷键说明

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