📄 font.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 + -