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

📄 bdj_rm10.c

📁 PIC CRC校验程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char 
#define uint unsigned int
sbit LABA= P3^0;
sbit jp15= P1^5;
sbit jp14= P1^4;
sbit jp13= P1^3;
sbit jp12= P1^2;

///////////////////////////////
uchar code xszf[]={0x09,0xeb,0x91,0x83,0x63,0x07,0x05,0xab,0x01,0x03,0x21,0x45,0x1d,0xc1,0x15,0x35,0xff}; //0---f短码
uchar data gw,sw,bw,qw,ww,sww;//     BCD码 
//uchar xdata gw,sw,bw,qw,ww,sww;//     BCD码 
uchar data ls1,ls3,jswc,y;//jswc=计算计算误差
uint data ls2,ls4;
uint  data cs_diany,cs_changs,cs_dianl;  //U,I,C
//uint  xdata cs_diany,cs_changs;  //U,I,C
//unsigned long xdata fh;//w,fh
unsigned long data fh,glz,sdz,err;//w,fh
uchar data cs_zhuans,n,miao; //cs_zhuansn=n转数,//miao=0.5秒标记   
//float xdata err,glz,cs_dianl;
//float data err;
bit bdata glbj;//功率标记
bit bdata csbj;//参数标记
bit bdata wcbj;//误差标记
bit bdata dnbj;//电能标记
bit bdata miao_1,ks,dl,fusbj;//1秒标记    
////////////////////////////////
void gldisp(void);//功率显示
void cshdisp(void);//初始化显示  
void csh8253(void);// 初始化8253 
void ys(void);//延时  
//void ys0(void);
uchar jp(void);//键盘扫描程序
extern float modf(float x,float *ip);
void csh8031(void);//初始化8031    
void cshbl(void);//初始化全局变量  
void gl(void);//功率服务程序
void cs(void);//参数输入程序
void wc(void);//误差计算程序    
void wcbcd(void);
void wcdisp(void);
void jssdz(void);
void dn(void);//电能计算程序  
void dnbcd(void);
void glbcd(void);//转换程序 
void csbcd(void);
void csdisp(void);
//INTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTIINTINTINTINTINTINTINTINTINTINTINT
//INTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTIINTINTINTINTINTINTINTINTINTINTINT
//INTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTIINTINTINTINTINTINTINTINTINTINTINT
void int0()interrupt 0 using 1
{ EX0=0;//禁止中断INT0
 if(ks)
    { XBYTE[0xbfff]=0x40;
      XBYTE[0xbfff]=0x80;
      ls1=XBYTE[0xbffd];
      ls2=XBYTE[0xbffd];
      ls3=XBYTE[0xbffe];
      ls4=XBYTE[0xbffe];
      miao_1=1;       
      ks=0; 
    }
 n--;
 XBYTE[0xdffc]=xszf[n%10]; 
 if(n==0)
  {   LABA=0;
      XBYTE[0xbfff]=0x40;
      XBYTE[0xbfff]=0x80;
      ls1=XBYTE[0xbffd];
      ls2=XBYTE[0xbffd];
      ls3=XBYTE[0xbffe];
      ls4=XBYTE[0xbffe];      
      XBYTE[0xdffc]=xszf[n];
      n=cs_zhuans;
      jswc=1;   
  }       
 EX0=1;//允许中断INT0   
}
//////////////////////////////////////////T0
void timerl()interrupt 1 using 1
{  ET0=0; //禁止中断T0
   TL0=0xb1;TH0=0x3c;ET0=1;miao--; 
   if(miao==0)
    { XBYTE[0xbfff]=0x40;
      XBYTE[0xbfff]=0x80;     
      ls1=XBYTE[0xbffd];
      ls2=XBYTE[0xbffd];
      ls3=XBYTE[0xbffe];
      ls4=XBYTE[0xbffe];
      miao=2;miao_1=!miao_1;     
    }
}  
//INTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTIINTINTINTINTINTINTINTINTINTINTINT
//ENDEDNENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDEND

//CSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSSHCSHCSHCSSHCSSCHCSSHCSH
//CSHCSHCSHCSHCSHCCSHCSHCSSHCSHCSHCCSHCSHCHSCHSCSHCSHCCSHCHCSHCSHCSSHCSHCSHCSHCCSHCSHCSH
void  cshdisp(void)
{ gw=0;sw=0;bw=0;qw=0;ww=0;sww=0;
  gldisp();
}
//CSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSSHCSHCSH
void csh8031(void)
{  TMOD=0x55;      // 定时/计数器方式寄存器TMOD
   IP=0x0a;               //中断优先级控制寄存器IP
   TCON=0x15;       //定时/计数器控制寄存器TCON
   TL0=0xb1;   //////////0xffff-50000=0x3caf
   TH0=0x3c;
   IE=0x83;             //中断允许控制计存器IE
}
//CSHCSHCSHCSHCSHCSHCSHCSHCHSCHSCHSCHSCHCSHCSHCSHCSH
void cshbl(void) //初始化全局变
{  glbj=1;dnbj=0;csbj=0;wcbj=0;
   cs_diany=200;cs_dianl=50;
   cs_changs=3600; cs_zhuans=1;
   fh=0;y=0;
}
//CSHCSHCSHCSHCSHCSHCSHCSHCSHCSCHCSHCSHCSHCSHCSHCSH
void csh8253(void) 
{  XBYTE[0xbfff]=0x36;      //写控制通道0
   XBYTE[0xbffc]=0xc3;      //写CR0L,CR=0xc350(50000)
   XBYTE[0xbffc]=0x50;     //写CR0H
   XBYTE[0xbfff]=0x74;      //写控制通道1 //=76
   XBYTE[0xbffd]=0x88;    // 写CR1L,CR=0x1388 5000  )
   XBYTE[0xbffd]=0x13;      //写CR1H
   XBYTE[0xbfff]=0xb4;       //写控制通道2//=b6
   XBYTE[0xbffe]=0xff;         // 写CR2L,CR=0xFFFF(65535)
   XBYTE[0xbffe]=0xff;          //写CR2H
}
//CSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSH
//ENDEMDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDEND

//()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
//()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
void ys(void) 
{
  uint a=0xff;
  while (a)
    { uint b;b=0x20;
      while(b){b--;}  
      a--;
    }
}
//()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
uchar jp(void)
{uchar i; 
////////////////////
 XBYTE[0xdffe]=0x00; 
 P1=0xff; 
 if((P1|0xc3)==0xff)
     {
     i=0xff;        //无键按下返回i=0xff
     return(i);
     } 
///////////////////
 XBYTE[0xdffe]=0xfb;//Q2=0
 P1=0xff; 
 if(jp12==0)
    {  ys();
       if(jp12==0)
         {
          while(jp12==0){_nop_();}
          i=1;LABA=0; ys();LABA=1; 
          return(i);
         }          
    }//i=1 
 if(jp13==0)
    {ys();
     if(jp13==0)
        {while(jp13==0){_nop_();}
         i=2;LABA=0;ys();LABA=1; 
         return(i);
        }
    }//i=2 
 if(jp14==0)
     { ys();
       if(jp14==0)
          {while(jp14==0){_nop_();}
            i=3;LABA=0;ys();LABA=1; 
            return(i);
          }
     }//i=3
 if(jp15==0)
     { ys();
       if(jp15==0)
          {while(jp15==0){_nop_();}
            i=11;LABA=0;ys();LABA=1; 
             return(i);
          }
     }//i=11*/
/////////////////////////
 XBYTE[0xdffe]=0xfe;//Q0=0  
 if(jp15==0)
     { ys();
       if(jp15==0)
          {while(jp15==0){_nop_();}
            i=12;LABA=0;ys();LABA=1; 
            return(i);
          }
     }//i=12
//////////////////////////////
 XBYTE[0xdffe]=0x7f;//Q7=0
 if(jp15==0)
     { ys();
       if(jp15==0)
          {while(jp15==0){_nop_();}
            i=13;LABA=0;ys();LABA=1; 
            return(i);
          }
     }//i=13
////////////////////////////////
 XBYTE[0xdffe]=0xef;//Q4=0
 if(jp12==0)
    {  ys();
       if(jp12==0)
         {
          while(jp12==0){_nop_();}
          i=4;LABA=0;ys();LABA=1; 
          return(i);
         }          
    }//i=4
 if(jp13==0)
    {ys();
     if(jp13==0)
        {while(jp13==0){_nop_();}
         i=5;LABA=0;ys();LABA=1; 
         return(i);
        }
    }//i=5
 if(jp14==0)
     { ys();
       if(jp14==0)
          {while(jp14==0){_nop_();}
            i=6;LABA=0;ys(); LABA=1; 
            return(i);
          }
     }//i=6
 if(jp15==0)
     { ys();
       if(jp15==0)
          {while(jp15==0){_nop_();}
            i=10;LABA=0;ys();LABA=1; 
            return(i);
          }
     }//i=10
//////////////////////////////
 XBYTE[0xdffe]=0xbf;//Q6=0
 if(jp12==0)
    {  ys();
       if(jp12==0)
         {
          while(jp12==0){_nop_();}
          i=7;LABA=0;ys();LABA=1; 
          return(i);
         }          
    }//i=7
 if(jp13==0)
    {ys();
     if(jp13==0)
        {while(jp13==0){_nop_();}
          i=8;LABA=0;ys();LABA=1; 
         return(i);
        }
    }//i=8
 if(jp14==0)
     { ys();
       if(jp14==0)
          {while(jp14==0){_nop_();}
            i=9;LABA=0;ys();LABA=1; 
            return(i);
          }
     }//i=9
 if(jp15==0)
     { ys();
       if(jp15==0)
          { while(jp15==0){_nop_();}
            i=0;LABA=0;ys();LABA=1; 
            return(i);
          }
     }//i=0
 i=0xff;
 return(i);  
}
//()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
//ENDEMDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDEND

//GLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGL
//GLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGL
void gldisp(void)
{if(sww==0)
    {sww=16;
     if(ww==0)
       {ww=16;
         if(qw==0)
           {qw=16;
             if(bw==0)
              {bw=16;}
     }}}  
  XBYTE[0xdfff]=xszf[gw];
  XBYTE[0xdff8]=(xszf[sw]&0xfe);
  XBYTE[0xdff9]=xszf[bw];
  XBYTE[0xdffa]=xszf[qw];
  XBYTE[0xdffb]=xszf[ww];
  XBYTE[0xdffc]=xszf[sww];
}
//GLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLG
void glbcd(void)
{sww=((glz%1000000))/100000;
 ww=((glz%100000))/10000;
 qw=((glz%10000))/1000;
 bw=((glz%1000))/100;
 sw=((glz%100))/10;
 gw=glz%10;
 gldisp(); 
}
//GLGLGLGLGGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLG
void gl(void)
{  uchar x;
   uint p8253_1,p8253_2,ls5=0,ls6=0;  
   unsigned long data p8253_22;   
   while(1)
      {if(miao_1)
          {  miao_1=!miao_1;
             ls2=ls2<<8;
             p8253_1=ls2|ls1;
             p8253_1=5000-p8253_1;         
             ls4=ls4<<8;
             p8253_2=ls4|ls3;
             p8253_2=0xffff-p8253_2;                         
             p8253_22=p8253_2-ls6;             
             p8253_22=(p8253_22*5000);
             fh=p8253_1;
             fh=(fh+p8253_22);
             p8253_22=ls5;//-ls5
             fh=fh-p8253_22;             
             ls5=p8253_1;
             ls6=p8253_2;              
             //glz=((cs_diany*cs_dianl*fh)/10000);//电流应多除10             
             
             glz=fh*100/277; 
             glbcd();             
          }
        x=jp();
        if(x==0){glz=x;glbcd();}
        if(x==1){glz=x;glbcd();}
        if(x==2){glz=x;glbcd();}
        if(x==3){glz=x;glbcd();}
        if(x==4){glz=x;glbcd();}
        if(x==5){glz=x;glbcd();}
        if(x==6){glz=x;glbcd();}
        if(x==7){glz=x;glbcd();}
        if(x==8){glz=x;glbcd();}
        if(x==9){glz=x;glbcd();}
        if(x==10){ csbj=1;glbj=0;return;}
        if(x==11){ wcbj=1;glbj=0;return;} 
        if(x==12){ dnbj=1;glbj=0;return;}             
      }
}
//GLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLLGLGLGLGLGLGLGLGLGLGLGL
//ENDEMDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDEND

//CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS
//CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS
void csbcd(void)
{sww=((ls2%1000000))/100000;
 ww=((ls2%100000))/10000;
 qw=((ls2%10000))/1000;
 bw=((ls2%1000))/100;
 sw=((ls2%100))/10;
 gw=ls2%10;
}
///////////
void csdisp(void)
{if(sww==0)
    {sww=16;
     if(ww==0)
       {ww=16;
         if(qw==0)
           {qw=16;
             if(bw==0)
              {bw=16;
                if(dl)
                  {if(sw==0)
                    {sw=16;}
    }}}}}  
  XBYTE[0xdfff]=xszf[gw];
  XBYTE[0xdff8]=xszf[sw];
  XBYTE[0xdff9]=xszf[bw];
  XBYTE[0xdffa]=xszf[qw];
  XBYTE[0xdffb]=xszf[ww];
}
///////////
void cs(void)
{  uchar x;
   EX0=0;//关闭INT0禁止校验
   ET0=0;//允许T0中断
while(1)
 { bit bdata bj=1;dl=1;     
  /*while(1)
     {  ls2=cs_diany;//U        
        csbcd();csdisp();
        XBYTE[0xdffc]=0x49;//U=0x49        
        x=jp();
        while(bj) 
           {if(x==0){cs_diany=x;bj=0;}

⌨️ 快捷键说明

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