热门关键词: 成都成套设备 军用海水淡化设备 上海船舶涂装设备 qq找不到视频设备 河南粉碎设备 t61未知设备 双绞线传输设备
  IC库存(8958万) PDF资料(329万) IC价格 IC求购 资讯 技术资料
电子元器件搜索:
维库电子市场网是知名的电子元器件交易网站,为电子生产企业提供IC库存和技术资料查询服务。
相关专题
[推荐]利用MT22彩色TFTLCD显示中文
新闻出处:综合电子论坛 发布时间:2007-11-08
jwins 发布于 2007-11-8 14:40:21
表情[推荐]利用MT22彩色TFTLCD显示中文


利用MT22彩色TFTLCD显示中文


1 技术概述
      MT22彩色LCD模块为北京铭正同创科技有限公司为广大用户提供的一款高性能TFTLCD显示模块,用户可以非常方便的在北京铭正同创网站上(www.mzdesign.com.cn)下载到MT22彩色LCD模块完整的驱动程序,其中包括了基本的绘图功能函数、西文显示功能函数,以及用户自定义的字库显示程序等。
      本文重要介绍应用MT22模块配套的驱动程序进行中文显示的原理,以及操作过程。中文显示实际上是与LCD的硬件无关的,仅与驱动程序及基本的显示API函数相关,所以在本技术文章中将会基于LCD模块的驱动程序相关的代码进行介绍,以解释驱动程序中自定义字库的显示原理,并介绍从取字模数据到实际修改代码的中文显示操作过程。

2 LCD驱动程序字符显示原理
      MT22彩色LCD模块的基础驱动程序(DemoCode)当中,字符库的数据采用的是一般单色点阵LCD的数据组成方式,即字库数据当中的一个位代表LCD显示中的一个像素点,取点方式为从左到右,自上到下的顺序。对于这点,驱动中自带的西文(ASCII码)字库和用户可自定义的中文字库是一样的。
      字库数据采用了以Byte为单位的位流结构,即当一行取点不为8的整数倍时,补齐数据至8位,无用位填零(低位补零)。
      同一种大小(X轴宽度和Y轴高度)的字体,其字库数据都放置在同一个数组中,除了自带的西文字库用户不需要改动外,用户可以自行定义汉字字库,但需要在FontSet函数中修改相应的代码,以声明自行定义的字库的X大小。之后,便可以通过调用FontSet函数选择用户自定义的字库,并通过调用PutChar函数显示字库中的字符。
      当然,根据不同的MCU的字长特性,用户在定义自己的字库时,需要选择合适的字模提取工具,并将字库数组定义好,这点请具体问题具体分析。比如,在所提供的MCS51的MT22模块驱动程序当中,字库数组是以8位的BYTE为单位进行存储的,而在所提供的unSP的MT22模块驱动程序当中,字库数组以16位长的WORD为单位进行存储的。
2.1 驱动程序当中FontSet函数
下面介绍FontSet函数的源码:
void FontSet(int Font_NUM,unsigned int Color)
{
switch(Font_NUM)
{
  case 1: Font_Wrod = 29; //ASII字符每个字符占用的存储单位
   X_Witch = 15;  //字符的宽度
   Y_Witch = 29;  //字符的高度
   Char_Color = Color;//设置字符颜色
   Char_TAB = (unsigned char *)(Asii16 - (32*29));//设置字库数组首地址
  break;
  case 2: Font_Wrod = 64; //自定义字库的每个字符占用存储单位
   X_Witch = 32;       //字符的宽度
   Y_Witch = 32;       //字符的高度
   Char_Color = Color;
   Char_TAB = (unsigned char *)GB32; //设置字库数组首地址
  break;
}
}
      上述代码当中提供了一个用户自定义的字库:GB32,该字库数组在GB_Table.c中进行定义,并在LCD_Dis.c的前面作了外部声明,我们可以从代码中看出,需要做的工作是针对这个自定义的字库,设置好其宽度和高度的信息,并设置好每个字符所占用的存储单元数。
      该段代码中,如果选取Font_NUM为1时,为选用驱动自带的西文字库,西文字库中的代码用户是不需要改动的。
      MT22模块的显示驱动程序当中,大部份代码是兼容MCS51系列MCU和凌阳unSP系列单片机的,如刚刚介绍的FontSet函数,就是完全兼容两者的。需要用户注意的一点是,由于有的unSP系列单片机是不支持Byte(字节)操作的,所以在字库存储时,是以16位字长为单位的Word形式存储的,故同样的(尺寸)字模数组所占用的存储单元数unSP的驱动为MCS51的驱动的1/2。
2.2 GB32自定义字库
      以凌阳unSP系列单片机对MT22模块的驱动程序当中的字库为例,从前面的代码中可知,GB32字库所定义的字符宽度为32点,高度为32点;而每个字符所占用的存储单元数为64个words。下面再给出一个GB32字库数组的示例:
const unsigned char GB32[ ] =
{
//“科”字,字符数据流开始
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0070,0x0E00,0x01F8,0x0E00,0x07FC,0x0C00,
0x3FC7,0x0C00,0x7983,0xCC00,0x0181,0xEC00,0x0199,0xEC00,
0x01BC,0xCC00,0x7FFC,0x0C00,0x0386,0x0C00,0x07C3,0x8C00,
0x07F3,0xCC00,0x07B9,0xCC80,0x0FBD,0xCDC0,0x0D98,0x8DE0,
0x1D80,0x3FE0,0x3987,0xFC00,0x319F,0x8C00,0x6190,0x0C00,
0x4180,0x0C00,0x0180,0x0C00,0x0180,0x0C00,0x0180,0x0C00,
0x0180,0x0C00,0x0180,0x0C00,0x0100,0x0800,0x0000,0x0000,
//“技”字,字符数据流开始
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x4000,0x0700,0x7000,0x0700,0x7000,0x0600,0x6000,
0x0600,0x6180,0x0660,0x63C0,0x06FF,0xFFE0,0xFFF8,0x6000,
0x0600,0x6000,0x0600,0x6200,0x06F8,0x6700,0x07FF,0xFF80,
0x0F8C,0x0F00,0x7E06,0x0E00,0xFE06,0x1E00,0x7607,0x1C00,
0x2607,0x3C00,0x0603,0xB800,0x0603,0xF800,0x0601,0xF000,
0x0601,0xF800,0x0603,0xFE00,0x060F,0xBFC0,0xFE1E,0x1FF0,
0x3E78,0x07C0,0x1FE0,0x0380,0x0800,0x0000,0x0000,0x0000//end
};
可以看到,在GB32字库当中,定义了两个汉字的字符,每个字符占用了64个16位长度的word型空间,两个字符的数据流连在一起定义;不过由于在FontSet函数当中设置了GB32字库当中每个字符的占用存储单元数,所以是可以通过索引,分别找到两个字符的数据。
定义完成后,需要在LCD_Dis.c当中对该字库进行声明,如下:
extern const unsigned char GB32[ ];   //32*32自定义的汉字库
然后就可以在应用程序当中调用驱动所提供的API函数来显示这两个汉字了,如:
………
FontSet(2,0xf800);       //选择用户自定义的字库,并设置字符颜色
PutChar(10,10,0);        //在10,10点上显示“科”
PurtChar(42,10,1);       //在42,10点上显示“技”
……….

      如果用户使用的MCU为8位或者更长的字长的话,在定义字库数组时需要考虑合适的数据类型,对于这种情况,北京铭正同创科技有限公司(Mzdesign)分别提供了基于51兼容MCU的驱动和基于凌阳unSP系列MCU的驱动,用户可以在北京铭正同创网站上(www.mzdesign.com.cn)找到具体的驱动程序。
