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

📄 caiji.c

📁 我做的关于锅炉运行状况采集的产品
💻 C
📖 第 1 页 / 共 5 页
字号:
#include<w77e58.h>
#include<stdio.h>
#include<absacc.h>

#define  END_WORD 0x0d  //结束字符
#define  TH0_TIME 0xdc//10ms中断  0xfc  //定时中断时间间隔
#define  TL0_TIME 0 //0x66
#define  CPU_RUN_TIME 25         //闪烁时间
#define  INTERVAL_SEND_TIME 50   //发送间隔
#define  CPU_SHOW_TIME  500      //显示变换时间 5秒
#define  WATCH_SEND_TIME 360   //监视发送半小时不下发,即复位
//*显示参数*//
#define uchar unsigned char
#define uint unsigned int
#define ESC 15
#define ENTER 14
#define SET 10
#define CHECK 11
#define UP 12
#define DOWN 13
#define NONE 255


void initial(void);
void clear(void);
void wait_key(void);
void delay(void);
void ldelay(unsigned int i);
void display_cycle(void);
void print(unsigned int hzb,unsigned char h,unsigned char v);
void writebig(char zf,unsigned char h,unsigned char v);
void kbscan(void);
void write(unsigned char lrcd,unsigned char cd);
unsigned int addres(unsigned char x,unsigned char y,char bytes);
void whz(unsigned int hz,unsigned char h,unsigned char v);
void dwordtobcd(uint wa,unsigned char bytes);
void ddatatobcd(uchar chdata);
void putstring0(char bytes,char h);
void putstring1(char bytes,char h);
void putstring(char l);
void putstring_left(char l);
void get_address(void);      //本设备的地址
void get_moduel_num(void);   //设置获得模块数量
void get_chanel_num(void);   //每个模块的通道数量
void get_chanel_param(void); //通道参数
void read_e2(void);
void init_display(void);
void w24c021(uchar k);
void str24c021(void);
void stop24c021(void);
uchar rd24c021(void);
void display_var(uchar code * dispt,uchar h,uchar v);
void pass(void);
void write_param(uchar put_where);
void write_moduel(unsigned char mod);
void write_chanel(unsigned char modu,unsigned char cha);
void write_mode(unsigned char modu_4,unsigned char cha_4);
void write_scale(unsigned char modu_3,unsigned char cha_3);
void write_name(unsigned char modu_1,unsigned char cha_1);
void write_title(unsigned char modu_2,unsigned char cha_2);
void write_e2(unsigned char modue1,unsigned char chane1,unsigned char kind,unsigned char position);
void display_void(void);
void display_param(void);
void display_value(void);
void check_chanel_number(void);
void check_chanel_param_void(void);
void check_chanel_now(uchar p,uchar b);
void check_chanel_display(uchar ccd);
uchar read_24c021(uchar pp);
void write_24c021(uchar tt,uchar dd);

unsigned char code input_chanel_number1[]="1:通道1";
unsigned char code input_chanel_number2[]="2:通道2";
unsigned char code input_chanel_number3[]="3:通道3";
unsigned char code input_chanel_number4[]="4:通道4>>";
unsigned char code input_chanel_number5[]="5:通道5";
unsigned char code input_chanel_number6[]="6:通道6";
unsigned char code input_chanel_number7[]="7:通道7";
unsigned char code input_chanel_number8[]="8:通道8";
unsigned char code input_moduel_number1[]="1:模块1";
unsigned char code input_moduel_number2[]="2:模块2";
unsigned char code input_moduel_number3[]="3:模块3";
unsigned char code input_moduel_number4[]="4:模块4>>";
unsigned char code input_moduel_number5[]="5:模块5";
unsigned char code input_moduel_number6[]="6:模块6";
unsigned char code unit_temperature[]="℃";
unsigned char code unit_pressure[]="KPa";
unsigned char code unit_height[]="mmHg";
unsigned char code wait[]="请稍候...";
unsigned char code save[]="正在保存数据";

unsigned char  code * display_name;
unsigned char  code * display_title;
unsigned char  code * display_unit;
unsigned char  code * display_mode;

unsigned char data keyvalue;
unsigned char xdata keybuff[16];
unsigned char xdata displaybuff[8];
unsigned char xdata chanel_number[8];
unsigned char data device_address;    //本设备的地址
struct chanel_display{
  unsigned char name,title,mode; //mode 是模式
  unsigned int scale;  //量程
  float display_data,real_data;
};
struct chanel_display xdata chanel_str[6][8];
unsigned char idata mode;
unsigned char idata moduel_display_step=0;
unsigned char idata chanel_display_step=0;
unsigned char data nb_display_step=0;

