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

📄 caiji.c.bak

📁 我做的关于锅炉运行状况采集的产品
💻 BAK
📖 第 1 页 / 共 5 页
字号:
        watch_send_reg=WATCH_SEND_TIME;
        watch_send_flag=1;
      }
      if(watch_up_send_reg!=0)
      {
        watch_up_send_reg--;
      }
      else
      {
        watch_up_send_reg=WATCH_SEND_TIME;
        watch_up_send_flag=1;
      }
  }
  if(interval_send_reg!=0)
  {
    interval_send_reg--;
  }
  else{
    interval_send_reg=INTERVAL_SEND_TIME;
    interval_send_flag=1;
   }

}

void send_word_down(void){
unsigned char data i,yushu,shang;
        send_buffer0[0]=0x23;//#
        send_buffer0[1]=(interval_send_moduel+1)/16+0x30;
        send_buffer0[2]=(interval_send_moduel+1)%16+0x30;
        send_buffer0[3]=interval_send_chanel+0x30;
        send_buffer0[4]=END_WORD;
        send_length0=5;
  send_finger0=&send_buffer0;
  SBUF=*send_finger0;
  watch_send_reg=WATCH_SEND_TIME;
  watch_send_flag=0;
}
//*********************************------------------------------//
/*主函数*/
//********************************-------------------------------//
void main(void){
  unsigned char data master,master1,master2,number;

BEGIN:
  init();
  read_e2();       //读e2
  initial();      //初始化液晶
  send_number1=0;
  master=1;
     for(master2=0;master2<moduel_number;master2++)
            {
              send_number1=moduel[master2].use_chanel+send_number1;
              master=moduel[master2].use_chanel+master;
            }
  send1_buffer1[2]=send_number1;
  send_all_nb=send_number1;
  EA=1;
  while(1)
  {
  if(watch_send_flag)
  {
   goto BEGIN;
  }
  if(cpu_run_flag)
  {
   RUN_CPU=RUN_CPU^1;
   cpu_run_flag=0;
  }
  if((cpu_show_flag)&&(keyvalue!=SET)&&(keyvalue!=CHECK))
  {
    display_cycle();
    cpu_show_flag=0;
    control=1;
  }
  ldelay(1);
  if(keyvalue==SET)
  {
    pass();
    control=1;
  }
  if(keyvalue==CHECK)
  {
    display_void();
    control=1;
  }

  if((interval_send_flag==1)&&(receive_bit_number0==0)&&(dispose_step0==0)&&(receive_bit_number1==0))
  {
    if(interval_send_nb!=interval_receive_nb)
     {
       chanel_str[receive_moduel][receive_chanel].display_data=0;
       chanel_str[receive_moduel][receive_chanel].real_data=0;
       interval_receive_nb++;
       if(interval_receive_nb>=send_all_nb)
          interval_receive_nb=0;
     }
//   address=moduel[interval_send_moduel].moduel_station;  //当前下发地址
   address=interval_send_moduel+1;
   //command_send_down=1;
   chanel_n=interval_send_chanel;      //当前下发的通道
   receive_moduel=interval_send_moduel;
   receive_chanel=interval_send_chanel;
   control_485=1;
   send_word_down();
   interval_send_chanel++;
   interval_send_nb++;
   if(interval_send_chanel>=moduel[interval_send_moduel].use_chanel)
    {
     interval_send_chanel=0;
     interval_send_moduel++;
     if(interval_send_moduel>=moduel_number)
     {
      interval_send_moduel=0;
      interval_send_nb=0;
     }
    }
   interval_send_flag=0;
   }
  if(receive_over_flag0==1) //收完下行数据
  {
    for(master=0;master<8;master++)
    {
     if(receive_bit_number0<8)
      {
        if(receive_buffer0[master+1]!=0x0d)
         {
           moduel[receive_moduel].chanel_data[receive_chanel][master]=receive_buffer0[master+1];
         }
        else
         {
           moduel[receive_moduel].chanel_data[receive_chanel][master]=0x0d;
         }
      }
      else
       {
           moduel[receive_moduel].chanel_data[receive_chanel][master]=receive_buffer0[master+1];
       }
     }//与for 对应
     receive_over_flag0=0;
     receive_bit_number0=0;
     receive_step=0;
     dispose_step0=1;
     if(receive_temprature_flag==1)
      {
       temp_to_data();
       receive_temprature_flag=0;
      }
     else
       asc_to_data();
     if(dispose_step0==2)
            {
              data_to_display();
            }

    interval_receive_nb++;
    if(interval_receive_nb>=send_all_nb)
          interval_receive_nb=0;
   }


  }//与while对应
}//与void对应


//*********************************------------------------------//
/*上行中断相关处理函数*/
//********************************-------------------------------//
uchar check_sum(unsigned int xdata up_begin,unsigned char xdata length)
{
  uchar xdata * kk;
  uint ll;
  uchar mm;
  ll=0;
  kk=up_begin;
  do{
     ll=ll+*kk;
     ll=ll%256;
     kk++;
     length--;
     }
  while(length!=0);
  mm=(uchar)(ll);
  return (mm);
}


//*********************************------------------------------//
/*处理函数,变成需要显示的数值*/
//********************************-------------------------------//
void temp_to_data()
{
  if(moduel[receive_moduel].chanel_data[receive_chanel][0]==0x2b)
  {
     chanel_str[receive_moduel][receive_chanel].real_data=(moduel[receive_moduel].chanel_data[receive_chanel][1]-0x30)*1000;
     chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][2]-0x30)*(100);
     chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][3]-0x30)*(10);
     chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][4]-0x30);
     //     chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][7]-0x30)*(0.0001);
     dispose_step0=2;
  }
  else
  {
   chanel_str[receive_moduel][receive_chanel].real_data=0;
   dispose_step0=2;
  }
}
void asc_to_data()
{
  if(moduel[receive_moduel].chanel_data[receive_chanel][0]==0x2b)
  {
   if(moduel[receive_moduel].chanel_data[receive_chanel][2]==0x2e)
   {
     chanel_str[receive_moduel][receive_chanel].real_data=moduel[receive_moduel].chanel_data[receive_chanel][1]-0x30;
     chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][3]-0x30)*(0.1);
     chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][4]-0x30)*(0.01);
     chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][5]-0x30)*(0.001);
     chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][6]-0x30)*(0.0001);
     dispose_step0=2;
   }
   else
   {

   chanel_str[receive_moduel][receive_chanel].real_data=0;
   dispose_step0=2;
   }
  }
  else
  {
   chanel_str[receive_moduel][receive_chanel].real_data=0;
   dispose_step0=2;
  }
}

void data_to_display()
{
  float idata i;
  switch(chanel_str[receive_moduel][receive_chanel].mode)  //输入模式
      {
        case 1:             //mode1  0-10ma
           if(chanel_str[receive_moduel][receive_chanel].real_data<=0)
           {
             chanel_str[receive_moduel][receive_chanel].display_data=0;
             dispose_step0=0;
           }
           else
           {
            i=chanel_str[receive_moduel][receive_chanel].scale/5;
            chanel_str[receive_moduel][receive_chanel].display_data=chanel_str[receive_moduel][receive_chanel].real_data * i;
            dispose_step0=0;
           }
         break;
        case 2:           //mode2  4-20ma
           if(chanel_str[receive_moduel][receive_chanel].real_data<=1)
           {
             chanel_str[receive_moduel][receive_chanel].display_data=0;
             dispose_step0=0;
           }
           else
           {
            i=chanel_str[receive_moduel][receive_chanel].scale/4;
            chanel_str[receive_moduel][receive_chanel].display_data=(chanel_str[receive_moduel][receive_chanel].real_data-1) * i;
            dispose_step0=0;
            //dwordtobcd(&(chanel_str[receive_moduel][receive_chanel].display_data),4);
            //putstring1(8,2);
           }
         break;
        case 3:           //mode3  温度
           if(chanel_str[receive_moduel][receive_chanel].real_data<=0)
           {
             chanel_str[receive_moduel][receive_chanel].display_data=0;
             dispose_step0=0;
           }
           else
           {
            i=chanel_str[receive_moduel][receive_chanel].scale/600;
            chanel_str[receive_moduel][receive_chanel].display_data=(chanel_str[receive_moduel][receive_chanel].real_data) * i;
            dispose_step0=0;
            //dwordtobcd(&(chanel_str[receive_moduel][receive_chanel].display_data),4);
            //putstring1(8,2);
           }
         break;
        default:
         chanel_str[receive_moduel][receive_chanel].display_data=0;
         dispose_step0=0;
         break;
      }//switch mode
}