例如,前面的两个32*32点阵的汉字:“科”、“技”的MCS51驱动的字库为:
code unsigned char GB32[ ] =
{
//“科”字,字符数据流开始
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x70,0x0E,0x00,0x01,0xF8,0x0E,0x00,0x07,0xFC,0x0C,0x00,
0x3F,0xC7,0x0C,0x00,0x79,0x83,0xCC,0x00,0x01,0x81,0xEC,0x00,0x01,0x99,0xEC,0x00,
0x01,0xBC,0xCC,0x00,0x7F,0xFC,0x0C,0x00,0x03,0x86,0x0C,0x00,0x07,0xC3,0x8C,0x00,
0x07,0xF3,0xCC,0x00,0x07,0xB9,0xCC,0x80,0x0F,0xBD,0xCD,0xC0,0x0D,0x98,0x8D,0xE0,
0x1D,0x80,0x3F,0xE0,0x39,0x87,0xFC,0x00,0x31,0x9F,0x8C,0x00,0x61,0x90,0x0C,0x00,
0x41,0x80,0x0C,0x00,0x01,0x80,0x0C,0x00,0x01,0x80,0x0C,0x00,0x01,0x80,0x0C,0x00,
0x01,0x80,0x0C,0x00,0x01,0x80,0x0C,0x00,0x01,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
//“技”字,字符数据流开始
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x40,0x00,0x07,0x00,0x70,0x00,0x07,0x00,0x70,0x00,0x06,0x00,0x60,0x00,
0x06,0x00,0x61,0x80,0x06,0x60,0x63,0xC0,0x06,0xFF,0xFF,0xE0,0xFF,0xF8,0x60,0x00,
0x06,0x00,0x60,0x00,0x06,0x00,0x62,0x00,0x06,0xF8,0x67,0x00,0x07,0xFF,0xFF,0x80,
0x0F,0x8C,0x0F,0x00,0x7E,0x06,0x0E,0x00,0xFE,0x06,0x1E,0x00,0x76,0x07,0x1C,0x00,
0x26,0x07,0x3C,0x00,0x06,0x03,0xB8,0x00,0x06,0x03,0xF8,0x00,0x06,0x01,0xF0,0x00,
0x06,0x01,0xF8,0x00,0x06,0x03,0xFE,0x00,0x06,0x0F,0xBF,0xC0,0xFE,0x1E,0x1F,0xF0,
0x3E,0x78,0x07,0xC0,0x1F,0xE0,0x03,0x80,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00//end
};

2.3 提取32*32尺寸的汉字字模至自定义字库
      依照前面所介绍的自定义字库的字模数组,这里介绍如何使用取字模的工具软件取出合适于MT22的驱动程序的汉字字模数据,并加入自定义的字库中的过程。
      打开字模提取工具后,设置好参数,主要是字体以及字号大小,使其取出来的字模数据正好是32*32点阵大小,并且设置取模的方向为自左向右,从上到下的顺序。下面给出一个使用字模提取软件V2.2(Zimo221)提取字模的例子,首先设置字体为华文中宋,字号为21时,正好生成的字模数组是32*32的;如果使用别的字体或者是别的取字模软件时,可以自行调整,以得到32*32点阵的数据。在取字模时,采用取C语言的数组数据形式(因为驱动是使用C语言编写的)。
      这里提取了一个“华”字的字模数据,如下:


      可以看到,所取回的字模数据是以8位字长的BYTE类型存储的,这时就需要考虑是否符合对应的驱动程序了。如果使用了MCS51系列MCU的MT22模块的驱动程序的话,可以直接将字模当中的有效数据拷贝到GB32数组当中即可。这样要显示该汉字时,只需调用PutChar函数显示GB32字库当中该汉字所在的相对位置即可。
      如果使用了以16位字长的WORD型数据为基本的存储单元的unSP系列单片机的MT22模块驱动程序的话,需要先将取回的字模数据进行处理,即将数组当中以8位字长的BYTE为单位的数据改为16位字长的WORD。修改字模数据可以使用一些代码编辑软件,如UltraEdit。当然,如果使用了一些可以直接生成16位字长数据的取字模工具的话,也就无需修改了。
      这里示例一下使用UltraEdit对8位的字模数据修改成16位字模数据的过程。
      将取回的8位的字模数据拷贝存放到一个.TXT文档中,并保存关闭。使用UltraEdit软件打开此文档,如下图所示:

      然后,选用工具栏上的“列块模式”工具,如下图中显示的工具:

       这时可以以列为单位去选择文本,如下图所示:

      将选中的文本(蓝色的区域)删除,然后依次将每隔两个BYTE数据的“,0x”都删除掉,得到如下图所示的数据:

