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

📄 3kmenu34.c

📁 嵌入式开发 嵌入式开发 嵌入式开发
💻 C
📖 第 1 页 / 共 3 页
字号:
    sprintf(tSZ, "%6.2f", unit[iCNL].submenu1.h_adjust/100.0);
    Bar(arBOXPOS34[iCNL].x+BOX34_W/2+28, arBOXPOS34[iCNL].y+BOX34_H-22,
        arBOXPOS34[iCNL].x+BOX34_W-2, arBOXPOS34[iCNL].y+BOX34_H-2, 192, 192, 192);
    ShowASCMem(arBOXPOS34[iCNL].x+BOX34_W/2+28+(BOX34_W/2-30-(int)strlen(tSZ)*8), arBOXPOS34[iCNL].y+BOX34_H-20, tSZ, 0, 0, 0);
}

void ClearHAdj_M3(const int iCNL)
{
    Bar(arBOXPOS34[iCNL].x+BOX34_W/2+28, arBOXPOS34[iCNL].y+BOX34_H-22,
        arBOXPOS34[iCNL].x+BOX34_W-2, arBOXPOS34[iCNL].y+BOX34_H-2, 192, 192, 192);
}

void ClearHErr_M3(const int iCNL)
{
    Bar(arBOXPOS34[iCNL].x+2, arBOXPOS34[iCNL].y+BOX34_H-22,
        arBOXPOS34[iCNL].x+BOX34_W/2-28, arBOXPOS34[iCNL].y+BOX34_H-2, 192, 192, 192);
}

/******************************
 描述: 报警框警戒线刷新(指定通道)
 参数: iCNL 指定通道号; iVIS 是否显示
******************************/
void DispARect_M3(const int iCNL, const unsigned char iVIS)
{
    int   xCenter,yCenter;
    int   vInchOffset,hInchOffset;
    float vDispInch,hDispInch;
    xCenter=arBOXPOS34[iCNL].x+BOX34_W/2;
    yCenter=arBOXPOS34[iCNL].y+BOX34_H/2;
    Bar(arBOXPOS34[iCNL].x+26, arBOXPOS34[iCNL].y+26,
        arBOXPOS34[iCNL].x+BOX34_W-26, arBOXPOS34[iCNL].y+BOX34_H-26, 192, 192, 192);
    vDispInch=(BOX34_H-70)/2.0; //25*2-10*2
    vDispInch=unit[iCNL].submenu1.v_alarm*vDispInch/100.0;
    vInchOffset=(int)(vDispInch+0.05); //纵向报警框边线偏移像素
    if(iVIS)
    {
        if(CtrlUnitFlags[iCNL].bits.bit5)   //上限位状态
        {   wjrUAdj323(xCenter-25, arBOXPOS34[iCNL].y, BES_LIMIT);}
        else
        {   wjrUAdj323(xCenter-25, arBOXPOS34[iCNL].y, BES_SHOW);}
        //
        if(CtrlUnitFlags[iCNL].bits.bit4)   //下限位状态
        {   wjrDAdj323(xCenter-25, arBOXPOS34[iCNL].y+BOX34_H-25, BES_LIMIT);}
        else
        {   wjrDAdj323(xCenter-25, arBOXPOS34[iCNL].y+BOX34_H-25, BES_SHOW);}
        DispVAdj_M3(iCNL);
    }
    if(unit[iCNL].submenu1.bitfield.hcontrol)
    {   //横向开
        if(iVIS)
        {
            if(CtrlUnitFlags[iCNL].bits.bit2)   //左限位状态
            {   wjrLAdj323(arBOXPOS34[iCNL].x, yCenter-25, BES_LIMIT);}
            else
            {   wjrLAdj323(arBOXPOS34[iCNL].x, yCenter-25, BES_SHOW);}
            //
            if(CtrlUnitFlags[iCNL].bits.bit3)   //右限位状态
            {   wjrRAdj323(arBOXPOS34[iCNL].x+BOX34_W-25, yCenter-25, BES_LIMIT);}
            else
            {   wjrRAdj323(arBOXPOS34[iCNL].x+BOX34_W-25, yCenter-25, BES_SHOW);}
            DispHAdj_M3(iCNL);
        }
        hDispInch=(BOX34_W-70)/2.0; //25*2-10*2
        hDispInch=unit[iCNL].submenu1.h_alarm*hDispInch/100.0;
        hInchOffset=(int)(hDispInch+0.05);  //横向报警框边线偏移像素
        //
        Line(arBOXPOS34[iCNL].x+26, yCenter, arBOXPOS34[iCNL].x+BOX34_W-26, yCenter, 0, 0, 0);
        Line(xCenter, arBOXPOS34[iCNL].y+26, xCenter, arBOXPOS34[iCNL].y+BOX34_H-26, 0, 0, 0);
        Rectangle(xCenter-5-hInchOffset, yCenter-5-vInchOffset,
                    xCenter+5+hInchOffset, yCenter+5+vInchOffset, 0, 0, 0);
    }
    else
    {   //横向关
        Line(xCenter-8, arBOXPOS34[iCNL].y+26, xCenter-8, arBOXPOS34[iCNL].y+BOX34_H-26, 0, 0, 0);
        Line(xCenter+8, arBOXPOS34[iCNL].y+26, xCenter+8, arBOXPOS34[iCNL].y+BOX34_H-26, 255, 255, 255);
        Line(xCenter-7, yCenter-5-vInchOffset, xCenter+7, yCenter-5-vInchOffset, 0, 0, 0);
        Line(xCenter-7, yCenter+5+vInchOffset, xCenter+7, yCenter+5+vInchOffset, 0, 0, 0);
    }
    if(iVIS)
    {   
    	Bar(xCenter-5, yCenter-5, xCenter+5, yCenter+5, 0, 0, 0);
    }
}