//*显示参数结束*//
sbit control=P1^5;
sbit RUN_CPU=P3^2;
sbit control_write_e2=P3^3;
sbit control_485=P3^4;
sbit SDA=p1^7;//数据线
sbit SCL=p3^5;//时钟线
bit cpu_run_flag;
bit cpu_show_flag;
bit exchange_flag;
bit watch_send_flag;
bit watch_up_send_flag;
unsigned char data cpu_run_reg;
unsigned  int xdata cpu_show_reg;
unsigned int xdata watch_send_reg;
unsigned int xdata watch_up_send_reg;

unsigned char idata chanel_n;      //通道N
unsigned char idata address;       //现在的地址
//unsigned char data command_send_down;//下发命令

struct moduel_str{
  unsigned char moduel_station,use_chanel;
  unsigned char chanel_data[8][8];
};

struct moduel_str xdata moduel[6];
unsigned char data moduel_number;       //模块数量
unsigned char data interval_send_moduel;//定时招数的模块
unsigned char data interval_send_chanel;//定时招数的通道
unsigned char xdata interval_send_reg;   //定时招数时间间隔寄存器
unsigned char data interval_send_nb;    //定时发送指针
unsigned char data interval_receive_nb; //
unsigned char data send_all_nb;
bit interval_send_flag=0;

//*收发相关参数
unsigned char xdata receive_buffer0[60];   //下行收缓存
unsigned char xdata send_buffer0[15];      //下行发缓存
unsigned char xdata receive_bit_number0;    //下行收数据个数
unsigned char xdata receive_step;
bit receive_over_flag0=0;
bit receive_temprature_flag=0;

unsigned char xdata receive_buffer1[6];    //上行收缓存
unsigned char xdata send_buffer1[400];       //上行发缓存
unsigned char xdata send1_buffer1[400];
unsigned char xdata * transmit;
unsigned char data send1_length1;
unsigned char xdata * send1_finger1;
unsigned char idata send1_number1;
unsigned char data receive_bit_number1;
bit receive_over_flag1=0;

unsigned char xdata send_length0;   //下行发送个数
unsigned char xdata *send_finger0;


unsigned char data send_length1;   //上行发送个数
unsigned char xdata *send_finger1;
unsigned char idata send_number1;
uchar check_sum(unsigned xdata up_begin,unsigned char xdata length);
unsigned char xdata *send_bus;
unsigned char idata receive_moduel;
unsigned char idata receive_chanel;
void send_word_down(void);


unsigned char data dispose_step0;
unsigned char data dispose_step1;
float idata real_data1;
float xdata display_data;
void asc_to_data(void);
void temp_to_data(void);
void data_to_display(void);
void dwordtobcd2(uint wa2);
void putstring5(uchar l);
unsigned int xdata dt1;
float xdata dt2;

void init(){
  IE=0;
  IP=0x42;
  CKCON=0XC7;//11000111B;
  TH0=TH0_TIME;
  TL0=TL0_TIME;
  TR0=1;
  TR1=1;
/*串口1*/
  SCON1=0x50;
  TMOD=0x21;
  TH1=0xe8;//e8;    //上传为1200
  TL1=0xe8;//e8;
/*串口0*/
  SCON=0x50;
  T2CON=0x34;
  T2MOD=0;
  TL2=0Xdc;   //拨特率下发为9600
  TH2=0Xff;
  RCAP2L=0Xdc;
  RCAP2H=0Xff;
  TCON=0X55;

  PS1=1;
  IE=0x52;        //开中断
  ES1=1;
  PT1=1;
  ES=1;
  //需要初始化的参数
  cpu_run_reg=CPU_RUN_TIME;
  cpu_show_reg=CPU_SHOW_TIME;
  watch_send_reg=WATCH_SEND_TIME;
  watch_send_flag=0;
  watch_up_send_reg=WATCH_SEND_TIME;
  watch_up_send_flag=0;
  receive_bit_number0=0;
  receive_step=0;
  dispose_step0=0;
  dispose_step1=0;
  control=1;   //液晶控制脚为低,液晶被点亮
  cpu_show_flag=1;
  receive_bit_number1=0;
  moduel_display_step=0;
  chanel_display_step=0;
  nb_display_step=1;
  interval_send_nb=0;
  interval_receive_nb=0;

}
//*********************************------------------------------//
/*中断函数*/
//********************************-------------------------------//
void serail0 () interrupt 4 using 3 {
 unsigned char data c,d;
 if(RI==1)
 {
   RI=0;
   c=SBUF;
   switch (receive_step)
   {
     case 0:
       {
         switch (c){
         case 0x3e:     //>
         {
           receive_buffer0[receive_bit_number0]=c;
           receive_bit_number0++;
           receive_step=1;
           break;
         }
         default:
         break;
       }//switch c
      break;
      }  //case 0
     case 1:
      {
         if((receive_bit_number0<8)&&(c!=0x0d))
         {
           receive_buffer0[receive_bit_number0]=c;  //C
           receive_bit_number0++;
         }
         if(receive_bit_number0>8)
         {
           receive_bit_number0=0;
           receive_step=0;
         }
         if(c==0x0d)
         {
           if(receive_bit_number0<7)
              {
                 receive_over_flag0=1;
                 receive_temprature_flag=1;
                 for(d=receive_bit_number0;d<8;d++)
                  {
                     receive_buffer0[d]=0x0d;
                  }
               }
           else
             receive_buffer0[receive_bit_number0]=c;
           receive_over_flag0=1;
         }
      break;
      }  //与case 1;
     default:
     break;
   } //与switch
}//if(ri)
 else if(TI==1)   //发送
   {
     TI=0;
     send_length0--;
     send_finger0++;
     if(send_length0!=0)
     {
      SBUF=*send_finger0;
     }
     else if(send_length0==0)
     {
      control_485=0;
      watch_send_reg=WATCH_SEND_TIME;
      watch_send_flag=0;
     }
   }//ti对应

}/*void对应*/

