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

📄 lcd_api.c

📁 LCM标准驱动原代码,根据这个,可以很方便的编写其他LCM驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
{
	UINT8           index;
	INT8			i, k, j;
	UINT8			*fontLibHeadPointer, *fontLibOffset, posOffset = 0;
	UINT8			fontWidth, fontHeight, currentFontChar, editChar;
	UINT8			startX, startY, drawX, drawY, fontRowByte, fontRowBit, font_Id;
	UINT32			foreGroundArray[4], backGroundArray[4], bGroundCodeTemp[4], fGroundCode[4];
	UINT32			fColor;
	long int		offset;

	font_Id = asciiCharInfo.font_Id;
	// get font width, height, size, compressed and font library header pointer
	fontWidth = asciiCharInfo.fontWidth;
	fontHeight = asciiCharInfo.fontHeight;
	fontLibHeadPointer = (UINT8*)lcdWestParam.pFontList[font_Id].pFontHeader->pGlyphData;

	// get character and get left X and top Y position that character will be displayed
	startX = (UINT8)asciiCharInfo.sPos.x;
	startY = (UINT8)asciiCharInfo.sPos.y;
	editChar = asciiCharInfo.editChar;

	// the font lib code is not be compressed
	// following steps get the character offset in current font library
	if( lcdWestParam.pFontList[font_Id].pFontHeader->pCharHeader[editChar].defined )
		offset = lcdWestParam.pFontList[font_Id].pFontHeader->pCharHeader[editChar].glyphOffset;
	else
		return;

	fontLibOffset = &fontLibHeadPointer[offset];

	fColor = asciiCharInfo.bFgColor;
	fColor = fColor | (fColor << 16);
	for( j = 0; j< 4; j++ )
		fGroundCode[j] = fColor;
//      GSMmemset( (UINT8*)fGroundCode, asciiCharInfo.bFgColor, 16 );

	fontRowByte = fontWidth / 8;
	fontRowBit = fontWidth % 8;

	if( fontRowBit )
		posOffset = 1;

	for( i = 0; i < fontRowByte; i++ )
	{
		drawX = startX + (8*i);
		for( k = 0; k < fontHeight; k++ )
		{
			drawY = startY + k; 
			currentFontChar = fontLibOffset[k*(fontRowByte+posOffset)+i];

			for(index = 0; index < 8; index++)
                                GSMmemcpy((UINT16 *)((UINT16 *)foreGroundArray + index),&monoByteToColorArray[currentFontChar].foregroundCode[index],2);
//                      GSMmemcpy( (UINT8*)foreGroundArray, monoByteToColorArray[currentFontChar].foregroundCode, 16 );
			foreGroundArray[0] = foreGroundArray[0] & fGroundCode[0];
			foreGroundArray[1] = foreGroundArray[1] & fGroundCode[1];
			foreGroundArray[2] = foreGroundArray[2] & fGroundCode[2];
			foreGroundArray[3] = foreGroundArray[3] & fGroundCode[3];
			for(index = 0; index < 8; index++)
                                GSMmemcpy((UINT16 *)((UINT16 *)backGroundArray + index),&monoByteToColorArray[currentFontChar].backgroundCode[index],2);
//                      GSMmemcpy( (UINT8*)backGroundArray, monoByteToColorArray[currentFontChar].backgroundCode, 16 );
			for(index = 0; index < 8; index++)
                                GSMmemcpy((UINT16 *)((UINT16 *)bGroundCodeTemp + index),&lpBitBuffer[drawY * color_Lcd_Width+drawX + index],2);
//                      GSMmemcpy( (UINT8*)bGroundCodeTemp, &(lpBitBuffer[drawY * color_Lcd_Width + drawX]), 16 );
			backGroundArray[0] = backGroundArray[0] & bGroundCodeTemp[0];
			backGroundArray[1] = backGroundArray[1] & bGroundCodeTemp[1];
			backGroundArray[2] = backGroundArray[2] & bGroundCodeTemp[2];
			backGroundArray[3] = backGroundArray[3] & bGroundCodeTemp[3];
			foreGroundArray[0] = ~(foreGroundArray[0] | backGroundArray[0]);
			foreGroundArray[1] = ~(foreGroundArray[1] | backGroundArray[1]);
			foreGroundArray[2] = ~(foreGroundArray[2] | backGroundArray[2]);
			foreGroundArray[3] = ~(foreGroundArray[3] | backGroundArray[3]);

			HwLCDWriteLine( (UINT16*)foreGroundArray, drawX, drawY, 8 );
		}
	}

	if( fontRowBit )
	{
		drawX = startX + (8*fontRowByte);
		for( k = 0; k < fontHeight; k++ )
		{
			drawY = startY + k; 
			currentFontChar = fontLibOffset[k*(fontRowByte+1)+fontRowByte];

			for(index = 0; index < 8; index++)
                                GSMmemcpy((UINT16 *)((UINT16 *)foreGroundArray + index),&monoByteToColorArray[currentFontChar].foregroundCode[index],2);
//                      GSMmemcpy( (UINT8*)foreGroundArray, monoByteToColorArray[currentFontChar].foregroundCode, 16 );
			foreGroundArray[0] = foreGroundArray[0] & fGroundCode[0];
			foreGroundArray[1] = foreGroundArray[1] & fGroundCode[1];
			foreGroundArray[2] = foreGroundArray[2] & fGroundCode[2];
			foreGroundArray[3] = foreGroundArray[3] & fGroundCode[3];
			for(index = 0; index < 8; index++)
                                GSMmemcpy((UINT16 *)((UINT16 *)backGroundArray + index),&monoByteToColorArray[currentFontChar].backgroundCode[index],2);
//                      GSMmemcpy( (UINT8*)backGroundArray, monoByteToColorArray[currentFontChar].backgroundCode, 16 );
			for(index = 0; index < 8; index++)
                                GSMmemcpy((UINT16 *)((UINT16 *)bGroundCodeTemp + index),&lpBitBuffer[drawY * color_Lcd_Width+drawX + index],2);
//                      GSMmemcpy( (UINT8*)bGroundCodeTemp, &(lpBitBuffer[drawY * color_Lcd_Width + drawX]), 16 );
			backGroundArray[0] = backGroundArray[0] & bGroundCodeTemp[0];
			backGroundArray[1] = backGroundArray[1] & bGroundCodeTemp[1];
			backGroundArray[2] = backGroundArray[2] & bGroundCodeTemp[2];
			backGroundArray[3] = backGroundArray[3] & bGroundCodeTemp[3];

			foreGroundArray[0] = ~(foreGroundArray[0] | backGroundArray[0]);
			foreGroundArray[1] = ~(foreGroundArray[1] | backGroundArray[1]);
			foreGroundArray[2] = ~(foreGroundArray[2] | backGroundArray[2]);
			foreGroundArray[3] = ~(foreGroundArray[3] | backGroundArray[3]);

			HwLCDWriteLine( (UINT16*)foreGroundArray, drawX, drawY, fontRowBit );
		}
	}
}

