UCGUI汉字显示(通过外部FLASH W25QXX)

2019-07-20 15:12发布

最近在做一个实验,UCGUI通过外部FLASH来实现汉字显示。通过参考教程,修改了几个文件后,发现程序中显示的文字方位不对,变成了镜像的并且还旋转90度显示了。以为是字库问题,但是调用战舰里面的汉字显示函数后,可以正常显示。所以不知道怎么回事,下面把文件上传,请各路高手帮忙指点下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
王朝代号
1楼-- · 2019-07-20 20:45
自己琢磨问题解决了,原来真的是字库的问题。当使用了UCGUI或者EMWIN进行字体创建的时候由于字体是按照从左到右的顺序创建的点阵字库。但是战舰标准库例程里面的例程汉字库是按照从上到下,从左到右的顺序创建的,所以如果我们使用EMWIN的时候字库请使用正点原子EMWIN扩展例程中给出的文件                                                                                                 ——————————送给遇到同样问题的朋友
2449164582
2楼-- · 2019-07-21 02:08
 精彩回答 2  元偷偷看……
王朝代号
3楼-- · 2019-07-21 06:42
2449164582 发表于 2017-4-19 08:58
解码和字库生成的扫描方式不同,改改程序就行了

我对比了一下fontupd和GUICharPEx中的字库解码函数,这里好像只是得出偏移地址不会影响显示的位置,而且使用Show_Str这个函数显示中文的话是可以正常显示的,说明字库没有问题吧。会不会是下面这段代码的原因呢?[mw_shl_code=c,true]/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
* GUIPROP_DispChar
*
* Purpose:
*   This is the routine that displays a character. It is used by all
*   other routines which display characters as a subroutine.
*/
void GUIPROP_X_DispChar(U16P c)
{       
        int BytesPerLine;
    GUI_DRAWMODE DrawMode = GUI_Context.TextMode;
    const GUI_FONT_PROP GUI_UNI_PTR *pProp = GUI_Context.pAFont->p.pProp;
    //ËÑË÷¶¨Î»×Ö¿aêy¾YDÅÏ¢
    for (; pProp; pProp = pProp->pNext)                                         
    {
        if ((c >= pProp->First) && (c <= pProp->Last)) break;
    }
    if (pProp)
    {
        GUI_DRAWMODE OldDrawMode;
        const GUI_CHARINFO GUI_UNI_PTR * pCharInfo = pProp->paCharInfo;
        GUI_GetDataFromMemory(pProp, c);//è&#161;3&#246;×&#214;&#196;£êy&#190;Y
        BytesPerLine = pCharInfo->BytesPerLine;               
        OldDrawMode  = LCD_SetDrawMode(DrawMode);
        LCD_DrawBitmap(GUI_Context.DispPosX, GUI_Context.DispPosY,
                       pCharInfo->XSize, GUI_Context.pAFont->YSize,
                       GUI_Context.pAFont->XMag, GUI_Context.pAFont->YMag,
                       1,     /* Bits per Pixel */
                       BytesPerLine,
                       &GUI_FontDataBuf[0],
                       &LCD_BKCOLORINDEX
                       );
        /* Fill empty pixel lines */
        if (GUI_Context.pAFont->YDist > GUI_Context.pAFont->YSize)
        {
            int YMag = GUI_Context.pAFont->YMag;
            int YDist = GUI_Context.pAFont->YDist * YMag;
            int YSize = GUI_Context.pAFont->YSize * YMag;
            if (DrawMode != LCD_DRAWMODE_TRANS)
            {
                LCD_COLOR OldColor = GUI_GetColor();
                GUI_SetColor(GUI_GetBkColor());                               
                LCD_FillRect(GUI_Context.DispPosX, GUI_Context.DispPosY + YSize,
                             GUI_Context.DispPosX + pCharInfo->XSize,
                             GUI_Context.DispPosY + YDist);
                GUI_SetColor(OldColor);
            }
        }
        LCD_SetDrawMode(OldDrawMode); /* Restore draw mode */
                GUI_Context.DispPosX += pCharInfo->XDist * GUI_Context.pAFont->XMag;
    }
}[/mw_shl_code]
正点原子
4楼-- · 2019-07-21 07:41
谢谢分享

一周热门 更多>