硬汉嵌入式论坛

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

[emWin] 上传两个数码管字体(矢量字体)

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106906
QQ
发表于 2014-4-11 19:52:23 | 显示全部楼层 |阅读模式
10.png


Ni7seg.zip (10 KB, 下载次数: 421)
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-1-18 10:03:29 | 显示全部楼层
谢谢,我知道怎么做的了。但是现在比较麻烦,得通过串口把文件下载到我的flash中。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106906
QQ
 楼主| 发表于 2018-1-19 01:47:27 | 显示全部楼层
xyzjacky 发表于 2018-1-18 10:03
谢谢,我知道怎么做的了。但是现在比较麻烦,得通过串口把文件下载到我的flash中。

如果仅仅是显示数码管字体,使用FontCvt软件转换即可,生成C格式的,这样就比较省事了。
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-1-19 20:50:18 | 显示全部楼层
eric2013 发表于 2018-1-19 01:47
如果仅仅是显示数码管字体,使用FontCvt软件转换即可,生成C格式的,这样就比较省事了。

那请教一下,转出来的这个C格式,怎么才能用显示数值的函数,比如 GUI_DispDecAt 来显示呢?
我今天这样子显示是有问题的。
字体的C文件就不贴了。

在我的main文件中,先定义:
extern GUI_CONST_STORAGE GUI_FONT GUI_FontF16hanzi_yy;
/**下面是索引数组**/
static const char *_apStrings[] = {
"\xe6\xb9\xbf\xe6\xb8\xa9\xe5\xba\xa6\xe6\xbb\xa4\xe9\xa3\x8e\xe9\
x80\x9f"
};

然后在main函数中,如下操作:
GUI_SetFont(&GUI_FontF16_NI7seg);
GUI_UC_SetEncodeUTF8();
GUI_DispDecAt (_apStrings[0],96, 10);
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-1-19 21:52:05 | 显示全部楼层
本帖最后由 xyzjacky 于 2018-1-21 15:51 编辑
eric2013 发表于 2018-1-19 01:47
如果仅仅是显示数码管字体,使用FontCvt软件转换即可,生成C格式的,这样就比较省事了。

另外,求教版主,emwin里面,有什么方法可以实现一个窗口的背景色改变而不影响窗口中显示的内容。请注意,窗口中有我用底层驱动函数(非GUI中函数)显示的东西。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106906
QQ
 楼主| 发表于 2018-1-20 00:46:18 | 显示全部楼层
xyzjacky 发表于 2018-1-19 20:50
那请教一下,转出来的这个C格式,怎么才能用显示数值的函数,比如 GUI_DispDecAt 来显示呢?
我今天这样 ...

虽然FontCvt转换的是unicode编码,但是因为这个里面仅仅是ASCII字符,仅需下面两个函数就可以显示。
GUI_SetFont(&GUI_FontF16_NI7seg);
GUI_DispStringAt("1234567890", 0, 0)
还是搞不定的话,把你转换好的C文件上传上来,我给你做个简单的例子,在模拟器上。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106906
QQ
 楼主| 发表于 2018-1-20 00:47:44 | 显示全部楼层
xyzjacky 发表于 2018-1-19 21:52
另外,求教版主,emwin里面,有什么方法可以实现一个窗口的背景色改变而不影响窗口中显示的内容。请注意 ...

直接在窗口的WM_PAINT消息里面做你的背景和你所说的底层驱动函数即可。这种情况你更新背景不影响的。
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-1-21 15:59:29 | 显示全部楼层
本帖最后由 xyzjacky 于 2018-1-21 16:00 编辑
eric2013 发表于 2018-1-20 00:47
直接在窗口的WM_PAINT消息里面做你的背景和你所说的底层驱动函数即可。这种情况你更新背景不影响的。

不好意思,上面的,说窗口改变背景色的回复写错了,窗口中没有用GUI函数显示,而是用LCD_dis_Xnum()这种我自己编写的显示十进制数值的函数,显示的东西。(因为对GUI还不熟悉,所以搞成这样了)
我今天想了想,如果不用GUI的函数,比如显示十进制数的函数GUI_DispDecAt(),而想达到我要的效果应该是不可能的吧。因为LCD_dis_Xnum函数,GUI是控制不了的,是吧?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106906
QQ
 楼主| 发表于 2018-1-22 09:09:09 | 显示全部楼层
