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

📄 b3tszh4.c

📁 BAT3TS1.C to Battery Multimeter 参数测试仪的C源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
            }
         } /*key_pressed_bz=0*/
       } /* key_obj==4; set Adjust Number of OCV/CCV/CCI */
    /****************** key_obj==4 ********************************************/
  } /* (ACCESS_key==1 && key_ACC2==1) */
 goto RUN;
/********************** get key pressed *********************************************/

/******************* Test Program ***********************************************************/
/******************* Test Program ***********************************************************/
/******************* Test Program ***********************************************************/
TEST_PROGRAM:
 if(TEST_bz>0) goto MAIN_TEST;
  KSC=0;
  KLD=0;
  dati=get_OCV1(10);
  if(dati>20) {
     dati=get_OCV1(5);
     dlys();
     OCV_data=get_OCV1(5);
     dati-=OCV_data;
     chx=abs(dati);
     if(chx<2) {
        TEST_bz=1;
        WORK_bz=1;
        GOOD_bz[0]=0;
        GOOD_bz[1]=0;
        GOOD_bz[2]=0;
        data_ld[16]=0;
        };
     }
 if(TEST_bz==0) goto RUN;

 if(CCV_bz==1) {
     KLD=1;
     if(OCV_bz==1) make_data_ld(OCV_data,1);
     dly(2);
     CCV_data=get_CCV(10);
     KLD=0;
     if(CCV_data>OCV_data) CCV_data=OCV_data;
     }
 if(CCI_bz==1) {
     KSC=1;
     if(CCV_bz==1) make_data_ld(CCV_data,2);
     dly(2);
     CCI_data=get_CCI(20);
     KSC=0;
     make_data_ld(CCI_data,3);
     }
 TEST_bz=2;
 goto RUN;

MAIN_TEST:
 if(TEST_bz==2) {
   if(OCV_bz==1) {
     if(OCV_data<LOW_LIMIT[0] || OCV_data>HIGH_LIMIT[0]) {
       GOOD_bz[0]=1;    /**** FLASH_bz=1; ***/
       VIQ_LED(1,1);
       }
      else VIQ_LED(2,1);
     if(CCV_bz==0) make_data_ld(OCV_data,1);
     }
  if(CCV_bz==1) {
     if(CCV_data<LOW_LIMIT[1] || CCV_data>HIGH_LIMIT[1]) {
       GOOD_bz[1]=1;    /**** FLASH_bz=2; ***/
       VIQ_LED(3,1);
       }
      else VIQ_LED(4,1);
     if(CCI_bz==0) make_data_ld(CCV_data,2);
     }
  if(CCI_bz==1) {
     if(CCI_data<LOW_LIMIT[2] || CCI_data>HIGH_LIMIT[2]) {
       GOOD_bz[2]=1;    /**** FLASH_bz=3; ***/
       VIQ_LED(5,1);
       }
      else VIQ_LED(6,1);
      }

  if(GOOD_bz[0]==0 && GOOD_bz[1]==0 && GOOD_bz[2]==0) {
     BATS_count++;
     if(BATS_count>9999)
        BATS_count=0;
     make_data_ld(BATS_count,4);
     bell(20);
     }
  LED_on(0);
  WORK_bz=0;
  TEST_bz=5;
/*  bell(20); */
  goto RUN;
  }
 else if(TEST_bz>4) {
   dati=get_OCV1(3);
   if(dati<10) { /*20*/
      LED_on(0);
      dly(50);
      TEST_bz=0;
      }
   }

/****************** test **********************************/

RUN:
 if(BELL_bz>0) {
   if(BELL_bz==1) {
     BELL_bz=2;
     U6_data|=0xc0;  /***** BELL on ***/
     P0=U6_data;
     LED_on_bz=1;
     T1=1;
     dlys();
     T1=0;
     LED_on_bz=0;
     dlyss();
     }
   if(BELL_count==0) {
     BELL_bz=0;
     U6_data|=0xc0;
     U6_data-=0xc0;  /*** BELL off ***/
     P0=U6_data;
     LED_on_bz=1;
     T1=1;
     dlys();
     T1=0;
     LED_on_bz=0;
     dlyss();
     }
   }

goto main_loop_start;
} /* ******************** main_{} **************************** */
/****************************************************************************/
/****************************************************************************/
/****************************************************************************/
/****************************************************************************/

/****************** display digitals ****************************/
void dlyst0(void)
{
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
}

