⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdmemc.c

📁 uc-gui.rar
💻 C
📖 第 1 页 / 共 4 页
字号:
/***********************************************************************************************************                                                uC/GUI*                        Universal graphic software for embedded applications**                       (c) Copyright 2002, Micrium Inc., Weston, FL*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH**              礐/GUI is protected by international copyright laws. Knowledge of the*              source code may not be used to write a similar product. This file may*              only be used in accordance with a license and should not be redistributed*              in any way. We appreciate your understanding and fairness.*----------------------------------------------------------------------File        : LCDMem.CPurpose     : Driver for LCDs using internal memory----------------------------------------------------------------------Version-Date---Author-Explanation----------------------------------------------------------------------2.01a   010927 JE     a) Reworked to work with LCD_MIRROR_...                         and LCD_SWAP_XY2.01    010814 JE     a) Support for 6bpp added,                         HLine & 1bpp optimized2.00    010402 RS     a) LCD_GetDevCaps removed from driver                         (now LCD.c)0.92    000122 RS     _GetPixel functionality written0.91    000121 RS     Default for LCD_VRAMTYPE defined0.90    991205 RS     Driver accelerated0.00    990118 RS     First release. ----------------------------------------------------------------------Known problems or limitations with current version----------------------------------------------------------------------None.---------------------------LIST OF CONFIG SWITCHES--------------------The following is a list of additional configuration switches for thisdriver. These switches might not be listed in the manual, becausethe manual mainly covers the general config switches which aresupported by all drivers.----------------------------------------------------------------------define ----------------------Explanation------------------------------LCD_LSB_SHIFT                Support for both big and little endian                             systems.                             0 for little endian (default),                             8 for big endian.LCD_OPTIMIZE                 Controls the use of optimized routines.                             If 1, several (speed) optimizations are used.                             Default: ON (1)LCD_VRAMTYPE                 Controls storage area of VRAM---------------------------END-OF-HEADER------------------------------*/#define LCDMEMC_C#include <string.h>             /* for memset */#include <stddef.h>           /* needed for definition of NULL */#include "LCD_Private.H"      /* private modul definitions & config */#include "GUI_Private.H"#include "GUIDebug.h"#include "LCD_0.h"            /* Defines for first display */#ifndef LCD_VRAMTYPE  #define LCD_VRAMTYPE#endif#if (LCD_CONTROLLER   == 0) && ((LCD_FIXEDPALETTE == 111) || (LCD_FIXEDPALETTE == 222)) \      && (!defined(WIN32) | defined(LCD_SIMCONTROLLER))   /* Generate code only if selected ! */#define LCD_BYTESPERLINE (3*(((LCD_VXSIZE_PHYS)+7)/8))#ifndef WIN32  #if   (LCD_BITSPERPIXEL == 3)    LCD_VRAMTYPE U8 LCD_VRam[LCD_BITSPERPIXEL/3][LCD_VYSIZE_PHYS * LCD_BYTESPERLINE];  #elif (LCD_BITSPERPIXEL == 6)    LCD_VRAMTYPE U8 LCD_VRam_0[LCD_VYSIZE_PHYS * LCD_BYTESPERLINE];    LCD_VRAMTYPE U8 LCD_VRam_1[LCD_VYSIZE_PHYS * LCD_BYTESPERLINE];  #endif#else  U8* GetpVRam(int);  #if   (LCD_BITSPERPIXEL == 3)    U8* pVRam;  #elif (LCD_BITSPERPIXEL == 6)    U8* pVRam_0;    U8* pVRam_1;  #endif#endif/*  ********************************************************************  *                                                                  *  *            Defaults for configuration                            *  *                                                                  *  ********************************************************************Please be aware that not all configuration errors can be captured !*/#ifndef LCD_VERIFY  #define LCD_VERIFY (0)#endif/* Switch for support of multiple pages. Only available with certain LCD-controllers */#ifndef LCD_SUPPORT_PAGING  #define LCD_SUPPORT_PAGING            (0)#endif/* Switch for support of run-time inversion of display. */#ifndef LCD_SUPPORT_REVERSEMODE  #define LCD_SUPPORT_REVERSEMODE       (0)#endif/* Switch support for the LCD_SetOrg function of the driver */#ifndef LCD_SUPPORT_SETORG  #define LCD_SUPPORT_SETORG            (1)#endif#ifndef LCD_SUPPORT_PALETTE  #define LCD_SUPPORT_PALETTE            (1)#endif#ifndef LCD_SCHEDULE_CNT  #define LCD_SCHEDULE_CNT        (0)#endif#ifndef LCD_ISRDATA  #define LCD_ISRDATA#endif  /* Bit position of least sig. byte when accessing words */#ifndef LCD_LSB_SHIFT  #define LCD_LSB_SHIFT                 (0)#endif#ifndef LCD_OPTIMIZE  #define LCD_OPTIMIZE                (1)#endif/*  ********************************************************************  *                                                                  *  *                Support for Segment/COMLUTs                       *  *                                                                  *  *********************************************************************//* For compatibility with older configs, define defaults */#ifndef LCD_SUPPORT_COMTRANS  #define LCD_SUPPORT_COMTRANS 0#endif#ifndef LCD_SUPPORT_SEGTRANS  #define LCD_SUPPORT_SEGTRANS 0#endif#if LCD_SUPPORT_COMTRANS  extern U8 LCD__aLine2Com0[LCD_LASTCOM0-LCD_FIRSTCOM0+1];#endif#if LCD_SUPPORT_SEGTRANS  extern U8 LCD__aRow2Seg0[LCD_LASTSEG0-LCD_FIRSTSEG0+1];#endif/*  ********************************************************************  *                                                                  *  *                 Macro calculations                               *  *                                                                  *  *********************************************************************//* Define number of used coms/segments per controller */#define LCD_NUM_SEGS0 (LCD_LASTSEG0-LCD_FIRSTSEG0+1)#define LCD_NUM_COMS0 (LCD_LASTCOM0-LCD_FIRSTCOM0+1)/* Define total number of used coms/segments */#define LCD_NUM_SEGS LCD_NUM_SEGS0#define LCD_NUM_COMS LCD_NUM_COMS0#define BKCOLOR LCD_BKCOLORINDEX#define   COLOR LCD_COLORINDEX/*  ********************************************************************  *                                                                  *  *            Configuration switch checking                         *  *                                                                  *  ********************************************************************Please be aware that not all configuration errors can be captured !*/#if (LCD_BITSPERPIXEL != 3) && (LCD_BITSPERPIXEL != 6)  #error this value for LCD_BITSPERPIXEL not yet supported#endif/* Check if number of segments / coms equals resolution */#if (LCD_NUM_SEGS < LCD_XSIZE_PHYS)/*  #error Please check segment setup of controller 0 and X/YSIZE !!!*/#endif#if (LCD_NUM_COMS < LCD_YSIZE_PHYS)/*  #error Please check com setup of controller 0 and X/YSIZE !!!*/#endif/*  ********************************************************************  *                                                                  *  *       EXPORTs for ISR                                            *  *                                                                  *  *********************************************************************/#ifndef LCD_TIMERINIT1  #define LCD_TIMERINIT1  1599#endif#ifndef LCD_TIMERINIT0  #define LCD_TIMERINIT0  1065#endifLCD_ISRDATA U16 LCD__BitsPerPixel = LCD_BITSPERPIXEL/3;LCD_ISRDATA U8 LCD_VRAMTYPE* LCD__apVRam[LCD_BITSPERPIXEL/3];LCD_ISRDATA U16 LCD__aTimerReload[LCD_BITSPERPIXEL/3] = {  LCD_TIMERINIT0  #if LCD_BITSPERPIXEL/3 >1		,LCD_TIMERINIT1  #endif};/*  ********************************************************************  *  *                  ID translation table  *  ********************************************************************This table contains 0, 1, 2, ... and serves as translation table for DDBs*/#define INTS(Base)  Base+0,Base+1,Base+2,Base+3,Base+4,Base+5,   \                    Base+6,Base+7,Base+8,Base+9,Base+10,Base+11, \                    Base+12,Base+13,Base+14,Base+15static const LCD_PIXELINDEX aID[] = {  INTS(0),  #if LCD_MAX_LOG_COLORS > 0x10    INTS(0x10),  #endif  #if LCD_MAX_LOG_COLORS > 0x20    INTS(0x20),    INTS(0x30),  #endif  #if LCD_MAX_LOG_COLORS > 0x40    INTS(0x40),    INTS(0x50),    INTS(0x60),    INTS(0x70),  #endif  #if LCD_MAX_LOG_COLORS > 0x80    INTS(0x80),    INTS(0x90),    INTS(0xa0),    INTS(0xb0),    INTS(0xc0),    INTS(0xd0),    INTS(0xe0),    INTS(0xf0)  #endif};/*        *********************************************************        *                                                       *        *       Macros for internal use                         *        *                                                       *        **********************************************************/#if (LCD_SUPPORT_COMTRANS)  #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 (!LCD_SUPPORT_COMTRANS && !LCD_SUPPORT_SEGTRANS)  #if   (!LCD_MIRROR_X && !LCD_MIRROR_Y && !LCD_SWAP_XY)     #define SETPIXEL(x, y, c)      SETPIXELPHYS        ((x), (y), (c))    #define SETPIXELFAST(x, y, c)  SETPIXELPHYS        ((x), (y), (c))    #define GETPIXEL(x, y)         GetPixel            ((x), (y))    #define XORPIXEL(x, y)         XorPixel            ((x), (y))  #elif (!LCD_MIRROR_X && !LCD_MIRROR_Y &&  LCD_SWAP_XY)     #define SETPIXEL(x, y, c)      SETPIXELPHYS        ((y), (x), (c))    #define SETPIXELFAST(x, y, c)  SETPIXELPHYS        ((y), (x), (c))    #define GETPIXEL(x, y)         GetPixel            ((y), (x))    #define XORPIXEL(x, y)         XorPixel            ((y), (x))  #elif (!LCD_MIRROR_X &&  LCD_MIRROR_Y && !LCD_SWAP_XY)     #define SETPIXEL(x, y, c)      SETPIXELPHYS        ((x), (LCD_YSIZE-1-(y)), (c))    #define SETPIXELFAST(x, y, c)  SETPIXELPHYS        ((x), (LCD_YSIZE-1-(y)), (c))    #define GETPIXEL(x, y)         GetPixel            ((x), (LCD_YSIZE-1-(y)))    #define XORPIXEL(x, y)         XorPixel            ((x), (LCD_YSIZE-1-(y)))  #elif (!LCD_MIRROR_X &&  LCD_MIRROR_Y &&  LCD_SWAP_XY)     #define SETPIXEL(x, y, c)      SETPIXELPHYS        ((LCD_YSIZE-1-(y)), (x), (c))    #define SETPIXELFAST(x, y, c)  SETPIXELPHYS        ((LCD_YSIZE-1-(y)), (x), (c))    #define GETPIXEL(x, y)         GetPixel            ((LCD_YSIZE-1-(y)), (x))    #define XORPIXEL(x, y)         XorPixel            ((LCD_YSIZE-1-(y)), (x))  #elif ( LCD_MIRROR_X && !LCD_MIRROR_Y && !LCD_SWAP_XY)     #define SETPIXEL(x, y, c)      SETPIXELPHYS        ((LCD_XSIZE-1-(x)), (y), (c))    #define SETPIXELFAST(x, y, c)  SETPIXELPHYS        ((LCD_XSIZE-1-(x)), (y), (c))    #define GETPIXEL(x, y)         GetPixel            ((LCD_XSIZE-1-(x)), (y))    #define XORPIXEL(x, y)         XorPixel            ((LCD_XSIZE-1-(x)), (y))  #elif ( LCD_MIRROR_X && !LCD_MIRROR_Y &&  LCD_SWAP_XY)     #define SETPIXEL(x, y, c)      SETPIXELPHYS        ((y), (LCD_XSIZE-1-(x)), (c))    #define SETPIXELFAST(x, y, c)  SETPIXELPHYS        ((y), (LCD_XSIZE-1-(x)), (c))    #define GETPIXEL(x, y)         GetPixel            ((y), (LCD_XSIZE-1-(x)))    #define XORPIXEL(x, y)         XorPixel            ((y), (LCD_XSIZE-1-(x)))  #elif ( LCD_MIRROR_X &&  LCD_MIRROR_Y && !LCD_SWAP_XY)     #define SETPIXEL(x, y, c)      SETPIXELPHYS        ((LCD_XSIZE-1-(x)), (LCD_YSIZE-1-(y)), (c))    #define SETPIXELFAST(x, y, c)  SETPIXELPHYS        ((LCD_XSIZE-1-(x)), (LCD_YSIZE-1-(y)), (c))    #define GETPIXEL(x, y)         GetPixel            ((LCD_XSIZE-1-(x)), (LCD_YSIZE-1-(y)))    #define XORPIXEL(x, y)         XorPixel            ((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#elif (LCD_SUPPORT_COMTRANS && !LCD_SUPPORT_SEGTRANS)  #if (!LCD_SWAP_XY)    #define SETPIXEL(x, y, c)      SetPixelPhys(x,LCD__aLine2Com0[y], c)    #define SETPIXELFAST(x, y, c)  SETPIXELPHYS(x,LCD__aLine2Com0[y], c)    #define GETPIXEL(x, y)     LCD_L0_GetPixelIndex(x,LCD__aLine2Com0[y])    #define XORPIXEL(x, y)      XorPixel(x,LCD__aLine2Com0[y])  #else    #define SETPIXEL(x, y, c)      SetPixelPhys(y,LCD__aLine2Com0[x], c)    #define SETPIXELFAST(x, y, c)  SETPIXELPHYS(y,LCD__aLine2Com0[x], c)    #define GETPIXEL(x, y)     LCD_L0_GetPixelIndex(y,LCD__aLine2Com0[x])    #define XORPIXEL(x, y)      XorPixel(y,LCD__aLine2Com0[x])  #endif#else  #error This combination of switches not yet supported#endif#define XY2OFF(x,y) (y*LCD_BYTESPERLINE+3*(x>>3))#ifndef WIN32  #if   (LCD_BITSPERPIXEL == 3)    #define OFF2PTR(Off) &LCD_VRam[0][Off]  #elif (LCD_BITSPERPIXEL == 6)    #define OFF2PTR_0(Off) &LCD_VRam_0[Off]    #define OFF2PTR_1(Off) &LCD_VRam_1[Off]  #endif#else  #if   (LCD_BITSPERPIXEL == 3)    #define OFF2PTR(Off) (pVRam+Off)  #elif (LCD_BITSPERPIXEL == 6)    #define OFF2PTR_0(Off) (pVRam_0+Off)    #define OFF2PTR_1(Off) (pVRam_1+Off)  #endif#endif/*        *********************************************************        *                                                       *        *       Internal set pixel routines                     *        *                                                       *        **********************************************************/#if (LCD_BITSPERPIXEL == 3)#define SETPIXELPHYS(x,y,c)                       \{                                                 \   U8 LCD_VRAMTYPE* p = OFF2PTR(XY2OFF(x,y));     \  switch (x&7) {                                  \  case 0:                                         \    *p = (*p&~(7<<5))|(c<<5);                     \    break;                                        \  case 1:                                         \    *p = (*p&~(7<<2))|(c<<2);                     \    break;                                        \  case 2:                                         \    *p   = (*p&~(3))|(c>>1);                      \    p++;                                          \    *p = (*p &~(1<<7))|(c<<7);                    \    break;                                        \  case 3:                                         \    p++;                                          \    *p = (*p&~(7<<4))|(c<<4);                     \    break;                                        \  case 4:                                         \    p++;                                          \    *p = (*p&~(7<<1))|(c<<1);                     \    break;                                        \  case 5:                                         \    p++;                                          \    *p   = (*p&~(1))|(c>>2);                      \    p++;                                          \    *p = (*p &~(3<<6))|(c<<6);                    \    break;                                        \  case 6:                                         \    p+=2;                                         \    *p = (*p&~(7<<3))|(c<<3);                     \

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -