申请书范文网,分享全网优秀范文,学习好帮手!
申请书范文网 > 汉字点阵与图形点阵提取方法及在LCD图形点阵液晶屏显示

汉字点阵与图形点阵提取方法及在LCD图形点阵液晶屏显示

时间:2020-07-22 16:59:47

相关推荐

汉字点阵与图形点阵提取方法及在LCD图形点阵液晶屏显示

在单片机驱动LCD点阵小液晶屏应用中,除了显示英文字母外,还需要显示汉字或图形,以丰富显示内容,在单色LCD点阵小液晶屏中,英文字母、汉字、图形均是以亮点暗点不同的组合来显示不同的内容,由于在单片机类电路中驱动运算能力有限,显示内容有限,所以可以把预先需要的的显示内容按一定的数据组合提取、储存,方便使用时选取使用。

一、显示同容分类

1、英文字符:

数量有限:ASCII码:0~31及127(共33个)是控制字符或通信专用字符控制码,其余为可显示字符32~126(共95个)是字符(32是空格),其中48~57(0x30--0x39)为0到9十个阿拉伯数字。65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等例如在程序中,char ch='A';ch值为0x41; char ch='a'; ch=0x61; char ch='1'; ch=0x31; 等等

2、汉字:

在国标GB2312-80 标准中,将所有的汉字分为01-94区,每个区有94个位,每个区可以存放94个汉字,这样总共就有 94*94=8836 个汉字

3、图形:

在应用中可设为图形块来显示,如分为64*64图形块,128*64 图形块,如在192*64LCD图形点阵显示模块中,直接使用图形块的大小为192*64

上述三种分类,实际在192*64LCD图形点阵显示模块中,显示原理是一样的,都是用亮点暗点不同的组合来显示的。

二、字模图模说明

1、英文字模

英文要显示的字符对应的字模数量有限,可在英文模板字库中直接全部提取,一般 128个基本ASCII数量的字模够就够用了,总点存储量只有128*字模占有字节数;如16点阵列半角,只占有128*16=2K字节即可;除去不显示的控制码,还可减少不少使用时直接全部导出,方便使用。

2、汉字字模

基本汉字就有 94*94=8836 个汉字,以16点阵汉字为例,一个字模占用32字节共占用282752字节,约276K-277K,如是24点阵字模,一个字模点72字节,更是需占用8836*72字节的存储量,单片机资源有限,显示数量有限,不易存储这么多,一般提取需要的数量的字模使用。

3。图形模块

图形模块,我们把它简称为图模,是把图形,做成需要的二值化点阵图片数据,点数尺寸可以是16*16,32*32,16*8......192*64等等,尺寸以8的倍数为宜,一般做为启动画面,或替代字模数据使用。

三、字模图模数据提取

1、字模的提取:

字模可以从点阵字体文件中提取,这些字模文件就是按字体大小按一定方式存储一个个规则的小图形,如在Asc5x8E.dot是5*8点阵英文字模小图形,“宋体16.dot”中存储的是16*16点规格的宋体形状的汉字字模小图形,在“繁宋16.dot”中存储的是16*16点阵规格的繁宋体形状的汉字字模小图形,在"仿宋24.dot"中存储的是24*24点规格的仿宋体形状的汉字字模小图形,在UCDOS下的有HZK16F繁体,HZK24F楷体,ASC16英文16*8点, HZK12 汉字简体12*12点,汉字字模按需要的规格可直接从这些文件中提取。

注意:

英文字符字模提取要点:寻址由ASCII码值*字模大小寻址, 如ASC16中字模大小为16字节,从0x21- 0x7E包括了基本的ASCII码显示字符。

汉字提取关键点:

a)寻址:汉字字模在点阵字库中以字模的大小,按区位码排列,每区94个,再转入下一区,

区位码的计算方法可由机内码得到:

b)机内码:两个机内码在计算机中表示的一个汉字的编码

char strch[]="啊";

strch[0],strch[1] 即为汉字“啊”的机内码;

c)由机内码转区位码

机内码与区位码的转换 VC中处理如下

BYTE nA=(strch[0]&0x7f)-0x21;//区码

BYTE nB=(strch[1]&0x7f)-0x21;//位码

str.Format("%s:机内吗:%02X%02X 区位码:%02X%02X",strch,(BYTE)strch[0],(BYTE)strch[1],nA,nB);

啊:机内吗:B0A1 区位码:0F00

阿:机内吗:B0A2 区位码:0F01

鳌:机内吗:F7A1 区位码:5600

鳍:机内吗:F7A2 区位码:5601

齄:机内吗:F7FE 区位码:565D

d)由区位码寻址:long int nPos=(a*94+b)*字模大小;

e)提取对应数据,即为字模,按上述图示在计算机上画点即可显示。

汉字字模大小(字节):12点阵字:24、16点阵列字32 、24点阵列字:72、32点阵大小:128...另外:在实际处理过程中,发现:(1)在*.dot点阵文件中,2区是英文字符区(字模块大小同汉字),

(2)UCDOS下的有HZK16F繁体,ASC16英文16*8点, 点阵排列与上面点阵列描述排列一致,而HZK24F楷体却不同,一是寻址:汉字的区位从0为起始,即区码为:BYTE nAu=nA-15;//区码

二是字模排列竖排:如图,第二行是变换后的。

(3)区码为87及以上,在一些汉字点阵库中没找到显示块。

2、图模提取:

1)准备一个如下192*64的位图图片:

2)打开位图文件,加载位图,生成单色的位图

3)从单色图中,按列向8点提取一个字节的位图数据方法,产生LCD液晶示文件如:TS-1StartTu.ht8,文件数据结构如下:

#ifndef _LCD19264TU_

#define _LCD19264TU_

unsigned char code Lcd19264Tu[]={

0xc0 ,0x40 ,//宽度高度

0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x80 ,0x40 ,0x20 ,0x10 ,0x08 ,0x08 ,0x08 ,0x04 ,0x04 ,0x04 ,0x02 ,0x82 ,0x62 ,0x1e ,0x62 ,0x82 ,0x02 ,0x02 ,0x04 ,0x04 ,0x04 ,0x04 ,0x08 ,0x08 ,0x10 ,0x20 ,0x40 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00

......}

方便LCD编程使用,使用效果如下:

类似地:

3、由图模的方法提取任意自定义字模:

1)创建一个自定义大小有设备无关字模大小的位图,如在产生48*48汉字点阵,创建产生48*48大小的位图

2)创建对应的需要的字体,字体高度与上图高度一致

3)在位图上写字

4)按规则提取位图上的数据,如按竖列8位一字节方式

5)如提取全字库,则按区位码寻址规则遍历循环即可。

下面是生成字体的位图类的头文件:

class CTxtBmp

{

public:

CTxtBmp(void);

~CTxtBmp(void);

int m_nW,m_nH;

CTxtBmp(int nW,int nH);

CFont m_font;

HBITMAP hTxtWhiteDIB;

LPBYTE CreateWhiteDIB( CDC *pDC);

COLORREF SetBmpijPixel(unsigned char* pBit,int nWidth,int nHeight,int i,int j,COLORREF cref);

COLORREF GetBmpijPixel(unsigned char* pBit,int nWidth,int nHeight,int i,int j);

void SetPixel(unsigned char* pBit,int nBlue,int nGreen,int nRed);

COLORREF GetPixel(unsigned char* pBit);

void SetDrawFont(int nH,const char cType[]);

void setWH(int nW,int nH);

CRect txtRect;

public:

static CBrush* m_pBrush;

static int xa;

void twoVauleBmp();

};

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。