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

📄 b3tszh4.c

📁 BAT3TS1.C to Battery Multimeter 参数测试仪的C源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
 P1=P1_data;
 dlyss();
 dat=average(tim)/5;
 if(dat<20) dat=1;
   else dat=0;
 return(dat);
 }

char get_key(char ksr)
{unsigned char dat;
 P1_data&=0x1f;
 if(ksr==1) dat=0x60;          /* F1 key    */
  else if(ksr==2) dat=0x40;    /* Enter key */
  else if(ksr==3) dat=0x20;    /* < key     */
  else if(ksr==4) dat=0x00;    /* > key     */
  else return(0);
 P1_data|=dat;
 P1=P1_data;
 dlyss();
 dat=average(50)/5;
 if(dat<20) dat=ksr;
   else dat=0;
 return(dat);
 }

char get_key_all()
{unsigned char dat;

 P1_data&=0x1f;
 P1_data|=0x60;          /* F1 key    */
 P1=P1_data;
 dlys();
 dat=average(20)/5;
 if(dat<30)
    return(1);

 P1_data&=0x1f;
 P1_data|=0x40;         /* Enter key */
 P1=P1_data;
 dlys();
 dat=average(20)/5;
 if(dat<30)
    return(2);

 P1_data&=0x1f;
 P1_data|=0x20;         /* < key     */
 P1=P1_data;
 dlys();
 dat=average(20)/5;
 if(dat<30)
    return(3);

 P1_data&=0x1f;         /* > key     */
 P1=P1_data;
 dlys();
 dat=average(20)/5;
 if(dat<30)
    return(4);
 return(0);
} /*------------- get_key_all() --****/


void INIT_VIQ()
{unsigned int dat;
 dat=read_word(2);
 if(dat==1) OCV_bz=1;
   else OCV_bz=0;
 dat=read_word(3);
 if(dat==1) CCV_bz=1;
   else CCV_bz=0;
 dat=read_word(4);
 if(dat==1) CCI_bz=1;
   else CCI_bz=0;

 dat=read_word(10);
 LOW_LIMIT[0]=dat;
 dat=read_word(11);
 HIGH_LIMIT[0]=dat;

 dat=read_word(12);
 LOW_LIMIT[1]=dat;
 dat=read_word(13);
 HIGH_LIMIT[1]=dat;

 dat=read_word(14);
 LOW_LIMIT[2]=dat;
 dat=read_word(15);
 HIGH_LIMIT[2]=dat;

 dat=read_word(20);
 if(dat>1990||dat<100) dat=1000;
 ADJ_data[0]=dat;
 dat=read_word(21);
 if(dat>1990||dat<100) dat=1000;
 ADJ_data[1]=dat;
 dat=read_word(22);
 if(dat>1990||dat<100) dat=1000;
 ADJ_data[2]=dat;
 make_VIQ();
 }

void save_VIQ()
{unsigned int dat;
 if(OCV_bz==1) dat=1;
   else dat=0;
 write_word(2,dat);
 if(CCV_bz==1) dat=1;
   else dat=0;
 write_word(3,dat);
 if(CCI_bz==1) dat=1;
   else dat=0;
 write_word(4,dat);

 write_word(10,LOW_LIMIT[0]);
 write_word(11,HIGH_LIMIT[0]);

 write_word(12,LOW_LIMIT[1]);
 write_word(13,HIGH_LIMIT[1]);

 write_word(14,LOW_LIMIT[2]);
 write_word(15,HIGH_LIMIT[2]);

 write_word(20,ADJ_data[0]);
 write_word(21,ADJ_data[1]);
 write_word(22,ADJ_data[2]);

 make_VIQ();
 }

void make_VIQ()
{idata float vx;
   vx = ADJ_data[0];
   vx /= 1783.;
   ADJ_data_act[0]=vx;
   vx = ADJ_data[1];
   vx /= 1783.;
   ADJ_data_act[1]=vx;
   vx = ADJ_data[2];
   vx /=35.5;
   ADJ_data_act[2]=vx;
 }

