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

📄 lcddummy.c

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
*********************************************************************************************************
*                                                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        : LCDDummy.C
Purpose     : Empty driver
              This driver does no perform any function, but it can be
              used for 2 purposes:
              a) Satisfy all externals so an application can be
                compiled and linked in target hardware even if the
                driver is not already available
              b) Template for a starting point for a new driver.
----------------------------------------------------------------------   
Adapting to a new system (creating a new driver):
  In this case, the first step is to fill the routines 
  LCD_L0_GetPixelIndex, LCD_L0_SetPixelIndex and LCD_L0_Init with
  functionality, which is sufficient to make the hardware work.
  A second (optional) step would be to optimize higher level routines. 
----------------------------------------------------------------------   
Version-Date---Author-Explanation                                        
----------------------------------------------------------------------   
1.00.00 020417 JE     a) Changed to have only to adapt _GetPixelIndex
                         and _SetPixelIndex
0.90.00 020214 JE     a) First release
---------------------------END-OF-HEADER------------------------------
*/

#include "LCD_Private.h"      /* private modul definitions & config */
#include "GUI_Private.h"
#include "GUIDebug.h"
#include "lcddrive.h"

#if(LCD_CONTROLLER==-1)&&(!defined(WIN32)|defined(LCD_SIMCONTROLLER))

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/

#ifndef LCD_INIT_CONTROLLER
  #define LCD_INIT_CONTROLLER()
#endif

/*********************************************************************
*
*       Macros for MIRROR_, SWAP_ and LUT_
*/
#if(!defined(LCD_LUT_COM)&&!defined(LCD_LUT_SEG))
  #if(!LCD_MIRROR_X&&!LCD_MIRROR_Y&&!LCD_SWAP_XY)
      #define LOG2PHYS_X(x,y) x
      #define LOG2PHYS_Y(x,y) y
  #elif(!LCD_MIRROR_X&&!LCD_MIRROR_Y&&LCD_SWAP_XY)
      #define LOG2PHYS_X(x,y) y
      #define LOG2PHYS_Y(x,y) x
  #elif(!LCD_MIRROR_X&&LCD_MIRROR_Y&&!LCD_SWAP_XY)
      #define LOG2PHYS_X(x,y) x
      #define LOG2PHYS_Y(x,y) LCD_YSIZE-1-(y)
  #elif(!LCD_MIRROR_X&&LCD_MIRROR_Y&&LCD_SWAP_XY)
      #define LOG2PHYS_X(x,y) y
      #define LOG2PHYS_Y(x,y) LCD_XSIZE-1-(x)
  #elif(LCD_MIRROR_X&&!LCD_MIRROR_Y&&!LCD_SWAP_XY)
      #define LOG2PHYS_X(x,y) LCD_XSIZE-1-(x)
      #define LOG2PHYS_Y(x,y) y
  #elif(LCD_MIRROR_X&&!LCD_MIRROR_Y&&LCD_SWAP_XY)
      #define LOG2PHYS_X(x,y) LCD_YSIZE-1-(y)
      #define LOG2PHYS_Y(x,y) x
  #elif(LCD_MIRROR_X&&LCD_MIRROR_Y&&!LCD_SWAP_XY)
      #define LOG2PHYS_X(x,y) LCD_XSIZE-1-(x)
      #define LOG2PHYS_Y(x,y) LCD_YSIZE-1-(y)
  #elif(LCD_MIRROR_X&&LCD_MIRROR_Y&&LCD_SWAP_XY)
      #define LOG2PHYS_X(x,y) LCD_YSIZE-1-(y)
      #define LOG2PHYS_Y(x,y) LCD_XSIZE-1-(x)
  #endif
#else
  #if(defined(LCD_LUT_COM)&&!defined(LCD_LUT_SEG))
      #define LOG2PHYS_X(x,y) x
      #define LOG2PHYS_Y(x,y) LCD__aLine2Com0[y]
  #elif(!defined (LCD_LUT_COM)&&defined(LCD_LUT_SEG))
      #define LOG2PHYS_X(x, y) LCD__aCol2Seg0[x]
      #define LOG2PHYS_Y(x, y) y
  #elif(defined (LCD_LUT_COM)&&defined(LCD_LUT_SEG))
      #define LOG2PHYS_X(x, y) LCD__aCol2Seg0[x]
      #define LOG2PHYS_Y(x, y) LCD__aLine2Com0[y]
  #endif
#endif


//unsigned short LcdBuf[300];
/*********************************************************************
*
*       Static functions
*
**********************************************************************
*/

/*********************************************************************
*
*       Draw Bitmap 1 BPP
*/
static void  _DrawBitLine1BPP(int x,int y,U8 const GUI_UNI_PTR *p,int Diff,int xsize,const LCD_PIXELINDEX*pTrans)
{
  LCD_PIXELINDEX Index0 = *(pTrans+0);
  LCD_PIXELINDEX Index1 = *(pTrans+1);
  x += Diff;
  switch(GUI_Context.DrawMode&(LCD_DRAWMODE_TRANS|LCD_DRAWMODE_XOR))
     {
      case 0:
             do {
                  LCD_L0_SetPixelIndex(x++,y,(*p&(0x80>>Diff))?Index1:Index0);
			      if(++Diff == 8)
                    {
                      Diff = 0;
				      p++;
			        }
		         }while(--xsize);
             break;
      case LCD_DRAWMODE_TRANS:
             do{
  		         if(*p & (0x80 >> Diff))
                     LCD_L0_SetPixelIndex(x,y,Index1);
                 x++;
			     if(++Diff== 8)
                   {
                     Diff = 0;
				     p++;
			       }
		        }while(--xsize);
              break;
      case LCD_DRAWMODE_XOR:
             do {
  		          if(*p&(0x80>>Diff))
                    {
                      int Pixel=LCD_L0_GetPixelIndex(x, y);
                      LCD_L0_SetPixelIndex(x, y,LCD_NUM_COLORS-1-Pixel);
                    }
                  x++;
			      if(++Diff == 8)
                     {
                      Diff = 0;
                      p++;
			         }
		         }while(--xsize);
              break;
	   }
}