将数据拷贝,置入GB32数组当中,如下表所示:
const unsigned char GB32[ ] =
{
//“科”字,字符数据流开始
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0070,0x0E00,0x01F8,0x0E00,0x07FC,0x0C00,
0x3FC7,0x0C00,0x7983,0xCC00,0x0181,0xEC00,0x0199,0xEC00,
0x01BC,0xCC00,0x7FFC,0x0C00,0x0386,0x0C00,0x07C3,0x8C00,
0x07F3,0xCC00,0x07B9,0xCC80,0x0FBD,0xCDC0,0x0D98,0x8DE0,
0x1D80,0x3FE0,0x3987,0xFC00,0x319F,0x8C00,0x6190,0x0C00,
0x4180,0x0C00,0x0180,0x0C00,0x0180,0x0C00,0x0180,0x0C00,
0x0180,0x0C00,0x0180,0x0C00,0x0100,0x0800,0x0000,0x0000,
//“技”字,字符数据流开始
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x4000,0x0700,0x7000,0x0700,0x7000,0x0600,0x6000,
0x0600,0x6180,0x0660,0x63C0,0x06FF,0xFFE0,0xFFF8,0x6000,
0x0600,0x6000,0x0600,0x6200,0x06F8,0x6700,0x07FF,0xFF80,
0x0F8C,0x0F00,0x7E06,0x0E00,0xFE06,0x1E00,0x7607,0x1C00,
0x2607,0x3C00,0x0603,0xB800,0x0603,0xF800,0x0601,0xF000,
0x0601,0xF800,0x0603,0xFE00,0x060F,0xBFC0,0xFE1E,0x1FF0,
0x3E78,0x07C0,0x1FE0,0x0380,0x0800,0x0000,0x0000,0x0000,//end
//“华”字
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0060,0x0000,0x00F1,0xE000,0x00F9,0xE000,0x01F1,0xC700,
0x01E1,0xCF80,0x03E1,0xDFC0,0x03C1,0xFF00,0x07C1,0xFC00,
0x0FC1,0xF0E0,0x0FC7,0xC0E0,0x1DDF,0xC0E0,0x39F9,0xC0E0,
0x71C1,0xE1F0,0x01C1,0xFFF0,0x01C7,0xFFE0,0x01C7,0x8000,
0x0007,0x00E0,0x0007,0x01F0,0x3FFF,0xFFF8,0x0007,0x0000,
0x0007,0x0000,0x0007,0x0000,0x0007,0x0000,0x0007,0x0000,
0x0007,0x0000,0x0007,0x0000,0x0007,0x0000,0x0000,0x0000
};
可以在应用程序当中调用驱动所提供的API函数来显示这个汉字了,如:
………
FontSet(2,0xf800);       //选择用户自定义的字库,并设置字符颜色
PutChar(10,10,2);        //在10,10点上显示“华”
……….

2.3.1 提取并增加另外尺寸的字模字库
      实际上可以在MT22模块的驱动程序当中作小小的改动,可以方便的添加其它尺寸大小的自定义字库,下面以unSP的MT22模块驱动程序为例,介绍添加新的字库的过程。
      与前面一样,首先利用字模提取工具提取出所需要的汉字(其它的字符当然也可)的字模数据,并利用其它的工具修改成以16位字长为单位的WORD型数据的数组。如提取“铭”、“正”、“同”、“创”这四个字,点阵大小为48*45。在软件工程当中,新建一个C文件或者就直接在驱动自带的GB_Table.c文件当中定义一个新的数组,如命名为GB48,如下所示:
