tiky 发表于 2020-6-12 02:23:26

TK499用USB方式下载emWin任意外置XBF字库,从此不用再为显示汉字而发愁

本帖最后由 tiky 于 2020-6-12 02:27 编辑

TK499的QSPI例程及emWin例程已经出了很久,但是还有不少网友没利用起来。现在出一个单独的例程给大家参考一下,配置就一两步就行了。附件压缩包给出了7种字体,与下载程序一样,同样的下载程序的方式弹出U盘后,7种字库可以一起拖到U盘中就下载进去了(注意:字库相对较大,几MB级别,要等U盘退出后才算完成,一般是进度条走尽的两倍时间)。
关键代码如下:
/*================================ ST16宋体16*16 ================================*/
GUI_FONT stFont;//字体名称
static GUI_XBF_DATA xbfData;
static int stFont_addr;//字体地址,用函数自动获取
static int _cbGetData(U32 off,U16 NumBytes, void *pVoid, void *pBuffer)
{
        QSPIReadGroup(stFont_addr + off, pBuffer, NumBytes);
        return 0;
}

void CreateXBF_Font(void)
{
        GUI_XBF_CreateFont(&stFont,&xbfData,GUI_XBF_TYPE_PROP,_cbGetData,0);
}

GUI_FONT * SetFont_Xbf(void)
{
return ((GUI_FONT *)GUI_SetFont(&stFont));
}

然后用这个函数初始化一下字库,主要作用是获取字库的地址交给emWin,有多少个字库就要给多少个地址,要不emWin找不着这个字库的地址用不了。
void init_all_Font_addr(void)
{
        stFont_addr=get_file_address_NOR_FLASH("ST16.xbf");
        XKF24_Font_addr=get_file_address_NOR_FLASH("JDXKF24.xbf");
        xkj32_Font_addr=get_file_address_NOR_FLASH("JXK32.xbf");

        SMG24_Font_addr=get_file_address_NOR_FLASH("SMG24.XBF");
        SMG36_Font_addr=get_file_address_NOR_FLASH("SMG36.XBF");
        SMG48_Font_addr=get_file_address_NOR_FLASH("SMG48.XBF");
        SMG64_Font_addr=get_file_address_NOR_FLASH("SMG64.XBF");       
}

然后就可以随便用了,应用样例:
//========== 存储在外部QSPI FLASH里的全字库 字体 ==========//
void XBF_Disp(void)//宋体16*16
{
       
        CreateXBF_Font();         //create extern flash font lib
        GUI_UC_SetEncodeUTF8();
        SetFont_Xbf();
        GUI_SetColor(GUI_RED);
        GUI_DispStringHCenterAt("欢迎使用好钜润科技产品",240,200);
        GUI_DispStringHCenterAt("当前全字库存储在外部QSPI FLASH",240,220);
GUI_DispStringHCenterAt("emWin外部XBF字库演示",240,240);
}



基于评估板与5寸屏的演示效果,其它屏基本一样,因为只涉及QSPI底层,所以基于TK499评估板的其它屏也同样适用
参考程序:

cloudboy 发表于 2020-6-12 09:40:03

楼主,你好,芯片的低功耗数据有么,想搞一个低功耗的应用

tiky 发表于 2020-6-12 11:13:49

我们的芯片主战液晶屏,低功耗都不太好,屏背心一亮,都是mA级别的了,芯片上功耗省点没起到太大作用

bias 发表于 2020-6-12 14:55:48

那个仿数码管的数字字体,能分享个.c数组文件吗

另外这个仿数码管字体,能不能显示英文ASCII码

eddia2012 发表于 2020-6-12 16:25:19

数码管的数字字体很漂亮,谢谢!

amigenius 发表于 2020-6-12 16:28:56

eddia2012 发表于 2020-6-12 16:25
数码管的数字字体很漂亮,谢谢!

这个数码管字体真心不漂亮,您要漂亮的,我发给您

tiky 发表于 2020-6-12 18:35:34

bias 发表于 2020-6-12 14:55
那个仿数码管的数字字体,能分享个.c数组文件吗

另外这个仿数码管字体,能不能显示英文ASCII码 ...

这个字库带有ASCII,如下图。这个是直接生成XBF文件,emWin的字库格式,不是数组形式的,字库也在附件中了。

tiky 发表于 2020-6-12 19:14:48

bias 发表于 2020-6-12 14:55
那个仿数码管的数字字体,能分享个.c数组文件吗

另外这个仿数码管字体,能不能显示英文ASCII码 ...

上面那个字库的源Windowns下TTF文件找不到了,我发现Windowns自带有一个DigifaceWide的数码管字体,好像漂亮一点,发上来,你要多大多小,自己生成就可以了。
源TTF字库文件:
字库在电脑的效果


我生成的效果如下:

shiva_shiva 发表于 2020-6-12 20:24:05

5寸屏照出10寸的效果

bias 发表于 2020-6-12 20:38:00

tiky 发表于 2020-6-12 19:14
上面那个字库的源Windowns下TTF文件找不到了,我发现Windowns自带有一个DigifaceWide的数码管字体,好像 ...

