c语言嵌入式系统编程修炼之四屏幕操作

c语言嵌入式系统编程修炼之四屏幕操作

ID:26345976

大小:84.00 KB

页数:12页

时间:2018-11-26

c语言嵌入式系统编程修炼之四屏幕操作_第1页
c语言嵌入式系统编程修炼之四屏幕操作_第2页
c语言嵌入式系统编程修炼之四屏幕操作_第3页
c语言嵌入式系统编程修炼之四屏幕操作_第4页
c语言嵌入式系统编程修炼之四屏幕操作_第5页
资源描述:

《c语言嵌入式系统编程修炼之四屏幕操作》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C语言嵌入式系统编程修炼之四:屏幕操作汉字处理  现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能。例如,一个微波炉的LCD上没有必要提供显示"电子邮件"的功能;一个提供汉字显示功能的空调的LCD上不需要显示一条"短消息",诸如此类。但是一部手机、小灵通则通常需要包括较完整的汉字库。  如果包括的汉字库较完整,那么,由内码计算出汉字字模在库中的偏移是十分简单的:汉字库是按照区位的顺序排列的,前一个字节为该汉字的区号,后一个字节为该字的位号。每一个区记录94个汉字,位号则为该字在该区中的位置。因此,汉字在汉字库中的具体位置计

2、算公式为:94*(区号-1)+位号-1。减1是因为数组是以0为开始而区号位号是以1为开始的。只需乘上一个汉字字模占用的字节数即可,即:(94*(区号-1)+位号-1)*一个汉字字模占用字节数,以16*16点阵字库为例,计算公式则为:(94*(区号-1)+(位号-1))*32。汉字库中从该位置起的32字节信息记录了该字的字模信息。  对于包含较完整汉字库的系统而言,我们可以以上述规则计算字模的位置。但是如果仅仅是提供少量汉字呢?譬如几十至几百个?最好的做法是:  定义宏:#defineEX_FONT_CHAR(value)#defineEX_FONT_UNICODE_VAL(value

3、)(value),#defineEX_FONT_ANSI_VAL(value)(value),  定义结构体:typedefstruct_wide_unicode_font16x16{ WORDvalue;/*内码*/ BYTEdata[32];/*字模点阵*/}Unicode;#defineCHINESE_CHAR_NUM…/*汉字数量*/  字模的存储用数组:Unicodechinese[CHINESE_CHAR_NUM]={{EX_FONT_CHAR("业")EX_FONT_UNICODE_VAL(0x4e1a){0x04,0x40,0x04,0x40,0x04,0x40,0x

4、04,0x44,0x44,0x46,0x24,0x4c,0x24,0x48,0x14,0x50,0x1c,0x50,0x14,0x60,0x04,0x40,0x04,0x40,0x04,0x44,0xff,0xfe,0x00,0x00,0x00,0x00}},{EX_FONT_CHAR("中")EX_FONT_UNICODE_VAL(0x4e2d){0x01,0x00,0x01,0x00,0x21,0x08,0x3f,0xfc,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x3f,0xf8,0x21,0x08,0x01,0x00

5、,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00}},{EX_FONT_CHAR("云")EX_FONT_UNICODE_VAL(0x4e91){0x00,0x00,0x00,0x30,0x3f,0xf8,0x00,0x00,0x00,0x00,0x00,0x0c,0xff,0xfe,0x03,0x00,0x07,0x00,0x06,0x40,0x0c,0x20,0x18,0x10,0x31,0xf8,0x7f,0x0c,0x20,0x08,0x00,0x00}},{EX_FONT_CHAR("件")EX_FONT_UNICODE_VAL(0x4ef6

6、){0x10,0x40,0x1a,0x40,0x13,0x40,0x32,0x40,0x23,0xfc,0x64,0x40,0xa4,0x40,0x28,0x40,0x2f,0xfe,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40}}}  要显示特定汉字的时候,只需要从数组中查找内码与要求汉字内码相同的即可获得字模。如果前面的汉字在数组中以内码大小顺序排列,那么可以以二分查找法更高效的查找到汉字的字模。  这是一种很有效的组织小汉字库的方法,它可以保证程序有很好的结构。  系统时间显示  从N

7、VRAM中可以读取系统的时间,系统一般借助NVRAM产生的秒中断每秒读取一次当前时间并在LCD上显示。关于时间的显示,有一个效率问题。因为时间有其特殊性,那就是60秒才有一次分钟的变化,60分钟才有一次小时变化,如果我们每次都将读取的时间在屏幕上完全重新刷新一次,则浪费了大量的系统时间。  一个较好的办法是我们在时间显示函数中以静态变量分别存储小时、分钟、秒,只有在其内容发生变化的时候才更新其显示。externvoidDisplayTime(…){ sta

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。