logo资料库

第16章-Unicode(uCGUI中文手册).pdf

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
第16章 Unicode
16.1 显示 Unicode 字符
Unicode 字符
显示 Unicode 字符串
显示混合 Unicode 和 ASCII 的代码
16.2 Unicode 和双字节转换
为什么使用双字节结构?
如何构造Unicode 字符串
范例
双字节结构如何工作?
16.3 范例
第16章 Unicode Unicode 编码标准是一个 16 位字符的编码规范。所有全世界的有效字符都在一个 16 位 的字符集中(适用于全世界范围内使用)。Unicode 标准由 Unicode 协会定义。 µC/GUI 能够以 Unicode 编码显示单个字符或字符串,尽管最普遍是使用混合字符串,即 在一个 ASCII 字符串当中有许多 Unicode 序列。 µC/GUI 中文手册 第 1 页
第 16 章 Unicode 16.1 显示 Unicode 字符 Unicode 字符 µC/GUI 使用的字符输出函数(GUI_DispChar)总是处理 16 位无符号数(U16),具有显 示一个由 Unicode 定义的字符的基本的能力。它仅仅需要一种包括有你想显示字符的字体。 显示 Unicode 字符串 µC/GUI 中用于字符串输出的函数通常是 GUI_DispString。既然 GUI_DispString 使用 8 位字符,你不能直接将一个 Unicode 字符串传递给它,因为 Unicode 字符串使用 16 位字符。 有两个选项可利用: 使用 GUI_DispString_UC,它接受 16 位 Unicode 字符串,或者通过嵌入式 Unicode 将 一个 8 位字符串转换为 2 字节的字符。这样就可以支持任何编译器支持的标准 C 字符串函数 的使用。 显示混合 Unicode 和 ASCII 的代码 这是 Unicode 显示的最值得推荐的方法。你不必使用专门的函数做这项工作。只需要两 个宏定义一个字符串中 Unicode 序列的起始点和结束点。 宏 说明 GUI_UC_START 标志一个 Unicode 序列的开始。 GUI_UC_END 标志一个 Unicode 序列的结束。 16.2 Unicode 和双字节转换 为什么使用双字节结构? 首先,使用 Unicode 双字节变量不是必需的。不过,这样做可以减少文字消息的内存消 耗,处理字符串更容易。如果你的编译器不能直接处理 16 位字符串的话,这样做的效果确实 显著。 如何构造Unicode 字符串 通常的想法是:当能够使用 Unicode 时,能够与已有的软件保持 100%的兼容性。 第 2 页 µC/GUI 中文手册
第 16 章 Unicode 这意思是说,那些仍旧是字节(8 位)阵列的字符串和那些“标准”的 ASCII 或西欧字符 串可以写成规则的字符串。 Unicode 部分起点由 GUI_UC_START 说明,可以在字符串中的任何位置。 GUI_UC_END 定义 Unicode 部分的终点。按惯例,“0”字符结束字符串;如果最后的字符 是 Unicode 编码,GUI_UC_END 可以被忽略。 范例 GUI_SetBkColor(GUI_RED); GUI_SetColor(GUI_WHITE); GUI_Clear(); GUI_SetFont(&GUI_Font16_1HK); GUI_DispStringHCenterAt ( “English mixed ... “ /* 日文 */ GUI_UC_START /* 切换到 UNICODE(双字节) */ “\x30\x40” “\x30\x45” “\x30\x52” “\x30\x51” /* 日文 */ /* 日文 */ /* 日文 */ GUI_UC_END “ ..with Japanese”,160,50); /* 返回单字节字符 */ 输出结果: 双字节结构如何工作? 所有字符,不存在 which do not have a code where 无论是 16 位字符代码的高位字节 还是低位字节为 0 的情况的,either the high- or low-byte of the 16-bit character code is 0 will 将保持它们的 16 位字符编码。高字节为 0 的字符移到 0xe000~0xe0ff 区域。对 于低字节代码为 0 的字符,高字节当作低字节使用,新的高字节设为 0xe1。结果的代码保存 为 2 字节,高字节在前。 µC/GUI 中文手册 第 3 页
第 16 章 Unicode 16.3 范例 下面的范例定义一种包括 6 个字符:“A”,“B”,“C”及 Unicode 字符 0x3060,0x3061 和 0x3062 的小字体。然后向显示屏写一个混合字符串。源代码文件是 Sample\Misc\Unicode.c。 /*-------------------------------------------------------------------------- 文件: 目的: 展示 µC/GUI 的 Unicode 性能的例子 Unicode.c --------------------------------------------------------------------------*/ #include “GUI.H” /*************************************************************************** * 定义包括 Unicode 字符的字体 * ***************************************************************************/ /* unicode 区开始 <基本拉丁文> */ static const unsigned char acFontUC13_0041[13] = { /* 代码 0041 */ ________, ________, ___X____, ___X____, __X_X___, __X_X___, __X_X___, _XXXXX__, _X___X__, _X___X__, XXX_XXX_, ________, ________}; static const unsigned char acFontUC13_0042[13] = { /* 代码 0042 */ ________, ________, XXXXX___, _X___X__, _X___X__, _X___X__, _XXXX___, _X___X__, 第 4 页 µC/GUI 中文手册
第 16 章 Unicode _X___X__, _X___X__, XXXXX___, ________, ________}; static const unsigned char acFontUC13_0043[13] = { /* 代码 0043 */ ________, ________, __XX_X__, _X__XX__, X____X__, X_______, X_______, X_______, X_______, _X___X__, __XXX___, ________, ________}; /* unicode 区开始 <平假名> */ static const unsigned char acFontUC13_3060[26] = { /* 代码 3060 */ ___XX___,X_X_____, ____X___,_X_X____, X___XXX_,________, _XXXX___,________, ___X__XX,XXX_____, ___X____,X_______, ___X___X,________, __X_____,________, __X__X__,________, _X___X__,________, _X____XX,XXX_____, ________,________, ________,________}; static const unsigned char acFontUC13_3061[26] = { /* 代码 3061 */ ___XX___,________, ____X___,________, X___XXXX,XX______, _XXXX___,________, ___X____,________, µC/GUI 中文手册 第 5 页
第 16 章 Unicode ___X_XXX,X_______, __XXX___,_X______, __X_____,__X_____, ________,__X_____, ________,_X______, ___XXXXX,X_______, ________,________, ________,________}; static const unsigned char acFontUC13_3062[26] = { /* 代码 3062 */ ___XX___,X_X_____, ____X___,_X_X____, X___XXXX,X_______, _XXXX___,________, ___X____,________, ___X_XXX,X_______, __XXX___,_X______, __X_____,__X_____, ________,__X_____, ________,_X______, ___XXXXX,X_______, ________,________, ________,________}; static const GUI_CHARINFO GUI_FontUC13_CharInfo[6] = { }; {7, 7, 1, (void *)&acFontUC13_0041 }, /* 代码 0041 */ {7, 7, 1, (void *)&acFontUC13_0042 }, /* 代码 0042 */ {7, 7, 1, (void *)&acFontUC13_0043 }, /* 代码 0043 */ {14, 14, 2, (void *)&acFontUC13_3060}, /* 代码 3060 */ {14, 14, 2, (void *)&acFontUC13_3061}, /* 代码 3061 */ {14, 14, 2, (void *)&acFontUC13_3062} /* 代码 3062 */ static const GUI_FONT_PROP GUI_FontUC13_Prop2 = { }; 第 6 页 0x3060 , 0x3062 , /* 第一个字符 */ /* 最后一个字符 */ &GUI_FontUC13_CharInfo[3], /* 第一个字符的地址 */ (void*)0 /* 下一个 GUI_FONT_PROP 的指针 */ µC/GUI 中文手册
第 16 章 Unicode static const GUI_FONT_PROP GUI_FontUC13_Prop1 = { }; 0x0041, 0x0043, /* 第一个字符 */ /* 最后一个字符 */ &GUI_FontUC13_CharInfo[0], (void *)&GUI_FontUC13_Prop2 /* 第一个字符的地址 */ /* 下一个 GUI_FONT_PROP 的指针*/ static const GUI_FONT GUI_FontUC13 = { }; GUI_FONTTYPE_PROP, 13, 13, 1, 1, (void *)&GUI_FontUC13_Prop1 /* 字体类型 */ /* 字体的调试*/ /* 字体 Y 轴的间距 */ /* X 轴的放大倍数 */ /* Y 轴的放大倍数 */ /*************************************************************************** * 定义包括 ASCII 和 UNICODE 字符的字符串 * ***************************************************************************/ static const char sUC_ASCII [] = { }; “ABC”GUI_UC_START”\x30\x60\x30\x61\x30\x62”GUI_UC_END”\x0” /*************************************************************************** * 展示 UNICODE 字符的输出 * ***************************************************************************/ static void DemoUNICODE(void) { GUI_SetFont(&GUI_Font13HB_1); GUI_DispStringHCenterAt(“µC/GUI-sample: UNICODE characters”, 160, 0); /* 设置 ShiftJIS 字体 */ GUI_SetFont(&GUI_FontUC13); µC/GUI 中文手册 第 7 页
第 16 章 Unicode /* 显示字符串 * / GUI_DispStringHCenterAt(sUC_ASCII, 160, 40); } /*************************************************************************** * 主函数 * ***************************************************************************/ void main (void) { } GUI_Init () ; DemoUNICODE(); while(1) GUI_Delay(100); 上面范例执行结果的屏幕截图 第 8 页 µC/GUI 中文手册
分享到:
收藏