/****************** display digitals ****************************/
T0_int () interrupt 1 using 1 {
 unsigned int dat;
 static char FLASH_period;
  TL0=216;   /*  TL0=220;  TH0=250; Tp=1mS */
  TH0=250;
  if(LED_on_bz==1)  {
     T1=1;
      dlyst0();
     T1=0;
      dlyst0();
     LED_on_bz=0;
     }
  if(WORK_bz>0) {
     DSP_DIG=1;  /*------- disable display Digitals ****/
     goto end_T0;
     }

ret_fl1:
  if(DISP_count>15) {
    DSP_DIG=1;  /*------- disable display Digitals ****/
    P0=data_ld[16];
      dlyst0();
    DISP_count++;
    T0=1;
      dlyst0();
    T0=0;
    P1_data &= 0xef;   /* enable LED display */
    P1=P1_data;
    if(DISP_count>19)  /*19*/
      DISP_count=0;
    }
 else  {
    if(FLASH_bz>0) {
      if(FLASH_bz==1) {
        if(DISP_count==0 && FLASH_period==1)
           DISP_count+=4;
        }
      else if(FLASH_bz==2) {
        if(DISP_count==4 && FLASH_period==1)
           DISP_count+=4;
        }
      else if(FLASH_bz==3) {
        if(DISP_count==8 && FLASH_period==1)
           DISP_count+=4;
        }
      else if(FLASH_bz==4) {
        if(DISP_count==12 && FLASH_period==1) {
           DISP_count+=4;
           goto ret_fl1;
           }
        }
      }

    DSP_DIG=1;    /**------------ Disable Display Digitals */
    P1_data&=0xf0;
    P1_data|=DISP_count;
    P1_data|=0x10;  /* LED off */
    P1=P1_data;   /**------------ Digital select, disable LED **/
    P0=data_ld[DISP_count];
      dlyst0();
    DISP_count++;
    T0=1;
      dlyst0();
    T0=0;
    /*  dlyst0(); */
    DSP_DIG=0;  /**------------- Enable Display **/
    }
/* P0=U6_data; */ /**-- Restore P0 to U6:373 locked **/
 if(FLASH_bz>0) {
   FLASH_count++;
   if(FLASH_count>600) {
     if(FLASH_period==0) {
          FLASH_period=1;
          FLASH_count=400;
          }
       else {
          FLASH_period=0;
          FLASH_count=0;
          }
     }
   }
end_T0:
 T1=0;
} /************** T0_int() **********************/

code const unsigned char LED_DIG[]= {
       /*  0,   1,   2,   3,   4,   5,   6,   7,   8,   9    */
       /* 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90  */
          0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
          };

/****************************************************************************/
/*
unsigned int get_OCV(unsigned char tim)
{int dat;
 idata float vx;
 P1_data&=0x1f;
* P1_data|=0xe0;  *** VSP ***
* P1=P1_data;
 dlyss();
 dat=average(tim);*
 P1_data|=0xc0;   *** VBAT ***
 P1=P1_data;
 dly(10);
 vx=average(tim);
 vx-=1696.;
 vx=vx*ADJ_data[0]/340.62;
 dat=vx+0.5;
 if(dat<0) dat=0;
 return(dat);
}*/
unsigned int get_OCV1(unsigned char tim)
{idata int dat;
 idata float vx;

 P1_data&=0x1f;
/* P1_data|=0xe0;     /*** VSP =0xe0 ***/
 P1_data|=0xc0;   /*** VBAT =0xc0 ***/
 P1=P1_data;
 dlys();
 if(tim<17) dat=average_l(tim);
   else dat=average(tim);
 if(dat<875) return(0);
 dat -= 875;
 vx = dat*ADJ_data_act[0];
 dat = vx+0.5;
 return(dat);
}

unsigned int get_CCV(unsigned char tim)
{int dat;
 idata float vx;
 P1_data&=0x1f;
/* P1_data|=0xe0; */ /*** VSP ***/
/* P1=P1_data;
 dlyss();
 dat=average(tim);*/
 P1_data|=0xc0;  /*** VBAT ***/
 P1=P1_data;
 dlyss();
 vx=average(tim);
 vx-=715;
 vx=vx*ADJ_data_act[1];
 dat=vx+0.5;
 if(dat<0) dat=0;
 return(dat);
}



/********* work ***********************************************/