//*********************************------------------------------//
/*读函数*/
//********************************-------------------------------//
void read_e2(void)
{
  unsigned char data i,j,m,str10[16];
  i=0;
  for (j=0;j<16;j=j+2)
            {
           begn_read:
              str10[j]=read_24c021(j);
              str10[j+1]=read_24c021(j+1);
              if(i<25){
                 if(str10[j]!=str10[j+1])
                  {
                   i=i+1;
                   goto begn_read;
                  }
                 else
                   i=0;
              }
              else
              i=0;
            }
  device_address=str10[0];
  send_buffer1[0]=0x68;
  send_buffer1[1]=device_address;
  send1_buffer1[0]=0x68;
  send1_buffer1[1]=device_address;
  moduel_number=str10[2];
  for (j=0;j<6;j++)
           {
              chanel_number[j]=str10[j*2+4];
              moduel[j].use_chanel=str10[j*2+4];
           }
  for (i=0;i<moduel_number;i++)
     {
        for(j=0;j<chanel_number[i];j++)
           {
             chanel_str[i][j].name=read_24c021(i*32+j*4+0x10); //读名称
             chanel_str[i][j].title=read_24c021(i*32+j*4+0x10+1);//读标题
             m=read_24c021(i*32+j*4+0x10+2);//量程
             chanel_str[i][j].scale=m*10;
             chanel_str[i][j].mode=read_24c021(i*32+j*4+0x10+3);//模式
           }
     }

}

uchar read_24c021(uchar pp)
{
   unsigned char kld;
              control_write_e2=0;
              str24c021();
              w24c021(0xa0);
              w24c021(pp);
              str24c021();
              w24c021(0xa1);
              kld=rd24c021();
              stop24c021();
              ldelay(2);
              control_write_e2=1;
              return (kld);
}

void write_24c021(uchar tt,uchar dd)
{
            EA=0;
            control_write_e2=0;
            str24c021();
            w24c021(0xa0);
            w24c021(tt);
            w24c021(dd);
            stop24c021();
            ldelay(10);
            control_write_e2=1;
            EA=1;

}
//*********************************------------------------------//
/*公共函数*/
//********************************-------------------------------//
void init_display(void)
{
      switch(chanel_str[moduel_display_step][chanel_display_step].name)  //名称
      {
        case 1:
         {
          display_name="一号";//&name_1[];
         break;
         }
        case 2:
          display_name="二号";//name_2[];
         break;
        case 3:
          display_name="三号";//name_3[];
         break;
        case 4:
          display_name="一次";//name_4[];
         break;
        case 5:
          display_name="二次";//name_5[];
         break;
        default:
         display_name="二次";//name_5[];
         break;
      }//switch name
      switch(chanel_str[moduel_display_step][chanel_display_step].title) //标题
      {
       case 1:
          display_title="汽包液位";//title_1[];
          display_unit="mmHg";//unit_height[];
         break;
       case 2:
          display_title="蒸汽压力";//title_2[];
          display_unit="KPa";//unit_pressure[];
         break;
       case 3:
          display_title="蒸汽温度";//title_3[];
          display_unit="℃";//unit_temperature[];
         break;
       case 4:
          display_title="补水压力";//title_4[];
          display_unit="KPa";//unit_pressure[];
         break;
       case 5:
          display_title="进水压力";//title_5[];
          display_unit="KPa";//unit_pressure[];
         break;
       case 6:
          display_title="回水压力";//title_6[];
          display_unit="KPa";//unit_pressure[];
         break;
       case 7:
          display_title="进水温度";//title_7[];
          display_unit="℃";//unit_temperature[];
         break;
       case 8:
          display_title="回水温度";//title_8[];
          display_unit="℃";//unit_temperature[];
         break;
       default:
          display_title="回水温度";//title_8[];
          display_unit="℃";//unit_temperature[];
         break;
      }//swictch title unit
      switch(chanel_str[moduel_display_step][chanel_display_step].mode)  //输入模式
      {
        case 1:
         display_mode="0-10MA";  //mode1
         break;
        case 2:
         display_mode="4-20MA";
           //mode2
         break;
        case 3:
         display_mode="温度 ";
         break;
        default:
         display_mode="错误";
         break;
      }//switch mode
}

void initial(void)              //初始化液晶
{
     write(0,0x3f);		/* open the displayer */
     write(2,0x3f);
     write(0,0xc0);		/* set scan from the first line */
     write(2,0xc0);
     clear();			/* clear screen */
}

⌨️ 快捷键说明

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