本帖最后由 jinglixixi 于 2017-3-21 14:10 编辑
前面我们对套件的源代码进行了一定程度的解读,在此基础上为了弥补当初为拍照LOGO而将程序误擦除的遗憾,只需在 PU timage(LOGO) 语句后加一条while(1) 即可让显示停顿下来,拍到的LOGO显示效果则如图1所示。
图1 LOGO显示效果
通过对源程序的分析可以发现该套件是能够实现中文显示的,该函数为void PUTchar8x16(unsigned char row,unsigned char col,unsigned char *pcStr,unsigned char flag); 其中,row为行位置,col为列位置,pcStr为中文字符串, flag为显示标志列位置。 由于LCM_12864自身不带中文字库,所以使用的字库必须构建在程序中,其字库结构如下:
- const unsigned char CHINESE[]=
- {
- 0x40,0x40,0x42,0xCC,0x00,0x00,0xFC,0x24,0xA4,0x24,0x22,0x22,0xA3,0x62,0x00,0x00,
- 0x00,0x40,0x20,0x1F,0x20,0x58,0x47,0x50,0x48,0x45,0x42,0x45,0x48,0x50,0x40,0x00,/*"退",0*/
- 0x00,0x00,0xFE,0x02,0x02,0xF2,0x12,0x12,0x12,0xF2,0x02,0x02,0xFE,0x00,0x00,0x00,
- 0x00,0x00,0x7F,0x20,0x20,0x27,0x24,0x24,0x24,0x27,0x20,0x20,0x7F,0x00,0x00,0x00,/*"出",1*/
- 0x10,0x60,0x02,0x8C,0x00,0x0C,0xA4,0xA4,0xA5,0xE6,0xA4,0xA4,0xA4,0x0C,0x00,0x00,
- 0x04,0x04,0x7E,0x01,0x00,0x80,0x4F,0x2A,0x0A,0x0F,0x0A,0x2A,0x4F,0x80,0x00,0x00,/*"演",2*/
- 0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xC2,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00,
- 0x20,0x10,0x08,0x06,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x02,0x04,0x08,0x30,0x00,/*"示",3*/
- };
复制代码
要想实现图2的显示效果,对PUTchar8x16()的使用方法为: LcmClear(); PUTchar16x16(6,10,"演",0); //演示 PUTchar16x16(6,12,"示",0); //4行 8列 32字
图2 中文显示效果
那如何来构建自己的小字库呢? 经比对使用3310液晶显示屏汉字提取程序即可构建与PUTchar8x16()相匹配的字库。
图3 字模提取
此外,为了保证显示的正常,在自行构建字库后,还要适当地修改该字库索引数组。 const unsigned int GBC_Index[]= { 2321,/*"退" 0*/ 2756,/*"出", 1*/ 4961,/*"演", 2*/ 4230,/*"示", 3*/ };
值得注意的是在索引数组中,每行注释前的数字为对应字模的区位码,可使用图4所示的内码查看工具来获得。 |