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

📄 lcdslin.c

📁 uc-gui.rar
💻 C
📖 第 1 页 / 共 3 页
字号:
/***********************************************************************************************************                                                礐/GUI*                        Universal graphic software for embedded applications**                       (c) Copyright 2002, Micrium Inc., Weston, FL*                       (c) Copyright 2000, 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        : LCDSLin.C* Purpose     : Driver for LCDs using simple bus interface* * Currently supported controllers:* *               Toshiba T6963*               Epson SED1330*               Epson SED1335* * * Version-Date---Author-Explanation* * 2.00g   020319 JE     a) Macro changed to fix NC30-error* 2.00f   020204 JE     a) Hardwareinterface routines renamed:*                          ...DATA -> ...A0, ...CMD -> ...A1* 2.00e   011112 JE     a) LCD_INIT_CONTROLLER added to be able to*                          execute LCD_X_Init during init* 2.00d   010926 JE     a) Support for LCD_SWAP_XY added* 2.00c   010706 JE     a) Bugfix in DrawBitLine1BPP* 2.00b   010402 RS     a) LCD_GetDevCaps removed from driver*                          (now LCD.c)* 2.00a   008026 RS     a) Simulation interface changed* 2.00    000525 JE     a) Interface changed* 1.02c   000509 JE     a) Simple bus interface changed for SED133x*                       b) Small changes in DrawBitLine1BPP*                       c) Cache initialisation to SED133x added* 1.02b   000508 JE     a) Simple bus interface changed for T6963* 1.02a   000426 JE     a) Transparent mode in DrawBitLine1BPP changed*                       b) Dummy LCD_L0_SetLUTEntry inserted* 1.02    000426 RS     a) Changes for new LCD-driver interface V1.30* 1.00a   000410 JE     a) LCD_GetDevCap changed*                       b) LCD_GetpCapFunc deleted*                       c) LCD_DrawBitMap changed*                       d) Definition for aColorIndex changed* 1.00    000407 JE     First release** ---------------------------LIST OF CONFIG SWITCHES--------------------* The following is a list of additional configuration switches for this* driver. These switches might not be listed in the manual, because* the manual mainly covers the general config switches which are* supported by all drivers.* * define ----------------------Explanation------------------------------* LCD_OPTIMIZE                 Controls the use of optimized routines.* * Known problems or limitations with current version* * None.**********************************************************************************************************/#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 */#if (LCD_CONTROLLER == 6963) || (LCD_CONTROLLER == 1330) || (LCD_CONTROLLER == 1335) \      && (!defined(WIN32) | defined(LCD_SIMCONTROLLER))/*  ********************************************************************  *                                                                  *  *                Conversion table  *                                                                  *  *********************************************************************/static const LCD_PIXELINDEX LCD_ConversionTable[2] = {0, 1};/*        *********************************************************        *                                                       *        *           Defaults for configuration                  *        *                                                       *        **********************************************************/#ifndef LCD_OPTIMIZE  #define LCD_OPTIMIZE                  (1)#endif#ifndef LCD_CHECKBUSY  #define LCD_CHECKBUSY                 (1)#endif#ifndef LCD_INIT  #define LCD_INIT()#endif#ifndef LCD_WATCHDOG_TRIGGERCNT  #define LCD_WATCHDOG_TRIGGERCNT       (0)#endif#ifndef LCD_KICK_WATCHDOG  #define LCD_KICK_WATCHDOG()#endif#ifndef LCD_CACHE  #define  LCD_CACHE                    (1)#endif#ifndef LCD_SUPPORT_REFRESH  #define  LCD_SUPPORT_REFRESH LCD_CACHE#endif#ifndef LCD_REVERSEMODE_SUPPORT  #define LCD_REVERSEMODE_SUPPORT       (0)#endif#ifndef LCD_SUPPORT_VERIFY  #define LCD_SUPPORT_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#ifndef LCD_SCHEDULE_CNT  #define LCD_SCHEDULE_CNT              (0)#endif#ifndef LCD_NUM_CONTROLLERS  #define LCD_NUM_CONTROLLERS           (1)#endif#ifndef LCD_SUPPORT_CHECKINIT  #define LCD_SUPPORT_CHECKINIT         (0)#endif/* Switch support for the LCD_CopyRect function of the driver */#ifndef  LCD_SUPPORT_COPYRECT  #define  LCD_SUPPORT_COPYRECT         (1)#endif#ifndef LCD_INIT_CONTROLLER  #define LCD_INIT_CONTROLLER()#endif/*        *********************************************************        *                                                       *        *          Internal types                               *        *                                                       *        **********************************************************/#if LCD_BITSPERPIXEL == 1  #define PIXELCOLOR U8#else  #error LCD_BITSPERPIXEL != 1 not supported#endif/*        *********************************************************        *                                                       *        *      Configuration switch checking                    *        *                                                       *        *********************************************************Please be aware that not all configuration errors can be captured !*//* Check number of controllers */#if (LCD_NUM_CONTROLLERS != 1)  #error "Only 1 controller supported by this driver"#endif/*        *********************************************************        *        *           Defines for simulation        *        **********************************************************/#ifdef WIN32  #undef LCD_WRITE_A0  #undef LCD_WRITE_A1  #undef LCD_READ_A0  #undef LCD_READ_A1  void SIM_WriteA1C0(U8 data);  void SIM_WriteA0C0(U8 cmd);  U8   SIM_ReadA1C0(void);  U8   SIM_ReadA0C0(void);  #define LCD_WRITE_A1(data) SIM_WriteA1C0(data)   #define LCD_WRITE_A0(cmd)  SIM_WriteA0C0(cmd)  #define LCD_READ_A1()      SIM_ReadA1C0()  #define LCD_READ_A0()      SIM_ReadA0C0()#endif/*        *********************************************************        *                                                       *        * Standard variables for driver                         *        *                                                       *        **********************************************************/static U8 Cache[((LCD_XSIZE_PHYS+7)>>3)*LCD_YSIZE_PHYS];#if LCD_WATCHDOG_TRIGGERCNT  int WatchdogTriggerCnt;#endif#if LCD_SUPPORT_VERIFY  static int ErrCnt;  static int ErrStat;#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 LCD_TYPE_COMTRANS LCD__aLine2Com0[LCD_LASTCOM0-LCD_FIRSTCOM0+1];#endif#if LCD_SUPPORT_SEGTRANS  extern LCD_TYPE_SEGTRANS LCD__aRow2Seg0[LCD_LASTSEG0-LCD_FIRSTSEG0+1];#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)  _SetPixel(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)  _SetPixel(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)  _SetPixel(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)  _SetPixel(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)  _SetPixel(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)  _SetPixel(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)  _SetPixel(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)  _SetPixel(x,LCD__aLine2Com0[y], c)    #define GETPIXEL(x, y)     _GetPixel(x,LCD__aLine2Com0[y])    #define XORPIXEL(x, y)      XorPixel(x,LCD__aLine2Com0[y])  #else    #define SETPIXEL(x, y, c)  _SetPixel(y,LCD__aLine2Com0[x], c)    #define GETPIXEL(x, y)     _GetPixel(y,LCD__aLine2Com0[x])    #define XORPIXEL(x, y)      XorPixel(y,LCD__aLine2Com0[x])  #endif#elif (!LCD_SUPPORT_COMTRANS && LCD_SUPPORT_SEGTRANS)  #if (!LCD_SWAP_XY)    #define SETPIXEL(x, y, c)  _SetPixel(LCD__aRow2Seg0[x],y, c)    #define GETPIXEL(x, y)     _GetPixel(LCD__aRow2Seg0[x],y)    #define XORPIXEL(x, y)      XorPixel(LCD__aRow2Seg0[x],y)  #else    #define SETPIXEL(x, y, c)  _SetPixel(LCD__aRow2Seg0[y],x, c)    #define GETPIXEL(x, y)     _GetPixel(LCD__aRow2Seg0[y],x)    #define XORPIXEL(x, y)      XorPixel(LCD__aRow2Seg0[y],x)  #endif#elif (LCD_SUPPORT_COMTRANS && LCD_SUPPORT_SEGTRANS)  #if (!LCD_SWAP_XY)    #define SETPIXEL(x, y, c)  _SetPixel(LCD__aRow2Seg0[x],LCD__aLine2Com0[y], c)    #define GETPIXEL(x, y)     _GetPixel(LCD__aRow2Seg0[x],LCD__aLine2Com0[y])    #define XORPIXEL(x, y)      XorPixel(LCD__aRow2Seg0[x],LCD__aLine2Com0[y])  #else    #define SETPIXEL(x, y, c)  _SetPixel(LCD__aRow2Seg0[y],LCD__aLine2Com0[x], c)    #define GETPIXEL(x, y)     _GetPixel(LCD__aRow2Seg0[y],LCD__aLine2Com0[x])    #define XORPIXEL(x, y)      XorPixel(LCD__aRow2Seg0[y],LCD__aLine2Com0[x])  #endif#else  #error This combination of switches not yet supported#endif#define XY2OFF(x,y) ((x>>3)+y*((LCD_XSIZE_PHYS+7)>>3))#define BKCOLOR LCD_BKCOLORINDEX#define   COLOR LCD_COLORINDEX/*        *********************************************************        *                                                       *        *       ID translation table                            *        *                                                       *        *********************************************************This table contains 0, 1, 2, ... and serves as translation table for DDBs*/static const U8 TransId[] = { 0,1 };/*        *********************************************************        *                                                       *        *       LCD Access                                      *        *                                                       *        **********************************************************/int LCD_Adr;#if (!LCD_CHECKBUSY)  #define LCD_WAIT()#endifstatic U8 result; /* Possibly needed for access macro *//*        *********************************************************        *                                                       *        *       LCD Access Controller SED133x                   *        *                                                       *        **********************************************************/#if (LCD_CONTROLLER == 1330) \  ||(LCD_CONTROLLER == 1335)/* Remap ...A0, ...A1 -> ...CMD, ...DATA */#define LCD_READCMD0    LCD_READ_A0#define LCD_READDATA0   LCD_READ_A1#define LCD_WRITECMD0   LCD_WRITE_A1#define LCD_WRITEDATA0  LCD_WRITE_A0#ifndef LCD_EXTENDED_WAIT  #define LCD_EXTENDED_WAIT 1#endif#ifndef LCD_WAIT  #define LCD_WAIT()                \    while (!(LCD_READCMD0()&0x40)); \    while (  LCD_READCMD0()&0x40) ;#endif#if LCD_EXTENDED_WAIT  #define LCD_WRITECMD(cmd)      { LCD_WAIT(); LCD_WRITECMD0(cmd);  }  #define LCD_WRITEDATA(data)    { LCD_WAIT(); LCD_WRITEDATA0(data);}#else  #define LCD_WRITECMD(cmd)      { LCD_WRITECMD0(cmd);  }  #define LCD_WRITEDATA(data)    { LCD_WRITEDATA0(data);}#endif#define GSTART (0x0)#if (LCD_YSIZE_PHYS >128)  #define TSTART 30000#else  #define TSTART 7000#endifstatic void LCD_SetSystem(void) {  LCD_WRITECMD (0x40);  LCD_WRITEDATA(0x30);                 /* P1                                    */  LCD_WRITEDATA(0x87);                 /* P2 : FX : hor. char size-1            */  LCD_WRITEDATA(0x7);                  /* P3 : FY : ver. char size-1 (not imp.) */  LCD_WRITEDATA(((LCD_XSIZE_PHYS+7)>>3)-1); /* P4 : Characters per row               */  LCD_WRITEDATA(0x4a);                 /* P5 : Timing charcters per row         */  LCD_WRITEDATA(LCD_YSIZE_PHYS-1);          /* P6 : Number of lines per screen       */  LCD_WRITEDATA((LCD_XSIZE_PHYS+7)>>3);     /* P7 : Address pitch low                */  LCD_WRITEDATA(0x00);                 /* P8 : Address pitch high               */}static void LCD_SetScroll(int Adr) {  LCD_WRITECMD(0x44);  LCD_WRITEDATA(TSTART&255);               /* address of screen 1 (text)            */  LCD_WRITEDATA(TSTART>>8);  LCD_WRITEDATA((LCD_YSIZE_PHYS)-1);  LCD_WRITEDATA(Adr);                  /* address of screen 2 (graphic)         */  LCD_WRITEDATA(Adr>>8);  LCD_WRITEDATA((LCD_YSIZE_PHYS)-1);}static void LCD_SetAdr(int Off) {  LCD_Adr=Off;  #if (!LCD_EXTENDED_WAIT)    LCD_WAIT();  #endif  LCD_WRITECMD (0x46);  LCD_WRITEDATA(Off&255);  LCD_WRITEDATA(Off>>8);}#define LCD_SETADR(Off) LCD_SetAdr(Off)static void LCD_Write1(char Byte) {  #if (!LCD_EXTENDED_WAIT)    LCD_WAIT();  #endif  LCD_WRITECMD (0x42);  LCD_WRITEDATA(Byte);  LCD_Adr++;}#define LCD_WRITE1(Byte) LCD_Write1(Byte)/* LCD_L0_ReInit */void LCD_L0_ReInit(void) {  int i;  LCD_INIT_CONTROLLER();  LCD_SetSystem();  LCD_SetScroll(GSTART) ;  LCD_WRITECMD (0x4c);                 /* Set cursor move direction             */  LCD_WRITECMD (0x5a);                 /* HDOT SCR : Set horiz. scroll position */  LCD_WRITEDATA(0);  LCD_WRITECMD (0x5b);                 /* OVLAY                                 */  LCD_WRITEDATA(1);  /* Clear display memory */  LCD_SETADR(0);  LCD_WRITECMD (0x42);  #if (LCD_YSIZE_PHYS >128)    for (i=0; i<32000; i++)  #else    for (i=0; i<8000; i++)  #endif      LCD_WRITEDATA(0);  #if (LCD_REVERSE)    LCD_SETADR(GSTART);    LCD_WRITECMD (0x42);    for (i=GSTART; i<GSTART+((LCD_XSIZE_PHYS+7)>>3)*LCD_YSIZE_PHYS; i++)      LCD_WRITEDATA(0xff);  #endif  if(COLOR)    memset(Cache,0xff,sizeof(Cache));  else    memset(Cache,0x0,sizeof(Cache));  LCD_WRITECMD (0x59);                 /* Display on                            */  LCD_WRITEDATA(0x14);                 /* All screens on, curosr off            */}/* LCD_FirstInit */static void LCD_FirstInit(void) {  LCD_L0_ReInit();}#endif /* SED133x *//*        *********************************************************        *                                                       *        *       LCD Access Controller T6963                     *        *                                                       *        **********************************************************/#if (LCD_CONTROLLER == 6963)

⌨️ 快捷键说明

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