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

📄 b3tszh4.c

📁 BAT3TS1.C to Battery Multimeter 参数测试仪的C源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/* *************************************************** */
/* ******* BAT3TS1.C to Battery  Multimeter     ****** */
/* ******* Programed at 2001.6.1 - 7.1          ****** */
/* ******* Modify at 2001.7.10                  ****** */
/* ******* Modify at 2001.7.20                  ****** */
/* ******* Modify at 2001.12.8                  ****** */
/* ******* Modify at 2002.4.1                   ****** */
/* ******* Modify at 2002.5.8 for 12V battery   ****** */
/* *************************************************** */
#include <reg52.h>
#include <stdio.h>                    /* standard I/O .h-file           */
#include <ctype.h>                    /* character functions            */
#include <string.h>                   /* string and memory functions    */
#include <stdlib.h>                   /* standard library .h-file       */
#include <math.h>
#include <absacc.h>                   /*          */
#include <intrins.h>                  /* Total 8  */

/* sfr   WDTC      = 0x8F; */
/* Watchdog: clr_WDT=WDTC.6; enb_WDT=WDTC.7; */
/* sbit  clr_WDT   = WDTC^6; */
/* sbit  enb_WDT   = WDTC^7; */
/* sfr   REMI      = 0x8E;   */
/* Reduce EMI: red_EMI=REMI.0; */

sbit  DSP_DIG   = P3^2;
sbit  DSP_LED   = P1^4;  /* 0:display LED; 1:display digitals */
sbit  A4051     = P1^5;  /* 4051 channel select */
sbit  B4051     = P1^6;
sbit  C4051     = P1^7;

sbit  KSC       = P3^6;  /* =WR, control CCI */
sbit  KLD       = P3^7;  /* =RD, control CCV */

/* TLC549 pin defination */
sbit  AD_CS     = P2^0;
sbit  AD_CLK    = P2^1;  /*4*/
sbit  AD_DO     = P2^2;

/* 93C46 pin defination */
sbit  EPR_CS    = P2^3;  /*4*/
sbit  EPR_CLK   = P2^4;
sbit  EPR_DO    = P2^5;  /* in from 93C46 */
sbit  EPR_DI    = P2^6;  /* out to 93C46 */

/* manuel start test control */
sbit  MS_CONT   = P2^7;

void dlyst0(void);
void dlyss(void);
void dlys(void);
void dly(unsigned char times);
unsigned char powt(unsigned char base,unsigned char m);
unsigned int powti(unsigned char base,unsigned char m);
unsigned int  average_l(unsigned char tim);
unsigned int  average(unsigned char tim);
unsigned int Read_from_AD(void);
void send_byte(unsigned char dat);
unsigned int read_word(unsigned char addr);
void write_word(unsigned char addr,unsigned int data_out);
void make_data_ld(unsigned int Tem,char VIQ);
char get_key1(char tim);
char get_key2(char tim);
char get_key(char ksr);
char get_key_all();
void INIT_VIQ();
void save_VIQ();
void make_VIQ();
void LED_on(char bz);
void bell(unsigned char tim);
void VIQ_LED(char cha,char bz);
void show_SEL();
void show_SET();
void show_ADJ();
/*unsigned int get_OCV(unsigned char tim);*/
unsigned int get_OCV1(unsigned char tim);
unsigned int get_CCV(unsigned char tim);


unsigned char data_ld[17],U6_data,P1_data;
char          DISP_count,FLASH_bz,OCV_bz,CCV_bz,CCI_bz,WORK_bz;
unsigned int  FLASH_count,SEC_count,BELL_count,BATS_count;
idata char    VIQ_LED_bz,ADJ_LED_bz,LED_on_bz;
idata unsigned int  LOW_LIMIT[3],HIGH_LIMIT[3],ADJ_data[3];
idata float   ADJ_data_act[3];
sfr   WDTC      = 0x8F;
/* Watchdog: clr_WDT=WDTC.6; enb_WDT=WDTC.7; */
/*sbit  clr_WDT   = WDTC^6;
sbit  enb_WDT   = WDTC^7;  */
 sfr   REMI      = 0x8E;
