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

📄 lcdpage1bpp.c

📁 s3c44b0+ucgui+初始化的一个版本
💻 C
📖 第 1 页 / 共 3 页
字号:
}

/*********************************************
*
*       LCD_L0_DrawHLine (not optimized)
*
**********************************************
*/

#else

void LCD_L0_DrawHLine  (int x0, int y,  int x1) {
  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
    for (; x0 <= x1; x0++) {
      LCD_L0_XorPixel(x0, y);
    }
  } else {
    for (; x0 <= x1; x0++) {
      LCD_L0_SetPixelIndex(x0, y, LCD_COLORINDEX);
    }
  }
}

#endif

/*********************************************
*
*       LCD_L0_DrawVLine (optimized)
*
**********************************************
*/

#if LCD_OPTIMIZE \
  && !LCD_SWAP_XY \
  && !LCD_MIRROR_X \
  && !LCD_MIRROR_Y

void LCD_L0_DrawVLine  (int x, int y0,  int y1) {
  int y0_ = y0 & 7;
  int y1_ = (y1 + 1) & 7;
  if (y0_) {
    U8 Data = GET_BYTE(y0 >> 3, x);
    U8 Mask = 0xff << y0_;
    if ((y0 >> 3) == (y1 >> 3)) {
      Mask &= 0xff >> (7 - (y1 & 7));
    }
    SET_PAGE_IF_NEEDED(y0 >> 3);
    SET_OFFSET_IF_NEEDED(x);
    if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
      WRITE_DATA1(Data ^ Mask);
    } else {
      WRITE_DATA1((LCD_COLORINDEX) ? Data | Mask : Data & ~Mask);
    }
    if ((y0 & 0xfff8) == (y1 & 0xfff8)) {
      return;
    }
  }
  {
    int Page     =  ((y0 + 7) & 0xfff8) >> 3;
    int NumPages = (((y1 + 1) & 0xfff8) >> 3) - Page;
    if (NumPages) {
      while (NumPages--) {
        SET_PAGE_IF_NEEDED(Page++);
        SET_OFFSET_IF_NEEDED(x);
        if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
          WRITE_DATA1(GET_CURRENT_BYTE() ^ 0xff);
        } else {
          WRITE_DATA1((LCD_COLORINDEX) ? 0xff : 0x00);
        }
      }
    }
  }
  if (y1_) {
    U8 Data = GET_BYTE(y1 >> 3, x);
    U8 Mask = 0xff >> (8 - y1_);
    SET_PAGE_IF_NEEDED(y1 >> 3);
    SET_OFFSET_IF_NEEDED(x);
    if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
      WRITE_DATA1(Data ^ Mask);
    } else {
      WRITE_DATA1((LCD_COLORINDEX) ? Data | Mask : Data & ~Mask);
    }
  }
}

/*********************************************
*
*       LCD_L0_DrawVLine (not optimized)
*
**********************************************
*/

#else

void LCD_L0_DrawVLine  (int x, int y0,  int y1) {
  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
    for (; y0 <= y1; y0++) {
      LCD_L0_XorPixel(x, y0);
    }
  } else {
    for (; y0 <= y1; y0++) {
      LCD_L0_SetPixelIndex(x, y0, LCD_COLORINDEX);
    }
  }
}

#endif

/*********************************************
*
*       LCD_L0_FillRect (optimized)
*
**********************************************
*/

#if LCD_OPTIMIZE \
  && !LCD_SWAP_XY \
  && !LCD_MIRROR_X \
  && !LCD_MIRROR_Y

