📄 menuosd.c
字号:
#include <iom64v.h>
#include <macros.h>
#include "main.h"
#include "stdio.h"
#include "MenuOSD.h"
#include "CS5530.h"
#include "relay.h"
#include "eeprom.h"
#include "PRINTER.h"
unsigned char current_model;
/* Define String */
const char Str_Clear[]={" "};
//const char Str_Digital[11][3]={"0","1","2","3","4","5","6","7","8","9","."};
const char Str_Digital[11][3]={"0 ","1 ","2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ",". "};
const char Str_switch[2][3]={"关","开"};
const char Str_YesNo[2][3]={"否","是"};
const char Str_Error[4][17]={"==超量程有错误==","==总配方超量程==","==落差值超配方==","==容差值超配方=="};
const char Str_Common[3][4]={"Kg","S ","吨"};
const char Str_AMStandby[3][15]={"自动模式待机","手动模式待机","斗内余料 "};
const char Str_AutoStart[4][17]={"第^^^批^料^"," 配料中… ","总重"," 暂停中… "};
const char Str_AutoFinish[6][13]={"第^^^批","料已配完…","请卸料","总重","反向卸料中…","正向卸料中…"};
const char Str_AutoTerminate[2][12]={"程序已中断","请重启机器"};
const char Str_MainMenu[4][15]={"1.配方设定","2.配料参数设定","3.校秤设定","4.统计查询"};
const char Str_DirectionSet[3][12]={"当前配方","批次: ^^^次","物料: "};
const char Str_ParameterSet[4][10]={"物料^: ","自动修正","落差","容差"};
const char Str_BalaCorr1[3][13]={"请清空料斗后","按确认键继续","按返回键退出"};
const char Str_BalaCorr2[2][15]={"请放入砝码","再输入标准重量"};
const char Str_ConsumeRecord[2][13]={"批次: ^^^^次","物料: "};
const char Str_OtherMenu[12][15]={"1.日期 ","2.时间 ","3.分度值 ","4.置零范围 ","5.滤波参数 ","6.满量程 ","7.加料延迟时间","8.点动延迟时间","9.卸料延迟时间","10打印开关 ","11秤号设置 ","12初始值还原 "};
const char Str_DateSet[3][8]={"年^20","月","日"};
const char Str_TimeSet[3][3]={"时","分","秒"};
const char Str_SeparateValue[]={"选择分度值: "};
const char Str_SetZero[]={"置零范围: "};
const char Str_FilterSet[]={"滤波参数: "};
const char Str_MaxWeight[]={"满量程设置: "};
const char Str_MaterialDelayTime[]={"加料延迟时间: "};
const char Str_ClickActionTime[]={"点动开门时间: "};
const char Str_OffloadDelayTime[]={"卸料延迟时间: "};
const char Str_PrintSwitch[]={"打印功能: "};
const char Str_BalanceNo[]={"本机代号: "};
const char Str_Reset[2][13]={"初始值还原: ",__DATE__};
//unsigned char DataStr[]=__DATE__;
//unsigned char TimeStr[]=__TIME__;
/*光标的位置*/
#define mD_MAXC 8
const unsigned char t_mD[mD_MAXC][2]={{3,1},{4,1},{5,1},{3,2},{0,3},{1,3},{2,3},{3,3}};
#define mP_MAXC 7
const unsigned char t_mP[mP_MAXC][2]={{5,0},{5,1},{3,2},{4,2},{5,2},{4,3},{5,3}};
#define mB2_MAXC 4
const unsigned char t_mB2[mB2_MAXC][2]={{0,2},{1,2},{2,2},{3,2}};
#define mCR_MAXC 2
const unsigned char t_mCR[mCR_MAXC][2]={{3,0},{3,1}};
#define mDT_MAXC 6
const unsigned char t_mDT[mDT_MAXC][2]={{4,0},{5,0},{4,1},{5,1},{4,2},{5,2}};
#define m2D_MAXC 2
const unsigned char t_m2D[m2D_MAXC][2]={{4,2},{5,2}};
#define m2T_MAXC 2
const unsigned char t_m2T[m2T_MAXC][2]={{1,2},{3,2}};
/* Define local variable */
static unsigned char password = 0; //密码标识
signed char MainMenu_item; //主菜单号
signed char BeginPosition; //other菜单开始位置
static unsigned char Material_No = 0; //料号(多个界面用)
signed char CP = 0; //光标号(多个界面用)
static unsigned short Weight =0; //砝码值
static unsigned short Unit1[6] = {1,10,100,1000,10000,65535}; //单位值
//自动用的参数
unsigned char t15[5]; //当前罐的状态
unsigned short CurrentAD; //当前有效AD
unsigned short RemainWeight; //余重
/* Define global variable */
CURRENT_PARAMETER_SET struPS;
CURRENT_BALANCE_CORRECTION struBC;
CURRENT_DIRECTION_VALUE struDV;
QUERY_TOTAL_VALUE struQT;
CURRENT_AUTO_PUDDLER struAP;
/* Function */
void CursorOK(unsigned char MaxCursor);
void DisplayAnyValue(unsigned char X,unsigned char Y,unsigned short usValue,unsigned char ucLeng,unsigned char dot);
void UpDownValue(unsigned short *Value,unsigned char flagUpDown,unsigned char Position,unsigned char Max,unsigned char Min,unsigned char Step);
unsigned char DelayDisplay(unsigned char type)
{
unsigned char hz=0;
if(delaydisplaytime[type]==0)
delaydisplaytime[type]++;
else if(delaydisplaytime[type] >= 500)
{
delaydisplaytime[type]=0;
hz=1;
}
return hz;
}
/*********************************************************************
Function:打印内容
*********************************************************************/
void PrintOut(unsigned char P_mode)
{
unsigned char i;
if ( struPS.ucPrintSwitch==1 && print_mode==0)
{
if(P_mode==1)
print_buf[0] = struPS.ucBalanceNo;
else if(P_mode==2)
print_buf[0] = struAP.usTank_Number+1;
else if(P_mode==3)
print_buf[0] = struQT.usTank_Number;
for(i=0;i<5;i++)
{
if(P_mode==1)
print_buf[i+1] =struDV.usDire_MValu[i]*10;
else if(P_mode==2)
print_buf[i+1] =struAP.usCurrent_Material_Value[i];
else if(P_mode==3)
print_buf[i+1] =(unsigned short)(struQT.usDire_MValu[i]/1000);
}
print_mode = P_mode;//打印类型
}
}
/*********************************************************************
Function:按OK键时的光标变量值
*********************************************************************/
void CursorOK(unsigned char MaxCursor)
{
CP++;
if(CP >= MaxCursor)
CP=0;
}
/*********************************************************************
Function:显示任意值
*********************************************************************/
void DisplayAnyValue(unsigned char X,unsigned char Y,unsigned short usValue,unsigned char ucLeng,unsigned char dot)
{
char i;
for(i=5;i>0;i--)
{
if(ucLeng >= i)
{
LCDCharacterWritten(X,Y,Str_Digital[(usValue%Unit1[i])/Unit1[i-1]]);
X++;
}
if(dot == (i-1) && i != 1)
{
LCDCharacterWritten(X,Y,Str_Digital[10]);
X++;
}
}
}
/*********************************************************************
Function:显示AD值
*********************************************************************/
void Display_AD(unsigned char X, unsigned char Y)
{
char i;
if(DelayDisplay(0))
{
LCDposition(X,Y);
for(i=5;i>0;i--)
lcd_wrdata(((AD_value%Unit1[i])/Unit1[i-1])+'0');
}
}
/*********************************************************************
Function:显示批次
*********************************************************************/
void Display_TankNumber(unsigned char X, unsigned char Y)
{
DisplayAnyValue(X,Y,struAP.usTank_Number+1,3,0);
}
/*********************************************************************
Function:显示料号
*********************************************************************/
void Display_MaterialNo(unsigned char X, unsigned char Y)
{
DisplayAnyValue(X,Y,struAP.ucCurrent_Material_No+1,1,0);
}
/*********************************************************************
Function:显示料重值
*********************************************************************/
void Display_MaterialWeight(unsigned char X, unsigned char Y)
{
if(DelayDisplay(1))
{
if(struPS.ucSepaValu==0)
struPS.ucSepaValu=1;
if((struAP.usCurrent_Display_Value%(struPS.ucSepaValu))!=0)//分度
struAP.usCurrent_Display_Value-=((struAP.usCurrent_Display_Value)%(struPS.ucSepaValu));
DisplayAnyValue(X,Y,struAP.usCurrent_Display_Value,5,1);
}
}
/*********************************************************************
Function:显示秤重值
*********************************************************************/
void Display_BalanceWeight(unsigned char X, unsigned char Y, unsigned char Z)
{
if(DelayDisplay(2))
{
CurrentAD = struBC.usBalanceZeroValue > AD_value ?(struBC.usBalanceZeroValue - AD_value):(AD_value - struBC.usBalanceZeroValue);
struAP.usCurrent_Balance_Value = (unsigned short)((float)CurrentAD / struBC.ssBalanceUnitValue); //当前总重
if(struPS.ucSepaValu==0)
struPS.ucSepaValu=1;
if((struAP.usCurrent_Balance_Value%(struPS.ucSepaValu))!=0)//分度
struAP.usCurrent_Balance_Value-=((struAP.usCurrent_Balance_Value)%(struPS.ucSepaValu));
if(Y==3)//卸料时也要减余重
{
if(struAP.usCurrent_Balance_Value >= RemainWeight)
struAP.usCurrent_Balance_Value-=RemainWeight;
else
struAP.usCurrent_Balance_Value=0;
}
if (Z!='-')//Z为0时不显示-
DisplayAnyValue(X,Y,struBC.usBalanceZeroValue > AD_value ? 0 : struAP.usCurrent_Balance_Value,5,1);
else
{
LCDCharacterWritten(X,Y,struBC.usBalanceZeroValue > AD_value ? "-":" ");
DisplayAnyValue(X+1,Y,struAP.usCurrent_Balance_Value,5,1);
}
}
}
void Display_AutoWeight(unsigned char X, unsigned char Y)
{
if(DelayDisplay(2))
{
CurrentAD = struBC.usBalanceZeroValue > AD_value ?0:(AD_value - struBC.usBalanceZeroValue);
struAP.usCurrent_Balance_Value = (unsigned short)((float)CurrentAD / struBC.ssBalanceUnitValue); //当前总重
if(struAP.usCurrent_Balance_Value >= RemainWeight)
struAP.usCurrent_Balance_Value-=RemainWeight;
else
struAP.usCurrent_Balance_Value=0;
if(struPS.ucSepaValu==0)
struPS.ucSepaValu=1;
if((struAP.usCurrent_Balance_Value%(struPS.ucSepaValu))!=0)//分度
struAP.usCurrent_Balance_Value-=((struAP.usCurrent_Balance_Value)%(struPS.ucSepaValu));
DisplayAnyValue(X,Y,struBC.usBalanceZeroValue > AD_value ? 0 : struAP.usCurrent_Balance_Value,5,1);
}
}
void Display_DateTime()
{
unsigned char i;
RWDataTime(0);
LCDposition(0,3);
lcd_wrdata(2+'0');
lcd_wrdata(0+'0');
for(i=0;i<3;i++)
{
lcd_wrdata((struPS.ucDate[i]/10)+'0');
lcd_wrdata((struPS.ucDate[i]%10)+'0');
if(i!=2)
lcd_wrdata('/');
else
lcd_wrdata(' ');
}
for(i=0;i<2;i++)
{
lcd_wrdata((struPS.ucTime[i]/10)+'0');
lcd_wrdata((struPS.ucTime[i]%10)+'0');
if(i==0)
lcd_wrdata(':');
}
}
/*********************************************************************
Function:上下值变化
*Value
flagUpDown 0-Up 1-Down
Position 上下的值位置(1~4)
Max 上的最大值
Min 下的最小值
Step 上下步长
*********************************************************************/
void UpDownValue(unsigned short *Value,unsigned char flagUpDown,unsigned char Position,unsigned char Max,unsigned char Min,unsigned char Step)
{
unsigned char i;
unsigned short Unit1,Unit2;
Unit1=Unit2=1;
for(i=0;i<Position;i++)
{
Unit1*=10;
if(i>0)
Unit2*=10;
}
if(flagUpDown==0) //加
{
if(((*Value)%Unit1)/Unit2 ==Max)
(*Value)-=Unit2*(Max-Min);
else
(*Value)+=Unit2*Step;
}
else//减
{
if(((*Value)%Unit1)/Unit2 ==Min)
(*Value)+=Unit2*(Max-Min);
else
(*Value)-=Unit2*Step;
}
}
/*********************************************************************
Function:上下值变化
*Value
flagUpDown 0-Up 1-Down
Position 上下的值位置
Max 上的最大值
Min 下的最小值
Step 上下步长
*********************************************************************/
void UpDown1bValue(unsigned char *Value,unsigned char flagUpDown,unsigned char Position,unsigned char Max,unsigned char Min,unsigned char Step)
{
unsigned char i;
unsigned short Unit1,Unit2;
Unit1=Unit2=1;
for(i=0;i<Position;i++)
{
Unit1*=10;
if(i>0)
Unit2*=10;
}
if(flagUpDown==0) //加
{
if(((*Value)%Unit1)/Unit2 ==Max)
(*Value)-=Unit2*(Max-Min);
else
(*Value)+=Unit2*Step;
}
else//减
{
if(((*Value)%Unit1)/Unit2 ==Min)
(*Value)+=Unit2*(Max-Min);
else
(*Value)-=Unit2*Step;
}
}
/*********************************************************************
Function:改变DH_mDirectionSet的可变项值
lineNo: 0-all,1-struDV.usTank_Number,2-Material_No,3-struDV.usDire_MValu
0-all,1-Material_No,2-struPS.ucAutoAmend,3-struPS.usFall,4-struPS.ucTolerance
flag:1-display "无限 ",0-display "000"
*********************************************************************/
void Change_DH_mMenu(unsigned char Mode,unsigned char lineNo,unsigned char flag)
{
char i,k;
if(lineNo == 0)
{
i=k=0;
if(Mode == UI_DH_DirectionSet || Mode == UI_DH_DateSet || Mode == UI_DH_TimeSet)
{i=1;k=3;}
else if(Mode == UI_DH_ParameterSet)
{i=1;k=4;}
else if(Mode == UI_DH_BalanceCorrection2)
DisplayAnyValue(0,2,Weight,4,0);
else if(Mode == UI_DH_ConsumeRecord)
{
DisplayAnyValue(3,0,struQT.usTank_Number,4,0);
DisplayAnyValue(3,1,(unsigned short)Material_No,1,0);
DisplayAnyValue(1,2,(unsigned short)((struQT.usDire_MValu[Material_No-1])/1000),5,1);
}
else if(Mode == UI_DH_SetZero)
DisplayAnyValue(4,2,struPS.ucSetZeroValue,2,0);
else if(Mode == UI_DH_FilterSet)
DisplayAnyValue(4,2,struPS.ucFilterValue,2,0);
else if(Mode == UI_DH_MaxWeight)
DisplayAnyValue(0,2,struPS.usMaxWeight,4,0);
else if(Mode == UI_DH_MaterialDelayTime)
DisplayAnyValue(1,2,struPS.ucMaterialDelay,2,1);
else if(Mode == UI_DH_ClickActionTime)
DisplayAnyValue(1,2,struPS.ucClickActionTime,2,1);
else if(Mode == UI_DH_OffloadDelayTime)
DisplayAnyValue(1,2,struPS.ucOffloadDelay,2,1);
else if(Mode == UI_DH_PrintSwitch)
LCDCharacterWritten(5,1,Str_switch[struPS.ucPrintSwitch]);
else if(Mode == UI_DH_BalanceNo)
DisplayAnyValue(5,1,struPS.ucBalanceNo,1,0);
else if(Mode == UI_DH_Reset)
LCDCharacterWritten(6,1,Str_YesNo[struPS.ucReset]);
}
else
i=k=lineNo;
for(;i<=k;i++)
if(Mode == UI_DH_DateSet)
DisplayAnyValue(4,i-1,(unsigned short)struPS.ucDate[i-1],2,0);
else if(Mode == UI_DH_TimeSet)
DisplayAnyValue(4,i-1,(unsigned short)struPS.ucTime[i-1],2,0);
else if(Mode == UI_DH_DirectionSet)
{
if(i==1) //line0
if(struDV.usTank_Number == 0 && flag ==1)
LCDCharacterWritten(3,1,"无限 ");
else
DisplayAnyValue(3,1,struDV.usTank_Number,3,0);
else if(i==2) //line1
{
DisplayAnyValue(3,2,Material_No,1,0);
DisplayAnyValue(0,3,struDV.usDire_MValu[Material_No-1],4,0);
}
else if(i==3) //line2
DisplayAnyValue(0,3,struDV.usDire_MValu[Material_No-1],4,0);
}
else if(Mode == UI_DH_ParameterSet) //line0
{
if(i==1) //line0
{
DisplayAnyValue(5,0,(unsigned short)Material_No,1,0);
DisplayAnyValue(3,2,struPS.usFall[Material_No-1],3,0);
DisplayAnyValue(4,3,(unsigned short)struPS.ucTolerance[Material_No-1],2,0);
}
else if(i==2)//line 1
LCDCharacterWritten(5,1,Str_switch[struPS.ucAutoAmend]);
else if(i==3)//line 2
DisplayAnyValue(3,2,struPS.usFall[Material_No-1],3,0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -