第17章 Shift-JIS支持
最通用的日文编码方法是 Shift-JIS。Shift-JIS 编码使 8 位字符得到丰富的使用,第一
个字节的值用来区别单字节和多字节字符。
你不需要调用特殊函数来显示一个 Shift-JIS 字符串。 最主要的必要条件是要有一种包
含有用于显示的 Shift-JIS 字符的字体。
µC/GUI 中文手册
第 1 页
第 17 章 Shift-JIS 支持
17.1 创建 Shift-JIS 字体
字体转换器能够从任何的 Windows 字体产生一种 Shift-JIS 字体用于µC/GUI。 当使用一
种 Shift-JIS 字体时,用于显示显示 Shift-JIS 字符的函数会自动地与库链接。
关于如何创建 Shift-JIS 字体的详细信息,请联系 Micrium 公司(info@micrium.com)。
一份单独的字体转换器的技术资料描述了所有你需要在你的µC/GUI 工程中实现 Shift-JIS 的
有效方法。
17.2 例子
下面的例子定义了一种包括 6 个字符的小字体:“A”,“B”,“C”和 Shift-JIS 字符 0x8350
(片假名字母 KE),0x8351(片假名字母 GE)和 0x8352(片假名字母 KO)。 然后在显示屏上
绘出一个复合字符串。 该例子的源代码是 Sample\Misc\ShiftJIS.c。
/*--------------------------------------------------------------------------
文件:
目的: 展示µC/GUI 的 ShiftJIS 性能
ShiftJIS.c
--------------------------------------------------------------------------*/
#include “GUI.H”
/***************************************************************************
*
ShiftJIS 字体的定义
*
***************************************************************************/
/* 拉丁文大写字母 A */
static const unsigned char acFontSJIS13_0041[13] = { /* 编码 0041 */
________,
________,
___X____,
___X____,
__X_X___,
__X_X___,
__X_X___,
_XXXXX__,
_X___X__,
_X___X__,
XXX_XXX_,
________,
________};
第 2 页
µC/GUI 中文手册
第 17 章 Shift-JIS 支持
/* 拉丁文大写字母 B */
static const unsigned char acFontSJIS13_0042[13] = { /* 编码 0042 */
________,
________,
XXXXX___,
_X___X__,
_X___X__,
_X___X__,
_XXXX___,
_X___X__,
_X___X__,
_X___X__,
XXXXX___,
________,
________};
/* 拉丁文大写字母 C */
static const unsigned char acFontSJIS13_0043[13] = { /* 编码 0043 */
________,
________,
__XX_X__,
_X__XX__,
X____X__,
X_______,
X_______,
X_______,
X_______,
_X___X__,
__XXX___,
________,
________};
/* 片假名字母 KE */
static const unsigned char acFontSJIS13_8350[26] = { /* 编码 8350 */
__XX____,________,
___X____,________,
___X____,________,
___XXXXX,XXXX____,
__X____X,________,
_X_____X,________,
X______X,________,
______X_,________,
µC/GUI 中文手册
第 3 页
第 17 章 Shift-JIS 支持
______X_,________,
_____X__,________,
____X___,________,
__XX____,________,
________,________};
/* 片假名字母 GE */
static const unsigned char acFontSJIS13_8351[26] = { /* 编码 8351 */
__XX____,X_X_____,
___X____,_X_X____,
___X____,________,
__XXXXXX,XXX_____,
__X____X,________,
_X_____X,________,
X______X,________,
______X_,________,
______X_,________,
_____X__,________,
____X___,________,
__XX____,________,
________,________};
/* 片假名字母 KO */
static const unsigned char acFontSJIS13_8352[26] = { /* 编码 8352 */
________,________,
________,________,
__XXXXXX,XX______,
________,_X______,
________,_X______,
________,_X______,
________,_X______,
________,_X______,
________,_X______,
_XXXXXXX,XXXX____,
________,________,
________,________,
________,________};
static const GUI_CHARINFO GUI_FontSJIS13_CharInfo[6] = {
{7, 7, 1, (void *)&acFontSJIS13_0041}
,{ 7, 7, 1, (void *)&acFontSJIS13_0042}
,{ 7, 7, 1, (void *)&acFontSJIS13_0043}
/* 编码 0041 */
/* 编码 0042 */
/* 编码 0043 */
第 4 页
µC/GUI 中文手册
第 17 章 Shift-JIS 支持
,{ 14, 14, 2, (void *)&acFontSJIS13_8350}
/* 编码 8350 */
,{ 14, 14, 2, (void *)&acFontSJIS13_8351}
/* 编码 8351 */
,{ 14, 14, 2, (void *)&acFontSJIS13_8352}
/* 编码 8352 */
};
static const GUI_FONT_PROP GUI_FontSJIS13_Prop2 = {
0x8350
,0x8352
/* 第一个字符 */
/* 最后一个字符 */
,&GUI_FontSJIS13_CharInfo[3] /* 第一个字符的地址 */
,(void*)0
/* 指向下一个 GUI_FONT_PROP 的指针 */
};
static const GUI_FONT_PROP GUI_FontSJIS13_Prop1 = {
0x0041
,0x0043
/* 第一个字符 */
/* 最后一个字符 */
,&GUI_FontSJIS13_CharInfo[ 0] /* 第一个字符的地址 */
,(void *)&GUI_FontSJIS13_Prop2 /* 指向下一个 GUI_FONT_PROP 的指针 */
};
static const GUI_FONT GUI_FontSJIS13 = {
GUI_FONTTYPE_PROP_SJIS
/* 字体类型 */
,13
,13
,1
,1
/* 字体高度 */
/* 字体 Y 轴方向的间隔 */
/* X 轴方向放大系数 */
/* Y 轴方向放大系数 */
,(void *)&GUI_FontSJIS13_Prop1
};
/***************************************************************************
*
包含 ASCII 字符和 ShiftJIS 字符的字符串的定义
*
***************************************************************************/
static const char aSJIS[] = {
"ABC\x83\x50\x83\x51\x83\x52\x0"
};
/***************************************************************************
*
展示 ShiftJIS 字符的输出
*
***************************************************************************/
void DemoShiftJIS(void)
µC/GUI 中文手册
第 5 页
第 17 章 Shift-JIS 支持
{
GUI_SetFont(&GUI_Font13HB_1);
GUI_DispStringHCenterAt("μC/GUI-sample: ShiftJIS characters", 160, 0);
/* 设置 ShiftJIS 字体 */
GUI_SetFont(&GUI_FontSJIS13);
/* 显示字符串 */
GUI_DispStringHCenterAt(aSJIS, 160, 40);
}
/***************************************************************************
*
主函数
*
***************************************************************************/
void main(void)
{
}
GUI_Init();
DemoShiftJIS();
while(1)
GUI_Delay(100);
范例程序运行结果的屏幕截图
第 6 页
µC/GUI 中文手册