/* Reduce EMI: red_EMI=REMI.0; */

/****************************************************************************/
/****************************************************************************/
/****************************************************************************/
/****************************************************************************/
/****************************************************************************/
main() {
unsigned char dat,key_pressed,key_pressed_count;
char          key_pressed_bz,key_obj,VIQ_select;
char          chx,ACCESS_key,key_ACC2,TEST_bz,GOOD_bz[3],BELL_bz;
int           dati;
idata int     OCV_data,CCV_data,CCI_data;
idata float   vx;

/*************** init first datas *****************/
  SCON  = 0x50;              /*  serial 232 port = mode 1  */
  TMOD  = 0x11;              /*  T0: timer,mode 1; T1=timer,mode 1 */

  TL0   = 105;               /*  T1: 0.5mS timer = 666, to control display */
  TH0   = 253;               /*  16MHz, 1 count = 0.75uS */
  TR0   = 1;

  TH1   = 0;                 /*  normal timer */
  TL1   = 0;
  TR1   = 0;

  PCON  = 0;                 /*  T2: baud rate generator */
  T2CON = 0;
  TR2   = 0;

  IE    = 0;                 /*  Disable all interrupt   */
  IP    = 0;
  TI    = 0;
  RI    = 0;
  ES    = 0;                 /*  Disable serial interrupt */
  ET0   = 1;                 /*  Enable T0 timer */
  ET1   = 0;                 /*  Disable T1 timer */

  AD_CS    = 1;
  AD_CLK   = 0;
  AD_DO    = 1;
  EPR_CS   = 0;
  EPR_CLK  = 0;
  EPR_DI   = 0;
  EPR_DO   = 1;
  dly(1);

INIT_VIQ();

  P1 = 0xf0;
  P3 = 0x0f;
  P0 = 0x54;       /* U5:Display datas =0 */
    dlyss();
  T0 = 1;
    dlyss();
  T0 = 0;
  P0 = 0x0f;       /* U6: Control datas */
    dlyss();
  T1 = 1;
    dlyss();
  T1 = 0;
  U6_data=0x0f;

  if(OCV_bz==0) make_data_ld(10000,1);
    else make_data_ld(0,1);
  if(CCV_bz==0) make_data_ld(10000,2);
    else make_data_ld(0,2);
  if(CCI_bz==0) make_data_ld(10000,3);
    else make_data_ld(0,3);
  make_data_ld(0,4);
  data_ld[16]=0x00;

 /****************************************************/
  ACCESS_key=0;
  key_pressed=0;
  key_pressed_bz=0;
  key_ACC2=0;
  TEST_bz=0;
  WORK_bz=0;
  GOOD_bz[0]=0;
  GOOD_bz[1]=0;
  GOOD_bz[2]=0;
  FLASH_bz=0;
  LED_on_bz=0;
  KSC=0;
  KLD=0;
  SEC_count=0;
  BELL_bz=0;
  BELL_count=0;
  BATS_count=0;
  P1_data=0x10;

  /*enb_WDT=1;
  red_EMI=1;*/
  EA = 1;   /** ????? **/

main_loop_start:
 WDTC=0xc4;

 /********test**********
 ET0=0;
 ET1=0;
 KLD=1;
 KLD=0;
 KSC=1;
 KSC=0;
 KLD=1;
 KLD=0;
 KSC=1;
 KSC=0;
 get_key_all();
 /************test***********/
 /*clr_WDT=1;   clear Watchdog, reset period : 100 = 350 mS */

/********************************
    *** Try CCV & CCI circut. ***
    dati=1;
    rls:
       KSC=1; 
       dly(2);
       KSC=0; 
       dly(2);
    if(dati==1) goto rls;
 /******************************/

 if(TEST_bz>0) goto TEST_PROGRAM;

/**************** Key Set System Program *******************/
 if(ACCESS_key==0) {
    dat=get_key1(2);
    if(dat==1) {
      dat=get_key2(50);
      if(dat==1) {
        ACCESS_key=1;
        key_pressed=1;
        key_pressed_bz=1;
        key_obj=1;
        bell(50);
        LED_on(1);
        }
      }
     else
      goto TEST_PROGRAM;
    }

 if(ACCESS_key==1 && key_ACC2==0) { /**---------- ACCESS_key=1 ****/
    if(key_pressed_bz>0) {
       dat=get_key_all();
       if(dat==0) {
          key_pressed_bz=0;
          if(key_pressed==2) {
             key_ACC2=1;
             VIQ_select=1;
             VIQ_LED_bz=1;
             ADJ_LED_bz=1;
             }
          key_pressed=0;
          }
       dly(10);
       }
     else {
       dat=get_key_all();
       if(dat>0)
          dat=get_key(dat);
       if(dat>0) {
          key_pressed_bz=1;
          key_pressed=dat;
          bell(40);
          }
       if(key_pressed==1) {
         key_obj++;
         if(key_obj>4) key_obj=1;
         LED_on(key_obj);
         }
       }
    }  /**----- ACCESS_key=1, key_ACC2=0 ****/

 if(ACCESS_key==1 && key_ACC2==1) { /**---------- ACCESS_key=1 **********************/
  /*********** key_obj=1-4 ****************************************************/
    if(key_obj==1) {   /* key operation over */
       save_VIQ();
       ACCESS_key=0;
       key_ACC2=0;
       key_pressed=0;
       key_pressed_bz=0;
       LED_on(0);
       }
  /****************** key_obj=1 ******************************************/

     else if(key_obj==2) { /* select test object */
       show_SEL();
       FLASH_bz=VIQ_select;
       if(key_pressed_bz>0) {
         dat=get_key_all();
         if(dat==0) {
          key_pressed_bz=0;
          if(key_pressed==2) {
            ACCESS_key=0;
            key_ACC2=0;
            save_VIQ();
            data_ld[16]=0;
            FLASH_bz=0;
            LED_on(0);
            }
          key_pressed=0;
          }
         dly(10);
         }
        else {
         dat=get_key_all();
         if(dat>0) dat=get_key(dat);
         if(dat>0) {
            key_pressed=dat;
            key_pressed_bz=1;
            bell(40);
            }
         if(key_pressed==1) {
            VIQ_select++;
            if(VIQ_select>3) VIQ_select=1;
            }
          else if(key_pressed==3) {
            if(VIQ_select==1) OCV_bz=0;
              else if(VIQ_select==2) CCV_bz=0;
              else if(VIQ_select==3) CCI_bz=0;
            }
          else if(key_pressed==4) {
            if(VIQ_select==1) OCV_bz=1;
              else if(VIQ_select==2) CCV_bz=1;
              else if(VIQ_select==3) CCI_bz=1;
            }

         }
       } /* (key_obj==2) */
  /****************** key_obj==2 ********************************************/

     else if(key_obj==3) { /* set LOW/HIGH LIMITt */
       show_SET();
       dat=(VIQ_LED_bz+1)/2;
       FLASH_bz=dat;
       if(key_pressed_bz>0) {
         dat=get_key_all();
         if(dat==0) {
            key_pressed_bz=0;
            key_pressed_count=0;
            if(key_pressed==2) {
              ACCESS_key=0;
              key_ACC2=0;
              save_VIQ();
              data_ld[16]=0;
              FLASH_bz=0;
              LED_on(0);
              }
            key_pressed=0;
            dly(10);
            }
          else if(dat==3 && key_pressed_count>30) { /* < */
            dat=VIQ_LED_bz/2;
            dat=VIQ_LED_bz-dat*2;
            if(dat==1) {
               dat=VIQ_LED_bz/2;
               LOW_LIMIT[dat]-=20;
               }
             else {
               dat=VIQ_LED_bz/2;
               HIGH_LIMIT[dat-1]-=20;
               }
             dly(150);
            }
          else if(dat==4 && key_pressed_count>30) { /* > */
            dat=VIQ_LED_bz/2;
            dat=VIQ_LED_bz-dat*2;
            if(dat==1) {
               dat=VIQ_LED_bz/2;
               LOW_LIMIT[dat]+=20;
               }
             else {
               dat=VIQ_LED_bz/2;
               HIGH_LIMIT[dat-1]+=20;
               }
             dly(150);
            }
          else if(key_pressed_count<110)
             key_pressed_count++;
         } /*** (key_pressed_bz>0) ***/
        else {
         dat=get_key_all();
         if(dat>0) dat=get_key(dat);
         if(dat>0) {
            key_pressed=dat;
            key_pressed_bz=1;
            bell(40);
            }
         if(key_pressed==1) {
            VIQ_LED_bz++;
            if(VIQ_LED_bz>6) VIQ_LED_bz=1;
            }
          else if(key_pressed==3) {  /* < = decrease */
            dat=VIQ_LED_bz/2;
            dat=VIQ_LED_bz-dat*2;
            if(dat==1) {
               dat=VIQ_LED_bz/2;
               LOW_LIMIT[dat]--;
               }
             else {
               dat=VIQ_LED_bz/2;
               HIGH_LIMIT[dat-1]--;
               }
            }
          else if(key_pressed==4) { /* > = increase */
            dat=VIQ_LED_bz/2;
            dat=VIQ_LED_bz-dat*2;
            if(dat==1) {
               dat=VIQ_LED_bz/2;
               LOW_LIMIT[dat]++;
               }
             else {
               dat=VIQ_LED_bz/2;
               HIGH_LIMIT[dat-1]++;
               }
            }
         } /*key_pressed_bz=0*/
       } /* key_obj==3; set LOW/HIGH LIMITt */
  /****************** key_obj==3 **********************************************/

     else if(key_obj==4) { /* set Adjust Number of OCV/CCV/CCI */
       show_ADJ();
       FLASH_bz=ADJ_LED_bz;
       if(key_pressed_bz>0) {
         dat=get_key_all();
         if(dat==0) {
            key_pressed_bz=0;
            key_pressed_count=0;
            if(key_pressed==2) {
              ACCESS_key=0;
              key_ACC2=0;
              save_VIQ();
              data_ld[16]=0;
              FLASH_bz=0;
              LED_on(0);
              if(OCV_bz==1)  make_data_ld(0,1);
                else make_data_ld(10000,1);
              if(CCV_bz==1)  make_data_ld(0,2);
                else make_data_ld(10000,2);
              if(CCI_bz==1)  make_data_ld(0,3);
                else make_data_ld(10000,3);
              }
            key_pressed=0;
            dly(10);
            }
          else if(dat==3 && key_pressed_count>30) { /* < */
            dat=ADJ_LED_bz-1;
            if(ADJ_data[dat]>10) ADJ_data[dat]-=10;
            dly(150);
            }
          else if(dat==4 && key_pressed_count>30) { /* > */
            dat=ADJ_LED_bz-1;
            if(ADJ_data[dat]<2000) ADJ_data[dat]+=10;
            dly(150);
            }
          else if(key_pressed_count<110)
             key_pressed_count++;
         } /*** (key_pressed_bz>0) ***/
        else {
         dat=get_key_all();
         if(dat>0) dat=get_key(dat);
         if(dat>0) {
            key_pressed=dat;
            key_pressed_bz=1;
            bell(40);
            }
         if(key_pressed==1) {  /* F1 key */
            ADJ_LED_bz++;
            if(ADJ_LED_bz>3) ADJ_LED_bz=1;
            }
          else if(key_pressed==3) {  /* < = decrease */
            dat=ADJ_LED_bz-1;
            if(ADJ_data[dat]>1) ADJ_data[dat]--;
            }
          else if(key_pressed==4) { /* > = increase */
            dat=ADJ_LED_bz-1;
            if(ADJ_data[dat]<2000) ADJ_data[dat]++;

⌨️ 快捷键说明

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