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

📄 c_display.c

📁 乐高机器人的源码,开发平台是IAR_for_AVR.
💻 C
📖 第 1 页 / 共 2 页
字号:

    case DISPLAY_VERTICAL_LINE :
    {
      if (On == TRUE)
      {
        if (Y1 > Y2)
        {
          cDisplayLineY(X1,Y2,Y1);
        }
        else
        {
          cDisplayLineY(X1,Y1,Y2);
        }
      }
    }
    break;

    case DISPLAY_CHAR :
    {
      cDisplayChar(IOMapDisplay.pFont,On,X1,Y1,X2);
    }
    break;

  }
}


void      cDisplayInit(void* pHeader)
{
  dDisplayInit();
  IOMapDisplay.Display              =  (UBYTE*)IOMapDisplay.Normal;
  IOMapDisplay.pFunc                =  &cDisplayDraw;
  IOMapDisplay.EraseMask            =  0;
  IOMapDisplay.UpdateMask           =  0;
  IOMapDisplay.TextLinesCenterFlags =  0;
  IOMapDisplay.Flags                =  DISPLAY_REFRESH | DISPLAY_ON;
  VarsDisplay.ErasePointer          =  0;
  VarsDisplay.UpdatePointer         =  0;
}


void      cDisplayCtrl(void)
{
  ULONG   TmpMask;
  UBYTE   Tmp;
  SCREEN_CORDINATE Cordinate;

  if (!(IOMapDisplay.Flags & DISPLAY_POPUP))
  {
    if (IOMapDisplay.Display == (UBYTE*)IOMapDisplay.Popup)
    {
      IOMapDisplay.Display    = VarsDisplay.DisplaySave;
    }
  }
  else
  {
    if (IOMapDisplay.Display != (UBYTE*)IOMapDisplay.Popup)
    {
      VarsDisplay.DisplaySave = IOMapDisplay.Display;
      IOMapDisplay.Display    = (UBYTE*)IOMapDisplay.Popup;
    }
  }

  if (IOMapDisplay.EraseMask)
  {

    VarsDisplay.ErasePointer = 31;
    while ((VarsDisplay.ErasePointer) && (!(IOMapDisplay.EraseMask & (0x00000001 << VarsDisplay.ErasePointer))))
    {
      VarsDisplay.ErasePointer--;
    }

    TmpMask = IOMapDisplay.EraseMask & (1 << VarsDisplay.ErasePointer);
    if ((TmpMask & TEXTLINE_BITS))
    {
      Tmp = 0;
      while (!(TmpMask & TEXTLINE_BIT(Tmp)))
      {
        Tmp++;
      }
      if (Tmp < TEXTLINES)
      {
        cDisplayEraseLine(Tmp);
      }
    }
    else
    {
      if ((TmpMask & MENUICON_BITS))
      {
        Tmp = 0;
        while (!(TmpMask & MENUICON_BIT(Tmp)))
        {
          Tmp++;
        }
        if (Tmp < MENUICONS)
        {
          cDisplayEraseScreen((SCREEN_CORDINATE*)&MENUICON_CORDINATES[Tmp]);
        }
      }
      else
      {
        if ((TmpMask & STATUSICON_BITS))
        {
          Tmp = 0;
          while (!(TmpMask & STATUSICON_BIT(Tmp)))
          {
            Tmp++;
          }
          if (Tmp < STATUSICONS)
          {
            cDisplayEraseScreen((SCREEN_CORDINATE*)&STATUSICON_CORDINATES[Tmp]);
          }
        }
        else
        {
          if ((TmpMask & SCREEN_BITS))
          {
            Tmp = 0;
            while (!(TmpMask & SCREEN_BIT(Tmp)))
            {
              Tmp++;
            }
            if (Tmp < SCREENS)
            {
              cDisplayEraseScreen((SCREEN_CORDINATE*)&SCREEN_CORDINATES[Tmp]);
            }
            if ((TmpMask & SCREEN_BIT(SCREEN_LARGE)))
            {
              if ((IOMapDisplay.UpdateMask & SPECIAL_BIT(TOPLINE)))
              {
                cDisplayLineX(0,DISPLAY_WIDTH - 1,9);
                IOMapDisplay.UpdateMask &= ~SPECIAL_BIT(TOPLINE);
              }
            }
          }
          else
          {
            if ((TmpMask & BITMAP_BITS))
            {
              Tmp = 0;
              while (!(TmpMask & BITMAP_BIT(Tmp)))
              {
                Tmp++;
              }
              if (Tmp < BITMAPS)
              {
                Cordinate.StartX  = VarsDisplay.pOldBitmaps[Tmp]->StartX;
                Cordinate.StartY  = VarsDisplay.pOldBitmaps[Tmp]->StartY;
                Cordinate.PixelsX = VarsDisplay.pOldBitmaps[Tmp]->PixelsX;
                Cordinate.PixelsY = VarsDisplay.pOldBitmaps[Tmp]->PixelsY;
                cDisplayEraseScreen(&Cordinate);
              }
            }
            else
            {
              if ((TmpMask & SPECIAL_BITS))
              {
                Tmp = 0;
                while (!(TmpMask & SPECIAL_BIT(Tmp)))
                {
                  Tmp++;
                }
                switch (Tmp)
                {
                  case FRAME_SELECT :
                  {
                  }
                  break;

                  case MENUTEXT :
                  {
                    cDisplayEraseLine(TEXTLINE_5);
                  }
                  break;

                  case STATUSTEXT :
                  {
                    cDisplayEraseLine(TEXTLINE_1);
                  }
                  break;

                  case STEPLINE :
                  {
                  }
                  break;

                  case TOPLINE :
                  {
                  }
                  break;

                }
              }
              else
              {
                if ((TmpMask & STEPICON_BITS))
                {
                  Tmp = 0;
                  while (!(TmpMask & STEPICON_BIT(Tmp)))
                  {
                    Tmp++;
                  }
                  if (Tmp < STEPICONS)
                  {
                    cDisplayEraseScreen((SCREEN_CORDINATE*)&STEPICON_CORDINATES[Tmp]);
                  }
                }
              }
            }
          }
        }
      }
    }
    IOMapDisplay.EraseMask &= ~TmpMask;

    if (++VarsDisplay.ErasePointer >= 32)
    {
      VarsDisplay.ErasePointer = 0;
    }
    VarsDisplay.UpdatePointer = 0;
  }
  else
  {
    if (IOMapDisplay.UpdateMask)
    {

      VarsDisplay.UpdatePointer = 31;
      while ((VarsDisplay.UpdatePointer) && (!(IOMapDisplay.UpdateMask & (0x00000001 << VarsDisplay.UpdatePointer))))
      {
        VarsDisplay.UpdatePointer--;
      }
      TmpMask = IOMapDisplay.UpdateMask & (0x00000001 << VarsDisplay.UpdatePointer);

      if ((TmpMask & TEXTLINE_BITS))
      {
        Tmp = 0;
        while (!(TmpMask & TEXTLINE_BIT(Tmp)))
        {
          Tmp++;
        }
        if (Tmp < TEXTLINES)
        {
          if ((IOMapDisplay.TextLinesCenterFlags & (UBYTE)TmpMask))
          {
            cDisplayCenterString(IOMapDisplay.pFont,IOMapDisplay.pTextLines[Tmp],TEXTLINE_1 + Tmp);
          }
          else
          {
            cDisplayString(IOMapDisplay.pFont,0,Tmp * 8,IOMapDisplay.pTextLines[Tmp]);
          }
        }
      }
      else
      {
        if ((TmpMask & MENUICON_BITS))
        {
          Tmp = 0;
          while (!(TmpMask & MENUICON_BIT(Tmp)))
          {
            Tmp++;
          }
          if (Tmp < MENUICONS)
          {
            cDisplayUpdateMenuIcon(IOMapDisplay.pMenuIcons[Tmp],(SCREEN_CORDINATE*)&MENUICON_CORDINATES[Tmp]);
          }
        }
        else
        {
          if ((TmpMask & STATUSICON_BITS))
          {
            Tmp = 0;
            while (!(TmpMask & STATUSICON_BIT(Tmp)))
            {
              Tmp++;
            }
            if (Tmp < STATUSICONS)
            {
              cDisplayUpdateIcon(IOMapDisplay.pStatusIcons,IOMapDisplay.StatusIcons[Tmp],(SCREEN_CORDINATE*)&STATUSICON_CORDINATES[Tmp]);
            }
          }
          else
          {
            if ((TmpMask & SCREEN_BITS))
            {
              Tmp = 0;
              while (!(TmpMask & SCREEN_BIT(Tmp)))
              {
                Tmp++;
              }
              if (Tmp < SCREENS)
              {
                cDisplayUpdateScreen((SCREEN_CORDINATE*)&SCREEN_CORDINATES[Tmp],IOMapDisplay.pScreens[Tmp]);
              }
            }
            else
            {
              if ((TmpMask & BITMAP_BITS))
              {
                Tmp = 0;
                while (!(TmpMask & BITMAP_BIT(Tmp)))
                {
                  Tmp++;
                }
                if (Tmp < BITMAPS)
                {
                  VarsDisplay.pOldBitmaps[Tmp] = IOMapDisplay.pBitmaps[Tmp];
                  cDisplayUpdateScreen((SCREEN_CORDINATE*)&SCREEN_CORDINATES[SCREEN_BACKGROUND],IOMapDisplay.pBitmaps[Tmp]);
                }
              }
              else
              {
                if ((TmpMask & SPECIAL_BITS))
                {
                  Tmp = 0;
                  while (!(TmpMask & SPECIAL_BIT(Tmp)))
                  {
                    Tmp++;
                  }
                  switch (Tmp)
                  {
                    case FRAME_SELECT :
                    {
                      cDisplayFrame((SCREEN_CORDINATE*)&SELECT_FRAME_CORDINATES);
                    }
                    break;

                    case MENUTEXT :
                    {
                      cDisplayCenterString(IOMapDisplay.pFont,IOMapDisplay.pMenuText,TEXTLINE_5);
                    }
                    break;

                    case STATUSTEXT :
                    {
                      cDisplayCenterString(IOMapDisplay.pFont,IOMapDisplay.pStatusText,TEXTLINE_1);
                    }
                    break;

                    case STEPLINE :
                    {
                      cDisplayLineX(22,28,20);
                      cDisplayLineX(39,45,20);
                      cDisplayLineX(56,62,20);
                      cDisplayLineX(73,79,20);
                    }
                    break;

                    case TOPLINE :
                    {
                      cDisplayLineX(0,DISPLAY_WIDTH - 1,9);
                    }
                    break;

                  }
                }
                else
                {
                  if ((TmpMask & STEPICON_BITS))
                  {
                    Tmp = 0;
                    while (!(TmpMask & STEPICON_BIT(Tmp)))
                    {
                      Tmp++;
                    }
                    if (Tmp < STEPICONS)
                    {
                      cDisplayUpdateIcon(IOMapDisplay.pStepIcons,IOMapDisplay.StepIcons[Tmp],(SCREEN_CORDINATE*)&STEPICON_CORDINATES[Tmp]);
                    }
                  }
                }
              }
            }
          }
        }
      }
      IOMapDisplay.TextLinesCenterFlags &= (UBYTE)(~TmpMask);
      IOMapDisplay.UpdateMask &= ~TmpMask;
      if (++VarsDisplay.UpdatePointer >= 32)
      {
        VarsDisplay.UpdatePointer = 0;
      }
    }
    VarsDisplay.ErasePointer = 0;
  }
  if (!(IOMapDisplay.Flags & DISPLAY_POPUP))
  {
    if (!(IOMapDisplay.Flags & DISPLAY_REFRESH_DISABLED))
    {
      if ((IOMapDisplay.Flags & DISPLAY_ON))
      {
        dDisplayOn(TRUE);
      }
      else
      {
        dDisplayOn(FALSE);
      }
      if (!(dDisplayUpdate(DISPLAY_HEIGHT,DISPLAY_WIDTH,(UBYTE*)IOMapDisplay.Normal)))
      {
        IOMapDisplay.Flags &= ~DISPLAY_BUSY;
        if (!(IOMapDisplay.Flags & DISPLAY_REFRESH))
        {
          IOMapDisplay.Flags |= DISPLAY_REFRESH_DISABLED;
        }
      }
      else
      {
        IOMapDisplay.Flags |=  DISPLAY_BUSY;
      }
    }
    else
    {
      if ((IOMapDisplay.Flags & DISPLAY_REFRESH))
      {
        IOMapDisplay.Flags &= ~DISPLAY_REFRESH_DISABLED;
      }
    }
  }
  else
  {
    dDisplayUpdate(DISPLAY_HEIGHT,DISPLAY_WIDTH,(UBYTE*)IOMapDisplay.Popup);
  }
}


void      cDisplayExit(void)
{
  dDisplayExit();
}

⌨️ 快捷键说明

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