void LCD_L0_FillRect(int x0, int y0, int x1, int y1) {
  #if LCD_CACHE
    int y0_ = y0 & 7;
    int y1_ = (y1 + 1) & 7;
    int NumberOfBytes = x1 - x0 + 1;
    if (y0_) {
      U8 * pData;
      int x0_ = x0;
      U8 Mask = 0xff << y0_;
      int Page = y0 >> 3;
      if ((y0 & 0xfff8) == ((y1 + 1) & 0xfff8)) {
        Mask &= 0xff >> (8 - y1_);
      }
      SET_PAGE_IF_NEEDED(Page);
      SET_OFFSET_IF_NEEDED(x0);
      pData = &_VRam[_Page][_Offset];
      for (; x0_ <= x1; x0_++) {
        if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
          _VRam[Page][x0_] ^= Mask;
        } else {
          if (LCD_COLORINDEX) {
            _VRam[Page][x0_] |= Mask;
          } else {
            _VRam[Page][x0_] &= ~Mask;
          }
        }
      }
      WRITE_DATAM(pData, NumberOfBytes);
      if ((y0 & 0xfff8) == (y1 & 0xfff8)) {
        return;
      }
    }
    {
      int Page     =  ((y0 + 7) & 0xfff8) >> 3;
      int NumPages = (((y1 + 1) & 0xfff8) >> 3) - Page;
      if (NumPages) {
        while (NumPages--) {
          U8 * pData;
          int x0_ = x0;
          SET_PAGE_IF_NEEDED(Page++);
          SET_OFFSET_IF_NEEDED(x0);
          pData = &_VRam[_Page][_Offset];
          for (; x0_ <= x1; x0_++) {
            if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
              _VRam[_Page][x0_] ^= 0xff;
            } else {
              if (LCD_COLORINDEX) {
                _VRam[_Page][x0_] = 0xff;
              } else {
                _VRam[_Page][x0_] = 0x00;
              }
            }
          }
          WRITE_DATAM(pData, NumberOfBytes);
        }
      }
    }
    if (y1_) {
      U8 * pData;
      int x0_ = x0;
      U8 Mask = 0xff >> (8 - y1_);
      int Page = y1 >> 3;
      SET_PAGE_IF_NEEDED(Page);
      SET_OFFSET_IF_NEEDED(x0);
      pData = &_VRam[Page][_Offset];
      for (; x0_ <= x1; x0_++) {
        if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
          _VRam[Page][x0_] ^= Mask;
        } else {
          if (LCD_COLORINDEX) {
            _VRam[Page][x0_] |= Mask;
          } else {
            _VRam[Page][x0_] &= ~Mask;
          }
        }
      }
      WRITE_DATAM(pData, NumberOfBytes);
    }
  #else
    int y0_ = y0 & 7;
    int y1_ = (y1 + 1) & 7;
    if (y0_) {
      int x0_ = x0;
      U8 Mask = 0xff << y0_;
      if ((y0 & 0xfff8) == (y1 & 0xfff8)) {
        Mask &= 0xff >> (8 - y1_);
      }
      SET_PAGE_IF_NEEDED(y0 >> 3);
      SET_OFFSET_IF_NEEDED(x0);
      for (; x0_ <= x1; x0_++) {
        U8 Data = GET_CURRENT_BYTE();
        if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
          WRITE_DATA1(Data ^ Mask);
        } else {
          WRITE_DATA1((LCD_COLORINDEX) ? Data | Mask : Data & ~Mask);
        }
      }
      if ((y0 & 0xfff8) == (y1 & 0xfff8)) {
        return;
      }
    }
    {
      int Page     =  ((y0 + 7) & 0xfff8) >> 3;
      int NumPages = (((y1 + 1) & 0xfff8) >> 3) - Page;
      if (NumPages) {
        while (NumPages--) {
          int x0_ = x0;
          SET_PAGE_IF_NEEDED(Page++);
          SET_OFFSET_IF_NEEDED(x0);
          for (; x0_ <= x1; x0_++) {
            if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
              WRITE_DATA1(GET_CURRENT_BYTE() ^ 0xff);
            } else {
              WRITE_DATA1((LCD_COLORINDEX) ? 0xff : 0x00);
            }
          }
        }
      }
    }
    if (y1_) {
      int x0_ = x0;
      U8 Mask = 0xff >> (8 - y1_);
      SET_PAGE_IF_NEEDED(y1 >> 3);
      SET_OFFSET_IF_NEEDED(x0);
      for (; x0_ <= x1; x0_++) {
        U8 Data = GET_CURRENT_BYTE();
        if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
          WRITE_DATA1(Data ^ Mask);
        } else {
          WRITE_DATA1((LCD_COLORINDEX) ? Data | Mask : Data & ~Mask);
        }
      }
    }
  #endif
}

/*********************************************
*
*       LCD_L0_FillRect (not optimized)
*
**********************************************
*/

#else

void LCD_L0_FillRect(int x0, int y0, int x1, int y1) {
  for (; y0 <= y1; y0++) {
    LCD_L0_DrawHLine(x0, y0, x1);
  }
}

#endif

/*********************************************
*
*       LCD_L0_DrawBitmap
*
**********************************************
*/

