| 
 
| 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 />即可使用 | 
 |