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