xyzjacky 发表于 2018-1-21 15:59
不好意思,上面的,说窗口改变背景色的回复写错了,窗口中没有用GUI函数显示,而是用LCD_dis_Xnum()这种 ...

不推荐这种方式,因为emWin无法管理你的程序了,需要你自己维护重绘。建议用emWin自己的API,比较好上手。看下我们的新版emWin教程,上手很快的,有什么问题随时找我:http://www.armbbs.cn/forum.ph ... 9834&extra=page%3D1
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-1-23 11:01:06 | 显示全部楼层
eric2013 发表于 2018-1-22 09:09
不推荐这种方式,因为emWin无法管理你的程序了,需要你自己维护重绘。建议用emWin自己的API,比较好上手 ...

明白了,谢谢您哈
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-1-24 09:00:46 | 显示全部楼层
eric2013 发表于 2018-1-22 09:09
不推荐这种方式,因为emWin无法管理你的程序了,需要你自己维护重绘。建议用emWin自己的API,比较好上手 ...

另外,求教一下版主,如果我不用字库,想要显示C文件中的汉字、或者数码管式的字体,怎么做呢?主要是在我想要显示的位置,显示任意个数的,任意字号的字体。比如用显示浮点数的GUI_DispFloat函数,显示14号的数码管字体的数字。
现在我自己琢磨的这个操作过程:首先是在windows中安装Ni7seg字体。再用emwin自带的FontCvt软件把字模取出来(比如我只显示数字,就取0~9)。
然后又怎么做呢,我就不知道了。还请版主指教、指教。谢谢哦。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106906
QQ
 楼主| 发表于 2018-1-25 01:07:12 | 显示全部楼层
xyzjacky 发表于 2018-1-24 09:00
另外,求教一下版主,如果我不用字库,想要显示C文件中的汉字、或者数码管式的字体,怎么做呢?主要是在 ...

对,思路就是这样的,取出来后直接使用即可,详情可以学习新版emWin教程的这个章节,讲解比较详细,有什么问题,随时找我:
http://www.armbbs.cn/forum.ph ... 9834&extra=page%3D1
QQ截图20180125010705.jpg
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-1-26 15:14:12 | 显示全部楼层
本人已经按照版主的方法实现了显示数码管字体,如有需要,请向我咨询。
相关知识点,我已经整理,请看这个网页:

download.csdn.net
   
/download/xyzjacky/10225630
回复

使用道具 举报

5

主题

109

回帖

124

积分

初级会员

积分
124
发表于 2018-1-28 16:52:59 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-2-1 15:30:18 | 显示全部楼层
eric2013 发表于 2018-1-25 01:07
对,思路就是这样的,取出来后直接使用即可,详情可以学习新版emWin教程的这个章节,讲解比较详细,有什 ...

版主,在你们安福莱的教程里,要显示的汉字是采用的对话框来实现的,那不用对话框方式,只在某一处显示一个单独的汉字,该怎么做呢?我这样的需求是有原因的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106906
QQ
 楼主| 发表于 2018-2-2 01:55:50 | 显示全部楼层
xyzjacky 发表于 2018-2-1 15:30
版主,在你们安福莱的教程里,要显示的汉字是采用的对话框来实现的,那不用对话框方式,只在某一处显示一 ...

直接调用GUI_DispStringAt之类的文本显示函数即可,就跟你使用裸机工程一样(未用emWin)

不知道你问的是不是这个意思。
回复

使用道具 举报

5

主题

519

回帖

534

积分

金牌会员

积分
534
发表于 2018-2-2 04:53:57 | 显示全部楼层
需要取模
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-2-2 14:22:46 | 显示全部楼层
eric2013 发表于 2018-2-2 01:55
直接调用GUI_DispStringAt之类的文本显示函数即可,就跟你使用裸机工程一样(未用emWin)

不知道你问 ...

是的,我现在大概琢磨出来了。已经显示成功。我在规整、规整,总结总结技巧。
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-2-2 14:23:09 | 显示全部楼层

是的,这个我了解。谢谢哦。
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-2-2 18:37:21 | 显示全部楼层
eric2013 发表于 2018-2-2 01:55
直接调用GUI_DispStringAt之类的文本显示函数即可,就跟你使用裸机工程一样(未用emWin)

不知道你问 ...

另外请教版主一个问题,关于显示数值显示居中时,如何消除上一次的数据。例如我用
GUI_SetTextAlign(GUI_TA_HCENTER | GUI_TA_VCENTER);
GUI_DispDecAt(7438,266,196,4);显示了一个千位数据7438。

这会儿新的数据来到,是617,就用以下方式来使617居中显示。
GUI_SetTextAlign(GUI_TA_HCENTER | GUI_TA_VCENTER);
GUI_DispDecAt(617,266,196,3);

可是问题来了,7438是一个4位数,617是一个3位数。7438的7就会残留一半在最前面,造成显示错误。
我在教程上还没有找到如何解决这样的问题,请问版主,教程里哪里有讲解呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106906
QQ
 楼主| 发表于 2018-2-3 02:05:52 | 显示全部楼层
xyzjacky 发表于 2018-2-2 18:37
另外请教版主一个问题,关于显示数值显示居中时,如何消除上一次的数据。例如我用
GUI_SetTextAlign(GUI ...

简单点,直接调用GUI_FillRect清除这块区域就好了。
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-2-3 10:23:11 | 显示全部楼层
eric2013 发表于 2018-2-3 02:05
简单点,直接调用GUI_FillRect清除这块区域就好了。

现在我就是用GUI_FillRect这种简单粗暴的方式在消隐高位的数值。但这方式确实LOW了点,效率上不好。
回复

使用道具 举报

2

主题

569

回帖

575

积分

金牌会员

积分
575
发表于 2018-2-3 21:20:43 | 显示全部楼层
液晶数码管字体汇总_共22款.rar (318.08 KB, 下载次数: 204)
来自于CSDN下载。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106906
QQ
 楼主| 发表于 2018-2-5 01:27:17 | 显示全部楼层
xyzjacky 发表于 2018-2-3 10:23
现在我就是用GUI_FillRect这种简单粗暴的方式在消隐高位的数值。但这方式确实LOW了点,效率上不好。

不low,F1处理这个绰绰有余。
回复

使用道具 举报

2

主题

569

回帖

575

积分

金牌会员

积分
575
发表于 2018-2-5 07:45:48 | 显示全部楼层
本帖最后由 leiyitan 于 2018-2-5 07:57 编辑

我按照教程做了一遍,字体生成点阵C文件unicode格式,调用该字体的C代码文件转成utf-8,emwin也要开启utf-8,我一个页面除了显示数码管字体,还有不少中文字,开启utf-8,数码管字体显示正常了,其他的字体全部乱码了。不设置utf-8,数码管乱码,其他存在SPIFLADH的汉字恢复正常。现在不知怎么做,同时显示多个字体。C代码文件可以拆开单独做多个也没有关系。
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-2-6 18:34:28 | 显示全部楼层
leiyitan 发表于 2018-2-5 07:45
我按照教程做了一遍,字体生成点阵C文件unicode格式,调用该字体的C代码文件转成utf-8,emwin也要开启utf-8, ...

我的一个界面上有中文,有数码管字体,有英文,但是没有出现你说的情况。你在初始化时,把emwin的一些功能的使能函数都关闭。然后一个个打开你需要的。比如我初始化的是:
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);        //要先开启CRC时钟       
       
        GUI_Init();
        GUI_SetBkColor(GUI_WHITE);
        GUI_Clear();
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-2-6 18:35:31 | 显示全部楼层
leiyitan 发表于 2018-2-5 07:45
我按照教程做了一遍,字体生成点阵C文件unicode格式,调用该字体的C代码文件转成utf-8,emwin也要开启utf-8, ...

然后,你的NI7SEG26.c文件,要另存为ANSI编码格式的。我感觉你的是这里出错了。
回复

使用道具 举报

2

主题

569

回帖

575

积分

金牌会员

