📄 bmp.c
字号:
/*LCD控制和显示函数*/
#include "bmp.h"
#include "def.h"
#include "lcd.h"
/* 全局变量, 鼠标指针位图20x12 */
const INT8U ucMouseMap[] = {
BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY,
BLACK, BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY,
BLACK, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY,
BLACK, WHITE, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY,
BLACK, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY,
BLACK, WHITE, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY,
BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY,
BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY,
BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY,
BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY,
BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY,
BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, BLACK, BLACK, BLACK, BLACK, BLACK,
BLACK, WHITE, WHITE, BLACK, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY,
BLACK, WHITE, BLACK, TRANSPARENCY, BLACK, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY,
BLACK, BLACK, TRANSPARENCY, TRANSPARENCY, BLACK, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY,
BLACK, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, BLACK, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY,
TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, BLACK, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY, TRANSPARENCY,
TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, BLACK, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY,
TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, BLACK, WHITE, WHITE, WHITE, BLACK, TRANSPARENCY,
TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, TRANSPARENCY, BLACK, BLACK, BLACK, TRANSPARENCY, TRANSPARENCY
};
STRU_BITMAP Stru_Bitmap_gbMouse = {0x10, 4, 12, 20, TRANSPARENCY, (INT8U *)ucMouseMap};
INT16U ulMouseX;
INT16U ulMouseY;
INT8U ucCursorBackUp[20][12/2];
/* 函数代码 */
/* 显示位图, x,y:点的X,Y坐标,Stru_Bitmap: 位图结构(struct) */
void BitmapView (INT16U x, INT16U y, STRU_BITMAP Stru_Bitmap)
{
INT32U i, j;
INT8U ucColor;
for (i = 0; i < Stru_Bitmap.usHeight; i++)
{
for (j = 0; j <Stru_Bitmap.usWidth; j++)
{
if ((ucColor = *(INT8U*)(Stru_Bitmap.pucStart + i * Stru_Bitmap.usWidth + j)) != TRANSPARENCY)
{
LCD_PutPixel(x + j, y + i, ucColor);
}
}
}
}
/*传送(压入PUSH)位图数据到LCD存储缓冲区(x,y : 的X,Y坐标,Stru_Bitmap: 位图结构(struct) */
void BitmapPush (INT16U x, INT16U y, STRU_BITMAP Stru_Bitmap)
{
INT32U i, j;
ulMouseX = x;
ulMouseY = y;
for (i = 0; i < Stru_Bitmap.usHeight; i++)
{
for (j = 0; j < Stru_Bitmap.usWidth; j+=2)
{
if ((x + j)%2)
{
ucCursorBackUp[i][j/2] =
(((*(INT8U*)(LCD_ACTIVE_BUFFER + (y + i) * SCR_XSIZE / 2 + (x + j) / 8 * 4 + 3 - ((x + j)%8) / 2)) << 4) & 0xf0) +
(((*(INT8U*)(LCD_ACTIVE_BUFFER + (y + i) * SCR_XSIZE / 2 + (x + j+1) / 8 * 4 + 3 - ((x + j+1)%8) / 2)) >> 4) & 0x0f);
}
else
{
ucCursorBackUp[i][j/2] = (*(INT8U*)(LCD_ACTIVE_BUFFER + (y + i) * SCR_XSIZE / 2 + (x + j) / 8 * 4 + 3 - ((x + j)%8) / 2));
}
}
}
}
/*传送(弹出POP)位图数据到LCD存储缓冲区(x,y : 的X,Y坐标,Stru_Bitmap: 位图结构(struct) */
void BitmapPop(INT16U x, INT16U y, STRU_BITMAP Stru_Bitmap)
{
INT32U i, j;
INT32U ulAddr, ulAddr1;
for (i = 0; i < Stru_Bitmap.usHeight; i++)
{
for (j = 0; j <Stru_Bitmap.usWidth; j+=2)
{
ulAddr = LCD_ACTIVE_BUFFER + (y + i) * SCR_XSIZE / 2 + (x + j) / 8 * 4 + 3 - ((x + j)%8) / 2;
ulAddr1 =LCD_ACTIVE_BUFFER + (y + i) * SCR_XSIZE / 2 + (x + j + 1) / 8 * 4 + 3 - ((x + j + 1)%8) / 2;
if ((x + j)%2)
{
(*(INT8U*)ulAddr) &= 0xf0;
(*(INT8U*)ulAddr) |= ((ucCursorBackUp[i][j/2] >> 4) & 0x0f);
(*(INT8U*)ulAddr1) &= 0x0f;
(*(INT8U*)ulAddr1) |= ((ucCursorBackUp[i][j/2] << 4) & 0xf0);
}
else
{
(*(INT8U*)ulAddr) = ucCursorBackUp[i][j/2];
}
}
}
}
/*光标初始化*/
void CursorInit(void)
{
ulMouseX = 0;
ulMouseY = 0;
CursorView(ulMouseX, ulMouseY);
}
/* 光标压栈 */
void CursorPush(INT16U x, INT16U y)
{
BitmapPush(x, y, Stru_Bitmap_gbMouse);
}
/* 光标出栈 */
void CursorPop()
{
BitmapPop(ulMouseX, ulMouseY, Stru_Bitmap_gbMouse);
}
/* 光标显示 */
void CursorView(INT16U x, INT16U y)
{
CursorPush(x, y);
BitmapView(x, y, Stru_Bitmap_gbMouse);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -