uC/GUI NIOS II移植及应用笔记
2013-03-31
william7447
标签:

uC/GUI NIOS II移植之Text显示

今天研究了uC/GUI的文字显示系统。

这个系统的功能相当强大,提供了一下几个函数。

GUI_DispChar() 显示一个字符

GUI_DispCharAt() 在某个位置显示一个字符

GUI_DispChars() 显示n个设定的字符

GUI_DispString() 显示一个字符串

GUI_DispStringAt() 在某个位置显示一个字符串

还有好大一堆函数,不过这几个是最基本的。

先看一段有关这些代码的事例程序:

void MainTask(void) {

unsigned int i;

GUI_Init();

初始化,设置的默认字体是6*8的一种字体,具体叫什么忘了

GUI_SetColor(GUI_YELLOW);设置显示颜色为YELLOW,这里指的是字符的颜色

GUI_DispChars('*', 108);从当前坐标起显示108个*,就是截图里面的最上面的那排*

for(i = 0; i < 480; i+=8){

GUI_DispCharAt('*', 1, i);

}在第一列显示一列*

GUI_DispChars('*', 108);在最下面一行显示一排*

for(i = 0; i <= 480; i+=8){

GUI_DispCharAt('*', 634, i);

}在最右边的一列显示一列*

GUI_SetColor(GUI_GREEN);设置显示的颜色为GREEN

GUI_SetFont(&GUI_Font8x10_ASCII);设置字体为GUI_Font8*10_ASCII

GUI_DispCharAt('A', 100, 100);在坐标100,100处显示一个A

GUI_DispString("! Hello World!");显示Hello World!大家注意这是紧跟着A显示出来的,即它是在当前光标处显示字符的

GUI_SetFont(&GUI_Font32_ASCII);设置字体

GUI_SetColor(GUI_YELLOW);设置显示颜色为YELLOW,下面代码显示的字符都是黄色的

GUI_DispChars('*', 15);显示15个*

GUI_SetBkColor(GUI_BLUE);设置背景颜色为BLUE,大家注意这个背景颜色,是衬在字下面的,而不是整个的背景

GUI_DispCharAt('B', 600, 400);

GUI_SetFont(&GUI_Font32B_ASCII);

GUI_SetColor(GUI_RED);

GUI_DispStringAt("Hello World!", 1, 200);

在1,100这个地方显示字符串,注意覆盖掉了原先显示出来的*

GUI_Delay(1000);

}

效果图

这样基本的字符显示函数就完了。大家都会使用了。

在前提到这个GUI支持UNICODE。

既然支持UNICODE那就应该能显示中文才对啊!

当然能显示中文,但关键问题是字体!

这里就讲一讲有关字体的提取。

首先要用到一个字体转换工具,因为我们得到的uC/GUI代码基本上都是D版的,里面所附的字体转换工具都是DOME版,根本转换不出来正常的字体.c文件。在这里要用到另外一个程序。

声明:该程序转载自www.ucgui.com,所有权归原作者ucgui所有,这里只是转载。仅上船该程序的可执行文件

http://www.ednchina.com/Upload/Blog/cecb4a69-b388-4a9f-916d-2b216f8edcc9.rar

声明:在这里特便感谢原作者做出的贡献!

首先运行程序,看到如图的程序界面,相当的简单。

然后点击选择字体。按扭出现新的对话框,我选择的字体如图所示。

确定后回到主界面,点击

看到这个对话框文件就转换好了!

直接加载进模拟器工程就可以享受中文字体带来喜悦了!

在这里上传两个转换好的字体宋体(5号字)和Times new roman(5号字)两个字体,供大家参考,其中Times字体去掉了除ascii码之外所有的其他字模。

http://www.ednchina.com/Upload/Blog/622a4994-39aa-4380-a8cc-4cef5e57b7df.rar

说一下这里的5号字对应的就是16*16的汉字字体。

宋体那个文件体积巨大3Mb多,如果是大字体的话就有十几MB了!

我们现在运行下面的程序,体验一下中文的喜悦!

#include "GUI.h"

extern GUI_FLASH const GUI_FONT GUI_FontHZ_FangSong_GB2312_14;

extern GUI_FLASH const GUI_FONT GUI_FontHZ_Times_New_Roman_14;

extern GUI_FLASH const GUI_FONT GUI_Font8x10_ASCII;

extern GUI_FLASH const GUI_FONT GUI_Font32_ASCII;

extern GUI_FLASH const GUI_FONT GUI_Font32B_ASCII; /*这几行一定要有,声明从外部引用这个数据结构,建议大家将所有的字体的定义弄成一个头文件,这样子比较方便!*/

void MainTask(void) {

unsigned int i;

GUI_Init();

GUI_SetColor(GUI_YELLOW);

GUI_DispChars('*', 108);

for(i = 0; i < 480; i+=8){

GUI_DispCharAt('*', 1, i);

}

GUI_DispChars('*', 108);

for(i = 0; i <= 480; i+=8){

GUI_DispCharAt('*', 634, i);

}

GUI_SetColor(GUI_GREEN);

GUI_SetFont(&GUI_FontHZ_Times_New_Roman_14);

GUI_DispCharAt('A', 100, 100);

GUI_DispString("! Hello World!"); /*仔细看这里的字体已经是Times new roman了和上面的是不一样的*/

GUI_SetFont(&GUI_Font32_ASCII);

GUI_SetColor(GUI_YELLOW);

GUI_DispChars('*', 15);

GUI_SetBkColor(GUI_BLUE);

GUI_DispCharAt('B', 600, 400);

GUI_SetFont(&GUI_FontHZ_FangSong_GB2312_14);

GUI_SetColor(GUI_RED);

GUI_DispStringAt("大家好这里是中文显示演示程序!", 1, 200); /*将上面程序中的Hello World替换成了中文!*/

GUI_Delay(10000);

}

还有一个郁闷的问题,文件太大了有的编译器有限制!例如VC.NET的编译器。好在NIOS II编译器没有这个限制。 看看图:

实际测试不影响使用,我们测试了4000多个汉字没有发现什么问题。

共 5 页   上一页12345下一页
可能会用到的工具/仪表
相关文章
推荐文章
热门文章
章节目录
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号