📄 lcd13xx.c
字号:
#ifndef LCD_NUM_CONTROLLERS
#define LCD_NUM_CONTROLLERS (1)
#endif
#ifndef LCD_BUSWIDTH
#define LCD_BUSWIDTH (16)
#endif
#ifndef LCD_OPTIMIZE
#define LCD_OPTIMIZE (1)
#endif
#if (LCD_CONTROLLER == 1356) || (LCD_CONTROLLER == 13806)
#ifndef LCD_USE_BITBLT
#if ((LCD_BITSPERPIXEL == 16) || (LCD_BITSPERPIXEL == 8 )) && (LCD_MIRROR_Y == 0) && (LCD_SWAP_XY == 0)
#define LCD_USE_BITBLT (1)
#else
#define LCD_USE_BITBLT (0)
#endif
#else
#if (LCD_MIRROR_Y)
#error BITBLT engine does not support LCD_MIRROR_Y = 1!
#endif
#if (LCD_SWAP_XY)
#error BITBLT engine does not support LCD_SWAP_XY = 1!
#endif
#endif
#else
#define LCD_USE_BITBLT (0)
#endif
#ifndef LCD_ENABLE_REG_ACCESS
#define LCD_ENABLE_REG_ACCESS()
#endif
#ifndef LCD_ENABLE_MEM_ACCESS
#define LCD_ENABLE_MEM_ACCESS()
#endif
#ifndef STATIC
#define STATIC static
#endif
/*
*********************************************************
* *
* Defines for configuration simulation *
* *
*********************************************************
*/
#if defined(WIN32) && !defined(USE_PC_HARDWARE)
void SIM_WriteMem8(unsigned int Off, int Data);
void SIM_WriteReg8(unsigned int Off, int Data);
int SIM_ReadMem8(unsigned int Off);
int SIM_ReadReg8(unsigned int Off);
void SIM_WriteMem16(unsigned int Off, int Data);
void SIM_WriteReg16(unsigned int Off, int Data);
int SIM_ReadMem16(unsigned int Off);
int SIM_ReadReg16(unsigned int Off);
#undef LCD_READ_MEM
#undef LCD_READ_REG
#undef LCD_WRITE_MEM
#undef LCD_WRITE_REG
#if LCD_BUSWIDTH==8
#define LCD_READ_MEM(Off) SIM_ReadMem8(Off)
#define LCD_WRITE_MEM(Off,Data) SIM_WriteMem8(Off, Data)
#define LCD_READ_REG(Off) SIM_ReadReg8(Off)
#define LCD_WRITE_REG(Off,Data) SIM_WriteReg8(Off, Data)
#elif LCD_BUSWIDTH==16
#define LCD_READ_MEM(Off) SIM_ReadMem16(Off)
#define LCD_WRITE_MEM(Off,Data) SIM_WriteMem16(Off, Data)
#define LCD_READ_REG(Off) SIM_ReadReg16(Off)
#define LCD_WRITE_REG(Off,Data) SIM_WriteReg16(Off, Data)
#endif
#elif defined(WIN32) && defined(USE_PC_HARDWARE)
void PC_WriteMem8(unsigned int Off, int Data);
void PC_WriteReg8(unsigned int Off, int Data);
int PC_ReadMem8(unsigned int Off);
int PC_ReadReg8(unsigned int Off);
void PC_WriteMem16(unsigned int Off, int Data);
void PC_WriteReg16(unsigned int Off, int Data);
int PC_ReadMem16(unsigned int Off);
int PC_ReadReg16(unsigned int Off);
#undef LCD_READ_MEM
#undef LCD_READ_REG
#undef LCD_WRITE_MEM
#undef LCD_WRITE_REG
#if LCD_BUSWIDTH==8
#define LCD_READ_MEM(Off) PC_ReadMem8(Off)
#define LCD_WRITE_MEM(Off,Data) PC_WriteMem8(Off, Data)
#define LCD_READ_REG(Off) PC_ReadReg8(Off)
#define LCD_WRITE_REG(Off,Data) PC_WriteReg8(Off, Data)
#else
#define LCD_READ_MEM(Off) PC_ReadMem16(Off)
#define LCD_WRITE_MEM(Off,Data) PC_WriteMem16(Off, Data)
#define LCD_READ_REG(Off) PC_ReadReg16(Off)
#define LCD_WRITE_REG(Off,Data) PC_WriteReg16(Off, Data)
#endif
#endif
/********************************************************
*
* Remap Hardware macros
*
*********************************************************
*/
#if LCD_NUM_DISPLAYS ==1 /* Use single display macros */
#else
#if LCD_DISPLAY_INDEX == 0 /* First display in a multi-display configuration */
#define LCD_READ_MEM(Off) LCD_READ_MEM_0(Off)
#define LCD_WRITE_MEM(Off,Data) LCD_WRITE_MEM_0(Off,Data)
#define LCD_READ_REG(Off) LCD_READ_REG_0(Off)
#define LCD_WRITE_REG(Off,Data) LCD_WRITE_REG_0(Off,Data)
#define LCD_INIT_CONTROLLER LCD_INIT_CONTROLLER_0
#else
#define LCD_READ_MEM(Off) LCD_READ_MEM_1(Off)
#define LCD_WRITE_MEM(Off,Data) LCD_WRITE_MEM_1(Off,Data)
#define LCD_READ_REG(Off) LCD_READ_REG_1(Off)
#define LCD_WRITE_REG(Off,Data) LCD_WRITE_REG_1(Off,Data)
#define LCD_INIT_CONTROLLER LCD_INIT_CONTROLLER_1
#endif
#endif
/*
*********************************************************
* *
* Internal types *
* *
*********************************************************
*/
/*
*********************************************************
* *
* SCHEDULING *
* *
*********************************************************
*/
#if (LCD_SCHEDULE_CNT !=0)
static int ScheduleCntRem=LCD_SCHEDULE_CNT;
#define CHECK_SCHEDULE(PixelCnt) \
if ((ScheduleCntRem-=(PixelCnt)) <=0) { \
ScheduleCntRem=LCD_SCHEDULE_CNT; \
LCD_SCHEDULE(); \
}
#else
#define CHECK_SCHEDULE(PixelCnt)
#endif
/*
*********************************************************
* *
* Macro calculations *
* *
*********************************************************
*/
/* To make life easier, assign physical x/y size */
#if !LCD_SWAP_XY
#define LCD_XSIZE_P LCD_XSIZE
#define LCD_YSIZE_P LCD_YSIZE
#define LCD_VXSIZE_P LCD_VXSIZE
#define LCD_VYSIZE_P LCD_VYSIZE
#else
#define LCD_XSIZE_P LCD_YSIZE
#define LCD_YSIZE_P LCD_XSIZE
#define LCD_VXSIZE_P LCD_VYSIZE
#define LCD_VYSIZE_P LCD_VXSIZE
#endif
#if LCD_BITSPERPIXEL == 1
#define BYTESPERLINE (LCD_VXSIZE_P/8)
#define WORDSPERLINE (LCD_VXSIZE_P/16)
#elif LCD_BITSPERPIXEL == 2
#define BYTESPERLINE (LCD_VXSIZE_P/4)
#define WORDSPERLINE (LCD_VXSIZE_P/8)
#elif LCD_BITSPERPIXEL == 4
#define BYTESPERLINE (LCD_VXSIZE_P/2)
#define WORDSPERLINE (LCD_VXSIZE_P/4)
#elif LCD_BITSPERPIXEL == 8
#define BYTESPERLINE (LCD_VXSIZE_P)
#define WORDSPERLINE (LCD_VXSIZE_P/2)
#elif (LCD_BITSPERPIXEL == 15)
#define BYTESPERLINE (LCD_VXSIZE_P*2)
#define WORDSPERLINE (LCD_VXSIZE_P)
#elif (LCD_BITSPERPIXEL == 16)
#define BYTESPERLINE (LCD_VXSIZE_P*2)
#define WORDSPERLINE (LCD_VXSIZE_P)
#else
#error This colordepth is not supported !!!
#endif
#ifndef LCD_USE_32BIT_OFF
#if ((WORDSPERLINE * LCD_YSIZE) > 0xFFFF)
#define LCD_USE_32BIT_OFF 1
#else
#define LCD_USE_32BIT_OFF 0
#endif
#endif
#if LCD_USE_32BIT_OFF
typedef unsigned long tOff;
#else
typedef unsigned int tOff;
#endif
/*
*********************************************************
* *
* Macros, standard *
* *
*********************************************************
These macros can be found in any LCD-driver as they serve purposes
that can be found in any class of LCD-driver (Like clipping).
*/
#define BKCOLOR LCD_BKCOLORINDEX
#define COLOR LCD_COLORINDEX
/*
*********************************************************
* *
* Configuration switch checking *
* *
*********************************************************
Please be aware that not all configuration errors can be captured !
*/
/* Check number of controllers */
#if ((LCD_NUM_CONTROLLERS >1) || (LCD_NUM_CONTROLLERS <0))
#error "More than 1 controller not supported by this driver"
#endif
#if ((LCD_CONTROLLER==1356)||(LCD_CONTROLLER==13806)) && (LCD_BUSWIDTH !=16)
#error This controller does not work with 8-bit bus
#endif
#if (((LCD_CONTROLLER==1356)||(LCD_CONTROLLER==13806)) && LCD_USE_BITBLT && ((LCD_BITSPERPIXEL != 8) && (LCD_BITSPERPIXEL != 16)))
#error BitBlt-Access only available for 8bpp and 16bpp mode
#endif
#if (LCD_CONTROLLER==1374)
#if (LCD_BITSPERPIXEL == 8)
#if (LCD_FIXEDPALETTE != 233)
#error This controller supports only 233 palette in 8 bpp mode !
#endif
#endif
#endif
/*
*********************************************************
* *
* Macros for internal use *
* *
*********************************************************
*/
#if !defined (LCD_LUT_COM)
#define LINE2COM(y) y
#else
#define LINE2COM(y) LCD__aLine2Com0[y]
#endif
#if LCD_BUSWIDTH == 16
#if (LCD_BITSPERPIXEL == 16)
#define XY2OFF(x,y) (tOff)((tOff)LINE2COM(y)*(tOff)WORDSPERLINE+(x))
#elif (LCD_BITSPERPIXEL == 15)
#define XY2OFF(x,y) (tOff)((tOff)LINE2COM(y)*(tOff)WORDSPERLINE+(x))
#elif (LCD_BITSPERPIXEL == 8)
#define XY2OFF(x,y) (tOff)((tOff)LINE2COM(y)*(tOff)WORDSPERLINE+(x>>1))
#elif (LCD_BITSPERPIXEL == 4)
#define XY2OFF(x,y) (tOff)((tOff)LINE2COM(y)*(tOff)WORDSPERLINE+(x>>2))
#elif (LCD_BITSPERPIXEL == 2)
#define XY2OFF(x,y) (tOff)((tOff)LINE2COM(y)*(tOff)WORDSPERLINE+((x)>>3))
#elif (LCD_BITSPERPIXEL == 1)
#define XY2OFF(x,y) (tOff)((tOff)LINE2COM(y)*(tOff)WORDSPERLINE+((x)>>4))
#endif
#else
#if (LCD_BITSPERPIXEL == 16)
#define XY2OFF(x,y) (tOff)((tOff)LINE2COM(y)*(tOff)BYTESPERLINE+((x)<<1))
#elif (LCD_BITSPERPIXEL == 15)
#define XY2OFF(x,y) (tOff)((tOff)LINE2COM(y)*(tOff)BYTESPERLINE+((x)<<1))
#elif (LCD_BITSPERPIXEL == 8)
#define XY2OFF(x,y) (tOff)((tOff)LINE2COM(y)*(tOff)BYTESPERLINE+(x))
#elif (LCD_BITSPERPIXEL == 4)
#define XY2OFF(x,y) (tOff)((tOff)LINE2COM(y)*(tOff)BYTESPERLINE+((x)>>1))
#elif (LCD_BITSPERPIXEL == 2)
#define XY2OFF(x,y) (tOff)((tOff)LINE2COM(y)*(tOff)BYTESPERLINE+((x)>>2))
#elif (LCD_BITSPERPIXEL == 1)
#define XY2OFF(x,y) (tOff)((tOff)LINE2COM(y)*(tOff)BYTESPERLINE+((x)>>3))
#endif
#endif
#if ((LCD_SWAP_BYTE_ORDER) && (LCD_BITSPERPIXEL <=8)) | ((LCD_SWAP_BYTE_ORDER==0) && (LCD_BITSPERPIXEL > 8))
#define READ_MEM(Off, Data) Data = LCD_READ_MEM(Off); Data = ((Data & 0xff) << 8) + (Data >> 8)
#define WRITE_MEM(Off, Data) LCD_WRITE_MEM(Off, (U16)(((Data & 0xff) << 8) + ((Data & 0xff00) >> 8)))
#else
#define READ_MEM(Off, Data) Data = LCD_READ_MEM(Off)
#define WRITE_MEM(Off, Data) LCD_WRITE_MEM(Off, Data)
#endif
#if (LCD_SWAP_BYTE_ORDER)
#define READ_REG(Off, Data) Data = LCD_READ_REG(Off)
#define WRITE_REG(Off, Data) LCD_WRITE_REG(Off, Data)
#else
#define READ_REG(Off, Data) { Data = Swap(LCD_READ_REG(Off)); }
#define WRITE_REG(Off, Data) { LCD_WRITE_REG(Off, Swap(Data)); }
#define REQUIRE_SWAP
#endif
/* No use of LCD_WRITE_MEM, LCD_READ_MEM, LCD_WRITE_REG, LCD_READ_REG from this point */
#if defined (LCD_LUT_COM)
#if (LCD_MIRROR_Y)
#error LCD_MIRROR_Y not supported with COMTrans !
#endif
#if (LCD_MIRROR_X)
#error LCD_MIRROR_X not supported with COMTrans !
#endif
#endif
#if (!defined(LCD_LUT_SEG))
#if (!LCD_MIRROR_X && !LCD_MIRROR_Y && !LCD_SWAP_XY)
#define PHYS2LOG(x, y) x, y
#elif (!LCD_MIRROR_X && !LCD_MIRROR_Y && LCD_SWAP_XY)
#define PHYS2LOG(x, y) y, x
#elif (!LCD_MIRROR_X && LCD_MIRROR_Y && !LCD_SWAP_XY)
#define PHYS2LOG(x, y) x, LCD_YSIZE - 1 - (y)
#elif (!LCD_MIRROR_X && LCD_MIRROR_Y && LCD_SWAP_XY)
#define PHYS2LOG(x, y) LCD_YSIZE - 1 - (y), x
#elif ( LCD_MIRROR_X && !LCD_MIRROR_Y && !LCD_SWAP_XY)
#define PHYS2LOG(x, y) LCD_XSIZE - 1 - (x), y
#elif ( LCD_MIRROR_X && !LCD_MIRROR_Y && LCD_SWAP_XY)
#define PHYS2LOG(x, y) LCD_YSIZE - 1 - (y), x
#elif ( LCD_MIRROR_X && LCD_MIRROR_Y && !LCD_SWAP_XY)
#define PHYS2LOG(x, y) LCD_XSIZE - 1 - (x), LCD_YSIZE - 1 - (y)
#elif ( LCD_MIRROR_X && LCD_MIRROR_Y && LCD_SWAP_XY)
#error This combination of mirroring/swapping not yet supported
#endif
#else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -