ZLG/GUI 中没有中文字符显示代码。最近我借鉴ZLG/GUI 作了一个用于显示单个或多个中文字符的程序或其他16*16点阵字符。一般中文字符都采用16*16点阵。 本程序只适合16*16 点阵字符。不包含中文字库。程序如下: /**************************************************************************************** * 文件名:FONT16_16.C * 功能:16*16字符显示函数。一般用于中文的显示 * 作者: * 日期: * 备注:使用GUI_SetColor()函数设置前景颜色及背景色。 ****************************************************************************************/ #include "config.h"
#if FONT16x16_EN==1
/**************************************************************************** * 名称:GUI_PutChar16_16() * 功能:显示16*16点阵字符,一般用于显示中文字符。 * 入口参数: x 指定显示位置,x坐标 * y 指定显示位置,y坐标 * ch 要显示字符的码表起始地址 * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。 * 说明:操作失败原因是指定地址超出有效范围。 ****************************************************************************/
uint8 GUI_PutChar16_16(uint32 x, uint32 y, uint8 *ch) { uint8 font_dat; uint8 i, j; TCOLOR bakc; /* 参数过滤 */ if( x>=(GUI_LCM_XMAX-16) ) return(0); if( y>=(GUI_LCM_YMAX-16) ) return(0);
for(i=0; i<16; i++) // 显示共16行 { for(j=0; j<16; j++) // 每行共24点 { /* 若当前点为0、8,读取点阵数据 */ if( (j&0x07)==0 ) font_dat = *ch++; /* 设置相应的点为color或为back_color */ if( (font_dat&DCB2HEX_TAB[j&0x07])==0 ) GUI_CopyColor(&bakc, back_color); else GUI_CopyColor(&bakc, disp_color); GUI_Point(x, y, bakc); x++; } y++; // 指向下一行 x -= 16; // 恢复x值 } return(1); }
/**************************************************************************** * 名称:GUI_PutManyChar() * 功能:显示多个16*16点阵字符,一般用于多个中文字符的显示。 * 入口参数: x 指定显示位置,x坐标 * y 指定显示位置,y坐标 * num 字符个数 * ch 要显示字符的码表起始地址 * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。 * 说明:操作失败原因是指定地址超出有效范围。 ****************************************************************************/ GUI_PutManyChar(uint32 x, uint32 y,uint8 num,uint8 *ch) { uint8 i; for(i=0;i<num;i++) { GUI_PutChar16_16(x,y,ch); ch=ch+32; //下一个字符的起始地址 x=x+16; //下一个字符(汉字)显示区x坐标 } }
#endif
把本文件加入ZLG/GUI中,并在GUI_CONFIG.H中加入#define FONT16x16_EN 1 即可使用 |