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

📄 font.c

📁 ucCos移植到广州友善nano2410
💻 C
字号:
#include "..\inc\def.h"
#include "..\inc\glib.h"
#include "..\inc\font\Font_ASCII.h"
#include "..\inc\font\Font_Kor.h"
#include "..\inc\Lcddrive.h"
#include "..\inc\font.h"


//LCD 困摹
U8 xPos;
U8 yPos;
U8 fontBuffer[32]={0};	// 32Byte 茄臂迄飘 滚欺


void glcdGetFont(unsigned int c, unsigned char *fontBuffer)
{
	unsigned char i;
	unsigned char cho_5bit, joong_5bit, jong_5bit;
	unsigned char cho_bul, joong_bul, jong_bul=0, jong_flag;
	unsigned short ch;

	cho_5bit = table_cho[(c >> 10) & 0x001F];		// 檬己: 14-10 5bit甫 眠免
	joong_5bit = table_joong[(c >> 5) & 0x001F];	// 吝己: 09-05 5bit甫 眠免
	jong_5bit = table_jong[c & 0x001F];				// 辆己: 04-00 5bit甫 眠免

	if(jong_5bit == 0) // 辆己捞 绝栏搁
	{
		jong_flag = 0;
		cho_bul = bul_cho1[joong_5bit];
		if((cho_5bit == 1) || (cho_5bit == 16))			// 1: Fill Code, 16: ず
			joong_bul = 0;
		else
			joong_bul = 1;
    }
	else // 辆己捞 乐栏搁
    {
		jong_flag = 1;
		cho_bul = bul_cho2[joong_5bit];
		if((cho_5bit == 1) || (cho_5bit == 16))			// 1: Fill Code, 16: ず
			joong_bul = 2;
		else
			joong_bul = 3;
		jong_bul = bul_jong[joong_5bit];
	}

	//----------------------- 迄飘甫 滚欺肺 汗荤---------------------------
	ch = cho_bul*20 + cho_5bit;			      // 檬己 迄飘 汗荤 
	for(i = 0; i < 32; i++)
	    fontBuffer[i] = K_font[ch][i];

	ch = 8*20 + joong_bul*22 + joong_5bit;		      // 吝己 迄飘甫 OR
	for(i = 0; i < 32; i++)
	    fontBuffer[i] |= K_font[ch][i];
	    
	if(jong_flag)					      // 辆己捞 粮犁窍搁 OR
    {
		ch = 8*20 + 4*22 + jong_bul*28 + jong_5bit;
		for(i = 0; i < 32; i++)
			fontBuffer[i] |= K_font[ch][i];
    }
}


void PutEngChar(char c, unsigned char xPos, unsigned char yPos)
{
	U8 data, temp;
	U8 x, y;
	
	unsigned short TFT[8][16];
	
	for(x=0;x<8;x++)
	{
		data = E_font[c][x];
		y=0;
		while(y!=8)
		{
			temp = data & 0x01;
			data = data >> 1;
			if(temp == 0x01) TFT[x][y] = 0xffff;
			else TFT[x][y] = 0x0000;
			y++;
		}
	}
	
	for(x=0;x<8;x++)
	{
		data = E_font[c][x+8];
		y=0;
		while(y!=8)
		{
			temp = data & 0x01;
			data = data >> 1;
			if(temp == 0x01) TFT[x][y+8] = 0xffff;
			else TFT[x][y+8] = 0x0000;
			y++;
		}
	}
	
	for(y=0;y<16;y++)
	{
		for(x=0;x<8;x++)
		{
			PutPixel(xPos+x,yPos+y,TFT[x][y] & 0xFFFF);			
		}
	}
}


void PutKorChar(unsigned int c,unsigned char xPos,unsigned char yPos)
{
	U8 data,temp;


	U8 x, y;
	U32 TFT[16][16];

	glcdGetFont(c, fontBuffer);

	for(x=0;x<16;x++)
	{
		data = fontBuffer[x];
		y=0;
		while(y!=8)
		{
			temp = data & 0x01;
			data = data >> 1;
			if(temp == 0x01) TFT[x][y] = 0xffff;
			else TFT[x][y] = 0x0000;
			y++;
		}
	}
		
	for(x=0;x<16;x++)
	{
		data = fontBuffer[x+16];
		y=0;
		while(y!=8)
		{
			temp = data & 0x01;
			data = data >> 1;
			if(temp == 0x01) TFT[x][y+8] = 0xffff;
			else TFT[x][y+8] = 0x0000;
			y++;
		}
	}

	for(y=0;y<16;y++)
	{
		for(x=0;x<16;x++)
		{
			PutPixel(xPos+x,yPos+y,TFT[x][y]);			
		}
	}	
}


U16 Convert(unsigned short kssm)
{
	U8 high,low;
	U16 index,result;

	high = (kssm>>8) & 0xFF;
	low  =  kssm & 0xFF;

//	if(kssm >= 0xB0A1 && kssm <= 0xC8FE)
//	{
		index = (high - 0xB0) * 94 + low - 0xA1;
//		printf("index = %d\n",index);
		result =  KSTable[index][0] * 256 + KSTable[index][1];
//		result |=  KSTable[index][1];
		return result;
//	}

	return 0;
}


void Lcd_PutString(char *str, unsigned char xPos, unsigned char yPos)
{
	U8 ch1;
	U16 ch2;
	U8 Enter;
	
	while(*str)
	{
		ch1 = *str;
		str++;
		if(ch1<0x80) //酒胶虐
		{
			PutEngChar(ch1,xPos,yPos);
			xPos = xPos + 8;
			if(xPos == 300)
			{
				Enter++;
				xPos =0;
				yPos = 16*Enter;
			}
		}//茄臂
		else
		{
			ch2 = (ch1<<8) + (*str&0xFF);
			ch2 = Convert(ch2);
			PutKorChar(ch2,xPos,yPos);
			xPos = xPos + 16;
			str++;
		}
	}
}

void PutU32Dec16(unsigned long Data, U8 digit, U8 xPos, U8 yPos)
{
	unsigned long div = 1;
	unsigned int c;
	
	while(--digit) div *= 10;
	
	while(div > 0)
	{
		c = Data / div;
		Data %= div;
		div /= 10;
		PutEngChar((U8)c + '0',xPos,yPos);
		xPos += 8;
	}
}

unsigned char strNcopy(unsigned *dest, unsigned char *src, unsigned char len)
{
	unsigned short i, ncopied;
	
	for(i=0;i<len;i++)
	{
		if((dest[i] = src[i])==0) break;
		if(dest[i]>0x80)
		{
			if(i==len-1) break;
			else
			{
				i++;
				dest[i] = src[i];
			}		
		}
	}
	ncopied = i;
	
	while(i<len) dest[i++] = ' ';
	dest[i] = 0;
	
	return ncopied;
}

⌨️ 快捷键说明

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