3kmenu2.c

来自「嵌入式开发 嵌入式开发 嵌入式开发」· C语言 代码 · 共 1,816 行 · 第 1/5 页

C
1,816
字号
				{
					vinteger=atoi(Dispbuf);
					if(vinteger>0 && vinteger<=unit[cNewSEL22].submenu1.unitworksnum.j)
					{
						if(unit[cNewSEL22].submenu1.ColorNum!=vinteger)
						{	CmdFlags[cNewSEL22].bits.bit0=1;}	//6号命令受到影响
						//
						unit[cNewSEL22].submenu1.ColorNum=vinteger;
						REC_Sub1(cNewSEL22, 9);	//记录ColorNum;
					}
					else
					{   MessageBox( (VarST3000.Language ? "Must small than std-color" : "不能超过其标准色序号") );}
				}
				//显示内容
				memset(szE, 0, 20);
				sprintf(szE, "%02d", unit[cNewSEL22].submenu1.ColorNum);
				Edit(160, 95+45*cNewSEL22, 125, 35, 0x4f, szE);
				ClearKBuffer();
			}
			else		//INPUTING...
			{	ProcNumKBinp(NO);
				Edit(160, 95+45*cNewSEL22, 125, 35, 0xcf, Dispbuf);
			}
		}
		break;
	case 2:	//纵向报警值
		NO=RespNumKBoard();
		if(NO!=100)
		{
			if(NO==205)	//ENTER
			{
				if(strlen(Dispbuf))
				{
					vfloat=atof(Dispbuf)*100;
					vlong=(long)vfloat;
					if(vlong>0 && vlong<=100)
					{
						if(unit[cNewSEL22].submenu1.v_alarm!=vlong)
						{	CmdFlags[cNewSEL22].bits.bit3=1;}	//9号命令受到影响
						//
						unit[cNewSEL22].submenu1.v_alarm=vlong;
						REC_Sub1(cNewSEL22, 3);	//记录纵向报警
					}
					else
					{   MessageBox( (VarST3000.Language ? "Range from 0.01 to 1" : "范围从0.01到1") );}
				}
				//显示内容
				memset(szE, 0, 20);
				sprintf(szE, "%4.2f", unit[cNewSEL22].submenu1.v_alarm/100.0);
				Edit(160, 95+45*cNewSEL22, 125, 35, 0x4f, szE);
				ClearKBuffer();
			}
			else		//INPUTING...
			{	ProcNumKBinp(NO);
				Edit(160, 95+45*cNewSEL22, 125, 35, 0xcf, Dispbuf);
			}
		}
		break;
	case 3:	//波门地址
		NO=RespNumKBoard();
		if(NO!=100)
		{
			if(NO==205)	//ENTER
			{
				if(strlen(Dispbuf))
				{
					vinteger=atoi(Dispbuf);
					if(vinteger>=0 && vinteger<=1999)
					{
						if(unit[cNewSEL22].submenu1.addressofwav!=vinteger)
						{	CmdFlags[cNewSEL22].bits.bit2=1;}	//8号命令受到影响
						//
						unit[cNewSEL22].submenu1.addressofwav=vinteger;
						REC_Sub1(cNewSEL22, 2);	//记录波门地址
					}
					else
					{
					    MessageBox( (VarST3000.Language ? "Range from 0 to 1999" : "范围从0到1999") );
					}
				}
				//显示内容
				memset(szE, 0, 20);
				sprintf(szE, "%5d", unit[cNewSEL22].submenu1.addressofwav);
				Edit(160, 95+45*cNewSEL22, 125, 35, 0x4f, szE);
				ClearKBuffer();
			}
			else		//INPUTING...
			{	ProcNumKBinp(NO);
				Edit(160, 95+45*cNewSEL22, 125, 35, 0xcf, Dispbuf);
			}
		}
		break;
	case 4:	//波门宽度
		NO=RespNumKBoard();
		if(NO!=100)
		{
			if(NO==205)	//ENTER
			{
				if(strlen(Dispbuf))
				{
					vinteger=atoi(Dispbuf);
					if(vinteger>=5 && vinteger<=20)
					{
						if(unit[cNewSEL22].submenu2.ValueWidth!=vinteger)
						{	CmdFlags[cNewSEL22].bits.bit2=1;}	//8号命令受到影响
						//
						unit[cNewSEL22].submenu2.ValueWidth=vinteger;
						REC_Sub2(cNewSEL22, 9);	//记录波门宽度
					}
					else
					{
					    MessageBox( (VarST3000.Language ? "Range from 5 to 20" : "范围从5到20") );
					}
				}
				//显示内容
				memset(szE, 0, 20);
				sprintf(szE, "%5d", unit[cNewSEL22].submenu2.ValueWidth);
				Edit(160, 95+45*cNewSEL22, 125, 35, 0x4f, szE);
				ClearKBuffer();
			}
			else		//INPUTING...
			{	ProcNumKBinp(NO);
				Edit(160, 95+45*cNewSEL22, 125, 35, 0xcf, Dispbuf);
			}
		}
		break;
	default:
		break;
	}
}

/******************************
 描述:	响应版周长输入
******************************/
void RespC_INPUT22(void)
{
	int		NO,j;
	float	vfloat;
	long	vlong;
	NO=RespNumKBoard();
	if(NO!=100)
	{	//输入有效
		if(NO==205)	//Enter
		{	//显示确认后的内容
			if(strlen(Dispbuf))
			{
				vfloat=atof(Dispbuf);
				vlong=vfloat*10+0.5;
				if(vfloat>=250.0 && vfloat<=2500.0)
				{	//数值有效
					bFlagsINPUT22=0x00;	//输入完成
					if(VarST3000.jobAB==1)
					{
						if(SysSet.CofBanA!=vlong)
						{
							for(j=1; j<VarST3000.UnitCounts; j++)
							{
								if(unit[j].submenu1.unitworksnum.i==1 )
								{	CmdFlags[j].bits.bit1=1;}	//7号命令受到影响
							}
	 					}
	 					SysSet.CofBanA=vlong;
	 					REC_SysSet(2);
	 				}
	 				else
	 				{
	 					if(SysSet.CofBanB!=vlong)
	 					{
	 						for(j=1; j<VarST3000.UnitCounts; j++)
	 						{
	 							if(unit[j].submenu1.unitworksnum.i==2 )
	 							{	CmdFlags[j].bits.bit1=1;}	//7号命令受到影响
	 						}
	 					}
	 					SysSet.CofBanB=vlong;
	 					REC_SysSet(3);
	 				}
	 			}
	 			else
	 			{
	 			    MessageBox( (VarST3000.Language ? "Range from 250 to 2500" : "范围从250到2500") );
				}
	 		}
	 		SyncC_Disp22(0, (VarST3000.jobAB==1?SysSet.CofBanA:SysSet.CofBanB));
	 		ClearKBuffer();
	 	}
	 	else
	 	{	//显示输入内容
	 		ProcNumKBinp(NO);
			Edit(830, 455, 120, 40, 0xcf, Dispbuf);
		}
	}
}

