IC百科
外部字库芯片GT32L32S0140的移植
 

外部字库芯片GT32L32S0140的移植

 
    

经过几天的努力终于移植成功了,现把遇到的问题记录下来。

一步一步来,

1、先做通硬件,和驱动,自己动手找到一块旧板子,把GT32L32焊接到板子上,连接到主板的spi2端口上。安装网上的步骤把驱动字库移植过来。先运 行一下,看会不会出汉字呢?。。。。。。自然不可能,期望值太高了。接下来开始找问题,发现字库芯片的地址计算有问题。赶紧修正,再次测试,读出了字库信 息。为了验证读出的是否正确,手工将数据翻译成二进制码,在字模上点出来,哇!居然正确,不可思议。

2、将驱动移到到ucgui上。先ucgui上先显示一下试试,不要异想天开,路需要自己走出来,山需要自己劈开。下面开始查找问题,经过检查,发现字显 示的位置不对,x=-139了,如果改x=10,汉字就显示出来了,说明坐标不对。坐标又是从哪里来呢?经过仔细检查,找到了函数

最关键语句 GUICharP.c 中
int GUIPROP_GetCharDistX(U16P c)
{
const GUI_FONT_PROP GUI_UNI_PTR * pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c);
return (pProp) ? (pProp->paCharInfo + (c-pProp->First))->XSize * GUI_Context.pAFont->XMag : 0;
}

有这个(c-pProp->First)。

所以需要把移植的字库

GUI_FLASH const GUI_CHARINFO GUI_FontHZ16_CharInfo[] = { }数组里复制93个。

 

再次运行,美丽的汉字显示出来了! 大功告成,哈哈哈,大笑一下。

外部字库移植成功后,发现一个缺点,在使用外部字库里的 ASC字符的时候,出现一个上一个下,歪歪扭扭。后分析可能是需要在字体库里定义GUI_CHARINFO的宽度吧,也可能不是。

 

决定采用系统里的字库,

GUI_FLASH const GUI_FONT_PROP GUI_FontHZ16_Prop0020= {
0x0020,
0x007f,
&GUI_CharInfo_Font16ASCII[0], // 对于ASC码字符,采用系统内的16号字。不用芯片上的。
(void *)&GUI_FontHZ16_Propa1a1
};

在第三个参数是指向系统的字库信息索引。

并且定义了粗体字。字库移植完成。

以后有空打算加上拼音输入法:初步构想是:

在软件里定义一个数组 pyArr{‘a’,字库的地址,a拼音的字数},。。。{‘ai’,字库的地址,ai拼音的字数}。。。

在字库中自定义a拼音的汉字区位码,ai的区位码......所有汉字的区位码保存在字库的一个空间中。

在软件中输入一个拼音,比如:‘bo’的时候,在数组pyArr中找到拼音的 记录,根据字库地址和拼音字数,取出这一系列的汉字区位码放到数组 GB[]中,这样得到区位码后,再通过系统显示汉字。


刘先生:13828738989 (微信同号)

邮箱:1626062770@qq.com

网址:www.ichs.cn 粤ICP备20057201号

地址:深圳市福田区华强电子世界B区4层