/***************************************----*/
void make_data_ld(unsigned int Tem,char VIQ)
{int datm,dax;
 char dig0,dig1,dig2,dig3;
  if(Tem<10000) {
    dig0=Tem/1000;
    dax=dig0*1000;
    datm=Tem-dax;
    dig1=datm/100;
    dax=dig1*100;
    datm-=dax;
    dig2=datm/10;
    dax=dig2*10;
    dig3=datm-dax;
    datm=(VIQ-1)*4;
   /* ET0=0; */
    data_ld[datm]=LED_DIG[dig0];
    data_ld[datm+1]=LED_DIG[dig1];
    if(VIQ==1||VIQ==2) data_ld[datm+1]|=0x80;
    data_ld[datm+2]=LED_DIG[dig2];
    if(VIQ==3) data_ld[datm+2]|=0x80;
    data_ld[datm+3]=LED_DIG[dig3];
   /* ET0=1; */
    }
  else {
    datm=(VIQ-1)*4;
   /* ET0=0; */
    data_ld[datm]=0x40;
    data_ld[datm+1]=0x40;
    data_ld[datm+2]=0x40;
    data_ld[datm+3]=0x40;
    /* ET0=1; */
    }
 }
/*----*******************************************/


void dlyss(void)
{
  unsigned char i;
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
 }


void dly(unsigned char times)
{unsigned char i,j;
   for(i=0;i<times;i++) {
     for(j=0;j<165;j++) {
         _nop_();
         _nop_();
         _nop_();
         _nop_();
         _nop_();
         }
     }
}

void dlys(void) {
  unsigned char i;
  for(i=0;i<10;i++)
     _nop_();
}

unsigned char powt(unsigned char bas,unsigned char m) {
 unsigned char i,dat=1;
   for(i=0;i<m;i++)
     dat*=bas;
 return(dat);
}
/*
unsigned int powti(unsigned char bas,unsigned char m) {
 unsigned char i;
 unsigned int dat=1;
   for(i=0;i<m;i++)
     dat*=bas;
 return(dat);
}*/

unsigned int  average_l(unsigned char tim) {
  unsigned char i;
  unsigned int  vx,dat;
  vx  = 0;
  for(i=0;i<tim;i++){
    vx += Read_from_AD();
    }
  vx=vx/tim;
 return vx;
}
unsigned int  average(unsigned char tim) {
  unsigned char i,j;
  unsigned int  vx;
  unsigned long int av;
  av  = 0;
  j = 0;
  for(i=0;i<tim;i++){
    vx = Read_from_AD();
    if(vx>1) av += vx;
      else j++;
    }
  if(j<tim)  {
     av = av/(tim-j);
     vx=av;
     }
   else vx=0;
 return vx;
}
/******************max187****************/
/************/
unsigned int Read_from_AD(void) {
   union {
     unsigned int unsignedout;
     unsigned char ch[2];
   } para;
   unsigned char i;

   AD_DO = 1;
   AD_CLK = 0;
   AD_CS = 0;         /* Start conversition */

   i = 20;
   do{
     i--;
     if (i==0){
        AD_CS=1;
	return 0;
        }
   } while(AD_DO==0);

   para.ch[0] = 0;
        AD_CLK = 1;
        AD_CLK = 0;
        para.ch[0] |= AD_DO; /* 0*/
        AD_CLK = 1;
        AD_CLK = 0;
        para.ch[0] <<= 1;
        para.ch[0] |= AD_DO;  /*1 */
        AD_CLK = 1;
        AD_CLK = 0;
        para.ch[0] <<= 1;
        para.ch[0] |= AD_DO;  /*2*/
        AD_CLK = 1;
        AD_CLK = 0;
        para.ch[0] <<= 1;
        para.ch[0] |= AD_DO;  /*3*/

   para.ch[1] = 0;
        AD_CLK = 1;
        AD_CLK = 0;
        para.ch[1] |= AD_DO;  /*0*/
        AD_CLK = 1;
        AD_CLK = 0;
        para.ch[1] <<= 1;
        para.ch[1] |= AD_DO;  /*1*/
        AD_CLK = 1;
        AD_CLK = 0;
        para.ch[1] <<= 1;
        para.ch[1] |= AD_DO;  /*2*/
        AD_CLK = 1;
        AD_CLK = 0;
        para.ch[1] <<= 1;
        para.ch[1] |= AD_DO;  /*3*/
        AD_CLK = 1;
        AD_CLK = 0;
        para.ch[1] <<= 1;
        para.ch[1] |= AD_DO;  /*4*/
        AD_CLK = 1;
        AD_CLK = 0;
        para.ch[1] <<= 1;
        para.ch[1] |= AD_DO;  /*5 */
        AD_CLK = 1;
        AD_CLK = 0;
        para.ch[1] <<= 1;
        para.ch[1] |= AD_DO;  /*6 */
        AD_CLK = 1;
        AD_CLK = 0;
        para.ch[1] <<= 1;
        para.ch[1] |= AD_DO;  /*7*/

   AD_CS = 1;
   return para.unsignedout;
}
/********************max187******************/
/*************************** Get A/D Datas **********************/