/******************************
 描述: 波形数据采集显示 ????
******************************/
void SyncWavDisp(void)
{
	int  ir;
	char vSZ[10]={0};
	long vLONG_S;
	time_t time1,time2;
	unsigned int  vUINT_C=(VarST3000.jobAB==1?SysSet.CofBanA:SysSet.CofBanB);
	unsigned char vtmp1,vtmp2,wjrvalue;
	unsigned char errflag,cflag,array[5]={0};
	if( (inportb(0x302)&0x01) && (UnitSEL>0) )
	{
		MouseKeyClick();
		outportb(0x305, 7);	delay(1);
		outportb(0x305, 3);	delay(1);
		//..start read all data that A/D captured.
		if(adresult)
	   	{
	   		//__________________取线速度
	   		for(ir=0; ir<5; ir++)
	   		{	array[ir]=inportb(0x303);}
	   		if(!array[0])
	   		{	g_LINESPEED=0.00;}
	   		else
	   		{	vLONG_S =array[0]*65536L;
	   			vLONG_S+=array[1]*256L;
	   			vLONG_S+=array[2];
	   			if(vLONG_S!=0)
	   			{	g_LINESPEED =vUINT_C*6000.0;
	   				g_LINESPEED/=((double)vLONG_S*3.0/4.0);
	   			}
	   		}
	   		sprintf(vSZ, "%06.1f", g_LINESPEED);
	   		SimLED(AlrAdjBox_M23_X+30, AlrAdjBox_M23_Y+AlrAdjBox_M23_H+12, vSZ);
	  		for(ir=0; ir<27; ir++)
	  		{	inportb(0x303);}
	  		//__________________线速度完结
	  		errflag=0;
	  		for(ir=0; ir<1001*MaxScale; ir++)
	 		{
				//1st part
				vtmp1=inportb(0x303);
	 			vtmp2=inportb(0x303);
	 			wjrvalue=((vtmp1&0x0f)<<3)|((vtmp2&0xe0)>>5);
	 			if((vtmp1&0xf0)==0x20)
	 			{	*(pdata1+ir)=wjrvalue;}
	 			else if((vtmp1&0xf0)==0x30)
	 			{	*(pdata2+ir)=wjrvalue;}
	 			else
	 			{	errflag=1;}
				//2nd part
				vtmp1=inportb(0x303);
				vtmp2=inportb(0x303);
				wjrvalue=((vtmp1&0x0f)<<3)|((vtmp2&0xe0)>>5);
				if((vtmp1&0xf0)==0x20)
				{	*(pdata1+ir)=wjrvalue;}
				else if((vtmp1&0xf0)==0x30)
				{	*(pdata2+ir)=wjrvalue;}
				else
				{	errflag=1;}
				//
				if(ir%50==0) { MouseKeyClick();}
			}
			if(errflag)
			{	OUT7|=0x20;}
			else
			{	OUT7&=0xdf;}
			OUT7&=0xfb;
			outportb(0x302,OUT7);
			delay(1);
			//
			cflag=1;	//检验标志
			time1=time(NULL);
			while(cflag)
	   		{
	   			if(!(inportb(0x302)&0x01))
	   			{	cflag=0;}
	   			time2=time(NULL);
	   			if((time2-time1)>=2)
	   			{	outportb(0x302, OUT7);
	   				delay(20);
	   				cflag=0;
	   			}
	   		}
	   		OUT7|=0x04;
	   		outportb(0x302,OUT7);
	   	}
	   	adresult=1;
	   	MouseKeyClick();
	   	HideMouse();
	   	if(!tcflag)
	  	{
	  		DrawWAVbk();
	  		DrawGate();
	  		DrawWAVfr(lineheader[UnitSEL-1]);
	  	}
	 	else
		{	tcflag=0;}
		DrawZ();
  
	 	if(vUINT_C>=5000)
	 	{	outportb(0x306, 0x00);}
	 	else
	 	{	outportb(0x306, 0xff);}
	 	outportb(0x302, OUT7);	delay(1);
	 	outportb(0x305, 0x00);	delay(1);
	 	outportb(0x305, 0x02);
		ShowMouse();
	}
}

/******************************
 描述:	根据标记排列形式更新命令内容(仅应用于当前系)
******************************/
void SyncWholeTurnSEL(const unsigned char iSER, const unsigned char vTURNS)
{
    int t;
    for(t=1; t<VarST3000.UnitCounts; t++)
    {
        if( unit[t].submenu1.unitworksnum.i==iSER && unit[t].submenu1.unitworksnum.j)
        {
            if( iSER==1 )
            {   unit[t].submenu1.bitTurns.turnsoflabsA=vTURNS;}
            else
            {   unit[t].submenu1.bitTurns.turnsoflabsB=vTURNS;}
            REC_Sub1(t,7);
            if( vTURNS==3 )
            {   // 单标记
                CommandData[t].Cmd6[3]=0x01; // 单标记
                if( unit[t].submenu1.bitTurns.omk_motorreverse )
                {   CommandData[t].Cmd6[6]|=0x04;}
                else
                {   CommandData[t].Cmd6[6]&=0xfb;}
            }
            else
            {   // 非单标记
                CommandData[t].Cmd6[3]=0x00; // 正常套色
                if( unit[t].submenu1.bitfield.vmotorreverse )
                {   CommandData[t].Cmd6[6]|=0x04;}
                else
                {   CommandData[t].Cmd6[6]&=0xfb;}
            }
            CommandData[t].Cmd6[4]&=0xC7; // (1100 0111)=bit5.4.3=000
            if( (vTURNS==4) || (vTURNS==5) )
            {   CommandData[t].Cmd6[4]|=0x08;} // 横排
            if( (vTURNS==2) || (vTURNS==5) )
            {   CommandData[t].Cmd6[4]|=0x10;} // 整机逆序
            CmdFlags[t].bits.bit0=1; // 标志6#命令改变
        }
    }
}

/******************************
描述: 获取系属的标记排列设置
        根据此返回结果
        来判断通道的正序或逆序采用本组显示还是整机显示
参数:
    -iSER: 系属
返回:
    -0 表示顺序与逆序同在
    -1 表示同为顺序
    -2 表示同为逆序
******************************/
int GetEntireTurns(const int iSER)
{
    int t,forCnt=0,revCnt=0; // 顺序和逆序的通道计数
    unsigned char bTurns;
    for(t=1; t<VarST3000.UnitCounts; t++)

⌨️ 快捷键说明

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