/******************************
 描述: 纵向误差显示刷新 menu3
 参数: iCNL 指定的通道号; vDAT 纵向误差值
******************************/
void DispVErr_M3(const int iCNL, const int vDAT)
{
    int   xCenter,yCenter;
    int   vInchOffset,vNewData;
    char  tSZ[10]={0};
    float vDispInch;
    unsigned char overflag=0;
    xCenter=arBOXPOS34[iCNL].x+BOX34_W/2;
    yCenter=arBOXPOS34[iCNL].y+BOX34_H/2;
    HideMouse();
    DispARect_M3(iCNL, 0); //框背景
    Bar(arBOXPOS34[iCNL].x+2, arBOXPOS34[iCNL].y+2,
        arBOXPOS34[iCNL].x+BOX34_W/2-28, arBOXPOS34[iCNL].y+22, 192, 192, 192);
    sprintf(tSZ, "%6.2f", vDAT/100.0);
    if( vDAT<=-unit[iCNL].submenu1.v_alarm ||
        vDAT>=unit[iCNL].submenu1.v_alarm )
    {   overflag=1;}
    vDispInch=(BOX34_H-70)/2.0; //2*25+10*2
    if(vDAT>=110)
    {   vNewData=110;}
    else if(vDAT<=-110)
    {   vNewData=-110;}
    else
    {   vNewData=vDAT;}
    vDispInch=vNewData*vDispInch/100.0;
    vInchOffset=(int)(vDispInch+0.05); //纵向报警框边线偏移像素
    if(overflag)
    {   ShowASCMem(arBOXPOS34[iCNL].x+BOX34_W/2-32-(int)strlen(tSZ)*8, arBOXPOS34[iCNL].y+4, tSZ, 0, 0, 255);
        Bar(xCenter-5, yCenter-5-vInchOffset, xCenter+5, yCenter+5-vInchOffset, 0, 0, 255);
    }
    else
    {   ShowASCMem(arBOXPOS34[iCNL].x+BOX34_W/2-32-(int)strlen(tSZ)*8, arBOXPOS34[iCNL].y+4, tSZ, 255, 0, 0);
        Bar(xCenter-5, yCenter-5-vInchOffset, xCenter+5, yCenter+5-vInchOffset, 0, 0, 0);
    }
    ShowMouse();
}