void LCD_L0_DrawBitmap(int x0, int y0,
                       int xsize, int ysize,
                       int BitsPerPixel, 
                       int BytesPerLine,
                       const U8* pData, int Diff,
                       const LCD_PIXELINDEX* pTrans)
{
  int i;
  #if LCD_OPTIMIZE \
    && !LCD_SWAP_XY \
    && !LCD_MIRROR_X \
    && !LCD_MIRROR_Y
    int Page0 = y0 >> 3;
    int Page1 = (y0 + ysize - 1) >> 3;
    int Opt = 0;
    switch (BitsPerPixel) {
      case 1:
        Opt = 1;
        xsize += Diff & 7;
        for (i = Diff; i < xsize; i++) {
          _DrawBitLine1BPP(x0 + i, y0, pData + (i >> 3), ysize, pTrans, BytesPerLine, 0x80 >> (i & 7));
        }
        break;
      case 8:
        Opt = 1;
        for (i = Diff; i < xsize; i++) {
          _DrawBitLine8BPP(x0 + i, y0, pData + i, ysize, pTrans, BytesPerLine);
        }
        break;
    }
    if (Opt) {
      for (; Page0 <= Page1; Page0++) {
        U8 * p = &_VRam[Page0][x0];
        SET_PAGE_IF_NEEDED(Page0);
        SET_OFFSET_IF_NEEDED(x0);
        WRITE_DATAM(p, xsize);
      }
      return;
    }
  #endif
  /* Use _DrawBitLineXBPP */
  for (i=0; i<ysize; i++) {
    switch (BitsPerPixel) {
      #if !LCD_OPTIMIZE \
        || LCD_SWAP_XY \
        || LCD_MIRROR_X \
        || LCD_MIRROR_Y
        case 1:
          _DrawBitLine1BPP(x0, i + y0, pData, Diff, xsize, pTrans);
          break;
      #endif
      #if (LCD_MAX_LOG_COLORS > 2)
        case 2:
          _DrawBitLine2BPP(x0, i + y0, pData, Diff, xsize, pTrans);
          break;
      #endif
      #if (LCD_MAX_LOG_COLORS > 4)
        case 4:
          _DrawBitLine4BPP(x0, i + y0, pData, Diff, xsize, pTrans);
          break;
      #endif
      #if (LCD_MAX_LOG_COLORS > 16)
        #if !LCD_OPTIMIZE \
          || LCD_SWAP_XY \
          || LCD_MIRROR_X \
          || LCD_MIRROR_Y
          case 8:
            _DrawBitLine8BPP(x0, i + y0, pData, xsize, pTrans);
            break;
        #endif
      #endif
      #if (LCD_BITSPERPIXEL > 8)
        case 16:
          _DrawBitLine16BPP(x0, i + y0, (const U16 *)pData, xsize, pTrans);
          break;
      #endif
    }
    pData += BytesPerLine;
  }
}

/*********************************************
*
*       LCD_L0_SetOrg
*
**********************************************
*/

void LCD_L0_SetOrg(int x, int y) {
  GUI_USE_PARA(x);
  GUI_USE_PARA(y);
}

/*********************************************
*
*       LCD_On / LCD_Off
*
**********************************************
*/

void LCD_On (void) {
#ifdef LCD_ON
  LCD_ON();
#endif
}

void LCD_Off (void) {
#ifdef LCD_OFF
  LCD_OFF();
#endif
}

/*********************************************
*
*       LCD_L0_Init
*
**********************************************
Purpose:
  Initialises the LCD-controller.
*/

int  LCD_L0_Init(void) {
  #if LCD_CACHE
    memset(_VRam, 0, sizeof(_VRam));
  #endif
  LCD_INIT_CONTROLLER();
  LCD_ON();
  /* Clear display RAM */
  {
    int x, y;
    U8 Data = 0x00;
    for (y = 0; y < ((LCD_YSIZE + 7) >> 3); y++) {
      SET_PAGE(y);
      for (x = 0; x < LCD_XSIZE; x++) {
        SET_OFFSET(x);
        WRITE_DATA(Data);
      }
    }
  }
  return 0;
}

/*********************************************
*
*       LCD_L0_SetLUTEntry
*
**********************************************
*/

void LCD_L0_SetLUTEntry(U8 Pos, LCD_COLOR Color) {
  GUI_USE_PARA(Pos);
  GUI_USE_PARA(Color);
}

#else

void LCDPage1bpp(void) { } /* avoid empty object files */

#endif /* (LCD_CONTROLLER undefined) */

⌨️ 快捷键说明

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