打印
[ZLG-ARM]

共享我的中文字符显示代码

[复制链接]
1897|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jshmlly|  楼主 | 2007-5-15 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
即可使用

相关帖子

沙发
Herowa| | 2007-5-15 20:30 | 只看该作者

好,收藏!

感谢楼主!

使用特权

评论回复
板凳
biao.l| | 2007-5-15 23:01 | 只看该作者

看看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

82

帖子

1

粉丝