原创 为系统加一个中文字库

2008-7-25 13:12 5616 6 6 分类: MCU/ 嵌入式
为自己的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 熟悉的兄弟,我这就是斑门弄斧了。)
即可得到汉字点阵,显示自然不是难事.






文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条