|
发表于 2010-9-12 01:19:16
|
显示全部楼层
文件在这儿
点击此处下载
ourdev_582269BZKOZ6.rar(文件大小:430K) (原文件名:GBK字库及Unicode转换表.rar)
//显示汉字的函数,仅供参考,c[2]为GBK编码,
void PutGB1616(unsigned short x, unsigned short y, unsigned char c[2], unsigned int f,unsigned int b)
{
unsigned int i,j,k;
unsigned long offset;
unsigned char GBK_MSK[32];
for(i=0;i<32;i++)GBK_MSK=0xff;
if(font_on)
{
i=c[0];k=c[1];
if(i>=0x81 && i<=0xA0)offset=(0x0000+(i-0x81)*0xBF+(k-0x40))*0x20;
else
if(i>=0xA1 && i<=0xA7)offset=(0x17E0+(i-0xA1)*0x5E+(k-0xA1))*0x20;
else
if(i>=0xA8 && i<=0xA9)offset=(0x1A72+(i-0xA8)*0xB0+(k-0x40))*0x20;
else
if(i>=0xAA && i<=0xAF)offset=(0x1BD3+(i-0xAA)*0x61+(k-0x40))*0x20;
else
if(i>=0xB0 && i<=0xF7)offset=(0x1E19+(i-0xB0)*0xBF+(k-0x40))*0x20;
else
if(i>=0xF8 && i<=0xFE)offset=(0x53D1+(i-0xF8)*0x61+(k-0x40))*0x20;
else offset=0xff00;
f_lseek(&f_font,offset);
f_read(&f_font,GBK_MSK,0x20,&j);
}
LCD_SetArea(x, y, x+16-1, y+16-1);
LCD_Inst(0x2C);
LCD_CS(0);
LCD_RD(1);
LCD_RS(1);
for(i=0;i<32;i++)
{
unsigned short m=GBK_MSK;
for(j=0;j<8;j++)
{
if((m&0x80)==0x80)
{
LCD_Bus_Write_Byte(f>>8);
LCD_Bus_Write_Byte(f);
}
else {
LCD_Bus_Write_Byte(b>>8);
LCD_Bus_Write_Byte(b);
}
m<<=1;
}
}
LCD_CS(1);
}
//Unicode 转换成 GBK码的函数
WCHAR ff_convert ( /* Converted code, 0 means conversion error */
WCHAR src /* Character code to be converted */
)
{
WCHAR t[2];
WCHAR c;
unsigned long i, li, hi;
int n;
unsigned int cout;
if( ! u2gb_on )
{
if(f_open (&f_u2gb,"SYSTEM/U2GB.TBL", FA_READ)!=FR_OK)
u2gb_on=0;
else
u2gb_on=1;
}
if (src < 0x80){c = src;}/* ASCII */
else
if(u2gb_on==0)c='?';
else
{
/* Unicode to OEMCP */
hi=f_u2gb.fsize;
hi =hi / 4 - 1;
li = 0;
for (n = 16; n; n--)
{
i = li + (hi - li) / 2;
f_lseek(&f_u2gb,i*4);
f_read(&f_u2gb,&t,4,&cout);
if (src == t[0]) break;
if (src > t[0])
li = i;
else
hi = i;
}
if(n!=0)
c=t[1];
else c='?';
}
return c;
} |
|