walnutcy

为系统加一个中文字库

0
阅读(2674)

为自己的3890加一个字库(先从英文的来起)

方案需要中文字库,由于GB2312的字库较大,调试起来麻烦点,先从英文字库讲起,
这个做好了,换个字库的数据文件,并修改下字宽与字高,及查找算法,就可以了,呵呵,
首先用字库生成英文字符库,共255个,
将生成的data文件加ADS的汇编指令incbin包含并修改scatter文件编译到NORFLASH的固定地址,
然后用Image$$MY_FONT_DATA##Base来取得字库文件的首地址,
然后就可以当一个DOS的英文点阵字库用了,
scatter文件写法:
……………………

MCU_STARTING_PGM 0x48000
{
ASM_Boot.o (BOOT_AREA,+FIRST)
ASM_Scatter.o (+RO) }
DATA_LT_FONT +0x00
{
LtGUI_FONT.o (+RO) // LtGUI_FONT.s文件
}
……………………
LtGUI_FONT.s文件写法:
AREA MLC_LT_FONT, CODE, READONLY
INCBIN EngFont8_16.BIN ;包含字库文件
END
取得字库首地址:
const U8* LIB_englishcharcode = (const U8*)Image$$DATA_LT_FONT$$Base ;
这样就可以使用英文字库了,
对于中文字库,还要注意转换位置与汉字码,例如GB2312字库,转换换法如下:
// inputOffset为汉字的存储值
DWORD realOffset = 0;
if(((inputOffset>>8)<0xA1)||((inputOffset&0xFF)<0xA1)
||((inputOffset>>8)>0xFE)||((inputOffset&0xFF)>0xFE))
{
Warning(_T("GB2312的编码范围是高位0xA1-0xFE,低位也是0xA1-0xFE"));
return;
}
realOffset = ((inputOffset>>8)-0xA1) * 94 + (inputOffset & 0xFF) - 0xA1;
取得汉字相对字库首地址的偏移量,(对dos 熟悉的兄弟,我这就是斑门弄斧了。)
即可得到汉字点阵,显示自然不是难事.
Baidu
map