当前位置:首页 > EDA > 电子设计自动化
[导读]摘 要:本文介绍了一种在图形LCD中基于查表法的软件算法,可以最大化的节约系统存储量资源,在实际应用中取得了较好的效果。 关键词:单片机;嵌入式系统;LCD;汉字显示 引言 在嵌入式系统应用中,人机界面的可

摘 要:本文介绍了一种在图形LCD中基于查表法的软件算法,可以最大化的节约系统存储量资源,在实际应用中取得了较好的效果。
关键词:单片机;嵌入式系统;LCD;汉字显示

引言
在嵌入式系统应用中,人机界面的可操作性越来越为人们所重视,而用汉字来显示菜单是可操作性的前提;由于受到存储容量的限制,在汉字较多的情况下一般的解决方案是采用内建点阵字库的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显示看不出迟滞。

结语
大部分的嵌入式系统人机界面汉字点阵数据部分都有较大的冗余重复,造成了传统显示方式给存储器容量带来的负担。本文采用查表算法巧妙的去除了汉字中重复的数据部分,使得需要的存储资源大为下降,同时也不影响图形LCD的显示效果和灵活性。该算法已经应用于笔者开发的系统中,效果较好。■

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

(全球TMT2022年10月19日讯)淘屏有限公司宣布与江苏苏立信文化创意集团签署为期三年的战略合作协议,共同在全国范围内拓展数字多媒体展馆建设项目。 根据协议内容,苏立信将在协议期内向淘屏采购不低于30...

关键字: 数字多媒体 LCD LED 大屏

香港2022年10月18日 /美通社/ -- 淘屏有限公司(纳斯达克:TAOP,简称"淘屏"或"公司"),今日宣布与江苏苏立信文化创意...

关键字: 数字多媒体 大屏 LCD LED

iPhone X卖的不好,主要是售价太高,苹果也深知这一点,所以推动更便宜版本的iPhone X,就是情理之中的事情了。据美国媒体报道称,苹果预计采用LCD的版本将在今年秋天的新品中占据多数销量,比例高于分析师的预期。该...

关键字: LCD 供应链 消费者

今日,荣耀X40 GT首发上市开售,起价2099元,优惠100元后到手1999元起。据荣耀官方消息,荣耀X40 GT今日首发就摘得京东、天猫安卓手机销量&销售额双冠军。作为一款游戏手机,荣耀X40 GT展现什么叫...

关键字: 荣耀 GPU LCD TURBO

(全球TMT2022年10月17日讯)为全球技术基础设施提供高速连接的企业Alphawave IP Group plc发布其截至2022年9月30日的三个月交易和业务更新文告。公司从2022年9月1日起整合了已收购的O...

关键字: ALPHA IP GROUP PLC

东芝公司(Toshiba)关于经营重组方案,计划与国内基金“日本产业合作伙伴”(JIP)为核心的企业联盟优先展开谈判。JIP向中部电力、欧力士等多家日企寻求出资参与东芝重组。东芝9月30日宣布,从通过第一轮招标的多个阵营...

关键字: 东芝 IP TOSHIBA 电力

东芝公司(Toshiba)关于经营重组方案,计划与国内基金“日本产业合作伙伴”(JIP)为核心的企业联盟优先展开谈判。JIP向中部电力、欧力士等多家日企寻求出资参与东芝重组。东芝9月30日宣布,从通过第一轮招标的多个阵营...

关键字: 东芝 IP TOSHIBA 电力

这个国庆假期前,温州14岁的小文(化名)在“鬼门关”前走了一遭。感冒发烧的小文,因为课业繁忙强撑着没去医院治疗,撑了两天高烧迟迟没退。等到医院后,小文心肌炎暴发,一度心脏停跳半分钟…...

关键字: IP 传导

携程旗下Trip.com数据显示,随着日本放宽入境旅游限制,前往日本的预订量激增,搜索量也很高。从韩国到日本的预订量比8月份大幅增加了194%,其次是英国到日本预订量增加了183%,西班牙到日本预订量增加169%,德国到...

关键字: COM 新加坡 IP

亚洲的电动汽车制造商及其供应商正纷纷涌向资本市场筹集资金,试图抓住电动汽车需求激增的机会。尽管全球大部分地区的IPO市场大幅降温,今年仍有大量与电动汽车相关的股票上市。数据显示,今年迄今,电动汽车供应链上的公司在亚洲(除...

关键字: 汽车制造 电动汽车 IP 供应链

电子设计自动化

21238 篇文章

关注

发布文章

编辑精选

技术子站

关闭