[ZLG-ARM] 共享我的中文字符显示代码

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

好,收藏!

感谢楼主!
biao.l 发表于 2007-5-15 23:01 | 显示全部楼层

看看

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

82

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部