📄 lcdpage1bpp.c
字号:
}
/*********************************************
*
* LCD_L0_DrawHLine (not optimized)
*
**********************************************
*/
#else
void LCD_L0_DrawHLine (int x0, int y, int x1) {
if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
for (; x0 <= x1; x0++) {
LCD_L0_XorPixel(x0, y);
}
} else {
for (; x0 <= x1; x0++) {
LCD_L0_SetPixelIndex(x0, y, LCD_COLORINDEX);
}
}
}
#endif
/*********************************************
*
* LCD_L0_DrawVLine (optimized)
*
**********************************************
*/
#if LCD_OPTIMIZE \
&& !LCD_SWAP_XY \
&& !LCD_MIRROR_X \
&& !LCD_MIRROR_Y
void LCD_L0_DrawVLine (int x, int y0, int y1) {
int y0_ = y0 & 7;
int y1_ = (y1 + 1) & 7;
if (y0_) {
U8 Data = GET_BYTE(y0 >> 3, x);
U8 Mask = 0xff << y0_;
if ((y0 >> 3) == (y1 >> 3)) {
Mask &= 0xff >> (7 - (y1 & 7));
}
SET_PAGE_IF_NEEDED(y0 >> 3);
SET_OFFSET_IF_NEEDED(x);
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;
}
}
{
int Page = ((y0 + 7) & 0xfff8) >> 3;
int NumPages = (((y1 + 1) & 0xfff8) >> 3) - Page;
if (NumPages) {
while (NumPages--) {
SET_PAGE_IF_NEEDED(Page++);
SET_OFFSET_IF_NEEDED(x);
if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
WRITE_DATA1(GET_CURRENT_BYTE() ^ 0xff);
} else {
WRITE_DATA1((LCD_COLORINDEX) ? 0xff : 0x00);
}
}
}
}
if (y1_) {
U8 Data = GET_BYTE(y1 >> 3, x);
U8 Mask = 0xff >> (8 - y1_);
SET_PAGE_IF_NEEDED(y1 >> 3);
SET_OFFSET_IF_NEEDED(x);
if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
WRITE_DATA1(Data ^ Mask);
} else {
WRITE_DATA1((LCD_COLORINDEX) ? Data | Mask : Data & ~Mask);
}
}
}
/*********************************************
*
* LCD_L0_DrawVLine (not optimized)
*
**********************************************
*/
#else
void LCD_L0_DrawVLine (int x, int y0, int y1) {
if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
for (; y0 <= y1; y0++) {
LCD_L0_XorPixel(x, y0);
}
} else {
for (; y0 <= y1; y0++) {
LCD_L0_SetPixelIndex(x, y0, LCD_COLORINDEX);
}
}
}
#endif
/*********************************************
*
* LCD_L0_FillRect (optimized)
*
**********************************************
*/
#if LCD_OPTIMIZE \
&& !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--) {
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;
}
}
{
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,
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 \
|| 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
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
void LCDPage1bpp(void) { } /* avoid empty object files */
#endif /* (LCD_CONTROLLER undefined) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -