野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10669|回复: 16

如何在emWin中显示中文

[复制链接]
发表于 2015-4-2 10:13:21 | 显示全部楼层 |阅读模式
火哥,请问加载了uCOSS-III系统和emWin软件,如何才能在emWin中显示中文呢?????
回复

使用道具 举报

发表于 2015-4-2 10:45:18 | 显示全部楼层
加中文字库,,,把字库放在SD卡中
uCOS-III + emWin +Fatfs
可参考裸机液晶显示中文例程搞
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-2 15:41:31 | 显示全部楼层
火哥,还是不是很理解,裸机时采用的是自己编写的程序,加载了emWin后,能使用emWin的程序吗???还是用回自己写的程序呢???
回复 支持 反对

使用道具 举报

发表于 2015-4-2 15:49:47 | 显示全部楼层
emWin是个GUI,主要是用来搞界面的,比如液晶屏上的按键,单选,文本,对话框等等,当然包括颜色操作什么的,这样很有规范
emWin是国外东西,没有中文的(还有中文字库一般都比较大),,,所以要显示中文还是需要自己移植字库的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-2 15:59:15 | 显示全部楼层
很感谢火哥耐心指导,我现在已经创建好字库了,同时移植好SD卡驱动及Fatfs文件了,问题是现在我不知道下一步怎么做,如何把SD卡中的数据显示出来。火哥,能不能提供的方向或者提供点例程啊???非常感谢!!!
回复 支持 反对

使用道具 举报

发表于 2015-4-2 16:08:37 | 显示全部楼层
GUIDEMO_Fatfs.rar (1.62 KB, 下载次数: 42)
只有个文本文件,参考而已,还有根据实际更改,希望可以帮到你吧
回复 支持 反对

使用道具 举报

发表于 2015-4-2 17:24:17 | 显示全部楼层
QQ截图20150402172300.png
必须看,不然很大可能显示乱码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-2 21:42:36 | 显示全部楼层
火哥,不好意思,我还是显示不了,我已经知道大致执行的过程了,但是就是不知道为什么显示不了,在此麻烦您帮我看下我的代码,,看下哪里出错了,拜托了!拜托了!!!谢谢!谢谢!

typedef struct
{
        FIL hFontFile;
        GUI_FONT     XFont;
        GUI_XBF_DATA XBF_Data;        

}SD_FONT;

SD_FONT SDFont;

FATFS fsys;

const char textFileBuffer[] = "地爆天星";

void Task_GUI(void *p_arg)
{
        OS_ERR err;

        (void)p_arg;
        f_mount(0,&fsys);

        CreateFont(&SDFont);


        GUI_SetFont(&SDFont.XFont);
        GUI_DispStringAt(textFileBuffer,50,20);


        f_close(&SDFont.hFontFile);       
        f_mount(0,NULL);
       
               
        while(1)
        {
                ......
        }
}



static void CreateFont(SD_FONT *ExFont)
{
        FRESULT res;
          res = f_open(&ExFont->hFontFile,  "0:/WF_OS/Font/weiruanex2.xbf",  FA_READ|FA_OPEN_EXISTING);
        if (res == FR_OK) {
               
         /* 成功打开字库文件 */
        GUI_XBF_CreateFont(&ExFont->XFont,          // 指向创建得的字体数据结构存储位置
                           &ExFont->XBF_Data,       // 指向XBF_DATA数据结构
                           GUI_XBF_TYPE_PROP_EXT ,  // 要创建的字体类型
                           _cbGetData,                    // 读取字库文件的回调函数
                           &ExFont->hFontFile);     // 指向字库文件的文件索



        GUI_UC_SetEncodeUTF8();       
        GUI_SetFont(&ExFont->XFont);
        }
}


static int _cbGetData(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer)
{
  FIL hFile;
  UINT  NumBytesRead;
        FRESULT fres;

  hFile = *(FIL *)pVoid;

  fres = f_lseek(&hFile, Off) ;
  if (fres != FR_OK) {
    return 1; // Error
  }

  fres = f_read(&hFile, pBuffer, NumBytes, &NumBytesRead);

  if (fres != FR_OK)
  {
    return 1; // Error
  }
       
  if (NumBytesRead != NumBytes)
  {
    return 1; // Error
  }
  return 0;   // Ok
}
回复 支持 反对

使用道具 举报

发表于 2015-4-2 23:58:24 | 显示全部楼层
先用keil跟踪具体哪步出错了??比如是打不开文件,还算字库创建不成功,具体情况再说
楼主把要显示内容改成有英文的,比如:
const char textFileBuffer[] = "野火STM32-V2开发板";
这样如果英文可以显示就可以缩小很大错误范围,至少emWin显示是可以用的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-3 09:37:23 | 显示全部楼层
火哥,请问下这个_cbGetData()的函数哪里被调用到呢???现在显示字母及数字都可以,就是显示不了中文,同时请问那个0.ISO_MINI_gui工程中的xbf字符是不是正确的????
回复 支持 反对

使用道具 举报

发表于 2015-4-3 10:12:27 | 显示全部楼层
static void CreateFont(SD_FONT *ExFont)
{
        FRESULT res;
          res = f_open(&ExFont->hFontFile,  "0:/WF_OS/Font/weiruanex2.xbf",  FA_READ|FA_OPEN_EXISTING);
        if (res == FR_OK) {
               
         /* 成功打开字库文件 */
        GUI_XBF_CreateFont(&ExFont->XFont,          // 指向创建得的字体数据结构存储位置
                           &ExFont->XBF_Data,       // 指向XBF_DATA数据结构
                           GUI_XBF_TYPE_PROP_EXT ,  // 要创建的字体类型
                           _cbGetData,                    // 读取字库文件的回调函数
                           &ExFont->hFontFile);     // 指向字库文件的文件索



        GUI_UC_SetEncodeUTF8();        
        GUI_SetFont(&ExFont->XFont);
        }
}
回复 支持 反对

使用道具 举报

发表于 2015-4-3 10:20:11 | 显示全部楼层
youyuan16.rar (463.09 KB, 下载次数: 31)
我之前的程序是用“幼圆16号”(附件)
如果中文那里完全没显示是字体创建不成功。。如果是乱码的话,就按我在上面7楼那个图操作应该就可以了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-3 11:53:25 | 显示全部楼层
谢谢火哥的耐心、仔细讲解。问题已经解决了,其实说来有点尴尬,函数的调用过程及函数的编写都是对的,但是问题在于:要把包含这些函数的文件改为UTF-8格式,真是苦笑啊!!!谢谢了,真的,谢谢!!
回复 支持 反对

使用道具 举报

发表于 2015-4-4 22:26:03 | 显示全部楼层
亽亼 发表于 2015-4-3 10:20
我之前的程序是用“幼圆16号”(附件)
如果中文那里完全没显示是字体创建不成功。。如果是乱码的话,就 ...

手把手教一下啊,太不详细了!
回复 支持 反对

使用道具 举报

发表于 2015-4-4 22:31:24 | 显示全部楼层
可能搞到emWin这里应该算stm32入门了,至少一般程序都可以看懂了
还要手把手教,以后怎么学啊,这个阶段都要靠自己了
把移植过程问题提出来大家一起讨论才是个方法
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-9 19:38:56 | 显示全部楼层
老鹰123 发表于 2015-4-4 22:26
手把手教一下啊,太不详细了!

你可以参考野火光盘中的“0.ISO_MINI_gui”例程及上面两个文件例程,弄懂其制作过程,同时要注意改为“UTF-8”格式就不难了。
回复 支持 反对

使用道具 举报

发表于 2015-4-9 20:07:02 | 显示全部楼层
腾鹰L 发表于 2015-4-9 19:38
你可以参考野火光盘中的“0.ISO_MINI_gui”例程及上面两个文件例程,弄懂其制作过程,同时要注意改为“UT ...

好的,谢谢!代码分享一下怎么样?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-28 00:38 , Processed in 0.034588 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表