硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1902|回复: 7
收起左侧

[emWin] emWin怎样使用外挂字库芯片

[复制链接]

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2019-6-4 23:21:51 | 显示全部楼层 |阅读模式
在使用emWin时,因为需要做汉字输入法,领导指定用外挂的串行通信字库芯片,已区位码的形式存放了24和32点阵的GB2312汉字库。
因为读取接口和字库格式跟emWin不同,又与emWin提供的几个外部存储器存储字库的方式不同,所以有啥办法没有?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107442
QQ
发表于 2019-6-5 08:29:38 | 显示全部楼层
学习此章节就行,这个章节的例子就是从字库芯片里面读取出来的数据存储到SPI Flash里面的,所以省去了使用专用字库芯片,但内容是一样的http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834&extra=page%3D1

QQ截图20190605082916.jpg




回复

使用道具 举报

25

主题

287

回帖

367

积分

高级会员

积分
367
发表于 2019-6-5 09:07:48 | 显示全部楼层
领导管的事真多
回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2019-6-5 09:50:01 | 显示全部楼层
你们领导主要负责啥
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

0

主题

138

回帖

138

积分

初级会员

积分
138
QQ
发表于 2019-6-5 22:16:37 | 显示全部楼层
这样的老板太多了,自己不懂又要瞎指挥。但是真的可以让你琢磨出很多办法,外挂字库嘛,那肯定可以读取出来再转换一下emwin就能用了
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
 楼主| 发表于 2019-6-6 18:22:22 | 显示全部楼层
这里有个关键的问题,那就是emWin生成语言包的时候,所有语言都是用的UTF-8编码,这样子可以充分利用emWin自己的字符串功能。
但到了最底层需要读取字模点阵的时候,emWin应该已经把UTF-8编码转换成了Unicode,那么接下来要怎样把Unicode对应到GB2312的区位码呢。。。

回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2019-6-6 19:02:37 | 显示全部楼层
ihavedone 发表于 2019-6-6 18:22
这里有个关键的问题,那就是emWin生成语言包的时候,所有语言都是用的UTF-8编码,这样子可以充分利用emWin ...

你都不看别人回复的吗???

二楼坛主已经回复了
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
 楼主| 发表于 2019-6-17 17:19:20 | 显示全部楼层
本帖最后由 ihavedone 于 2019-6-17 17:33 编辑
eric2013 发表于 2019-6-5 08:29
学习此章节就行,这个章节的例子就是从字库芯片里面读取出来的数据存储到SPI Flash里面的,所以省去了使用 ...

参考安富莱历程 第25章 全字库在 STemWin 上的实现(GB2312编码)  在模拟器上实现中文。
下载了 http://pan.baidu.com/s/1o8TkaHc 密码:ehvy 里面的 V6-535_STemWin实验_任意大小全字库的生成和使用方法,GB2312编码(裸机)历程


在文件 ..\V6-535_STemWin实验_任意大小全字库的生成和使用方法,GB2312编码(裸机)\emWin\HanZi\GUICharPEx.c 中,以下函数只处理了 48 点阵的情况。


/*
*********************************************************************************************************
*        函 数 名: GUI_GetDataFromMemory
*        功能说明: 读取点阵数据
*        形    参: pProp  GUI_FONT_PROP类型结构
*             c      字符
*        返 回 值: 无
*********************************************************************************************************
*/
static void GUI_GetDataFromMemory(const GUI_FONT_PROP GUI_UNI_PTR *pProp, U16P c)
{
    U16 BytesPerFont;
    U32 oft = 0, BaseAdd;
        U8 code1,code2;
        
        char *font = (char *)pProp->paCharInfo->pData;

        /* 每个字模的数据字节数 */
    BytesPerFont = GUI_pContext->pAFont->YSize * pProp->paCharInfo->BytesPerLine;
    if (BytesPerFont > BYTES_PER_FONT)
        {
                BytesPerFont = BYTES_PER_FONT;
        }
        
        /* 英文字符地址偏移计算 */
    if (c < 0x80)                                                               
    {
                if(strncmp("A48", font, 3) == 0)     /* 24*48 ASCII字符 */
                {
                        BaseAdd = 0x00;
                }
               
                oft = c * BytesPerFont + BaseAdd;
    }
        /* 汉字和全角字符的偏移地址计算 */
    else                                                                           
    {
                if(strncmp("H48", font, 3) == 0)      /* 48*48 字符 */
                {
                        BaseAdd = 0x00009000;
                }
               
                /* 根据汉字内码的计算公式锁定起始地址 */
                code2 = c >> 8;
                code1 = c & 0xFF;

                oft = ((code1 - 0xA1) * 94 + (code2 - 0xA1)) * BytesPerFont + BaseAdd;
        }

        /* 读取点阵数据 */
        sf_ReadBuffer(GUI_FontDataBuf, oft, BytesPerFont);
}



那么我下载的历程里面的 ..\DOC\font.bin 文件,是不是也只有48点阵?而不是文档里描述的 12,16,24,32点阵?
因为我按照 12,16,24,32点阵 来用的时候,显示是乱码。如果按照48点阵来使用,那么可以显示字符。

如果是只有48点阵,那么包含 12,16,24,32点阵 的字库在哪里能得到呢?

:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake:handshake


回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-1 05:30 , Processed in 0.269356 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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