const unsigned char GB48[ ] =
{
//“铭”字,字符数据流开始
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0180,0x0000,0x00E0,
0x01E0,0x0000,0x00F8,0x01F8,0x0000,0x00FC,0x03F8,0x0000,
0x01F8,0x03F0,0x0000,0x01F0,0x03E0,0x6000,0x01F1,0x87E0,
0xF000,0x01F3,0xC7C1,0xFC00,0x03E7,0xE7FF,0xFE00,0x03FF,
0xFF81,0xFE00,0x03E0,0x0F83,0xF800,0x07C0,0x1F03,0xF000,
0x07C7,0x1F87,0xE000,0x078F,0xBFCF,0xE000,0x0F8F,0xFFEF,
0xC000,0x0FFF,0xF9FF,0x8000,0x1EF0,0xF1FF,0x8000,0x1CF0,
0xE1FF,0x0000,0x3CF0,0x01FE,0x0000,0x38F3,0x80FC,0x0000,
0x70F3,0xC1F8,0x4000,0x00F7,0xEFF0,0xF000,0x3FFF,0xFFE1,
0xFC00,0x00F0,0x1FFF,0xFE00,0x00F0,0x3F00,0x7C00,0x00F0,
0x7F00,0x7800,0x00F0,0xFF00,0x7800,0x00F3,0xEF00,0x7800,
0x00F7,0xCF00,0x7800,0x00F3,0xEF00,0x7800,0x00F7,0xCF00,
0x7800,0x00FF,0x8F00,0x7800,0x01FE,0x0F00,0x7800,0x01FC,
0x0FFF,0xF800,0x03F8,0x0F00,0x7800,0x01F0,0x0F00,0x7800,
0x00E0,0x1F00,0x7800,0x0060,0x1E00,0x6000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
//“正”字,字符数据流开始
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0001,0xC000,0x0000,0x0003,0xF000,
0x0000,0x0007,0xF800,0x0FFF,0xFFFF,0xFC00,0x0000,0x1E00,
0x0000,0x0000,0x1E00,0x0000,0x0000,0x1E00,0x0000,0x0000,
0x1E00,0x0000,0x0000,0x1E00,0x0000,0x0000,0x1E00,0x0000,
0x0000,0x1E00,0x0000,0x00C0,0x1E00,0x0000,0x00F8,0x1E00,
0x0000,0x00FC,0x1E0F,0x0000,0x00F8,0x1E0F,0xC000,0x00F0,
0x1E1F,0xE000,0x00F0,0x1FFF,0xE000,0x00F0,0x1E00,0x0000,
0x00F0,0x1E00,0x0000,0x00F0,0x1E00,0x0000,0x00F0,0x1E00,
0x0000,0x00F0,0x1E00,0x0000,0x00F0,0x1E00,0x0000,0x00F0,
0x1E00,0x0000,0x00F0,0x1E00,0x0000,0x00F0,0x1E00,0x0000,
0x00F0,0x1E00,0x0000,0x00F0,0x1E00,0x0000,0x00F0,0x1E00,
0x0000,0x00F0,0x1E00,0x0000,0x00F0,0x1E00,0xF000,0x00F0,
0x1E01,0xF800,0x00F0,0x1E03,0xFC00,0x7FFF,0xFFFF,0xFE00,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
//“同”字,字符数据流开始
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0700,0x0001,0xF000,
0x07C0,0x0003,0xF800,0x07FF,0xFFFF,0xFC00,0x0780,0x0000,
0xF800,0x0780,0x0000,0xF000,0x0780,0x0000,0xF000,0x0780,
0x0070,0xF000,0x0780,0x0078,0xF000,0x0780,0x00FC,0xF000,
0x07BF,0xFFFE,0xF000,0x0798,0x0000,0xF000,0x0780,0x0000,
0xF000,0x0780,0x0000,0xF000,0x0787,0x00C0,0xF000,0x0787,
0xC1F0,0xF000,0x0787,0xFFF8,0xF000,0x0787,0x81F8,0xF000,
0x0787,0x81E0,0xF000,0x0787,0x81E0,0xF000,0x0787,0x81E0,
0xF000,0x0787,0x81E0,0xF000,0x0787,0x81E0,0xF000,0x0787,
0x81E0,0xF000,0x0787,0x81E0,0xF000,0x0787,0xFFE0,0xF000,
0x0787,0x81E0,0xF000,0x0787,0x81E0,0xF000,0x0787,0x81E0,
0xF000,0x078F,0x81C0,0xF000,0x0780,0x0000,0xF000,0x0780,
0x0079,0xF000,0x0780,0x007F,0xF000,0x0780,0x001F,0xF000,
0x0780,0x0007,0xF000,0x0F80,0x0007,0xE000,0x0E00,0x0007,
0x8000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
//“创”字,字符数据流开始
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0018,
0x0000,0x6000,0x003F,0x0000,0x7C00,0x003F,0x8000,0x7E00,
0x003F,0x0000,0x7800,0x007E,0x0000,0x7800,0x007F,0xC000,
0x7800,0x007F,0xF800,0x7800,0x00FD,0xFE38,0x7800,0x00F8,
0xFE3E,0x7800,0x01F8,0x3F3E,0x7800,0x01F0,0x1F3C,0x7800,
0x03F0,0x1F3C,0x7800,0x03E0,0x0E3C,0x7800,0x03C0,0x703C,
0x7800,0x07E0,0xFC3C,0x7800,0x0FFF,0xFE3C,0x7800,0x0FE0,
0x7C3C,0x7800,0x1FE0,0x783C,0x7800,0x1DE0,0x783C,0x7800,
0x39E0,0x783C,0x7800,0x71E0,0x783C,0x7800,0x61E0,0x783C,
0x7800,0x01E0,0xF83C,0x7800,0x01E0,0xF83C,0x7800,0x01EF,
0xF83C,0x7800,0x01E7,0xFB3C,0x7800,0x01E3,0xF73C,0x7800,
0x01E1,0xE730,0x7800,0x01E0,0x0700,0x7800,0x01E0,0x0780,
0x7800,0x01E0,0x0780,0x7800,0x01E0,0x0FFC,0x7800,0x01F8,
0x7FFF,0xF800,0x01FF,0xFFCF,0xF800,0x01FF,0xFF83,0xF800,
0x00FF,0xFF01,0xF000,0x0000,0x0001,0xE000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
};
定义完成后,需要在LCD_Dis.c文件的前面对该数组进行外部的声明,如下:
extern const unsigned char GB48[ ];   /48*45自定义的汉字库
然后,修改FontSet函数的代码,增加一个选项,如下:
void FontSet(int Font_NUM,unsigned int Color)
{
switch(Font_NUM)
{
  case 1: Font_Wrod = 29; //ASII字符每个字符占用的存储单位
   X_Witch = 15;  //字符的宽度
   Y_Witch = 29;  //字符的高度
   Char_Color = Color;//设置字符颜色
   Char_TAB = (unsigned char *)(Asii16 - (32*29));//设置字库数组首地址
  break;
  case 2: Font_Wrod = 64; //自定义字库的每个字符占用存储单位
   X_Witch = 32;       //字符的宽度
   Y_Witch = 32;       //字符的高度
   Char_Color = Color;
   Char_TAB = (unsigned char *)GB32; //设置字库数组首地址
  break;
  case 3: Font_Wrod = 135; //自定义字库的每个字符占用存储单位
   X_Witch = 48;       //字符的宽度
   Y_Witch = 45;       //字符的高度
   Char_Color = Color;
   Char_TAB = (unsigned char *)GB48; //设置字库数组首地址
  break;

}
}
最后就可以在应用程序当中调用驱动所提供的API函数来显示这几个汉字了,如:
………
FontSet(3,0xf800);       //选择用户自定义的字库,并设置字符颜色
PutChar(20,20,0);        //在20,20点上显示“铭”
PurtChar(68,20,1);       //在68,20点上显示“正”
PutChar(20,65,2);        //在20,65点上显示“同”
PurtChar(68,65,3);       //在68,65点上显示“创”
……….

3 结语
      本文介绍了如何在MT22彩色LCD模块的驱动程序的基础上进行汉字显示的原理,以及一般的操作方法,包括提取汉字字模数据,以及将字模数据添加到字库当中的操作过程等,依据本文提供的显示汉字的方法,使用户可以更加灵活方便的使用MT22彩色LCD模块,解决了目前LCD模块显示汉字的需求与设计麻烦之间的矛盾。
      实际上在用户的操作过程当中,可能会使用不同的工具软件,或者是不同的操作方法,这些并不重要,只要了解了MT22模块显示驱动程序对字符显示的组织形式,了解了汉字显示的原理,都可根据自身的实际情况去完成具体的操作的。


关闭】【打印
友情链接:
© 2007 电子设备网 网站地图