/*********************************************************************
*
*       Draw Bitmap 2 BPP
*/
#if (LCD_MAX_LOG_COLORS > 2)
static void  _DrawBitLine2BPP(int x,int y,U8 const GUI_UNI_PTR * p,int Diff,int xsize,const LCD_PIXELINDEX *pTrans)
{
  LCD_PIXELINDEX Pixels = *p;
  int CurrentPixel = Diff;
  x += Diff;
  switch(GUI_Context.DrawMode&(LCD_DRAWMODE_TRANS|LCD_DRAWMODE_XOR))
      {
       case 0:
               if(pTrans)
                 {
                   do{
                       int Shift =(3-CurrentPixel)<<1;
                       int Index = (Pixels & (0xC0 >> (6 - Shift))) >> Shift;
                       LCD_PIXELINDEX PixelIndex = *(pTrans + Index);
                       LCD_L0_SetPixelIndex(x++, y, PixelIndex);
                       if(++CurrentPixel == 4)
                         {
                           CurrentPixel = 0;
                           Pixels = *(++p);
                         }
		              }while(--xsize);
                  }
                else
                  {
                    do {
                         int Shift = (3 - CurrentPixel) << 1;
                         int Index = (Pixels & (0xC0 >> (6 - Shift))) >> Shift;
                         LCD_L0_SetPixelIndex(x++, y, Index);
                         if(++CurrentPixel == 4)
                           {
                             CurrentPixel = 0;
                             Pixels = *(++p);
                           }
		                } while (--xsize);
                  }
                break;
        case LCD_DRAWMODE_TRANS:
                if(pTrans)
                   {
                     do{
                          int Shift = (3-CurrentPixel)<<1;
                          int Index = (Pixels&(0xC0 >>(6-Shift)))>>Shift;
                          if(Index)
                            {
                              LCD_PIXELINDEX PixelIndex = *(pTrans+Index);
                              LCD_L0_SetPixelIndex(x,y,PixelIndex);
                            }
                          x++;
                          if(++CurrentPixel==4)
                            {
                              CurrentPixel = 0;
                              Pixels = *(++p);
                            }
		                }while(--xsize);
                    }
                 else
                    {
                     do {
                          int Shift =(3-CurrentPixel)<<1;
                          int Index =(Pixels&(0xC0>>(6-Shift)))>>Shift;
                          if (Index)
                             {
                               LCD_L0_SetPixelIndex(x,y,Index);
                             }
                          x++;
                          if(++CurrentPixel==4)
                            {
                              CurrentPixel = 0;
                              Pixels = *(++p);
                            }
		                 }while(--xsize);
                     }
                  break;
      }
}
#endif

/*********************************************************************
*
*       Draw Bitmap 4 BPP
*/
#if (LCD_MAX_LOG_COLORS > 4)
static void  _DrawBitLine4BPP(int x,int y,U8 const GUI_UNI_PTR * p,int Diff,int xsize,const LCD_PIXELINDEX * pTrans)
{
  LCD_PIXELINDEX Pixels = *p;
  int CurrentPixel = Diff;
  x += Diff;
  switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR))
     {
       case 0:
              if(pTrans)
                {
                  do {
                       int Shift = (1 - CurrentPixel) << 2;
                       int Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
                       LCD_PIXELINDEX PixelIndex = *(pTrans + Index);
                       LCD_L0_SetPixelIndex(x++, y, PixelIndex);
                       if (++CurrentPixel == 2)
                         {
                           CurrentPixel = 0;
                           Pixels = *(++p);
                         }
		             } while (--xsize);
                 }
               else
                 {
                   do{
                        int Shift = (1 - CurrentPixel) << 2;
                        int Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
                        LCD_L0_SetPixelIndex(x++, y, Index);
                        if(++CurrentPixel == 2)
                           {
                             CurrentPixel = 0;
                             Pixels = *(++p);
                           }
	                  } while (--xsize);
                 }
               break;
    case LCD_DRAWMODE_TRANS:
               if(pTrans)
                  {
                    do {
                         int Shift = (1 - CurrentPixel) << 2;
                         int Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
                         if(Index)
                            {
                              LCD_PIXELINDEX PixelIndex = *(pTrans + Index);
                              LCD_L0_SetPixelIndex(x, y, PixelIndex);
                            }
                         x++;
                         if(++CurrentPixel == 2)
                            {
                              CurrentPixel = 0;
                              Pixels = *(++p);
                            }
		                }while(--xsize);
                    }
                 else
                    {
                      do {
                          int Shift = (1 - CurrentPixel) << 2;
                          int Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
                          if(Index)
                            {
                              LCD_L0_SetPixelIndex(x, y,Index);
                            }
                          x++;
                          if (++CurrentPixel == 2)
                             {
                              CurrentPixel = 0;

⌨️ 快捷键说明

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