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

📄 lcdslin.lst

📁 Keil C下通过的UCGUI,UCGUI的移植源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
                    XORPIXEL(x+7, y);
                  if (!--xsize)
                    return;
                  x+=8;
                  pixels = *(++p);
                  goto WriteXBit0;
              }
              
              #endif
              
              
              /*
                      *********************************************************
                      *                                                       *
                      *  Draw Bitmap 2 BPP                                    *
                      *                                                       *
C51 COMPILER V8.05a   LCDSLIN                                                              04/11/2008 14:19:26 PAGE 20  

                      *********************************************************
              */
              
              #if (LCD_MAX_LOG_COLORS > 2)
              
              static void  DrawBitLine2BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans) {
                PIXELCOLOR pixels;
              /*
                      Jump to right entry point
              */
                pixels = *p;
                if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) switch (Diff&3) {
                case 0:
                  goto WriteTBit0;
                case 1:
                  goto WriteTBit1;
                case 2:
                  goto WriteTBit2;
                default:
                  goto WriteTBit3;
                } else switch (Diff&3) {
                case 0:
                  goto WriteBit0;
                case 1:
                  goto WriteBit1;
                case 2:
                  goto WriteBit2;
                default:
                  goto WriteBit3;
                }
              /*
                      Write without transparency
              */
              WriteBit0:
                SETPIXEL(x+0, y, *(pTrans+(pixels>>6)));
                if (!--xsize)
                  return;
              WriteBit1:
                SETPIXEL(x+1, y, *(pTrans+(3&(pixels>>4))));
                if (!--xsize)
                  return;
              WriteBit2:
                SETPIXEL(x+2, y, *(pTrans+(3&(pixels>>2))));
                if (!--xsize)
                  return;
              WriteBit3:
                SETPIXEL(x+3, y, *(pTrans+(3&(pixels))));
                if (!--xsize)
                  return;
                pixels = *(++p);
                x+=4;
                goto WriteBit0;
              /*
                      Write with transparency
              */
              WriteTBit0:
                if (pixels&(3<<6))
                  SETPIXEL(x+0, y, *(pTrans+(pixels>>6)));
                if (!--xsize)
                  return;
              WriteTBit1:
                if (pixels&(3<<4))
C51 COMPILER V8.05a   LCDSLIN                                                              04/11/2008 14:19:26 PAGE 21  

                  SETPIXEL(x+1, y, *(pTrans+(3&(pixels>>4))));
                if (!--xsize)
                  return;
              WriteTBit2:
                if (pixels&(3<<2))
                  SETPIXEL(x+2, y, *(pTrans+(3&(pixels>>2))));
                if (!--xsize)
                  return;
              WriteTBit3:
                if (pixels&(3<<0))
                  SETPIXEL(x+3, y, *(pTrans+(3&(pixels))));
                if (!--xsize)
                  return;
                pixels = *(++p);
                x+=4;
                goto WriteTBit0;
              }
              
              #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*pTrans) {
                PIXELCOLOR pixels;
              /*
                      Jump to right entry point
              */
                pixels = *p;
                if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) {
                  if ((Diff&1) ==0)
                    goto WriteTBit0;
                  goto WriteTBit1;
                } else {
                  if ((Diff&1) ==0)
                    goto WriteBit0;
                  goto WriteBit1;
                }
              /*
                      Write without transparency
              */
              WriteBit0:
                SETPIXEL(x+0, y, *(pTrans+(pixels>>4)));
                if (!--xsize)
                  return;
              WriteBit1:
                SETPIXEL(x+1, y, *(pTrans+(pixels&0xf)));
                if (!--xsize)
                  return;
                x+=2;
                pixels = *(++p);
                goto WriteBit0;
              /*
                      Write with transparency
C51 COMPILER V8.05a   LCDSLIN                                                              04/11/2008 14:19:26 PAGE 22  

              */
              WriteTBit0:
                if (pixels>>4)
                  SETPIXEL(x+0, y, *(pTrans+(pixels>>4)));
                if (!--xsize)
                  return;
              WriteTBit1:
                if (pixels&0xf)
                  SETPIXEL(x+1, y, *(pTrans+(pixels&0xf)));
                if (!--xsize)
                  return;
                x+=2;
                pixels = *(++p);
                goto WriteTBit0;
              }
              
              #endif
              
              /*
                      *********************************************************
                      *                                                       *
                      *  Draw Bitmap 8 BPP  (256 colors)                      *
                      *                                                       *
                      *      Default (no optimization)                        *
                      *                                                       *
                      *********************************************************
              */
              
              #if (LCD_MAX_LOG_COLORS > 16)
              static void  DrawBitLine8BPP(int x, int y, U8 const*p, int xsize, const LCD_PIXELINDEX*pTrans) {
                LCD_PIXELINDEX pixel;
              /*  
                      Do x-Clipping
              */
                if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS)==0) {
                  while (xsize > 0) {
                    pixel = *p;
                    SETPIXEL(x+0, y, *(pTrans+pixel));
                    xsize--;
                    x++;
                    p++;
                  }
                } else {   /* Handle transparent bitmap */
                  while (xsize > 0) {
                    pixel = *p;
                    if (pixel)
                      SETPIXEL(x+0, y, *(pTrans+pixel));
                    xsize--;
                    x++;
                    p++;
                  }
                }
              }
              
              #endif
              
              
              /*
                      *********************************************************
                      *                                                       *
                      *         Universal draw Bitmap routine                 *
                      *                                                       *
C51 COMPILER V8.05a   LCDSLIN                                                              04/11/2008 14:19:26 PAGE 23  

                      *********************************************************
              */
              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 (!pTrans)
                  pTrans = LCD_ConversionTable;
                /*
                   Use DrawBitLineXBPP
                */
                for (i=0; i<ysize; i++) {
                  switch (BitsPerPixel) {
                  case 1:
                    DrawBitLine1BPP(x0, i+y0, pData, Diff, xsize, pTrans);
                    break;
                  #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)
                    case 8:
                      DrawBitLine8BPP(x0, i+y0, pData, xsize, pTrans);
                      break;
                  #endif
                  }
                  pData += BytesPerLine;
                }
              }
              
              
              /********************************************************
              *
              *       LCD_L0_SetOrg
              *
              *********************************************************
              
              Purpose:        Sets the original position of the virtual display.
                              Has no function at this point with the PC-driver.
              */
              
              int OrgX, OrgY;
              void LCD_L0_SetOrg(int x, int y) {
                OrgX = x;
                OrgY = y;
              }
              
              
              /*
                      *********************************************************
                      *                                                       *
                      *           Support for verification                    *
C51 COMPILER V8.05a   LCDSLIN                                                              04/11/2008 14:19:26 PAGE 24  

                      *                                                       *
                      *********************************************************
              
              The following routines are implemented, but have no functionility
              at this point. The reason is that these functions are supposed
              to supervise the hardware, which for obvious reasons can not be
              done in a simulation.
              
              */
              
              #if LCD_SUPPORT_VERIFY
              
              int  LCD_GetErrStat(void) {
                return 0;
              }
              void LCD_ClrErrStat(void) {
              }
              int  LCD_GetErrCnt (void) {
                return 0;
              }
              
              #endif  
              
              
              /*
                      ************************

⌨️ 快捷键说明

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