积分
575
发表于 2018-2-6 21:16:55 | 显示全部楼层
数码管字体C文件格式ANSI没错的,调用的C程序文件utf格式,反复试了多次,还是这样的
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-2-8 17:40:03 | 显示全部楼层
leiyitan 发表于 2018-2-6 21:16
数码管字体C文件格式ANSI没错的,调用的C程序文件utf格式,反复试了多次,还是这样的

那你可能要花点儿时间了,重建一个工程,别的东西都不添加,只是做显示。然后一个一个功能去实现(一个一个往屏幕里添加)。先显示字符和数字,接着是图片、汉字,最后显示数码管字体。你看看谁添加进去了就出问题。还有注意你移植部份的,你自己代码的数据类型的定义,等等这样的问题。之前我的就出现过,因为数据类型定义短了,显示小的图片没有问题,显示大的图片就出问题。以上的问题,就只能一个个排查了,要耐心点,花时间加班是免不了的。
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-2-8 17:57:58 | 显示全部楼层
eric2013 发表于 2018-2-5 01:27
不low,F1处理这个绰绰有余。

另外求教一下版主,我现在的代码中用到的字体和图片的字模和图模数据,我得存到片外flash去,但是因为数据量不大,而且系统在运行时只是读取,所以我不需要在片外flash上弄文件系统。

但我现在被卡在这里了,比如,我有一张BMP图片,图模数据用BmpCvtST.exe取好了,形成了一个C文件,这个C文件里面有这样几个部份:
a.  一个声明  extern GUI_CONST_STORAGE GUI_BITMAP bmArticle;
b. 一个数组  static GUI_CONST_STORAGE unsigned long _acArticle[] = {//数据略};
c. 一个跟图片相关的定义
GUI_CONST_STORAGE GUI_BITMAP bmArticle = {
  24, // xSize
  24, // ySize
  96, // BytesPerLine
  32, // BitsPerPixel
  (unsigned char *)_acArticle,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_BMP8888
};

我现在是仅把数组_acArticle[]存到片外 flash 中去,那么b项的_acArticle应该申明成什么呢?
我能想到的是把它定义成一个static GUI_CONST_STORAGE unsigned long _acArticle[100];这样的数组(假设原本的图模数据的大小就是100个),在每一个页面调用时,先从片外flash把数据读到_acArticle数组中,然后再使用这个数组。
反正编译器现在还没有报错。但是现在还只是设想的,代码还没有烧到硬件上去测试。
请问还有没有别的什么办法呢?
回复

使用道具 举报

2

主题

569

回帖

575

积分

金牌会员

积分
575
发表于 2018-2-9 06:52:38 | 显示全部楼层
xyzjacky 发表于 2018-2-8 17:40
那你可能要花点儿时间了,重建一个工程,别的东西都不添加,只是做显示。然后一个一个功能去实现(一个一 ...

谢谢您的解答,我测试使用版主大神的例程,是没问题的。肯定是自己程序的问题了。准备用安富莱的例程作为模板一个个往上移,相当于也是一个调试的过程了。
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2018-4-14 16:53:41 | 显示全部楼层
关注 刚好要搞这个。看我的帖子
http://www.armbbs.cn/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2018-4-14 16:57:57 | 显示全部楼层
xyzjacky 发表于 2018-1-26 15:14
本人已经按照版主的方法实现了显示数码管字体,如有需要,请向我咨询。
相关知识点,我已经整理,请看这个 ...

哥们。你这个东西能不能发坛子一段时间让我下载一下啊。。。CSDN上面积分只有2了。。。都被一群屌丝借去账号给我干光了。。。
回复

使用道具 举报

5

主题

47

回帖

62

积分

初级会员

积分
62
发表于 2018-4-21 23:42:10 | 显示全部楼层
roguebear 发表于 2018-4-14 16:57
哥们。你这个东西能不能发坛子一段时间让我下载一下啊。。。CSDN上面积分只有2了。。。都被一群屌丝借去 ...

请你留一个你的邮箱,我把资料发给你。
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2018-4-22 17:49:05 | 显示全部楼层
xyzjacky 发表于 2018-4-21 23:42
请你留一个你的邮箱,我把资料发给你。

xiongxiaowei@126.com    多谢了。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 14:06 , Processed in 0.590311 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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