void LCDDrawWideByteFontCharTransInverseMode( ColorWideByteChar wCharInfo )
{
	INT8			i, k, j;
	UINT8           index;
	UINT8			*fontLibHeadPointer, *fontLibOffset, posOffset = 0;
	UINT8			fontWidth, fontHeight, currentFontChar;
	UINT8			startX, startY, drawX, drawY, fontRowByte, fontRowBit, font_Id;
	UINT32			foreGroundArray[4], backGroundArray[4], bGroundCodeTemp[4], fGroundCode[4];
	UINT32			fColor;
	long int		offset;
	UINT16			hiByte, lowByte, editChar;

	font_Id = wCharInfo.font_Id;
	// get font width, height, size, compressed and font library header pointer
	fontWidth = wCharInfo.fontWidth;
	fontHeight = wCharInfo.fontHeight;
	fontLibHeadPointer = (UINT8*)lcdHzParam.pFontList[font_Id].pFontHeader->pGlyphData;

	// get character and get left X and top Y position that character will be displayed
	startX = (UINT8)wCharInfo.sPos.x;
	startY = (UINT8)wCharInfo.sPos.y;
	editChar = wCharInfo.editChar;

	// following steps get the character offset in current font library
	//editChar = 0xb0cb;
	editChar = (editChar - 0xa1a1)&0x7f7f;
	lowByte = editChar & 0x00ff;
	hiByte = (editChar>>8) & 0x00ff;
	offset = ((lowByte*94L) + hiByte)*(fontHeight*2);
	// font lib pointer offset
	fontLibOffset = &fontLibHeadPointer[offset];

	fColor = wCharInfo.bFgColor;
	fColor = fColor | (fColor << 16);
	for( j = 0; j< 4; j++ )
		fGroundCode[j] = fColor;
//      GSMmemset( (UINT8*)fGroundCode, wCharInfo.bFgColor, 16 );

	fontRowByte = fontWidth / 8;
	fontRowBit = fontWidth % 8;
	if( fontRowBit )
		posOffset = 1;

	for( i = 0; i < fontRowByte; i++ )
	{
		drawX = startX + (8*i);
		for( k = 0; k < fontHeight; k++ )
		{
			drawY = startY + k; 
			currentFontChar = fontLibOffset[k*(fontRowByte+posOffset)+i];

			for(index = 0; index < 8; index++)
                                GSMmemcpy((UINT16 *)((UINT16 *)foreGroundArray + index),&monoByteToColorArray[currentFontChar].foregroundCode[index],2);
//                      GSMmemcpy( (UINT8*)foreGroundArray, monoByteToColorArray[currentFontChar].foregroundCode, 16 );
			foreGroundArray[0] = foreGroundArray[0] & fGroundCode[0];
			foreGroundArray[1] = foreGroundArray[1] & fGroundCode[1];
			foreGroundArray[2] = foreGroundArray[2] & fGroundCode[2];
			foreGroundArray[3] = foreGroundArray[3] & fGroundCode[3];
			for(index = 0; index < 8; index++)
                                GSMmemcpy((UINT16 *)((UINT16 *)backGroundArray + index),&monoByteToColorArray[currentFontChar].backgroundCode[index],2);
//                      GSMmemcpy( (UINT8*)backGroundArray, monoByteToColorArray[currentFontChar].backgroundCode, 16 );
			for(index = 0; index < 8; index++)
                                GSMmemcpy((UINT16 *)((UINT16 *)bGroundCodeTemp + index),&lpBitBuffer[drawY * color_Lcd_Width+drawX + index],2);
//                      GSMmemcpy( (UINT8*)bGroundCodeTemp, &(lpBitBuffer[drawY * color_Lcd_Width + drawX]), 16 );
			backGroundArray[0] = backGroundArray[0] & bGroundCodeTemp[0];
			backGroundArray[1] = backGroundArray[1] & bGroundCodeTemp[1];
			backGroundArray[2] = backGroundArray[2] & bGroundCodeTemp[2];
			backGroundArray[3] = backGroundArray[3] & bGroundCodeTemp[3];

			foreGroundArray[0] = ~(foreGroundArray[0] | backGroundArray[0]);
			foreGroundArray[1] = ~(foreGroundArray[1] | backGroundArray[1]);
			foreGroundArray[2] = ~(foreGroundArray[2] | backGroundArray[2]);
			foreGroundArray[3] = ~(foreGroundArray[3] | backGroundArray[3]);

			HwLCDWriteLine( (UINT16*)foreGroundArray, drawX, drawY, 8 );
		}
	}

	if( fontRowBit )
	{
		drawX = startX + (8*fontRowByte);
		for( k = 0; k < fontHeight; k++ )
		{
			drawY = startY + k; 
			currentFontChar = fontLibOffset[k*(fontRowByte+1)+fontRowByte];

			for(index = 0; index < 8; index++)

⌨️ 快捷键说明

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