void serail_1() interrupt 7 {
  unsigned char data da,x,y,z;
  if(RI_1==1)
  {
   // RI_1=0;
    da=SBUF1;
    switch(receive_bit_number1)
    {
      case 0:
      if(da==0x68)
       {
         receive_buffer1[receive_bit_number1]=da;
         receive_bit_number1++;
       }
      RI_1=0;
      break;
     case 1:
       {
       if(da==device_address)
         {
           receive_buffer1[receive_bit_number1]=da;
           receive_bit_number1++;
           RI_1=0;
           break;
         }
       else
         {
           if(da==0x68)
             receive_bit_number1=1;
           else
             receive_bit_number1=0;
         }
       RI_1=0;
       break;
       }
    case 2:
     {
       receive_buffer1[receive_bit_number1]=da;
       receive_bit_number1++;
       RI_1=0;
       break;
     }
    case 3:
     {
       receive_buffer1[receive_bit_number1]=da;
       x=0;
       send_number1=0;
       send1_number1=0;
       send1_length1=0;
       send_length1=0;
       send_bus=receive_buffer1;
       y=check_sum(receive_buffer1,3);  //校验和是否正确
       if(y==receive_buffer1[3])
         {
           for(x=0;x<(moduel_number);x++)
             {
               for(y=0;y<(moduel[x].use_chanel);y++)
                {
               //************************************************
                 transmit=(uchar xdata  *)(&chanel_str[x][y].real_data);
                 send1_buffer1[send1_number1+3]=*transmit;
                 send1_number1++;
                 transmit++;
                 send1_buffer1[send1_number1+3]=*transmit;
                 send1_number1++;
                 transmit++;
                 send1_buffer1[send1_number1+3]=*transmit;
                 send1_number1++;
                 transmit++;
                 send1_buffer1[send1_number1+3]=*transmit;
                 send1_number1++;
                 transmit++;
               //*************************************************
               }
            }
 //******************************************************************
           send1_buffer1[2]=send1_number1/4;
           send1_length1=send1_number1+3;
           send1_buffer1[send1_length1]=check_sum(send1_buffer1,send1_length1);
           send1_length1++;
           send1_finger1=&send1_buffer1;
           SBUF1=*send1_finger1;
 //******************************************************************
        }
        receive_bit_number1=0;
        receive_over_flag1=0;
       RI_1=0;
       break;
     }
    default:
     receive_bit_number1=0;
     RI_1=0;
     break;
   }
  }
  else if(TI_1==1)
   {
     TI_1=0;
 //**************************************************
     send1_length1--;
     send1_finger1++;
     if(send1_length1!=0)
     {
      SBUF1=*send1_finger1;
     }
     else
     {
       watch_up_send_reg=WATCH_SEND_TIME;
       watch_up_send_flag=0;
     }
 //**************************************************
   }
}

void service_t0() interrupt 1 using 2
{
  unsigned char data i,k,l,m;
  char data j;
  TH0=TH0_TIME;
  TL0=TL0_TIME;
  if(cpu_run_reg!=0){
    cpu_run_reg--;
  }
  else{
  cpu_run_reg=CPU_RUN_TIME;
  cpu_run_flag=1;
  }
  if(cpu_show_reg!=0)
  {
    cpu_show_reg--;
  }
  else
  {
    cpu_show_reg=CPU_SHOW_TIME;
    cpu_show_flag=1;
    if(watch_send_reg!=0)
      {
        watch_send_reg--;
      }
      else
      {

⌨️ 快捷键说明

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