/******************************
 描述: 横向误差显示刷新 menu3
 参数: iCNL 指定的通道号; vDAT 纵向误差值; hDAT 横向误差值
******************************/
void DispHErr_M3(const int iCNL, const int vDAT, const int hDAT)
{
    int   xCenter,yCenter;
    int   vInchOffset,vNewData;
    int   hInchOffset,hNewData;
    char  vSZ[10]={0};
    char  hSZ[10]={0};
    float vDispInch,hDispInch;
    unsigned char overflag=0; //bit0纵向溢出bit4横向溢出
    xCenter=arBOXPOS34[iCNL].x+BOX34_W/2;
    yCenter=arBOXPOS34[iCNL].y+BOX34_H/2;
    //HideMouse();
    DispARect_M3(iCNL, 0); //框背景 不刷新 按钮
    //纵向显示误差
    Bar(arBOXPOS34[iCNL].x+2, arBOXPOS34[iCNL].y+2,
        arBOXPOS34[iCNL].x+BOX34_W/2-28, arBOXPOS34[iCNL].y+22, 192, 192, 192);
    //ShowMouse();
    sprintf(vSZ, "%6.2f", vDAT/100.0);
    if( vDAT<=-unit[iCNL].submenu1.v_alarm ||
        vDAT>= unit[iCNL].submenu1.v_alarm )
    {   overflag=0x01;}
    vDispInch=(BOX34_H-70)/2.0; //25*2-10*2
    if(vDAT>=110)
    {   vNewData=110;}
    else if(vDAT<=-110)
    {   vNewData=-110;}
    else
    {   vNewData=vDAT;}
    vDispInch=vNewData*vDispInch/100.0;
    vInchOffset=(int)(vDispInch+0.05); //纵向报警框边线偏移像素
    //横向显示误差
    //HideMouse();
    Bar(arBOXPOS34[iCNL].x+2, arBOXPOS34[iCNL].y+BOX34_H-22,
        arBOXPOS34[iCNL].x+BOX34_W/2-28, arBOXPOS34[iCNL].y+BOX34_H-2, 192, 192, 192);
    //ShowMouse();
    sprintf(hSZ, "%6.2f", hDAT/100.0);
    if( hDAT<=-unit[iCNL].submenu1.h_alarm ||
        hDAT>= unit[iCNL].submenu1.h_alarm)
    {   overflag|=0x10;}
    hDispInch=(BOX34_W-70)/2.0;
    if(hDAT>=107)
    {   hNewData=107;}
    else if(hDAT<=-107)
    {   hNewData=-107;}
    else
    {   hNewData=hDAT;}
    hDispInch=hNewData*hDispInch/100.0;
    hInchOffset=(int)(hDispInch+0.05);
    if(overflag&0x01)
    {   ShowASCMem(arBOXPOS34[iCNL].x+BOX34_W/2-32-(int)strlen(vSZ)*8, arBOXPOS34[iCNL].y+4, vSZ, 0, 0, 255);}
    else
    {   ShowASCMem(arBOXPOS34[iCNL].x+BOX34_W/2-32-(int)strlen(vSZ)*8, arBOXPOS34[iCNL].y+4, vSZ, 255, 0, 0);}
    if(overflag&0x10)
    {   ShowASCMem(arBOXPOS34[iCNL].x+BOX34_W/2-32-(int)strlen(hSZ)*8, arBOXPOS34[iCNL].y+BOX34_H-20, hSZ, 0, 0, 255);}
    else
    {   ShowASCMem(arBOXPOS34[iCNL].x+BOX34_W/2-32-(int)strlen(hSZ)*8, arBOXPOS34[iCNL].y+BOX34_H-20, hSZ, 255, 0, 0);}
    if(overflag)
    {   Bar(xCenter-5+hInchOffset, yCenter-5-vInchOffset, xCenter+5+hInchOffset, yCenter+5-vInchOffset, 0, 0, 255);}
    else
    {   Bar(xCenter-5+hInchOffset, yCenter-5-vInchOffset, xCenter+5+hInchOffset, yCenter+5-vInchOffset, 0, 0, 0);}
}