/************************************** EEPROM 93C46 OPERATION *************/
void send_byte(unsigned char dat) {
   unsigned char i;

   EPR_CS = 1;        /* Start Condition */
   EPR_DI = 1;
   EPR_CLK = 1;
   EPR_CLK = 0;
   _nop_();

   for(i=0;i<8;i++) {
     dat <<= 1;
     EPR_DI = CY;
     EPR_CLK = 1;
     EPR_CLK = 0;
     }

   _nop_();
 EPR_CS = 0;
 _nop_();
 _nop_();
}

unsigned int read_word(unsigned char addr) {
   unsigned char i;
   unsigned char data_in;
   unsigned int datx;

   if(addr>63) return(0);

   EPR_CS = 1;               /* Start Condition */
   EPR_DI = 1;
   EPR_CLK = 1;
   EPR_CLK = 0;

   addr &= 0x3f;             /* send address */
   addr |= 0x80;
   for(i=0;i<8;i++) {
     addr <<= 1;
     EPR_DI = CY;
     EPR_CLK = 1;
     EPR_CLK = 0;
     }

   for(i=0;i<8;i++) {        /* read high byte */
     EPR_CLK = 1;
     EPR_CLK = 0;
     data_in <<= 1;
     CY = EPR_DO;
     data_in |= CY;
     }
   datx=data_in*256;

   for(i=0;i<8;i++) {        /* read low byte */
     EPR_CLK = 1;
     EPR_CLK = 0;
     data_in <<= 1;
     CY = EPR_DO;
     data_in |= CY;
     }

 EPR_CS = 0;
 datx |= data_in;
 return(datx);
}

void write_word(unsigned char addr,unsigned int data_out) {
   unsigned char i;

   if(addr>63) goto end_ww;

   send_byte(0x30);
   _nop_();
   _nop_();

   EPR_CS = 1;               /* Start Condition */
   EPR_DI = 1;
   EPR_CLK = 1;
   EPR_CLK = 0;
   _nop_();

   addr &= 0x3f;             /* send address */
   addr |= 0x40;
   for(i=0;i<8;i++) {
     addr <<= 1;
     EPR_DI = CY;
     EPR_CLK = 1;
     EPR_CLK = 0;
     }

   for(i=0;i<16;i++) {        /* write one word */
     data_out <<= 1;
     EPR_DI = CY;
     EPR_CLK = 1;
     EPR_CLK = 0;
     }

  _nop_();
 EPR_CS = 0;
   dly(3);

 send_byte(0x00);
 dly(1);
end_ww:
 _nop_();
 _nop_();
}
/*************************** Get A/D Datas **********************/
/**** unsigned int read_ad1549(void)  *******
unsigned int Read_from_AD(void) {
   unsigned int i;
   unsigned int dat;
      AD_CLK=0;
      AD_CS=0;                         start condition
      dat=0;
      for(i=0;i<10;i++)
         {
           AD_CLK=1;
           AD_CLK=0;
          }
      AD_CS=1;
      for(i=0;i<6;i++)  _nop_();
        AD_CS=0;
        dat=(dat<<1)|AD_DO;
        for(i=0;i<9;i++)  {
          AD_CLK=1;
          AD_CLK=0;
          dat=(dat<<1)|AD_DO;
          }
        AD_CLK=1;   AD_CLK=0;
        AD_CS=1;
    dat >>= 2;
    i=dat;
    return i;
    }

 ********************/

⌨️ 快捷键说明

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