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

📄 menuosd.c

📁 菜单结构 菜单结构 菜单结构 菜单结构 菜单结构 菜单结构 菜单结构 菜单结构 菜单结构 菜单结构
💻 C
📖 第 1 页 / 共 5 页
字号:

#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 + -