设为首页 加入收藏

TOP

基于stm32f4的ucGUI通过外部flash存储汉字库显示任意英文字符和汉字组合(控件可用)(一)
2017-10-11 15:18:59 】 浏览:7312
Tags:基于 stm32f4 ucGUI 通过 外部 flash 存储 字库 显示 任意 英文 字符 汉字 组合 控件 可用

  在做一个用到ucGUI的项目的时候要用到不定的汉字和英文字符,但是ucGUI本身又不支持读取芯片外部flash的字库来显示,于是查了下资料,如下:

  http://www.cnblogs.com/hiker-blogs/archive/2013/01/04/2843538.html

  站在巨人的肩膀上,我找到了将汉字库写进flash后,通过ucGUI的控件显示出来的方法,但是至此,并不能在一个字符串里添加汉字和英文,用于同时显示,因为flash里面没有英文字符的模。

  为了让一个控件同时显示汉字和英文,我们还是将目标瞄准ucGUI_Core文件夹中的GUICharP.c文件:

将函数void GUIPROP_DispChar(U16P c)修改成:

void GUIPROP_DispChar(U16P c) {
  int BytesPerLine;
  U8 BytesPerFont;  //一个字的字节数
  U32 base,oft;     //字库的起始地址和偏移量
       
  GUI_DRAWMODE DrawMode = GUI_Context.TextMode;
  const GUI_FONT_PROP GUI_UNI_PTR * pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c);
  if (pProp) {
    GUI_DRAWMODE OldDrawMode;
    const GUI_CHARINFO GUI_UNI_PTR * pCharInfo;
        //支持2种字体,flash空间有限,放不下第三种字体
    if((GUI_Context.pAFont == &GUI_FontHZ16)||(GUI_Context.pAFont == &GUI_FontHZ24)/*||(GUI_Context.pAFont == &GUI_FontHZ32)*/)
    {
        pCharInfo = pProp->paCharInfo;

        base = (U32)pProp->paCharInfo->pData;
        BytesPerFont = GUI_Context.pAFont->YSize * pProp->paCharInfo->BytesPerLine; //每个字模的数据字节数
        if (BytesPerFont > BYTES_PER_FONT)//BYTES_PER_FONT是一个汉字所占最大字节数,我这里最大显示点阵24x24的汉字,所以BYTES_PER_FONT大小是3x24
        {
            BytesPerFont = BYTES_PER_FONT;
        }
        if (c < 0x80) //英文字符显示部分
        {
            const GUI_FONT *EnglishFont;//定义一个字库指针,方便以后操作
            if(GUI_Context.pAFont == &GUI_FontHZ16)//根据所用字库来给EnglishFont赋值,因为flash里面没有英文字符模,于是用ucGUI自带的
                EnglishFont=&GUI_Font16_ASCII;
            else
                EnglishFont=&GUI_Font24_ASCII;
            //BytesPerLine = GUI_Font24_ASCII.p.pProp->paCharInfo[c-0x20].BytesPerLine*GUI_Font24_ASCII.YSize;
            //在这里,BytesPerLine就是所要显示的字符的模位数,就是GUI_CHARINFO结构体的BytesPerLine
            BytesPerLine = EnglishFont->p.pProp->paCharInfo[c-0x20].BytesPerLine;
            OldDrawMode  = LCD_SetDrawMode(DrawMode);//写入新的模式,并保存旧的模式    
            //注:pCharInfo->  =  EnglishFont

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇ARM汇编与C混合编程 下一篇u-boot源码汇编段简要分析

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目