当前位置:首页>资讯 >行业资讯 > 数码电子>小容量系统图形LCD的汉显解决方案

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

2010-12-17 来源: 华强电子网 责任编辑:未填 浏览数:未显示 中贸商网-贸易商务资源网

核心提示:引言在嵌入式系统应用中,人机界面的可操作性越来越为人们所重视,而用汉字来显示菜单是可操作性的前提;由于受到存储容量的限制

引言
在嵌入式系统应用中,人机界面的可操作性越来越为人们所重视,而用汉字来显示菜单是可操作性的前提;由于受到存储容量的限制,在汉字较多的情况下一般的解决方案是采用内建点阵字库的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<cnt;t+=2)
{if(buffer[t]==pBuffer[0] &&buffer[t+1]==pBuffer[1])
{
bHave=1;
break;
}
}
if(bHave) continue;
buffer[cnt++]=pBuffer[0];
buffer[cnt++]=pBuffer[1];
}
file.SetLength(0);
for(int b=0;b<cnt;b++)
{
file.Write(&buffer[b],1);
}
file.Close ();
CString st;
st.Format(“操作成功!n源文件大小为%d字节,提取出%d个汉字(%d字节)。”,length,cnt/2,cnt);
AfxMessageBox(st,MB_ICONI NFORMATION);
}

使用效果分析
很明显采用该算法使得汉显的存储容量大为减小。以16×16点阵为例,设菜单中共显示了m个汉字,其中n个无重复汉字。则传统方法需要的容量为 m*32Bytes, 采用查表算法后需要的容量为n*32+2*n Bytes,节约的容量为:32*m-34*n Bytes。当m=1500,n=250的时候为39500Byte。在笔者为某公司用Mega128开发的物位测控系统中,传统方法程序大小为 109.3KB,使用查表算法后程序大小为68.8KB。
该算法带来的问题是速度问题,由于每个汉字都需要查表,显示速度会下降,但现在的MCU一般速度都比较快,笔者用Mega128时LCD显示看不出迟滞。

分享到:
阅读上文 >> 新型连接技术助推固态照明产业发展
阅读下文 >> 英飞凌纳米SOLID FLASH技术适用于新一代安全IC

大家喜欢看的

  • 品牌
  • 资讯
  • 展会
  • 视频
  • 图片
  • 供应
  • 求购
  • 商城

版权与免责声明:

凡注明稿件来源的内容均为转载稿或由企业用户注册发布,本网转载出于传递更多信息的目的;如转载稿涉及版权问题,请作者联系我们,同时对于用户评论等信息,本网并不意味着赞同其观点或证实其内容的真实性;


本文地址:http://news.ceoie.com/show-72104.html

转载本站原创文章请注明来源:中贸商网-贸易商务资源网

微信“扫一扫”
即可分享此文章

友情链接

服务热线:0311-89210691 ICP备案号:冀ICP备2023002840号-2