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

📄 lcd13xx.c

📁 在ucos上实现了图形用户接口GUI;值得一看
💻 C
📖 第 1 页 / 共 5 页
字号:

void LCD_L0_DrawHLine  (int x0, int y,  int x1) {
  #if LCD_MIRROR_X
    #define X0 (LCD_XSIZE-1-(x1))
  #else
    #define X0 x0
  #endif
  if (x0>x1) return;
  {
    register tOff Off;
    register int Rem;
    if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
      for (;  (x0&1)      &&(x0<=x1); x0++) XORPIXEL(x0, y);
      for (; ((x1&1)!=1)  &&(x0<=x1); x1--) XORPIXEL(x1, y);
      Off = XY2OFF(X0,y);
      Rem = (x1-x0+2)>>1;
      for (; Rem--; Off++) {
	U16 c;
	READ_MEM(Off,c);
	c ^= 0xff;
	WRITE_MEM(Off,c);
      }
    } else {
      U8 col = COLOR+(COLOR<<4);
      // Draw pixels left of fill area
      for (; (x0&1) && (x0<=x1); x0++)   SETPIXEL(x0, y, COLOR);
      // Draw pixels right of fill area
      for (; ((x1+1)&1)&&(x0<=x1); x1--) SETPIXEL(x1, y, COLOR);
      Off = XY2OFF(X0,y);
      Rem = (x1-x0+2)>>1;
      for (; Rem--; Off++) {
	WRITE_MEM(Off,col);
      }
    }
  }
  #undef X0
}
*/






/*
	*********************************************************
	*                                                       *
	*          LCD_L0_DrawHLine optimized                      *
	*                                                       *
	*          8 bit bus, 1 bpp                             *
	*                                                       *
	*********************************************************
*/
/*
#elif (LCD_OPTIMIZE)             \
      && (!LCD_SWAP_XY)          \
      && (!LCD_MIRROR_Y)         \
      && (!LCD_MIRROR_X)         \
      && (LCD_BUSWIDTH==8)       \
      && (!defined (LCD_LUT_SEG))   \
      && (LCD_BITSPERPIXEL == 1)

void LCD_L0_DrawHLine  (int x0, int y,  int x1) {
  register tOff Off = XY2OFF(x0,y);
  int iByte = x0>>3;
  int Byte1 = x1>>3;
  U8 Mask =    0xff   >> (x0&7);
  U8 EndMask = 0xff80 >> (x1&7);
  U8 Data;
  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
    for (; iByte<Byte1; iByte++) {
      READ_MEM(Off,Data);
      Data ^= Mask;
      WRITE_MEM(Off,Data);
      Mask = 0xff;
      Off++;
    }
    Mask &= EndMask;
    READ_MEM(Off,Data);
    Data ^= Mask;
    WRITE_MEM(Off,Data);
  } else {                                  // Clear pixels in line
    int NumBytes = Byte1-iByte;
    if (COLOR==0) {
      if (NumBytes) {
	READ_MEM(Off,Data);
	Data &= (~Mask);
	WRITE_MEM(Off,Data);
	Off++; NumBytes--;
      // Fill bytes in 2 loops for speed reasons ...
	for (; NumBytes>=4; NumBytes-=4, Off+=4) {
	  WRITE_MEM(Off,0);
	  WRITE_MEM(Off+1,0);
	  WRITE_MEM(Off+2,0);
	  WRITE_MEM(Off+3,0);
	}
	for (; NumBytes; NumBytes--, Off++) {
	  WRITE_MEM(Off,0);
	}
	Mask = 0xff;
      }
      Mask &= EndMask;
      READ_MEM(Off,Data);
      Data &= ~Mask;
      WRITE_MEM(Off,Data);
    } else {                                  // Set pixels in line
      if (NumBytes) {
	READ_MEM(Off,Data);
	Data |= Mask;
	WRITE_MEM(Off,Data);
	Off++; NumBytes--;
      // Fill bytes in 2 loops for speed reasons ...
	for (; NumBytes>=4; NumBytes-=4, Off+=4) {
	  WRITE_MEM(Off,  0xff);
	  WRITE_MEM(Off+1,0xff);
	  WRITE_MEM(Off+2,0xff);
	  WRITE_MEM(Off+3,0xff);
	}
	for (; NumBytes; NumBytes--, Off++) {
	  WRITE_MEM(Off,0xff);
	}
	Mask = 0xff;
      }
      Mask &= EndMask;
      READ_MEM(Off,Data);
      Data |= Mask;
      WRITE_MEM(Off,Data);
    }
  }
}
*/






/*
	*********************************************************
	*                                                       *
	*          LCD_L0_DrawHLine unoptimized                    *
	*                                                       *
	*********************************************************
*/
/*
#else  // Unoptimized variant

void LCD_L0_DrawHLine  (int x0, int y,  int x1) {
  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
    while (x0 <= x1) {
      XORPIXEL(x0, y);
      x0++;
    }
  } else {
    while (x0 <= x1) {
      SETPIXEL(x0, y, COLOR);
      x0++;
    }
  }
}

#endif
*/




/********************************************************
*
*          LCD_L0_DrawVLine optimized
*
*          16 bit bus, using BITBLT
*
*********************************************************
*/
/*
#if (LCD_USE_BITBLT)           \
    && (!LCD_SWAP_XY)          \
    && (LCD_BUSWIDTH==16)      \
    && (!defined (LCD_LUT_COM))   \
    && (!defined (LCD_LUT_SEG))   \
    && ((LCD_CONTROLLER == 1356)||(LCD_CONTROLLER == 13806))
*/
void LCD_L0_DrawVLine  (int x, int y0,  int y1) {
  int oldcolor=getcolor ();
  setcolor (COLOR);
  line (x,y0,x,y1);
  setcolor (oldcolor);
  
/*
  #if LCD_MIRROR_X
    #define X0 (LCD_XSIZE-1-(x))
  #else
    #define X0 x
  #endif
  #if LCD_MIRROR_Y
    #define Y0 (LCD_YSIZE-1-(y1))
    #define Y1 (LCD_YSIZE-1-(y0))
  #else
    #define Y0 y0
    #define Y1 y1
  #endif
  if (y0>y1) return;
  LCD_FillRectBB(X0,Y0,X0,Y1);
  #undef X0
  #undef Y0
  #undef Y1
*/
}







/********************************************************
*
*          LCD_L0_DrawVLine optimized
*
*          8 bit bus, 4 bpp, SWAP_XY, MIRROR_Y
*
*********************************************************
*/
/*
#elif (LCD_OPTIMIZE)             \
      && (LCD_SWAP_XY)          \
      && (LCD_MIRROR_Y)         \
      && (LCD_BUSWIDTH==8)       \
      && (!defined (LCD_LUT_COM))   \
      && (!defined (LCD_LUT_SEG))   \
      && (LCD_BITSPERPIXEL == 4)

void LCD_L0_DrawVLine  (int x, int y0,  int y1) {
  #if !LCD_MIRROR_X
    int y_P = x;
  #else
    int y_P = (LCD_XSIZE-1-(x1));
  #endif
  #if !LCD_MIRROR_Y
    int x0_P = y0;
    int x1_P = y1;
  #else
    int x0_P = (LCD_YSIZE-1-(y1));
    int x1_P = (LCD_YSIZE-1-(y0));
  #endif
  register tOff Off = XY2OFF(x0_P, y_P);
  register int Rem;
  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
    if (x0_P & 3)
      while (x0_P <= x1_P)
	XorPixel(x0_P++, y_P);
    if ((x1_P + 1) & 3)
      while (x1_P >= x0_P)
	XorPixel(x1_P--, y_P);
    Rem = (x1_P - x0_P + 1) >> 1;
    for (; Rem-- > 0; Off++) {
      U8 Contents;
      READ_MEM(Off,Contents);
      Contents ^= 0xff;
      WRITE_MEM(Off,Contents);
    }
  } else {
    U8 col = COLOR+(COLOR<<4);
    if (x0_P & 3)
      while (x0_P <= x1_P)
	_SetPixel(x0_P++, y_P, COLOR);
    if ((x1_P + 1) & 3)
      while (x1_P >= x0_P)
	_SetPixel(x1_P--, y_P, COLOR);
    Rem = (x1_P - x0_P + 1) >> 1;
    for (; Rem-- > 0; Off++)
      WRITE_MEM(Off,col);
  }
  #if 0
  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
//      for (;  y0<=y1; y0++) XORPIXEL(x0, y0);
  } else {
    U8 col = COLOR+(COLOR<<4);
    // Draw pixels left of fill area
    for (; (x0_P&1) && (x0_P<=x1_P); x0_P++)
      _SetPixel(x0_P, y_P, COLOR);
    // Draw pixels right of fill area
    for (; ((x1_P+1)&1)&&(x0_P<=x1_P); x1_P--)
      _SetPixel(x0_P, y_P, COLOR);
    Rem = (x1_P+1-x0_P)>>1;
    for (; Rem--; Off++) {
      WRITE_MEM(Off,col);
    }
  }
  #endif
}
*/






