?? lcd159a.lst
字號:
*********************************************************
*
* Exported routines
*
*********************************************************
*/
/*
*****************************************
*
* LCD_L0_XorPixel
*
*****************************************
Purpose: This routine is called by emWin. It writes 1 pixel into the
display.
*/
void LCD_L0_XorPixel(int x, int y) {
XORPIXEL(x, y);
}
/*
*****************************************
*
* LCD_L0_SetPixelIndex
*
*****************************************
Purpose: This routine is called by emWin. It writes 1 pixel into the
display.
*/
void LCD_L0_SetPixelIndex(int x, int y, int ColorIndex) {
SETPIXEL(x, y, ColorIndex);
}
/*
*****************************************
*
* LCD_L0_GetPixelIndex
*
*****************************************
*/
unsigned int LCD_L0_GetPixelIndex(int x, int y) {
U8 ColorIndex;
C51 COMPILER V8.05a LCD159A 04/11/2008 14:19:23 PAGE 8
GETPIXEL(x, y, ColorIndex);
return ColorIndex;
}
/*
*****************************************
*
* LCD_L0_DrawPixel
*
*****************************************
*/
void LCD_L0_DrawPixel(int x, int y) {
SETPIXEL(x, y, COLOR);
}
/*
****************************************
*
* LCD_DrawHLine
*
****************************************
*/
#if (LCD_OPTIMIZE) \
&& (!LCD_MIRROR_X) \
&& (!LCD_MIRROR_Y) \
&& (!LCD_SWAP_XY)
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 {
SET_RECT(x0, y, x1, y);
while (x0++ <= x1) {
WRITEDATA_DIRECT(COLOR);
}
}
}
#else
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
/*
C51 COMPILER V8.05a LCD159A 04/11/2008 14:19:23 PAGE 9
****************************************
*
* LCD_DrawVLine
*
****************************************
*/
#if (LCD_OPTIMIZE) \
&& (!LCD_MIRROR_X) \
&& (!LCD_MIRROR_Y) \
&& (!LCD_SWAP_XY)
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 {
SET_RECT(x, y0, x, y1);
while (y0++ <= y1) {
WRITEDATA_DIRECT(COLOR);
}
}
}
#else
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
/*
*****************************************
*
* LCD_L0_FillRect
*
*****************************************
*/
#if (LCD_OPTIMIZE) \
&& (!LCD_MIRROR_X) \
&& (!LCD_MIRROR_Y) \
&& (!LCD_SWAP_XY)
void LCD_L0_FillRect(int x0, int y0, int x1, int y1) {
if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
for (; y0 <= y1; y0++) {
LCD_L0_DrawHLine(x0, y0, x1);
C51 COMPILER V8.05a LCD159A 04/11/2008 14:19:23 PAGE 10
}
} else {
int Bytes = (y1 - y0 + 1) * (x1 - x0 + 1);
SET_RECT(x0, y0, x1, y1);
while (Bytes--) {
WRITEDATA_DIRECT(COLOR);
}
}
}
#else
void LCD_L0_FillRect(int x0, int y0, int x1, int y1) {
for (; y0 <= y1; y0++) {
LCD_L0_DrawHLine(x0, y0, x1);
}
}
#endif
/*
*****************************************
*
* Draw Bitmap 1 BPP
* optimized
*
*****************************************
*/
#if (LCD_OPTIMIZE) \
&& (!LCD_MIRROR_X) \
&& (!LCD_MIRROR_Y) \
&& (!LCD_SWAP_XY)
static void DrawBitLine1BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans) {
LCD_PIXELINDEX pixels;
LCD_PIXELINDEX Index0 = *(pTrans+0);
LCD_PIXELINDEX Index1 = *(pTrans+1);
/*
// Jump to right entry point
*/
pixels = *p;
switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS|LCD_DRAWMODE_XOR)) {
case 0:
switch (Diff&7) {
case 0:
goto WriteBit0;
case 1:
goto WriteBit1;
case 2:
goto WriteBit2;
case 3:
goto WriteBit3;
case 4:
goto WriteBit4;
case 5:
goto WriteBit5;
case 6:
goto WriteBit6;
case 7:
goto WriteBit7;
}
C51 COMPILER V8.05a LCD159A 04/11/2008 14:19:23 PAGE 11
break;
case LCD_DRAWMODE_TRANS:
switch (Diff&7) {
case 0:
goto WriteTBit0;
case 1:
goto WriteTBit1;
case 2:
goto WriteTBit2;
case 3:
goto WriteTBit3;
case 4:
goto WriteTBit4;
case 5:
goto WriteTBit5;
case 6:
goto WriteTBit6;
case 7:
goto WriteTBit7;
}
break;
case LCD_DRAWMODE_XOR:
switch (Diff&7) {
case 0:
goto WriteXBit0;
case 1:
goto WriteXBit1;
case 2:
goto WriteXBit2;
case 3:
goto WriteXBit3;
case 4:
goto WriteXBit4;
case 5:
goto WriteXBit5;
case 6:
goto WriteXBit6;
case 7:
goto WriteXBit7;
}
}
/*
Write with transparency
*/
WriteTBit0:
if (pixels&(1<<7)) SETPIXEL(x+0, y, Index1);
if (!--xsize)
return;
WriteTBit1:
if (pixels&(1<<6)) SETPIXEL(x+1, y, Index1);
if (!--xsize)
return;
WriteTBit2:
if (pixels&(1<<5)) SETPIXEL(x+2, y, Index1);
if (!--xsize)
return;
WriteTBit3:
if (pixels&(1<<4)) SETPIXEL(x+3, y, Index1);
if (!--xsize)
return;
WriteTBit4:
if (pixels&(1<<3)) SETPIXEL(x+4, y, Index1);
C51 COMPILER V8.05a LCD159A 04/11/2008 14:19:23 PAGE 12
if (!--xsize)
return;
WriteTBit5:
if (pixels&(1<<2)) SETPIXEL(x+5, y, Index1);
if (!--xsize)
return;
WriteTBit6:
if (pixels&(1<<1)) SETPIXEL(x+6, y, Index1);
if (!--xsize)
return;
WriteTBit7:
if (pixels&(1<<0)) SETPIXEL(x+7, y, Index1);
if (!--xsize)
return;
x+=8;
pixels = *(++p);
goto WriteTBit0;
/*
Write without transparency
*/
WriteBit0:
WRITEDATA_DIRECT((pixels&(1<<7)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit1:
WRITEDATA_DIRECT((pixels&(1<<6)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit2:
WRITEDATA_DIRECT((pixels&(1<<5)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit3:
WRITEDATA_DIRECT((pixels&(1<<4)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit4:
WRITEDATA_DIRECT((pixels&(1<<3)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit5:
WRITEDATA_DIRECT((pixels&(1<<2)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit6:
WRITEDATA_DIRECT((pixels&(1<<1)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit7:
WRITEDATA_DIRECT((pixels&(1<<0)) ? Index1 : Index0);
if (!--xsize)
return;
x+=8;
pixels = *(++p);
goto WriteBit0;
/*
Write XOR mode
*/
WriteXBit0:
if (pixels&(1<<7))
XORPIXEL(x+0, y);
if (!--xsize)
C51 COMPILER V8.05a LCD159A 04/11/2008 14:19:23 PAGE 13
return;
WriteXBit1:
if (pixels&(1<<6))
XORPIXEL(x+1, y);
if (!--xsize)
return;
WriteXBit2:
if (pixels&(1<<5))
XORPIXEL(x+2, y);
if (!--xsize)
return;
WriteXBit3:
if (pixels&(1<<4))
XORPIXEL(x+3, y);
if (!--xsize)
return;
WriteXBit4:
if (pixels&(1<<3))
XORPIXEL(x+4, y);
if (!--xsize)
return;
WriteXBit5:
if (pixels&(1<<2))
XORPIXEL(x+5, y);
if (!--xsize)
return;
WriteXBit6:
if (pixels&(1<<1))
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -