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

📄 lcdpage1bpp.lst

📁 Keil C下通过的UCGUI,UCGUI的移植源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
                if (_Offset == Offset)
                  return;
                _Offset = Offset;
                SET_OFFSET(_Offset);
              }
              
              static void _WriteData1(U8 Data) {
                WRITE_DATA(Data);
                _Offset++;
                if (_Offset == MAX_OFFSET) {
                  _Offset = 0;
                  if (_Page < (MAX_PAGE - 1)) {
                    ++_Page;
                  } else {
                    _Page = 0;
                  }
                }
              }
              
              static void _WriteDataM(U8 * pData, int NumberOfBytes) {
                LCD_WRITEM_A1(pData, NumberOfBytes);
                _Offset += NumberOfBytes;
                if (_Offset == MAX_OFFSET) {
                  _Offset = 0;
                  if (_Page < (MAX_PAGE - 1)) {
                    ++_Page;
                  } else {
                    _Page = 0;
                  }
                }
              }
              
              #else
              
              static void _SetPageIfNeeded(int Page) {
C51 COMPILER V8.05a   LCDPAGE1BPP                                                          04/11/2008 14:19:26 PAGE 7   

                _Page = Page;
                SET_PAGE(_Page);
              }
              
              static void _SetOffsetIfNeeded(int Offset) {
                _Offset = Offset;
                SET_OFFSET(_Offset);
              }
              
              static void _WriteData1(U8 Data) {
                WRITE_DATA(Data);
              }
              
              static void _WriteDataM(U8 * pData, int NumberOfBytes) {
                while(NumberOfBytes) {
                  WRITE_DATA(*pData);
                  if (--NumberOfBytes) {
                    pData++;
                    _Offset++;
                    SET_OFFSET(_Offset);
                  }
                }
              }
              
              #endif
              
              /*********************************************
              *
              *       Draw Bitmap 1 BPP (optimized)
              *
              **********************************************
              */
              
              #if LCD_OPTIMIZE \
                && !LCD_SWAP_XY \
                && !LCD_MIRROR_X \
                && !LCD_MIRROR_Y
              
              static void _DrawBitLine1BPP(int x, int y, U8 const * pData, int ysize, const LCD_PIXELINDEX * pTrans, int
             - BytesPerLine, U8 DataMask) {
                LCD_PIXELINDEX Index0 = *(pTrans + 0);
                LCD_PIXELINDEX Index1 = *(pTrans + 1);
                U8 PixelMask = 1 << (y & 7);
                int Page = y >> 3;
                U8 Data;
                Data = _VRam[Page][x];
                switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
                  case 0:
                    while(ysize--) {
                      if (*pData & DataMask) {
                        if (Index1) {
                          Data |= PixelMask;
                        } else {
                          Data &= ~PixelMask;
                        }
                      } else {
                        if (Index0) {
                          Data |= PixelMask;
                        } else {
                          Data &= ~PixelMask;
                        }
                      }
C51 COMPILER V8.05a   LCDPAGE1BPP                                                          04/11/2008 14:19:26 PAGE 8   

                      pData += BytesPerLine;
                      PixelMask <<= 1;
                      if (!PixelMask || !ysize) {
                        _VRam[Page][x] = Data;
                        if (ysize) {
                          PixelMask = 1;
                          Data = _VRam[++Page][x];
                        }
                      }
                    }
                    break;
                  case LCD_DRAWMODE_TRANS:
                    while(ysize--) {
                      if (*pData & DataMask) {
                        if (Index1) {
                          Data |= PixelMask;
                        } else {
                          Data &= ~PixelMask;
                        }
                      }
                      pData += BytesPerLine;
                      PixelMask <<= 1;
                      if (!PixelMask || !ysize) {
                        _VRam[Page][x] = Data;
                        if (ysize) {
                          PixelMask = 1;
                          Data = _VRam[++Page][x];
                        }
                      }
                    }
                    break;
                  case LCD_DRAWMODE_XOR:
                    while(ysize--) {
                      if (*pData & DataMask) {
                        Data ^= PixelMask;
                      }
                      pData += BytesPerLine;
                      PixelMask <<= 1;
                      if (!PixelMask || !ysize) {
                        _VRam[Page][x] = Data;
                        if (ysize) {
                          PixelMask = 1;
                          Data = _VRam[++Page][x];
                        }
                      }
                    }
                    break;
                      }
              }
              
              /*********************************************
              *
              *       Draw Bitmap 1 BPP (not optimized)
              *
              **********************************************
              */
              
              #else
              
              static void _DrawBitLine1BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans) {
                LCD_PIXELINDEX Index0 = *(pTrans+0);
                LCD_PIXELINDEX Index1 = *(pTrans+1);
C51 COMPILER V8.05a   LCDPAGE1BPP                                                          04/11/2008 14:19:26 PAGE 9   

                x += Diff;
                switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
                  case 0:
                    do {
                      LCD_L0_SetPixelIndex(x++, y, (*p & (0x80 >> Diff)) ? Index1 : Index0);
                                        if (++Diff == 8) {
                        Diff = 0;
                                                p++;
                                        }
                                } while (--xsize);
                    break;
                  case LCD_DRAWMODE_TRANS:
                    do {
                                if (*p & (0x80 >> Diff))
                        LCD_L0_SetPixelIndex(x, y, Index1);
                      x++;
                                        if (++Diff == 8) {
                        Diff = 0;
                                                p++;
                                        }
                                } while (--xsize);
                    break;
                  case LCD_DRAWMODE_XOR:;
                    do {
                                if (*p & (0x80 >> Diff)) {
                        int Pixel = LCD_L0_GetPixelIndex(x, y);
                        LCD_L0_SetPixelIndex(x, y, LCD_NUM_COLORS - 1 - Pixel);
                      }
                      x++;
                                        if (++Diff == 8) {
                        Diff = 0;
                                                p++;
                                        }
                                } while (--xsize);
                    break;
                      }
              }
              
              #endif
              
              /*********************************************
              *
              *       Draw Bitmap 2 BPP
              *
              **********************************************
              */
              
              #if (LCD_MAX_LOG_COLORS > 2)
              static void _DrawBitLine2BPP(int x, int y, U8 const * p, int Diff, int xsize, const LCD_PIXELINDEX * pTran
             -s) {
                LCD_PIXELINDEX Pixels = *p;
                int CurrentPixel = Diff;
                x += Diff;
                switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
                  case 0:
                    do {
                      int Shift = (3 - CurrentPixel) << 1;
                      int Index = (Pixels & (0xC0 >> (6 - Shift))) >> Shift;
                      LCD_PIXELINDEX PixelIndex = *(pTrans + Index);
                      LCD_L0_SetPixelIndex(x++, y, PixelIndex);
                      if (++CurrentPixel == 4) {
                        CurrentPixel = 0;
C51 COMPILER V8.05a   LCDPAGE1BPP                                                          04/11/2008 14:19:26 PAGE 10  

                        Pixels = *(++p);
                      }
                                } while (--xsize);
                    break;
                  case LCD_DRAWMODE_TRANS:
                    do {
                      int Shift = (3 - CurrentPixel) << 1;
                      int Index = (Pixels & (0xC0 >> (6 - Shift))) >> Shift;
                      if (Index) {
                        LCD_PIXELINDEX PixelIndex = *(pTrans + Index);
                        LCD_L0_SetPixelIndex(x, y, PixelIndex);
                      }
                      x++;
                      if (++CurrentPixel == 4) {
                        CurrentPixel = 0;
                        Pixels = *(++p);
                      }
                                } while (--xsize);
                    break;
                }
              }
              #endif
              
              /*********************************************
              *
              *       Draw Bitmap 4 BPP
              *
              **********************************************
              */
              
              #if (LCD_MAX_LOG_COLORS > 4)
              static void _DrawBitLine4BPP(int x, int y, U8 const * p, int Diff, int xsize, const LCD_PIXELINDEX * pTran
             -s) {
                LCD_PIXELINDEX Pixels = *p;
                int CurrentPixel = Diff;
                x += Diff;
                switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
                  case 0:
                    do {
                      int Shift = (1 - CurrentPixel) << 2;
                      int Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
                      LCD_PIXELINDEX PixelIndex = *(pTrans + Index);
                      LCD_L0_SetPixelIndex(x++, y, PixelIndex);
                      if (++CurrentPixel == 2) {
                        CurrentPixel = 0;
                        Pixels = *(++p);
                      }
                                } while (--xsize);
                    break;
                  case LCD_DRAWMODE_TRANS:
                    do {
                      int Shift = (1 - CurrentPixel) << 2;
                      int Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
                      if (Index) {
                        LCD_PIXELINDEX PixelIndex = *(pTrans + Index);
                        LCD_L0_SetPixelIndex(x, y, PixelIndex);
                      }
                      x++;
                      if (++CurrentPixel == 2) {
                        CurrentPixel = 0;
                        Pixels = *(++p);
                      }
C51 COMPILER V8.05a   LCDPAGE1BPP                                                          04/11/2008 14:19:26 PAGE 11  

                                } while (--xsize);
                    break;
                }
              }
              #endif
              
              /*********************************************
              *
              *       Draw Bitmap 8 BPP (optimized)
              *
              **********************************************
              */
              
              #if (LCD_MAX_LOG_COLORS > 16)
              
              #if LCD_OPTIMIZE \
                && !LCD_SWAP_XY \
                && !LCD_MIRROR_X \
                && !LCD_MIRROR_Y
              
              static void _DrawBitLine8BPP(int x, int y, U8 const * pData, int ysize, const LCD_PIXELINDEX * pTrans, int
             - BytesPerLine) {
                U8 PixelMask = 1 << (y & 7);
                int Page = y >> 3;
                U8 Data = _VRam[Page][x];
                if (!pTrans)
                  pTrans = _ConversionTable;
                switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
                  case 0:
                    while(ysize--) {
                      if (*(pTrans + *pData)) {
                        Data |= PixelMask;
                      } else {
                        Data &= ~PixelMask;
                      }
                      pData += BytesPerLine;
                      PixelMask <<= 1;
                      if (!PixelMask || !ysize) {
                        _VRam[Page][x] = Data;
                        if (ysize) {
                          PixelMask = 1;
                          Data = _VRam[++Page][x];
                        }
                      }
                    }
                    break;
                  case LCD_DRAWMODE_TRANS:
                    while(ysize--) {
                      LCD_PIXELINDEX Pixel = *pData;
                      if (Pixel) {
                        if (*(pTrans + Pixel)) {
                          Data |= PixelMask;
                        } else {
                          Data &= ~PixelMask;
                        }
                      }

⌨️ 快捷键说明

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