📄 mainpro.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 + -