LCD点阵显示直观、灵活,已成为许多嵌入式产品的显示方式。在嵌入式产品的LCD中文显示中,因为成本和存储空间等诸多原因,往往选用不带字库的LCD模块,而是只自己提取需要显示的汉字的字模,编译到程序中。有没有一种方法可以直接在程序设计时输入汉字,然后在编译前自动生成汉字取模后的.c文件呢?
笔者以前就写了一个字模提取软件,可以嵌入到IAR等编译器中,提取文件夹内所有.C文件中双引号中的汉字,并自动跳过注释内容,并生成字模文件。下面详细说一下使用方法,希望对大家有所帮助。
首先,要下载这个小工具然后解压,这个我已经把到上传到百度网盘中了,地址是:
百特驿站http://www.b-tech.com.cn/?p=152
第二步,是配置编译器,让编译前自动执行生成HZK.C,如下图:
前面D:\test\hzk.exe是程序的路径,后面的参数D:\test是要搜索包含中文信息C文件的目录,生成的HZK.C文件会在与hzk.exe小工具同级的目录下。
第三步,就是把HZK.C加入到编译工程,这个都知道。
第四步,还要自己写一个HZK.h的头文件,这个文件定义了HZK.C的结构,其内容如下:
#ifndef _HZK_H_
#define _HZK_H_
typedef struct hz_struct{
unsigned short internal_code;
unsigned char dot_matrix_data[32];
}hz_struct;
extern const hz_struct Hzk[];
extern const unsigned short hzk_bytes;
#endif
这样就可以了,这可以直接程序,包含显示的中文信息,而不用管字库了,当然还要设计显示接口,这里就不说了。下面看一下效果吧
我的测试main.c中的内容如下:
char *str="欢迎访问我的博客:百特驿站(www.b-tech.com.cn)";
int main()
{
return 0;
}
编译后,自动生成的HZK.C的内容如下:
#include "hzk.h"
const hz_struct Hzk[] =
{
{ 0xB0D9, 0x00, 0x04, 0xFF, 0xFE, 0x01, 0x00, 0x02, 0x00, 0x04, 0x10, 0x1F, 0xF8, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0xF0, 0x10, 0x10,},
{ 0xB2A9, 0x20, 0x50, 0x20, 0x48, 0x2F, 0xFE, 0x20, 0x40, 0x27, 0xFC, 0xFC, 0x44, 0x27, 0xFC, 0x24, 0x44, 0x27, 0xFC, 0x24, 0x44, 0x20, 0x10, 0x2F, 0xFE, 0x22, 0x10, 0x21, 0x10, 0x20, 0x50, 0x20, 0x20,},
{ 0xB5C4, 0x10, 0x40, 0x10, 0x40, 0x22, 0x44, 0x7F, 0x7E, 0x42, 0x84, 0x43, 0x04, 0x42, 0x04, 0x42, 0x84, 0x7E, 0x64, 0x42, 0x24, 0x42, 0x04, 0x42, 0x04, 0x42, 0x04, 0x7E, 0x04, 0x42, 0x28, 0x00, 0x10,},
{ 0xB7C3, 0x00, 0x80, 0x20, 0x40, 0x10, 0x40, 0x10, 0x04, 0x07, 0xFE, 0x00, 0x80, 0xF0, 0x88, 0x10, 0xFC, 0x10, 0x88, 0x10, 0x88, 0x10, 0x88, 0x10, 0x88, 0x15, 0x08, 0x19, 0x08, 0x12, 0x50, 0x04, 0x20,},
{ 0xBBB6, 0x00, 0x80, 0x00, 0x80, 0xFC, 0x80, 0x04, 0xFC, 0x45, 0x04, 0x46, 0x48, 0x28, 0x40, 0x28, 0x40, 0x10, 0x40, 0x28, 0x40, 0x24, 0xA0, 0x44, 0xA0, 0x81, 0x10, 0x01, 0x08, 0x02, 0x0E, 0x0C, 0x04,},
{ 0xBFCD, 0x02, 0x00, 0x01, 0x00, 0x7F, 0xFE, 0x48, 0x02, 0x8F, 0xF4, 0x08, 0x20, 0x14, 0x40, 0x23, 0x80, 0x0C, 0x60, 0x30, 0x1E, 0xCF, 0xE4, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x0F, 0xE0, 0x08, 0x20,},
{ 0xCCD8, 0x10, 0x40, 0x10, 0x40, 0x50, 0x48, 0x53, 0xFC, 0x7C, 0x40, 0x90, 0x44, 0x17, 0xFE, 0x18, 0x10, 0x30, 0x14, 0xD7, 0xFE, 0x11, 0x10, 0x10, 0x90, 0x10, 0x90, 0x10, 0x10, 0x10, 0x50, 0x10, 0x20,},
{ 0xCECA, 0x20, 0x04, 0x1B, 0xFE, 0x08, 0x04, 0x40, 0x04, 0x40, 0x24, 0x4F, 0xF4, 0x48, 0x24, 0x48, 0x24, 0x48, 0x24, 0x48, 0x24, 0x48, 0x24, 0x4F, 0xE4, 0x48, 0x24, 0x40, 0x04, 0x40, 0x14, 0x40, 0x08,},
{ 0xCED2, 0x04, 0x80, 0x0E, 0xA0, 0x78, 0x90, 0x08, 0x90, 0x08, 0x84, 0xFF, 0xFE, 0x08, 0x80, 0x08, 0x90, 0x0A, 0x90, 0x0C, 0x60, 0x18, 0x40, 0x68, 0xA0, 0x09, 0x20, 0x0A, 0x14, 0x28, 0x14, 0x10, 0x0C,},
{ 0xD3AD, 0x00, 0x00, 0x41, 0x84, 0x26, 0x7E, 0x14, 0x44, 0x04, 0x44, 0x04, 0x44, 0xF4, 0x44, 0x14, 0xC4, 0x15, 0x44, 0x16, 0x54, 0x14, 0x48, 0x10, 0x40, 0x10, 0x40, 0x28, 0x46, 0x47, 0xFC, 0x00, 0x00,},
{ 0xD5BE, 0x00, 0x40, 0x20, 0x40, 0x10, 0x44, 0x10, 0x7E, 0xFE, 0x40, 0x00, 0x40, 0x44, 0x40, 0x44, 0x44, 0x25, 0xFE, 0x25, 0x04, 0x29, 0x04, 0x09, 0x04, 0x1F, 0x04, 0xE1, 0x04, 0x41, 0xFC, 0x01, 0x04,},
{ 0xE6E4, 0x08, 0x00, 0xFD, 0xFC, 0x08, 0x88, 0x48, 0x50, 0x48, 0x20, 0x48, 0x50, 0x48, 0x8E, 0x4B, 0x24, 0x7C, 0x20, 0x05, 0xFC, 0x04, 0x20, 0x1C, 0x24, 0xE7, 0xFE, 0x04, 0x20, 0x14, 0x20, 0x08, 0x20,},
};
const unsigned short hzk_bytes=sizeof(Hzk)/sizeof(hz_struct);
本文出处:百特驿站http://www.b-tech.com.cn/?p=152