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

📄 lcd_1.c

📁 44b0豪华板使用的ucos2+ucgui
💻 C
字号:
/***********************************************************************************************************                                                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        : LCD_1.CPurpose     : Glue code for second display in a multi-controller              environment---------------------------END-OF-HEADER------------------------------*/#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 */#include "lcdlib.h"#include "LCD_ConfDefaults.h"#define   COLOR LCD_COLORINDEX/***********************************************************                                                       **       Internal set pixel routines                     **                                                       ***********************************************************/static void SetPixel(int x, int y, LCD_PIXELINDEX c) {	//	c=LCD_NUM_COLORS-1-c;//黑白	#ifdef LCDMONO	    if(x<SCR_XSIZE && y<SCR_YSIZE)		frameBuffer1[(y)][(x)/32]=( frameBuffer1[(y)][(x)/32] & ~(0x80000000>>((x)%32)*1) )            | ( (c)<< ((32-1-((x)%32))*1) );#endif//4级灰度#ifdef LCDG4	    if(x<SCR_XSIZE && y<SCR_YSIZE)        frameBuffer4[(y)][(x)/16]=( frameBuffer4[(y)][x/16] & ~(0xc0000000>>((x)%16)*2) )            | ( (c)<<((16-1-((x)%16))*2) );#endif//16级灰度#ifdef LCDG16	if(x<SCR_XSIZE && y<SCR_YSIZE)        frameBuffer16[(y)][(x)/8]=( frameBuffer16[(y)][x/8] & ~(0xf0000000>>((x)%8)*4) )            | ( (c)<<((8-1-((x)%8))*4) );#endif//256色#ifdef LCDCOLOR	if(x<SCR_XSIZE && y<SCR_YSIZE)        frameBuffer256[(y)][(x)/4]=( frameBuffer256[(y)][x/4] & ~(0xff000000>>((x)%4)*8) )            | ( (c)<<((4-1-((x)%4))*8) );#endif}unsigned int GetPixelIndex(int x, int y) {    LCD_PIXELINDEX col;//黑白	#ifdef LCDMONO  	col=( frameBuffer1[(y)][(x)/32] >> ( 32-1-(x%32)*1 ) ) & 0x1;  	return col;#endif//4级灰度#ifdef LCDG4	col=( frameBuffer4[(y)][(x)/16] >> ( 32-2-(x%16)*2 ) ) & 0x3;  	return col;#endif//16级灰度#ifdef LCDG16	col=( frameBuffer16[(y)][(x)/8] >> ( 32-4-(x%8)*4 ) ) & 0xf;  	return col;#endif//256色#ifdef LCDCOLOR	col=( frameBuffer256[(y)][(x)/4] >> ( 32-8-(x%4)*8 ) ) & 0xff;  	return col;#endif}/*        *********************************************************        *                                                       *        *       LCD_SetColorIndex                               *        *       LCD_SetBkColorIndex                             *        *                                                       *        **********************************************************/static int GetColorIndex(int i)  /* i is 0 or 1 */ {  return  (GUI_Context.DrawMode & LCD_DRAWMODE_REV) ? i-1 : i;}/***********************************************************                                                       **       LCD_Init : Init the display                     **                                                       ***********************************************************/int LCD_L0_Init(void) {    GUI_DEBUG_LOG("\nLCD_Init()");    /* Init controllers (except lookup table) */    LCD_L0_ReInit();    LCD_Off();    return 0;    /* Init successfull ! */}/***********************************************************                                                       **       LCD_L0_ReInit : Re-Init the display             **                                                       **********************************************************ReInit contains all of the code that can be re-executed at any point withoutchanging or even disturbing what can be seen on the LCD.Note that it is also used as a subroutine by LCD_Init().*/void  LCD_L0_ReInit(void) {	  Lcd_Init_44(MODE_G16);                     /* macro defined in config */}void LCD_L0_Off(void){	Lcd_DispOFF();}void LCD_L0_On(void){	Lcd_DispON();}void LCD_L0_DrawBitMap(int x0, int y0,					int Xsize, int Ysize,					int BitsPerPixel,					int BytesPerLine,					const U8* pData, int Diff,					const LCD_PIXELINDEX* pTrans){}void LCD_L0_DrawPixel(int x, int y){}static void XorPixel   (int x, int y) {    LCD_PIXELINDEX Index = GetPixelIndex(x,y);    SetPixel(x,y,LCD_NUM_COLORS-1-Index);}/***********************************************************                                                       **       LCD_L0_XorPixel                                 **                                                       **********************************************************Purpose:  This routine is called by emWin. It writes 1 pixel into the          display.*/void LCD_L0_XorPixel(int x, int y) {  	XorPixel(x, y);}void LCD_L0_SetPixelIndex(int x, int y, int ColorIndex) {  	SetPixel(x, y, ColorIndex);}/***********************************************************                                                       **          LCD_L0_DrawHLine optimized                   **                                                       **          16 bit bus, Using BITBLT                     **                                                       ***********************************************************/void LCD_L0_DrawHLine  (int x0, int y,  int x1) {  	if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR)   	{    	while (x0 <= x1)     	{      		XorPixel(x0, y);      		x0++;    	}  	} else   	{    	while (x0 <= x1)     	{      		SetPixel(x0, y, COLOR);      		x0++;    	}  	}}/***********************************************************                                                       **          LCD_L0_DrawVLine optimized                   **                                                       **          16 bit bus, using BITBLT                     **                                                       ***********************************************************/void LCD_L0_DrawVLine  (int x, int y0,  int y1) {  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {    while (y0 <= y1) {      XorPixel(x, y0);      y0++;    }  } else {    while (y0 <= y1) {      SetPixel(x, y0, COLOR);      y0++;    }  }}/***********************************************************                                                       **          LCD_FillRect                                 **                                                       ***********************************************************/void LCD_L0_FillRect(int x0, int y0, int x1, int y1) {#if !LCD_SWAP_XY  for (; y0 <= y1; y0++) {    LCD_L0_DrawHLine(x0,y0, x1);  }#else  for (; x0 <= x1; x0++) {    LCD_L0_DrawVLine(x0,y0, y1);  }#endif}unsigned int LCD_L0_GetPixelIndex(int x, int y){return 1;}void LCD_L0_SetLUTEntry(U8 Pos, LCD_COLOR Color){}U8 LCD_ControlCache(U8 command){return 1;}/************************************************************                                                        **		  Draw a line                                    **                                                        ************************************************************/static void  DrawBitLine1BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans) {//  	LCD_PIXELINDEX aColor[2];  	U16 Pixels = ((*p) << 8) | (*(p + 1));  	U8 RemPixels;  	p++;//  	aColor[0] = *pTrans;//  	aColor[1] = *(pTrans + 1);  	x += Diff;  	RemPixels = 16 - Diff;  	Pixels <<= Diff;    	if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {    	do {      		if (RemPixels==0) {        		Pixels = ((*(p + 1)) << 8) | (*(p + 2));        		p += 2;        		RemPixels = 16;      		}      		if (Pixels & 0x8000) {        		XorPixel(x, y);      		}      		RemPixels--;      		Pixels <<=1;      		x++;    	} while (--xsize);  	}   	else {    	do {      		if (RemPixels==0) {        		Pixels = ((*(p + 1)) << 8) | (*(p + 2));        		p += 2;        		RemPixels = 16;      		}      		if (Pixels & 0x8000) {        		SetPixel(x, y, *(pTrans+1));      		}      		RemPixels--;      		Pixels <<=1;      		x++;    	} while (--xsize);  	} }/*    *********************************************    *                                           *    *      Draw Bitmap 2 BPP                    *    *                                           *    **********************************************/#if (LCD_MAX_LOG_COLORS > 2)static void  DrawBitLine2BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans) {  LCD_PIXELINDEX pixels;/*// Jump to right entry point*/  pixels = *p;  if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) switch (Diff&3) {  case 0:    goto WriteTBit0;  case 1:    goto WriteTBit1;  case 2:    goto WriteTBit2;  default:    goto WriteTBit3;  } else switch (Diff&3) {  case 0:    goto WriteBit0;  case 1:    goto WriteBit1;  case 2:    goto WriteBit2;  default:    goto WriteBit3;  }/*        Write without transparency*/WriteBit0:  SetPixel(x+0, y, *(pTrans+(pixels>>6)));  if (!--xsize)    return;WriteBit1:  SetPixel(x+1, y, *(pTrans+(3&(pixels>>4))));  if (!--xsize)    return;WriteBit2:  SetPixel(x+2, y, *(pTrans+(3&(pixels>>2))));  if (!--xsize)    return;WriteBit3:  SetPixel(x+3, y, *(pTrans+(3&(pixels))));  if (!--xsize)    return;  pixels = *(++p);  x+=4;  goto WriteBit0;/*        Write with transparency*/WriteTBit0:  if (pixels&(3<<6))    SetPixel(x+0, y, *(pTrans+(pixels>>6)));  if (!--xsize)    return;WriteTBit1:  if (pixels&(3<<4))    SetPixel(x+1, y, *(pTrans+(3&(pixels>>4))));  if (!--xsize)    return;WriteTBit2:  if (pixels&(3<<2))    SetPixel(x+2, y, *(pTrans+(3&(pixels>>2))));  if (!--xsize)    return;WriteTBit3:  if (pixels&(3<<0))    SetPixel(x+3, y, *(pTrans+(3&(pixels))));  if (!--xsize)    return;  pixels = *(++p);  x+=4;  goto WriteTBit0;}#endif/*    *********************************************    *                                           *    *      Draw Bitmap 4 BPP                    *    *                                           *    **********************************************/#if (LCD_MAX_LOG_COLORS > 4)static void  DrawBitLine4BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans) {  U8 pixels;/*// Jump to right entry point*/  pixels = *p;  if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) {    if ((Diff&1) ==0)      goto WriteTBit0;    goto WriteTBit1;  } else {    if ((Diff&1) ==0)      goto WriteBit0;    goto WriteBit1;  }/*        Write without transparency*/WriteBit0:  SetPixel(x+0, y, *(pTrans+(pixels>>4)));  if (!--xsize)    return;WriteBit1:  SetPixel(x+1, y, *(pTrans+(pixels&0xf)));  if (!--xsize)    return;  x+=2;  pixels = *(++p);  goto WriteBit0;/*        Write with transparency*/WriteTBit0:  if (pixels>>4)    SetPixel(x+0, y, *(pTrans+(pixels>>4)));  if (!--xsize)    return;WriteTBit1:  if (pixels&0xf)    SetPixel(x+1, y, *(pTrans+(pixels&0xf)));  if (!--xsize)    return;  x+=2;  pixels = *(++p);  goto WriteTBit0;}#endif/*    *********************************************    *                                           *    *      Draw Bitmap 8 BPP  (256 colors)      *    *                                           *    **********************************************/#if (LCD_MAX_LOG_COLORS > 16)static void  DrawBitLine8BPP(int x, int y, U8 const*p, int xsize, const LCD_PIXELINDEX*pTrans) {  LCD_PIXELINDEX pixel;  if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS)==0) {    if (pTrans) {      for (;xsize > 0; xsize--,x++,p++) {        pixel = *p;        SetPixel(x, y, *(pTrans+pixel));      }    } else {      for (;xsize > 0; xsize--,x++,p++) {        SetPixel(x, y, *p);      }    }  } else {   /* Handle transparent bitmap */    if (pTrans) {      for (; xsize > 0; xsize--, x++, p++) {        pixel = *p;        if (pixel) {          SetPixel(x+0, y, *(pTrans+pixel));        }      }    } else {      for (; xsize > 0; xsize--, x++, p++) {        pixel = *p;        if (pixel) {          SetPixel(x+0, y, pixel);        }      }    }  }}#endif/***********************************************************                                                       **         Universal draw Bitmap routine                 **                                                       ***********************************************************/void LCD_L0_DrawBitmap   (int x0, int y0,                       int xsize, int ysize,                       int BitsPerPixel,                        int BytesPerLine,                       const U8* pData, int Diff,                       const LCD_PIXELINDEX* pTrans) {	int i;  	for (i=0; i<ysize; i++) {  		    switch (BitsPerPixel) {                case 1:                    DrawBitLine1BPP(x0, i+y0, pData, Diff, xsize, pTrans);                    break;                #if (LCD_MAX_LOG_COLORS > 2)                case 2:                    DrawBitLine2BPP(x0, i+y0, pData, Diff, xsize, pTrans);                    break;                #endif                #if (LCD_MAX_LOG_COLORS > 4)                case 4:                    DrawBitLine4BPP(x0, i+y0, pData, Diff, xsize, pTrans);                    break;                #endif                #if (LCD_MAX_LOG_COLORS > 16)                case 8:                    DrawBitLine8BPP(x0, i+y0, pData, xsize, pTrans);                    break;                #endif            }    	pData += BytesPerLine;  	}}/*********************************************************                                                       **       LCD_L0_SetOrg                                   **                                                       **********************************************************                                                        Purpose:        Sets the original position of the virtual display.                Has no function at this point with the PC-driver.*/int OrgX, OrgY;void LCD_L0_SetOrg(int x, int y) {  	OrgX = x;  	OrgY = y;}

⌨️ 快捷键说明

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