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

📄 mainpro.c

📁 /* LJD-IV 液晶、键盘驱动 /* 作者:刘延军 /* 2007年10月2日
💻 C
字号:
#include <reg52.h>
#include <lcdkey.h>
#include <ds12887.h>
#include <max197.h>
#include <stdio.h>

sbit P1_0=P1^0;     //继电器控制位

unsigned char code  cydljk_str[]={18,41,51,45,22,15,33,06,28,64,31,56,47,21,45,19};
                    //区位码表:采油动力监控系统
unsigned char code menuitems_str[]={18,46,42,93,28,76,18,66,28,39,34,28,18,73,31,20,
                                   42,93,30,61,20,11,43,45,47,21,45,19,31,56,54,38};
                     //区位码表:菜单项
                     //1.参数检测;2.记录查看;3.数据传送;4.系统控制
float xdata values[7];
void(*SoftReset)(); //软件复位

/*菜单项显示*/
void Menu_Items_Display(void)
{
   unsigned char xdata xx=0x04,yy=0x00,y=0x04,i;
   for(i=1;i<=4;i++)
   {
      LcdDisplayAsc(0x06,y,i|0x30);
      LcdDisplayAsc(0x07,y,'.');
      LcdDisplayWord(xx++,yy,menuitems_str[(i-1)*8],menuitems_str[(i-1)*8+1]);
      LcdDisplayWord(xx++,yy,menuitems_str[(i-1)*8+2],menuitems_str[(i-1)*8+3]);
      LcdDisplayWord(xx++,yy,menuitems_str[(i-1)*8+4],menuitems_str[(i-1)*8+5]);
      LcdDisplayWord(xx++,yy,menuitems_str[(i-1)*8+6],menuitems_str[(i-1)*8+7]);
      y+=0x10;xx=0x04;yy++;
   }
}