/*
*********************************************************
*
*          LCD_L0_DrawVLine optimized
*
*          16 bit bus, 4 bpp, SWAP_XY
*
*********************************************************
*/
/*
#elif (LCD_OPTIMIZE)               \
      && (LCD_SWAP_XY)             \
      && (!defined (LCD_LUT_COM))  \
      && (!defined (LCD_LUT_SEG))  \
      && (LCD_BITSPERPIXEL == 4)   \
      && (LCD_BUSWIDTH==16)

void LCD_L0_DrawVLine  (int x, int y0,  int y1) {
  int y_P = x;
  #if (!LCD_MIRROR_Y) && (!LCD_MIRROR_X)
    int x0_P = y0;
    int x1_P = y1;
  #else
    int x0_P = (LCD_YSIZE-1-(y1));
    int x1_P = (LCD_YSIZE-1-(y0));
  #endif
  register tOff Off;
  register int Rem;
  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
    if (x0_P & 3)
      while ((x0_P <= x1_P) && (x0_P & 3))
	XorPixel(x0_P++, y_P);
    if ((x1_P + 1) & 3)
      while ((x1_P >= x0_P) && ((x1_P + 1) & 3))
	XorPixel(x1_P--, y_P);
    Off = XY2OFF(x0_P, y_P);
    Rem = (x1_P - x0_P + 3) >> 2;
    for (; Rem-- > 0; Off++) {
      U16 Contents;
      Contents = LCD_READ_MEM(Off);
      Contents ^= 0xffff;
      LCD_WRITE_MEM(Off,Contents);
    }
  } else {
    U16 col = COLOR+(COLOR<<4)+(COLOR<<8)+(COLOR<<12);
    if (x0_P & 3)
      while ((x0_P <= x1_P) && (x0_P & 3))
	_SetPixel(x0_P++, y_P, COLOR);
    if ((x1_P + 1) & 3)
      while ((x1_P >= x0_P) && ((x1_P + 1) & 3))
	_SetPixel(x1_P--, y_P, COLOR);
    Off = XY2OFF(x0_P, y_P);
    Rem = (x1_P - x0_P + 3) >> 2;
    for (; Rem-- > 0; Off++) {
      LCD_WRITE_MEM(Off,col);
    }
  }
}
*/






/*
*********************************************************
*
*          LCD_L0_DrawVLine optimized
*
*          16 bit bus, 8 bpp
*
*********************************************************
*/
/*
#elif (LCD_OPTIMIZE)              \
      && (!LCD_SWAP_XY)          \
      && (!LCD_MIRROR_Y)          \
      && (!defined (LCD_LUT_COM))  \
      && (!defined (LCD_LUT_SEG))  \
      && (LCD_BITSPERPIXEL == 8)  \
      && (LCD_BUSWIDTH==16)

void LCD_L0_DrawVLine  (int x, int y0,  int y1) {
  #if LCD_MIRROR_X
    #define X0 (LCD_XSIZE-1-(x))
  #else
    #define X0 x
  #endif
  {
    register int shift;
    register U16 AndMask, OrMask;
    register tOff Off = XY2OFF((X0),y0);
  #if LCD_MIRROR_X
    switch (x&1) {
  #else
    switch (1-(x&1)) {
  #endif
    case 0:
      shift = 0;
      break;
    case 1:
      shift = 8;
    }
    if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
      AndMask = 0xffff;
      OrMask =  (0xff << shift);
    } else {
      AndMask = ~(0xff << shift);
      OrMask = ((U16)COLOR << shift);
    }
    if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
      register U16 Mask = (0xff << shift);
      for (;y0<=y1;y0++) {
	U16 Data;
	READ_MEM(Off,Data);
	Data ^= Mask;
	WRITE_MEM(Off,Data);
	Off+= WORDSPERLINE;
      }
    } else {
      for (;y0<=y1;y0++) {
	U16 Data;
	READ_MEM(Off,Data);
	Data &= AndMask;
	Data |= OrMask;
	WRITE_MEM(Off,Data);
	Off+= WORDSPERLINE;
      }
    }
  }
  #undef X0
}
*/








/*
*********************************************************
*
*          LCD_L0_DrawVLine no optimization
*
*          8 bit bus, 1 bpp
*
*********************************************************
*/
/*
#else  // No optimization

void LCD_L0_DrawVLine  (int x, int y0,  int y1) {
  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
    while (y0 <= y1) {
      XORPIXEL(x, y0);
      y0++;
    }
  } else {
    while (y0 <= y1) {
      SETPIXEL(x, y0, COLOR);
      y0++;
    }
  }
}

#endif
*/








⌨️ 快捷键说明

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