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 + -
显示快捷键?