/*菜单选择*/
unsigned char Menu_Select(unsigned char key)
{
   static unsigned char point=0;

   if(key==0x0a)
     {
      point=(point+1)%4;
      switch(point)
       {
         case 0:LcdClearSection(0x02,0x03);
                LcdDisplayAsc(0x05,0x04,'>');break;
         case 1:LcdClearSection(0x02,0x00);
                LcdDisplayAsc(0x05,0x14,'>');break;
         case 2:LcdClearSection(0x02,0x01);
                LcdDisplayAsc(0x05,0x24,'>');break;
         case 3:LcdClearSection(0x02,0x02);
                LcdDisplayAsc(0x05,0x34,'>');break;
       }
     }

   if(key==0x0b)
     {
      point=(point-1)%4;
      switch(point)
       {
         case 0:LcdClearSection(0x02,0x01);
                LcdDisplayAsc(0x05,0x04,'>');break;
         case 1:LcdClearSection(0x02,0x02);
                LcdDisplayAsc(0x05,0x14,'>');break;
         case 2:LcdClearSection(0x02,0x03);
                LcdDisplayAsc(0x05,0x24,'>');break;
         case 3:LcdClearSection(0x02,0x00);
                LcdDisplayAsc(0x05,0x34,'>');break;
       }
    }
    return point;
}
/*显示选择菜单*/
void Menu_Display(unsigned char index)
{
    LcdClear();
    switch(index)
       {
         case 0:
                LcdDisplayAsc(0x05,0x04,'>');break;
         case 1:
                LcdDisplayAsc(0x05,0x14,'>');break;
         case 2:
                LcdDisplayAsc(0x05,0x24,'>');break;
         case 3:
                LcdDisplayAsc(0x05,0x34,'>');break;
       }
   Menu_Items_Display();
}
unsigned char MeasureItem_Introduce(void)
{
   unsigned char xdata key;
   LcdClear();

   LcdDisplayWord(0x03,0x01,49,01);
   LcdDisplayWord(0x04,0x01,52,81);
   LcdDisplayWord(0x05,0x01,28,76);
   LcdDisplayWord(0x06,0x01,18,66);
   LcdDisplayWord(0x07,0x01,18,46);
   LcdDisplayWord(0x08,0x01,42,93);
   //请(3975)  按(1620)  数(4293)  字(5554)  键(2892)
   LcdDisplayWord(0x02,0x02,39,75);
   LcdDisplayWord(0x03,0x02,16,20);
   LcdDisplayWord(0x04,0x02,42,93);
   LcdDisplayWord(0x05,0x02,55,54);
   LcdDisplayWord(0x06,0x02,28,92);
   LcdDisplayAsc(0x0e,0x24,'[');
   LcdDisplayAsc(0x0f,0x24,'1');
   LcdDisplayAsc(0x10,0x24,'-');
   LcdDisplayAsc(0x11,0x24,'7');
   LcdDisplayAsc(0x12,0x24,']');

   key=ReadKey();

   return key;

}
void a_up_measure(void)
{
  unsigned char xdata i;
  LcdClear();
  values[0]=0;
  for(i=0;i<3;i++)
    values[0]+=Max197_Convert(0x40);
  values[0]=values[0]/3;

  LcdDisplayAsc(0x05,0x14,'A');
  LcdDisplayWord(0x03,0x01,47,64);//相
  LcdDisplayWord(0x04,0x01,41,47);//上
  LcdDisplayWord(0x05,0x01,48,48);//行
  LcdDisplayWord(0x06,0x01,21,71);//电
  LcdDisplayWord(0x07,0x01,33,87);//流

  values[0]=(values[0]-1)*75;
  LcdDisplayFloat(0x04,0x24,values[0]);

  while((ReadKey())!=0x0c);

}
void a_down_measure(void)
{
  unsigned char xdata i;
  LcdClear();
  values[1]=0;
  for(i=0;i<3;i++)
    values[1]+=Max197_Convert(0x40);
  values[1]=values[1]/3;

  LcdDisplayAsc(0x05,0x14,'A');
  LcdDisplayWord(0x03,0x01,47,64);//相
  LcdDisplayWord(0x04,0x01,47,34);//下
  LcdDisplayWord(0x05,0x01,48,48);//行
  LcdDisplayWord(0x06,0x01,21,71);//电
  LcdDisplayWord(0x07,0x01,33,87);//流

  values[1]=(values[1]-1)*75;
  LcdDisplayFloat(0x04,0x24,values[1]);

  while((ReadKey())!=0x0c);

}
void b_up_measure(void)
{
  unsigned char xdata i;
  LcdClear();
  values[2]=0;
  for(i=0;i<3;i++)
    values[2]+=Max197_Convert(0x41);
  values[2]=values[2]/3;

  LcdDisplayAsc(0x05,0x14,'B');
  LcdDisplayWord(0x03,0x01,47,64);//相
  LcdDisplayWord(0x04,0x01,41,47);//上
  LcdDisplayWord(0x05,0x01,48,48);//行
  LcdDisplayWord(0x06,0x01,21,71);//电
  LcdDisplayWord(0x07,0x01,33,87);//流

  values[2]=(values[2]-1)*75;
  LcdDisplayFloat(0x04,0x24,values[2]);

  while((ReadKey())!=0x0c);

}
void b_down_measure(void)
{
  unsigned char xdata i;
  LcdClear();
  values[3]=0;
  for(i=0;i<3;i++)
    values[3]+=Max197_Convert(0x41);
  values[3]=values[3]/3;

  LcdDisplayAsc(0x05,0x14,'B');
  LcdDisplayWord(0x03,0x01,47,64);//相
  LcdDisplayWord(0x04,0x01,47,34);//下
  LcdDisplayWord(0x05,0x01,48,48);//行
  LcdDisplayWord(0x06,0x01,21,71);//电
  LcdDisplayWord(0x07,0x01,33,87);//流

  values[3]=(values[3]-1)*75;
  LcdDisplayFloat(0x04,0x24,values[3]);

  while((ReadKey())!=0x0c);

}