谢谢,有这个字体就好办了

lordor 发表于 2020-6-13 23:05:59

本帖最后由 lordor 于 2020-6-14 10:39 编辑

楼主显示的图片非常棒。
但我搞了一个晚上,没有字体显示 ,麻烦看一下什么问题。源文件分成2个文件

boot已经搞最新的下载了,字体也是类似下载程序那样下载了。

论坛上传文件,好像每天大小有限制,放到服务器了


文件下载地址
http://47.99.71.138/%E6%B2%A1%E6%9C%89%E6%96%87%E5%AD%97--4.3%E4%B8%80%E4%BD%93.zip




lordor 发表于 2020-6-13 23:13:55

本帖最后由 lordor 于 2020-6-14 10:41 编辑

源文件放上面了

另外楼主能不能介绍一下,你的源文件,怎么修改适配4.1寸,一体的屏,电阻屏的。

刚开始玩屏,有些基本的不是很明白

tiky 发表于 2020-6-15 12:17:28

lordor 发表于 2020-6-13 23:13
源文件放上面了

另外楼主能不能介绍一下,你的源文件,怎么修改适配4.1寸,一体的屏,电阻屏的。


你这个是4.3寸Smart Board,我们工程师做了一个例程给你,你看一下有什么不同,可以显示7种字体的,这个Smart Board的FLASH空间有16MB,放个十几种字库都可以了
程序:

tiky 发表于 2020-6-15 12:29:57

你的程序也是可以的,只不过忘记了调用init_all_Font_addr();这个函数了,这个函数的作用是把所有字库的起始地址取出来,存在全局变量中,emWin要调用随时可以取用

lordor 发表于 2020-6-15 16:55:51

tiky 发表于 2020-6-15 12:29
你的程序也是可以的,只不过忘记了调用init_all_Font_addr();这个函数了,这个函数的作用是把所有字库的起 ...

还是没字体,你看一下,是不是因为这个版本的bootload要升级才行?

拷入字库,不会自动退出,一直显示 这个


lordor 发表于 2020-6-15 21:49:02

下午跟客服要BOOTLOAD,升级后正常了

tiky 发表于 2020-6-15 23:41:40

Bootloader是要2020年6月份后的才有这个高级的功能,你上面回贴说升级到最新的了,我以为你的就是最新的;最新的Bootloader在论坛里的TK499评估板资料专贴里也有。

GunGun 发表于 2020-6-19 07:18:47

这个看起来似乎非常的不错。

eyancool 发表于 2021-4-7 11:17:25

已下载所有字库至外部FLASH,但是在窗口中无法显示汉字,请问如何实现?
static void _cbDialog(WM_MESSAGE * pMsg) {
WM_HWIN hItem;
// USER START (Optionally insert additional variables)
// USER END

switch (pMsg->MsgId) {
          

case WM_INIT_DIALOG:
    //
    // Initialization of 'RunWindow'
    //
    hItem = pMsg->hWin;
    WINDOW_SetBkColor(hItem, GUI_MAKE_COLOR(0x009FA7AE));
    //
    // Initialization of 'Text'
    //


    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
    TEXT_SetText(hItem, "RUN");
    TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    TEXT_SetFont(hItem, GUI_FONT_20_1);

    // USER START (Optionally insert additional code for further widget initialization)
       
    // USER END
    break;
// USER START (Optionally insert additional message handling)
          case WM_PAINT:
        CreateXBF_FontSMG24();         //create extern flash font lib
        GUI_UC_SetEncodeUTF8();
        GUI_SetFont(&smgFont24);
        GUI_SetColor(GUI_RED);
        GUI_DispStringHCenterAt("012345678",240,0);
          
          CreateXBF_FontXKJ32();         //create extern flash font lib
        GUI_UC_SetEncodeUTF8();
        GUI_SetFont(&xkj32Font);
        GUI_SetColor(GUI_GREEN);

GUI_DispStringHCenterAt("emWin外部XBF字库演示",240,120);
        GUI_DispStringHCenterAt("荡胸生层云,决眦入归鸟",300,160);
        GUI_DispStringHCenterAt("会当凌绝顶,一览众山小",300,200);
    break;
// USER END
default:
    WM_DefaultProc(pMsg);
    break;
}
}

tiky 发表于 2021-4-8 00:36:23

在例程的main函数里有这个注释,你看一下是否符合这个要求:

//============= emWin的xbf字体支持汉字,要求用UTF8编码格式,所以xbf_font.c这个文件是UTF8编码格式,printf在UTF8文件下是打印不了中文的=============//

v_8787 发表于 2021-4-10 07:30:33

tiky 发表于 2021-4-8 00:36
在例程的main函数里有这个注释,你看一下是否符合这个要求:

//============= emWin的xbf字体支持汉字,要 ...

可以搞一个通用10.1寸屏,分辨率1024*600的例程吗?
页: [1]
查看完整版本: TK499用USB方式下载emWin任意外置XBF字库,从此不用再为显示汉字而发愁