uC/GUI NIOSII移植之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所有,这里只是转载。仅上船该程序的可执行文件
声明:在这里特便感谢原作者做出的贡献!
首先运行程序,看到如图的程序界面,相当的简单。
然后点击选择字体。按扭出现新的对话框,我选择的字体如图所示。
确定后回到主界面,点击
看到这个对话框文件就转换好了!
直接加载进模拟器工程就可以享受中文字体带来喜悦了!
在这里上传两个转换好的字体宋体(5号字)和Times new roman(5号字)两个字体,供大家参考,其中Times字体去掉了除ascii码之外所有的其他字模。
说一下这里的5号字对应的就是16*16的汉字字体。
该附件被下载次数 41
宋体那个文件体积巨大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多个汉字没有发现什么问题。
文章评论(0条评论)
登录后参与讨论