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

📄 lcdpage1bpp.lst

📁 Keil C下通过的UCGUI,UCGUI的移植源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
                && !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--) {
C51 COMPILER V8.05a   LCDPAGE1BPP                                                          04/11/2008 14:19:26 PAGE 18  

                        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;
C51 COMPILER V8.05a   LCDPAGE1BPP                                                          04/11/2008 14:19:26 PAGE 19  

                    }
                  }
                  {
                    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,
C51 COMPILER V8.05a   LCDPAGE1BPP                                                          04/11/2008 14:19:26 PAGE 20  

                                     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 \
C51 COMPILER V8.05a   LCDPAGE1BPP                                                          04/11/2008 14:19:26 PAGE 21  

                        || 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
C51 COMPILER V8.05a   LCDPAGE1BPP                                                          04/11/2008 14:19:26 PAGE 22  

                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
1318          
1319          void LCDPage1bpp(void) { } /* avoid empty object files */
1320          
1321          #endif /* (LCD_CONTROLLER undefined) */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =      1    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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