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

📄 lcdl0mag.c

📁 uc-gui.rar
💻 C
字号:
/**********************************************************************                SEGGER MICROCONTROLLER SYSTEME GmbH                 **        Solutions for real time microcontroller applications        ************************************************************************                                                                    **        (c) 2002         SEGGER Microcontroller Systeme GmbH        **                                                                    **        Internet: www.segger.com    Support:  support@segger.com    **                                                                    *************************************************************************** emWin/GSC Grafical user interface for embedded applications ****emWin is protected by international copyright laws. Knowledge of thesource code may not be used to write a similar product. This file mayonly be used in accordance with a license and should not be re-distributed in any way. We appreciate your understanding and fairness.----------------------------------------------------------------------File        : LCD.cPurpose     : Link between GUI and LCD_L0              Performs most of the clipping.---------------------------END-OF-HEADER------------------------------*/#include <stddef.h>             /* needed for definition of NULL */#include "GUI_Private.h"#include "GUIDebug.h"#include "LCD_Private.H"      /* private modul definitions & config */#if LCD_XMAG > 2  #error Not yet supported#endif#if LCD_XMAG == 2static const U8 abData12[16] = {  0x0, 0x3, 0xc, 0xf, 0x30, 0x33, 0x3c, 0x3f, 0xC0, 0xC3, 0xCc, 0xcf, 0xf0, 0xf3, 0xfc, 0xff};static const U8 abData22[16] = {  0x0,   0x5, 0x5*2, 0x5*3,  0x50*1+0x0, 0x50*1+0x5, 0x50*1+0x5*2, 0x50*1+0x5*3,  0x50*2+0x0, 0x50*2+0x5, 0x50*2+0x5*2, 0x50*2+0x5*3,  0x50*3+0x0, 0x50*3+0x5, 0x50*3+0x5*2, 0x50*3+0x5*3};static const U8 abData32[16] = {  0x0, 0x11, 0x22, 0x33,  0x44, 0x55, 0x66, 0x77,  0x88, 0x99, 0xaa, 0xbb,  0xcc, 0xdd, 0xee, 0xff};static void DrawBitline(int x0, int y0, int xsize, int BPP, const U8*pData, int Diff, const LCD_PIXELINDEX* pTrans) {  union {    U8  ab[100];     /* Byte Buffer */    U16 au16[50];    /* Word Buffer */  } Buffer;  int i;  int NumPixels;  int NumPixelsMax = sizeof(Buffer.ab)*8/BPP/LCD_XMAG;  while (xsize >0) {    int iOff =0;    NumPixels = (xsize < NumPixelsMax) ? xsize : NumPixelsMax;    switch (BPP) {    case 1:      for (i=0; i<NumPixels; i+=8) {        /* load the byte */        U16 Data;        if (Diff) {          Data = ((*pData) << 8) | (*(pData+1));          Data >>= 8-Diff;          Data &= 0xff;        } else {          Data = *pData;        }        pData++;        Buffer.ab[iOff++] = abData12[Data>>4];         Buffer.ab[iOff++] = abData12[Data&15];       }      break;    case 2:      for (i=0; i<NumPixels; i+=4) {        /* load the byte */        U16 Data;        if (Diff) {          Data = ((*pData) << 8) | (*(pData+1));          Data >>= 8-(Diff<<1);          Data &= 0xff;        } else {          Data = *pData;        }        pData++;        Buffer.ab[iOff++] = abData22[Data>>4];         Buffer.ab[iOff++] = abData22[Data&15];       }      break;    case 4:      for (i=0; i<NumPixels; i+=2) {        /* load the byte */        U16 Data;        if (Diff) {          Data = ((*pData) << 8) | (*(pData+1));          Data >>= 8-(Diff<<2);          Data &= 0xff;        } else {          Data = *pData;        }        pData++;        Buffer.ab[iOff++] = abData32[Data>>4];         Buffer.ab[iOff++] = abData32[Data&15];       }      break;    case 8:      for (i=0; i<NumPixels; i++) {        #if LCD_XMAG > 2          memset (&Buffer.ab[i*LCD_XMAG], *(pData+i), LCD_XMAG);        #else          Buffer.ab[i*LCD_XMAG] = Buffer.ab[i*LCD_XMAG+1] = *pData++;         #endif      }      break;    case 16:      for (i=0; i<NumPixels; i++) {        #if LCD_XMAG > 2          memset (&Buffer.ab[i*LCD_XMAG], *(pData+i), LCD_XMAG);        #else          Buffer.au16[i*LCD_XMAG] = Buffer.au16[i*LCD_XMAG+1] = *(U16*)pData;          pData += 2; /* Move to next word */        #endif      }      break;    }    LCD_L0_DrawBitmap(x0 + Diff * LCD_XMAG, y0, NumPixels * LCD_XMAG, LCD_YMAG, BPP, 0, Buffer.ab, 0, pTrans);    x0 += NumPixels*LCD_XMAG;    xsize -= NumPixels;  }}void LCD_L0_MAG_DrawBitmap   (int x0, int y0, int xsize, int ysize,                       int BPP, int BytesPerLine,                       const U8* pData, int Diff,                       const LCD_PIXELINDEX* pTrans){  int iLine;  y0 *= LCD_YMAG;  x0 *= LCD_XMAG;  for (iLine = 0; iLine < ysize; iLine++) {    #if LCD_XMAG == 1      LCD_L0_DrawBitmap(x0, y0, xsize, LCD_YMAG, BPP, 0, pData, Diff, pTrans);    #else      DrawBitline(x0, y0, xsize, BPP, pData, Diff, pTrans);    #endif    y0+= LCD_YMAG;    pData += BytesPerLine;  }}void         LCD_L0_MAG_DrawHLine    (int x0, int y0,  int x1) {  x0 *= LCD_XMAG;  x1 = x1*(LCD_XMAG) + LCD_XMAG-1;  y0 *= LCD_YMAG;  LCD_L0_FillRect(x0, y0, x1, y0 + LCD_YMAG-1);}void         LCD_L0_MAG_DrawVLine    (int x0 , int y0,  int y1) {  y0 *= LCD_YMAG;  y1 = y1*(LCD_YMAG) + LCD_YMAG-1;  x0 *= LCD_XMAG;  LCD_L0_FillRect(x0, y0, x0 + LCD_XMAG-1, y1);}void         LCD_L0_MAG_FillRect     (int x0, int y0, int x1, int y1) {  y0 *= LCD_YMAG;  y1 = y1*(LCD_YMAG) + LCD_YMAG-1;  x0 *= LCD_XMAG;  x1 = x1*(LCD_XMAG) + LCD_XMAG-1;  LCD_L0_FillRect(x0, y0, x1, y1);}unsigned int LCD_L0_MAG_GetPixelIndex(int x, int y) {  return LCD_L0_GetPixelIndex(x* LCD_XMAG, y* LCD_YMAG);}void         LCD_L0_MAG_SetPixelIndex(int x, int y, int ColorIndex) {  int ix, iy;  y *= LCD_YMAG;  x *= LCD_XMAG;  for (iy=0; iy< LCD_YMAG; iy++) {    for (ix=0; ix< LCD_XMAG; ix++) {      LCD_L0_SetPixelIndex(x+ix, y+iy, ColorIndex);    }  }}void         LCD_L0_MAG_XorPixel     (int x, int y) {  int ix, iy;  y *= LCD_YMAG;  x *= LCD_XMAG;  for (iy=0; iy< LCD_YMAG; iy++) {    for (ix=0; ix< LCD_XMAG; ix++) {      LCD_L0_XorPixel(x+ix, y+iy);    }  }}#elsevoid LCDL0Mag(void) { } /* avoid empty object files */#endif

⌨️ 快捷键说明

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