/******************************
 描述: 上按钮响应
******************************/
void RespBAdj_M3_U(const int iCNL)
{
    unsigned char vTurns;
    if(unit[iCNL].submenu1.unitworksnum.i==1)
    {   vTurns=unit[iCNL].submenu1.bitTurns.turnsoflabsA;}
    else
    {   vTurns=unit[iCNL].submenu1.bitTurns.turnsoflabsB;}
    if(vTurns==2 || vTurns==5)
    {   //逆序
        if(unit[iCNL].submenu1.v_adjust<=-2000)
        {   return;}
        else
        {   unit[iCNL].submenu1.v_adjust--;}
    }
    else
    {   //顺序
        if(unit[iCNL].submenu1.v_adjust>=2000)
        {   return;}
        else
        {   unit[iCNL].submenu1.v_adjust++;}
    }
    wjrUAdj323(arBOXPOS34[iCNL].x+BOX34_W/2-25, arBOXPOS34[iCNL].y, BES_PRESS);
    //纵向修正量显示
    DispVAdj_M3(iCNL);
    //记录纵向微调
    REC_Sub1(iCNL, 4);
    //通知下位机
    SendCnlData(iCNL, 0x09);
}

/******************************
 描述: 下按钮响应
******************************/
void RespBAdj_M3_D(const int iCNL)
{
    unsigned char vTurns;
    if(unit[iCNL].submenu1.unitworksnum.i==1)
    {   vTurns=unit[iCNL].submenu1.bitTurns.turnsoflabsA;}
    else
    {   vTurns=unit[iCNL].submenu1.bitTurns.turnsoflabsB;}
    if(vTurns==2 || vTurns==5)
    {   //逆序
        if(unit[iCNL].submenu1.v_adjust>=2000)
        {   return;}
        else
        {   unit[iCNL].submenu1.v_adjust++;}
    }
    else
    {   //顺序
        if(unit[iCNL].submenu1.v_adjust<=-2000)
        {   return;}
        else
        {   unit[iCNL].submenu1.v_adjust--;}
    }
    wjrDAdj323(arBOXPOS34[iCNL].x+BOX34_W/2-25, arBOXPOS34[iCNL].y+BOX34_H-25, BES_PRESS);
    //纵向修正量显示
    DispVAdj_M3(iCNL);
    //记录纵向微调
    REC_Sub1(iCNL, 4);
    //通知下位机
    SendCnlData(iCNL, 0x09);
}

/******************************
 描述: 左按钮响应
******************************/
void RespBAdj_M3_L(const int iCNL)
{
    unsigned char vTurns;
    if(unit[iCNL].submenu1.unitworksnum.i==1)
    {   vTurns=unit[iCNL].submenu1.bitTurns.turnsoflabsA;}
    else
    {   vTurns=unit[iCNL].submenu1.bitTurns.turnsoflabsB;}
    if(vTurns==2 || vTurns==5)
    {   //逆序
        if(unit[iCNL].submenu1.h_adjust<=-2000)
        {   return;}
        else
        {   unit[iCNL].submenu1.h_adjust--;}
    }
    else
    {   //顺序
        if(unit[iCNL].submenu1.h_adjust>=2000)
        {   return;}
        else
        {   unit[iCNL].submenu1.h_adjust++;}
    }
    wjrLAdj323(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y+BOX34_H/2-25, BES_PRESS);
    //横向修正量显示
    DispHAdj_M3(iCNL);
    //记录横向微调
    REC_Sub1(iCNL, 6);
    //通知下位机
    SendCnlData(iCNL, 0x09);
}

/******************************
 描述: 右按钮响应
******************************/
void RespBAdj_M3_R(const int iCNL)
{
    unsigned char   vTurns;
    if(unit[iCNL].submenu1.unitworksnum.i==1)
    {   vTurns=unit[iCNL].submenu1.bitTurns.turnsoflabsA;}
    else
    {   vTurns=unit[iCNL].submenu1.bitTurns.turnsoflabsB;}
    if(vTurns==2 || vTurns==5)
    {   //逆序
        if(unit[iCNL].submenu1.h_adjust>=2000)
        {   return;}
        else
        {   unit[iCNL].submenu1.h_adjust++;}
    }
    else
    {   //顺序
        if(unit[iCNL].submenu1.h_adjust<=-2000)
        {   return;}
        else
        {   unit[iCNL].submenu1.h_adjust--;}
    }
    wjrRAdj323(arBOXPOS34[iCNL].x+BOX34_W-25, arBOXPOS34[iCNL].y+BOX34_H/2-25, BES_PRESS);
    //横向修正量显示
    DispHAdj_M3(iCNL);
    //记录横向微调
    REC_Sub1(iCNL, 6);
    //通知下位机
    SendCnlData(iCNL, 0x09);
}

