📄 lcd2.0_hx8309_220x176_16_v1.c
字号:
//void LCD_ReadBitmap(int x0, int y0, int xsize, int ysize, unsigned int *pData)
//{
// int x1, y1;
// x1 = x0+xsize-1;
// y1 = y0+ysize-1;
// LCDDEV_SetWindow(x0, y0, x1, y1);
// read_XDATA(LCD_DATA);
// for(y1=0; y1<ysize; y1++){
// for(x1=0; x1<xsize; x1++){
// *pData++ = read_XDATA(LCD_DATA);
// }
// }
//
// LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
//}
unsigned int LCDDEV_GetPixel(int x, int y)
{
unsigned int color;
LCD_Reg_Set(0x0021, (y<<8 | x));
color = read_XDATA(LCD_DATA);
color = read_XDATA(LCD_DATA);
return(color);
}
void LCDDEV_SetPixel(int x, int y, unsigned int color)
{
unsigned short i;
i = (x<<8) + y ;
LCD_Reg_Set(0x0021,i) ;
LCD_Command(0x0022) ;
LCD_Data(color) ; //color表示RGB值, 这个函数的功能是往(x,y)写入color值
}
void LCDDEV_XorPixel(int x, int y)
{
unsigned int color;
color = LCDDEV_GetPixel(x,y);
LCDDEV_SetPixel(x,y,0xFFFF-color);
}
void LCDDEV_DrawHLine(int x0, int y, int x1)
{
if (LCD_Context.DrawMode & LCD_DRAWMODE_XOR){
for(; x0<=x1; x0++){
LCDDEV_XorPixel(x0, y);
}
}else{
LCDDEV_SetWindow(x0, y, x1, y);
for(; x0<=x1; x0++){
LCD_Data(LCD_COLOR);
}
LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
}
}
void LCDDEV_DrawVLine(int x, int y0, int y1)
{
if (LCD_Context.DrawMode & LCD_DRAWMODE_XOR){
for(; y0<=y1; y0++){
LCDDEV_XorPixel(x, y0);
}
}else{
LCDDEV_SetWindow(x, y0, x, y1);
for(; y0<=y1; y0++){
LCD_Data(LCD_COLOR);
}
LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
}
}
void LCDDEV_FillRect(int x0, int y0, int x1, int y1)
{
int i;
if (LCD_Context.DrawMode & LCD_DRAWMODE_XOR){
for(; y0<=y1; y0++){
LCDDEV_DrawHLine(x0, y0, x1);
}
}else{
LCDDEV_SetWindow(x0, y0, x1, y1);
for(; y0<=y1 ; y0++){
i = x0;
for(; i<=x1; i++){
LCD_Data(LCD_COLOR);
}
}
LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
}
}
void LCDDEV_DrawBitLine1BPP(int x, int y, int xsize, int Diff, unsigned int *pData)
{
x += Diff;
switch(LCD_Context.DrawMode){
case LCD_DRAWMODE_REV:
while(xsize){
if(*pData & (0x8000 >> Diff))
LCD_SetPixel(x, y, LCD_BKCOLOR);
else
LCD_SetPixel(x, y, LCD_COLOR);
x++;
xsize--;
if(++Diff == 16){
Diff = 0;
pData++;
}
}
break;
case LCD_DRAWMODE_TRANS:
while(xsize){
if(*pData & (0x8000 >> Diff))
LCD_SetPixel(x, y, LCD_COLOR);
x++;
xsize--;
if(++Diff == 16){
Diff = 0;
pData++;
}
}
break;
case LCD_DRAWMODE_XOR:
while(xsize){
if(*pData & (0x8000 >> Diff))
LCD_XorPixel(x,y);
x++;
xsize--;
if(++Diff == 16){
Diff = 0;
pData++;
}
}
break;
case LCD_DRAWMODE_CIR90:
while(xsize){
if(*pData & (0x8000 >> Diff))
LCD_SetPixel(x, y, LCD_COLOR);
y++;
xsize--;
if(++Diff == 16){
Diff = 0;
pData++;
}
}
break;
default:
while(xsize){
if(*pData & (0x8000 >> Diff))
LCD_SetPixel(x, y, LCD_COLOR);
else
LCD_SetPixel(x, y, LCD_BKCOLOR);
x++;
xsize--;
if(++Diff == 16){
Diff = 0;
pData++;
}
}
break;
}
}
//#ifdef LCD_SWITCH_XY
//void LCDDEV_DrawBitLine1BPP(int x, int y, int xsize, int Diff, unsigned int *pData)
//{
// x += Diff;
//
// switch(LCD_Context.DrawMode){
// case LCD_DRAWMODE_REV:
// while(xsize){
// if(*pData & (0x8000 >> Diff))
// LCD_SetPixel(y, x, LCD_BKCOLOR);
// else
// LCD_SetPixel(y, x, LCD_COLOR);
// x++;
// xsize--;
// if(++Diff == 16){
// Diff = 0;
// pData++;
// }
// }
// break;
// case LCD_DRAWMODE_TRANS:
// while(xsize){
// if(*pData & (0x8000 >> Diff))
// LCD_SetPixel(y, x, LCD_COLOR);
// x++;
// xsize--;
// if(++Diff == 16){
// Diff = 0;
// pData++;
// }
// }
// break;
// case LCD_DRAWMODE_XOR:
// while(xsize){
// if(*pData & (0x8000 >> Diff))
// LCD_XorPixel(y,x);
// x++;
// xsize--;
// if(++Diff == 16){
// Diff = 0;
// pData++;
// }
// }
// break;
// default:
// while(xsize){
// if(*pData & (0x8000 >> Diff))
// LCD_SetPixel(y, x, LCD_COLOR);
// else
// LCD_SetPixel(y, x, LCD_BKCOLOR);
// x++;
// xsize--;
// if(++Diff == 16){
// Diff = 0;
// pData++;
// }
// }
// break;
// }
//}
//#else
//void LCDDEV_DrawBitLine1BPP(int x, int y, int xsize, int Diff, unsigned int *pData)
//{
// x += Diff;
//
// switch(LCD_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)){
// case 0:
// while(xsize){
// if(*pData & (0x8000 >> Diff))
// LCD_SetPixel(x, y, LCD_COLOR);
// else
// LCD_SetPixel(x, y, LCD_BKCOLOR);
// x++;
// xsize--;
// if(++Diff == 16){
// Diff = 0;
// pData++;
// }
// }
// break;
// case LCD_DRAWMODE_TRANS:
// while(xsize){
// if(*pData & (0x8000 >> Diff))
// LCD_SetPixel(x, y, LCD_COLOR);
// x++;
// xsize--;
// if(++Diff == 16){
// Diff = 0;
// pData++;
// }
// }
// break;
// case LCD_DRAWMODE_XOR:
// while(xsize){
// if(*pData & (0x8000 >> Diff))
// LCD_XorPixel(x,y);
// x++;
// xsize--;
// if(++Diff == 16){
// Diff = 0;
// pData++;
// }
// }
// break;
// default:
// break;
// }
//}
//#endif
void LCDDEV_DrawBitLine16BPP(int x0, int y0, int xsize, int ysize, unsigned int *pData)
{
int x1,y1;
unsigned int i;
x1 = x0+xsize-1;
y1 = y0+ysize-1;
LCDDEV_SetWindow(x0, y0, x1, y1);
for(; ysize>0; ysize--){
i = xsize;
for(; i>0; i--){
#ifdef Parallel8
write_mem(LCD_DATA,*pData>>8);
#endif
write_mem(LCD_DATA,*pData++);
}
}
LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
}
void LCDDEV_DrawBitmap(int x0, int y0,
int xsize, int ysize,
int BitsPerPixel, int BytesPerLine,
unsigned int *pData, int Diff)
{
int i;
switch (BitsPerPixel) {
case 1:
if(LCD_Context.DrawMode == LCD_DRAWMODE_CIR90){
for(i=0; i<ysize; i++){
LCDDEV_DrawBitLine1BPP(x0+i, y0, xsize, Diff, pData);
pData += BytesPerLine;
}
}else{
for(i=0; i<ysize; i++){
LCDDEV_DrawBitLine1BPP(x0, i+y0, xsize, Diff, pData);
pData += BytesPerLine;
}
}
break;
case 16:
LCDDEV_SetWindow(x0, y0, x0+xsize-1, y0+ysize-1);
for(; ysize > 0; ysize--){
LCDDEV_DrawBitLine16BPP(x0, y0++, xsize, 1, pData);
pData += BytesPerLine;
}
LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
break;
}
}
//length
void DMA_LcdJpegInitX(void)
{
LCD_Reg_Set(0x0001,0x001B);//180度转向0x001B
LCD_Reg_Set(0x0002,0x0400);
LCD_Reg_Set(0x0003,0x1038); //6020
LCD_Reg_Set(0x0004,0x0000);
LCD_Reg_Set(0x0005,0x0000);
//LCD_Reg_Set(0x0007,0x0004);
LCD_Reg_Set(0x0008,0x0202);
LCD_Reg_Set(0x0009,0x0000);
LCD_Reg_Set(0x000B,0x0000);
LCD_Reg_Set(0x000C,0x0003);
// LCD_Reg_Set(0x0040,0x0000);
// LCD_Reg_Set(0x0041,0x00ef); //00ef
// LCD_Reg_Set(0x0042,0xDB00);
// LCD_Reg_Set(0x0043,0xDB00);
//
// LCD_Reg_Set(0x0021,0x0000);
// LCD_Reg_Set(0x0023,0x0000);
// LCD_Reg_Set(0x0024,0x0000);
// LCD_Reg_Set(0x0044,0xAF00);
// LCD_Reg_Set(0x0045,0xDB00);
LCD_Reg_Set(0x0021, 0x0000);
LCD_Command(0x0022);
}
//weight
void DMA_LcdJpegInit(void)
{
LCD_Reg_Set(0x0001,0x011B);
LCD_Reg_Set(0x0002,0x0400);
LCD_Reg_Set(0x0003,0x1030); //6020
LCD_Reg_Set(0x0004,0x0000);
LCD_Reg_Set(0x0005,0x0000);
//LCD_Reg_Set(0x0007,0x0004);
LCD_Reg_Set(0x0008,0x0202);
LCD_Reg_Set(0x0009,0x0000);
LCD_Reg_Set(0x000B,0x0000);
LCD_Reg_Set(0x000C,0x0003);
// LCD_Reg_Set(0x0040,0x0000);
// LCD_Reg_Set(0x0041,0x00ef); //00ef
// LCD_Reg_Set(0x0042,0xDB00);
// LCD_Reg_Set(0x0043,0xDB00);
//
// LCD_Reg_Set(0x0021,0x0000);
// LCD_Reg_Set(0x0023,0x0000);
// LCD_Reg_Set(0x0024,0x0000);
// LCD_Reg_Set(0x0044,0xAF00);
// LCD_Reg_Set(0x0045,0xDB00);
LCD_Reg_Set(0x0021, 0x0000);
LCD_Command(0x0022);
}
//******************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -