EDN China > 设计实例 > 消费电子设计 > 数字电视 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

小容量系统图形LCD的汉显解决方案

来源:来源:电子产品世界/北京科技大学 董国胜 郗安民?? 2005年09月30日 ?? 收藏0

?????? 在嵌入式系统应用中,人机界面的可操作性越来越为人们所重视,而用汉字来显示菜单是可操作性的前提;由于受到存储容量的限制,在汉字较多的情况下一般的解决方案是采用内建点阵字库的LCD模块,而这一类显示模块的使用灵活性却大受限制。本文从实际应用出发,介绍了一种在图形LCD中基于查表法的软件算法,可以在不影响显示灵活性的前提下最大化地节约系统存储资源。

?????? 查表法解决方案算法

?????? 在很多的人机界面中,虽然显示的汉字数量较多,但实际无重复的汉字数却较少,一个显示了2000个汉字菜单的系统中,用到的汉字却可能只有300个。这样看来,建立一个完整的国标字库很是浪费资源。
该算法在程序存储区建立两个表格,一张用来存储无重复汉字的点阵数据(WordLib[][]),另一张用来存储这些汉字的机内码以作为其点阵数据位置的索引(WordIndex[])。这两张表格的汉字顺序必须是一致的。下面以6个

汉字为例具体说明。

?????? WordLib[7][32]={
/汉字“?”点阵数据

/汉字“电”点阵数据32Byte

/汉字“子”点阵数据32Byte

/汉字“设”点阵数据32Byte

/汉字“计”点阵数据32Byte

/汉字“应”点阵数据32Byte

/汉字“用”点阵数据32Byte

};
WordIndex[]=“?电子设计应用”;

?????? 其中第一个汉字固定为“?”。

?????? 在需要显示汉字“电”的时候首先调用WordFind(WordIndex,“电”)查找该汉字在WordIndex表中的位置n,如果没有找到,则返回值为0,由于点阵数据的第一个字符为“?”,所以相应地在LCD上显示出一个“?”。

?????? 由于WordLib中的字模存放顺序和WordIndex中是一致的,所以可以确定该汉字点阵数据在WordLib中的起始地址为:(unsigned int)WordLib+n*32。接下来只需要写入这个地址后32字节的点阵数据即可,由于篇幅有限这里不作介绍。

?????? 在调试程序的时候如果发现需要的汉字显示出一个“?”,则说明该汉字没有被录入点阵数据,添加时候只需要将该字模数据添加到WordLib的末尾,再在WordIndex的最后加上这个汉字即可。

?????? 无重复汉字的提取

?????? 无重复汉字的提取采用VC++编程实现,操作时先将所有的菜单汉字都写在一个文本文件中,程序读取到第一个字节小于128的时候为ascii码,否则为汉字,然后查找该汉字是否已经放入缓冲区,如果没有则将之放入缓冲区。程序如下:

?????? void CZimoDlg::OnHandle()
{
?CFile file;
if(!file.Open(szDir,CFile::modeRead Write|CFile::shareExclusive,NULL))
?{
?AfxMessageBox(“文件打开出错!”,MB_OK|MB_ICONEX CLAMATION);
??return ;
?}
?unsigned char buffer[2000];
?int cnt="0";
?DWORD length="0";
?unsigned char pBuffer[2], bHave="0";
?while(1)
?{
if(file.Read(pBuffer,1)!=1)break;
??length++;
?if(pBuffer[0]<127)continue;
if(file.Read(pBuffer+1,1)!=1)break;
??length++;
??bHave=0;
??for(int t="0";t??{?if(buffer[t]==pBuffer[0] &&buffer[t+1]==pBuffer[1])


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

LCD? 小容量? 图形? 汉显?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