void t_measure(void)
{
  unsigned char xdata i;
  LcdClear();
  values[4]=0;
  for(i=0;i<3;i++)
    values[4]+=Max197_Convert(0x42);
  values[4]=values[4]/3;

  LcdDisplayWord(0x03,0x01,46,34);//温
  LcdDisplayWord(0x04,0x01,22,40);//度

  LcdDisplayFloat(0x04,0x24,values[4]);

  while((ReadKey())!=0x0c);
}
void taoya_measure(void)
{
  unsigned char xdata i;
  LcdClear();
  values[5]=0;
  for(i=0;i<3;i++)
    values[5]+=Max197_Convert(0x43);
  values[5]=values[5]/3;

  LcdDisplayWord(0x03,0x01,44,55);//套
  LcdDisplayWord(0x04,0x01,49,25);//压

  LcdDisplayFloat(0x04,0x24,values[5]);

  while((ReadKey())!=0x0c);
}
void huiya_measure(void)
{
  unsigned char xdata i;
  LcdClear();
  values[6]=0;
  for(i=0;i<3;i++)
    values[6]+=Max197_Convert(0x44);
  values[6]=values[6]/3;

  LcdDisplayWord(0x03,0x01,27,56);//回
  LcdDisplayWord(0x04,0x01,49,25);//压

  LcdDisplayFloat(0x04,0x24,values[6]);

  while((ReadKey())!=0x0c);
}
/*************参数检测*****************/
void Paras_Measure(void)
{
   unsigned char xdata key;

   while(key=MeasureItem_Introduce())
   {
     switch(key)
     {
       case 1:a_up_measure();break;//A相上行电流
       case 2:a_down_measure();break;//A相下行电流
       case 3:b_up_measure();break;//B相上行电流
       case 4:b_down_measure();break;//B相下行电流
       case 5:t_measure();break;//温度
       case 6:taoya_measure();break;//套压
       case 7:huiya_measure();break;//回压
       case 0x0d:
              return;
     }
   }

}
/*************************************/
/**********记录查看*******************/
void Paras_Query(void)
{
   unsigned char xdata i,yy=0x00;
   LcdClear();
   for(i=0;i<7;i++,yy+=0x08)
   {
     LcdDisplayAsc(0x04,yy,(i+1)|0x30);
     LcdDisplayAsc(0x05,yy,':');
     LcdDisplayFloat(0x06,yy,values[i]);
   }
   while((ReadKey())!=0x0c);
}
/*************************************/

/*********数据传送********************/
void Paras_Trans(void)
{
   LcdClear();
   LcdDisplayWord(0x03,0x01,20,11);
   LcdDisplayWord(0x04,0x01,43,45);
   LcdDisplayWord(0x05,0x01,19,41);
   LcdDisplayWord(0x06,0x01,25,06);

   while((ReadKey())!=0x0c);

}
/*************************************/
/*********系统控制********************/
void SysControl(void)
{
   unsigned char xdata key;
   LcdClear();

   LcdDisplayAsc(0x04,0x14,'1');
   LcdDisplayAsc(0x05,0x14,'.');
   LcdDisplayWord(0x03,0x01,45,03); //停
   LcdDisplayWord(0x04,0x01,27,90); //机
   LcdDisplayAsc(0x04,0x24,'2');
   LcdDisplayAsc(0x05,0x24,'.');
   LcdDisplayWord(0x03,0x02,24,20); //复
   LcdDisplayWord(0x04,0x02,46,27); //位
   key=ReadKey();
   if(key==0x0c) return;
   else
   {
     switch(key)
     {
     case 1:P1_0=1;break;
     case 2:SoftReset=0; SoftReset();break;
    }
   }
}
/*************************************/
void func_operate(unsigned char index)
{
   switch(index)
   {
     case 0:Paras_Measure();break;
     case 1:Paras_Query();break;
     case 2:Paras_Trans();break;
     case 3:SysControl();break;
   }

   Menu_Display(index);
}

void main(void)
{
 unsigned char *p,xx=0x02,fun_index=0,key=0xff;

 P1=0xff;
 while(P1_0!=0)
  {
    P1_0=0;
  }
 /*键盘显示器初始化*/
 KeyInitialize();
 LcdInitialize();
 LcdClear();

 /*显示仪器名称*/

 for(xx=0x02,p=cydljk_str;p<cydljk_str+16;xx++)
      {
      LcdDisplayWord(xx,0x01,*p++,*p++);
      LcdDisplayWord(xx+1,0x01,*p,*(p+1));
      }

 /*按OK进入系统菜单*/

 while((key=ReadKey())!=0x0c);


 Menu_Display(0);

 /*软件复位
 SoftReset=0;
 SoftReset(); */

 while(1)
 {

   key=ReadKey();
   switch(key)
   {
     case 0x0a:
     case 0x0b:fun_index=Menu_Select(key);break;
     case 0x0c:func_operate(fun_index);break;
   }

 }
}

⌨️ 快捷键说明

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