原创 uC/GUI3.32应用笔记连载之五

2006-11-13 00:15 4400 11 11 分类: MCU/ 嵌入式

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所有,这里只是转载。仅上船该程序的可执行文件


rar


声明:在这里特便感谢原作者做出的贡献!
首先运行程序,看到如图的程序界面,相当的简单。
bac3508e-727b-4500-ae83-49385cc215a9.jpg


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


确定后回到主界面,点击341b1a6f-caac-4894-88d1-980737a99068.jpg


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


bd5c29e1-6048-4d33-802b-c4cdf7357bb7.jpg


直接加载进模拟器工程就可以享受中文字体带来喜悦了!
在这里上传两个转换好的字体宋体(5号字)和Times new roman(5号字)两个字体,供大家参考,其中Times字体去掉了除ascii码之外所有的其他字模。


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


rar


该附件被下载次数 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多个汉字没有发现什么问题。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条