/******************************
 描述: 设置左右按钮是否可显示 BES_HIDE BES_SHOW
******************************/
void SetLRAdj_M3_VIS(const int iCNL, const int vi)
{
    wjrLAdj323(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y+BOX34_H/2-25, vi);
    wjrRAdj323(arBOXPOS34[iCNL].x+BOX34_W-25, arBOXPOS34[iCNL].y+BOX34_H/2-25, vi);
}

/******************************
 描述: 绘制黑框背景包含纵横向警戒线(指定通道)
 参数: iCNL 指定的通道号
******************************/
void DrawCurvBox_M4(const int iCNL)
{
    int alr_abs_off;     //纵横向报警绝对偏移
    int h50per=BOX34_H/2; //高度的50%
    //背景黑色
    Bar(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y,
        arBOXPOS34[iCNL].x+BOX34_W, arBOXPOS34[iCNL].y+BOX34_H, 0, 0, 0);
    //中心线
    Line(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y+h50per,
        arBOXPOS34[iCNL].x+BOX34_W, arBOXPOS34[iCNL].y+h50per, 255, 255, 255);
    //纵向警戒线
    alr_abs_off=(abs(unit[iCNL].submenu1.v_alarm))*h50per/100;
    Line(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y+h50per-alr_abs_off,
        arBOXPOS34[iCNL].x+BOX34_W, arBOXPOS34[iCNL].y+h50per-alr_abs_off, 0, 128, 0);
    Line(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y+h50per+alr_abs_off,
        arBOXPOS34[iCNL].x+BOX34_W, arBOXPOS34[iCNL].y+h50per+alr_abs_off, 0, 128, 0);
    //横向警戒线
    if(unit[iCNL].submenu1.bitfield.hcontrol)
    {
        alr_abs_off=(abs(unit[iCNL].submenu1.h_alarm))*h50per/100;
        Line(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y+h50per-alr_abs_off,
            arBOXPOS34[iCNL].x+BOX34_W, arBOXPOS34[iCNL].y+h50per-alr_abs_off, 0, 0, 128);
        Line(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y+h50per+alr_abs_off,
            arBOXPOS34[iCNL].x+BOX34_W, arBOXPOS34[iCNL].y+h50per+alr_abs_off, 0, 0, 128);
    }
}

/******************************
 描述: 描绘历史误差曲线
 		[iCNL]=通道号
******************************/
void DrawCurvLines_M4(const int iCNL)
{
    int xoff,xAT;
    int alr_abs_off;     //纵横向报警绝对偏移
    int h50per=BOX34_H/2; //高度的50%  
    //背景黑色
    Bar(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y,
        arBOXPOS34[iCNL].x+BOX34_W, arBOXPOS34[iCNL].y+BOX34_H, 0, 0, 0);
    //中心线
    Line(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y+h50per,
        arBOXPOS34[iCNL].x+BOX34_W, arBOXPOS34[iCNL].y+h50per, 255, 255, 255);
    //纵向警戒线
    alr_abs_off=(abs(unit[iCNL].submenu1.v_alarm))*h50per/100;
    Line(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y+h50per-alr_abs_off,
        arBOXPOS34[iCNL].x+BOX34_W, arBOXPOS34[iCNL].y+h50per-alr_abs_off, 0, 128, 0);
    Line(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y+h50per+alr_abs_off,
        arBOXPOS34[iCNL].x+BOX34_W, arBOXPOS34[iCNL].y+h50per+alr_abs_off, 0, 128, 0);
    //横向警戒线
    if(unit[iCNL].submenu1.bitfield.hcontrol)
    {
        alr_abs_off=(abs(unit[iCNL].submenu1.h_alarm))*h50per/100;
        Line(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y+h50per-alr_abs_off,
            arBOXPOS34[iCNL].x+BOX34_W, arBOXPOS34[iCNL].y+h50per-alr_abs_off, 0, 0, 128);
        Line(arBOXPOS34[iCNL].x, arBOXPOS34[iCNL].y+h50per+alr_abs_off,
            arBOXPOS34[iCNL].x+BOX34_W, arBOXPOS34[iCNL].y+h50per+alr_abs_off, 0, 0, 128);
    }

⌨️ 快捷键说明

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