void show_ADJ()
{
 if(ADJ_LED_bz==1) {
    make_data_ld(ADJ_data[0],1);
    data_ld[16]=0;
    if(OCV_bz==0)  VIQ_LED(1,1);
      else  VIQ_LED(2,1);
   }
 else if(ADJ_LED_bz==2) {
    make_data_ld(ADJ_data[1],2);
    data_ld[16]=0;
    if(CCV_bz==0)  VIQ_LED(3,1);
      else  VIQ_LED(4,1);
   }
 else if(ADJ_LED_bz==3) {
    make_data_ld(ADJ_data[2],3);
    data_ld[16]=0;
    if(CCI_bz==0)  VIQ_LED(5,1);
      else  VIQ_LED(6,1);
   }
 else {
   data_ld[16]=0;
   }
}

void show_SET()
{
 if(VIQ_LED_bz==1) {
    make_data_ld(LOW_LIMIT[0],1);
    data_ld[16]=0;
    VIQ_LED(1,1);
   }
 else if(VIQ_LED_bz==3) {
    make_data_ld(LOW_LIMIT[1],2);
    data_ld[16]=0;
    VIQ_LED(3,1);
   }
 else if(VIQ_LED_bz==5) {
    make_data_ld(LOW_LIMIT[2],3);
    data_ld[16]=0;
    VIQ_LED(5,1);
   }
 else if(VIQ_LED_bz==2) {
    make_data_ld(HIGH_LIMIT[0],1);
    data_ld[16]=0;
    VIQ_LED(2,1);
   }
 else if(VIQ_LED_bz==4) {
    make_data_ld(HIGH_LIMIT[1],2);
    data_ld[16]=0;
    VIQ_LED(4,1);
   }
 else if(VIQ_LED_bz==6) {
    make_data_ld(HIGH_LIMIT[2],3);
    data_ld[16]=0;
    VIQ_LED(6,1);
   }
 else {
   data_ld[16]=0;
   }
}

void show_SEL()
{
 if(OCV_bz==1) {
    make_data_ld(0,1);
    VIQ_LED(1,0);
    VIQ_LED(2,1);
   }
  else {
    make_data_ld(10000,1);
    VIQ_LED(1,1);
    VIQ_LED(2,0);
   }

 if(CCV_bz==1) {
    make_data_ld(0,2);
    VIQ_LED(3,0);
    VIQ_LED(4,1);
   }
  else {
    make_data_ld(10000,2);
    VIQ_LED(3,1);
    VIQ_LED(4,0);
   }

 if(CCI_bz==1) {
    make_data_ld(0,3);
    VIQ_LED(5,0);
    VIQ_LED(6,1);
   }
  else {
    make_data_ld(10000,3);
    VIQ_LED(5,1);
    VIQ_LED(6,0);
   }
}

void VIQ_LED(char cha,char bz)
{unsigned char dat;
 if(cha<1||cha>8) dat=0;
  else {
    cha-=1;
    dat=powt(2,cha);
    data_ld[16]|=dat;
    if(bz==0)
      data_ld[16]-=dat;
    }
/*   data_ld[16]=0x10;  */
}

void LED_on(char bz)
{
 U6_data|=0x0f;      /* 4 LEDs off : bz=0 */
 if(bz==1) {
   U6_data-=0x01;     /* TEST-LED lights */
   }
  else if(bz==2) {
   U6_data-=0x02;     /* SEL-LED lights */
   }
  else if(bz==3) {
   U6_data-=0x04;     /* SET-LED lights */
   }
  else if(bz==4) {
   U6_data-=0x08;     /* ADJ-LED lights */
   }
 P0=U6_data;
 LED_on_bz=1;
 T1=1;
 dlys();
 T1=0;
 LED_on_bz=0;
 dlyss();
}

void bell(unsigned char tim)
{
 U6_data|=0xc0;
 P0=U6_data;
 LED_on_bz=1;
 T1=1;
 dlys();
 T1=0;
 LED_on_bz=0;
 dly(tim);
 U6_data-=0xc0;
 P0=U6_data;
 LED_on_bz=1;
 T1=1;
 dlys();
 T1=0;
 LED_on_bz=0;
 dlyss();
 }

char get_key1(char tim)
{unsigned int dat;
 P1_data&=0x1f;
 P1_data|=0x60;     /* F1 key    */
 P1=P1_data;
 dlyss();
 dat=average_l(tim)/5;
   P1_data|=0xe0;
   P1_data-=0x20;
   P1=P1_data;
 if(dat<20) dat=1;
   else dat=0;
 return(dat);
 }
char get_key2(char tim)
{unsigned char dat;
 P1_data&=0x1f;
 P1_data|=0x60;     /* F1 key    */

⌨️ 快捷键说明

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