首页 > 范文大全 > 正文

嵌入式控制系统建立显示字库问题研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇嵌入式控制系统建立显示字库问题研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:在嵌入式控制系统设计中,我们遇到的第一个问题就是人机界面设计,即如何在LCD上显示汉字、西文字符和各种曲线。这涉及到两个问题,一是如何获得汉字、西文字符和各种曲线的显示字模;二是如何在各种STN或TFT LCD上显示这些字模,即LCD显示驱动问题。作者在“嵌入式控制系统人机界面设计引导软件包”中,较好地解决了这两个问题,给出了实用程序,并在实际中得到广泛应用。有了“嵌入式控制系统人机界面设计引导软件包”的支持,嵌入式控制系统设计者可以很容易地解决字模提取和显示驱动问题,轻松完成人机界面设计。“嵌入式控制系统人机界面设计引导软件包”包含两个模块,一个是“通用字模提取”模块,另一个是“LCD显示驱动”模块,此文章介绍第一个模块。

关键词:区位码;内码;字模;Delphi

中图分类号:TN141.9 文献标识码:B

Research on Building Printing Matrix Library for Display in Embedded Control System

HOU Dian-you, LIU Xiao-guang, JI He

(College of Optical and Electronic Information Changchun University of Science and Technology,Changchun Jilin 130012, China)

Abstract: In order to build a very kind human-machine interface, i.e. to display Chinese characters, western characters and all kinds of curves on LCD in embedded control system, we must solve two main problems, i.e. how to get the printing matrix of Chinese characters, western characters, the curves and how to display them on LCD. The author designed a software package-"Human-Machine Interface Designer Guide Software Package of Embedded Control System", which has solved the problems successfully and widely used in practice. Based on this SW package, the user can build vivid and powerful human-machine interface freely in application. This SW package includes two modules, one is "Common Printing Matrix Pick-up", the other is "The Drivers of LCD Display". This article will introduce the first one.

Keywords:area code; ISN; printing matrix; delphi

1 “通用字模提取”模块功能

(1) 可以提取汇编语言形式的字模,也可以提取C语言形式的字模;

(2) 可以选择直接输入汉字,也可以选择直接输入区位码。

如果选择直接输入汉字,可选择任何一种输入法输入汉字,可选择的字库有:全部可以显示的8×8点阵ASCII字符、全部可以显示的8×16点阵ASCII字符、12×12点阵宋体或仿宋体汉字、16×16点阵宋体或仿宋体或楷书体汉字、24×24点阵宋体或仿宋体或楷书体汉字、48×48点阵宋体或仿宋体或楷书体汉字。

如果选择直接输入区位码,可选择的字库或字体有:国标上有的拉丁文数字、一般符号、序号、日文假名、希腊字母、英文、俄罗斯文、汉语拼音符号、汉语注音字母等字膜;

(3) 转换后的字模数据除在屏上显示外,还以txt文档的形式存放在用户指定的路径中,用户随时可以打开查看,也可以复制到程序数组中,在程序中显示使用;

(4) 操作简便。在汉字输入界面用某种输入法输入汉字或区位码后,按“转换”键就一切OK;

(5) 人机界面友好、生动,给使用者以轻松愉悦的感觉。

2 实现原理

2.1 选择直接输入汉字

我们知道在计算机内英文字符是用一个字节的ASCII码表示,该字节最高位一般用做奇偶校验,故实际是用7位码来代表128个字符的,但对于汉字来说,只有用两个字节才能代表,这样用两个字节代表一个汉字的代码体制,国家制定了统一标准,称为国标码。

国标码规定,组成两字节代码的最高位为0,即每个字节仅只使用7位,这样在机器内使用时,由于英文的ASCII码也在使用,可能将国标码看成两个ASCII码,因而规定用国标码在机器内表示汉字时,将每个字节的最高位置加1,以显示该码表示的是汉字,这些国标码两字节最高位加1后的代码称为机器内的汉字代码,简称内码。

以“哈”字为例:其国标码为0x3974,其内码为0xB9F4,即国标码与内码存在一种简单转换关系,将16进制的国标码两个字节各加80H后,即成内码。

因为当我们用某种输入设备例如键盘将汉字输入计算机时,管理模块将自动把键盘输入的汉字转换为机内码,从而再由内码转换成区位码,找到汉字库的汉字进行显示。

由于区位码和内码存在着固定的对应关系,因而知道了某汉字的内码,即可确定出对应的区位码,知道了区位码,就可找出该汉字字模在字库中存放的地址,由此地址调出该汉字的字节内容(字模)进行显示。

即若汉字内码为十六进制数0xaaff,则区号qh和位号wh分别为:

qh=0xaa-0xa0;

wh=0xff-0xa0;

因而该汉字在汉字库中离起点的偏移位置(以字节为单位),16×16点阵可计算为:

offset16=(94×(qh-1)+(wh-1))×32;

24×24点阵因为有点特殊,其偏移位置可计算为:

offset24=(94x(qh-16)+(wh-1))×72;

48×48点阵同24×24点阵,其偏移位置可计算为:

offset48=(94×(qh-16)+(wh-1))×288。

2.2 选择直接输入区位码

我国1981年公布了《信息交换用汉字编码字符集(基本集)》GB2312-80方案,把高频字、常用字和次常用字集合成汉字基本字符(共6,763个),在该集中按汉字使用的频率,又将其分成一级汉字3,755个(按拼音排序)、二级汉字3,008个(按部首排序),再加上西文字母、数字、图形符号等700个。

国家标准的汉字字符集(GB2312-80)在汉字操作系统中是以汉字库的形式提供的。汉字库结构做了统一规定,即将字库分成94个区,每个区有94个汉字(以位做区别),每一个汉字在汉字库中有确定的区和位编号(用两个字节),就是所谓的区位码(区位码的第一个字节表示区号,第二个字节表示位号),因而只要知道了区位码,就可知道该汉字在字库中的地址。

每个汉字在字库中是以点阵字模形式存储的,如一般采用16×16点阵形式。每个点用一个二进制bit位表示,bit=1的点,当显示时,就可以在屏上显示一个亮点,bit=0的点,则在屏上不显示,这样把存某字的16×16点阵信息直接用来在显示器上按上述原则显示,则将出现对应的汉字。如“哈”的区位码为2594,它表示该字字模在字符集的第25个区的第94个位置。

2.3 程序实现

(1) 首先确定是要提汇编语言形式的字模,还是提C语言形式的字模。

汇编语言字模形式(以十进制数10为例):0AH;C语言字模形式0x0a;

(2) 确定字模点阵形式

一个12×12点阵汉字占24个字节,排列4行,每行6字节,在Delphi语言中,其中每1行C语言和汇编语言的排列格式是:

c51buf12:string='0x000,0x000,0x000,0x000, 0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,';

a51buf12:string='db000h,000h,000h,000h,000h, 000h,000h,000h,000h,000h,000h,000h';

一个16×16点阵汉字占32个字节,排列4行,每行8字节,其中每1行C语言和汇编语言的排列格式是:

c51buf16:string='0x000,0x000,0x000,0x000, 0x000,0x000,0x000,0x000,';

a51buf16:string='DB000h,000h,000h,000h,0 00h,000h,000h,000h ';

一个24×24点阵汉字占72个字节,排列4行,每行18字节,其中每1行C语言和汇编语言的排列格式是:

c51buf24:string='0x000,0x000,0x000,0x000, 0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,';

a51buf24:string='db000h,000h,000h,000h,00 0h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h ';

一个48×48点阵汉字占288个字节,排列16行,每行18字节,其中每1行C语言和汇编语言的排列格式是:

c51buf48:string='0x000,0x000,0x000,0x000, 0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,';

a51buf48:string='db000h,000h,000h,000h,00 0h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h ';

(3) 根据输入的内码或区位码,找到该汉字在字库中的位置,取出以二进制形式存储的字模数据,按(2)中方法进行转换即可。

3 程序分析

下面介绍用面向对象的可视化编程语言Delphi来提取字膜。由于Delphi功能强大,因此作者在研制该软件时也尽量使其功能齐全、使用方便,该程序可以提取汇编语言和C语言两种形式的字模,以方便使用不同语言的应用程序。

该程序可以提取的字模点阵有:16×16点阵宋体汉字库、16×16点阵仿宋体汉字库、24×24点阵宋体汉字库、24×24点阵仿宋体汉字库、48×48点阵宋体汉字库、如果输入方式选择区位码可以得到国标上有的拉丁文数字、一般符号、序号、日文假名、希腊字母、英文、俄罗斯文、汉语拼音符号、汉语注音字母等字模。

首先在窗口上加两个Memo控件,Memo1用来输入汉字,Memo2显示转换后的字模;放两个ComboBox控件,ComboBox1做语言选择,它决定转换后的字模数据是C语言格式还是汇编语言格式,ComboBox2用来选择点阵字库;再加入两个Edit控件,分别输入密码和输入小字库存放路径;加入两个BitBtn按钮,输入转换和关闭命令。

为了装饰,加了两个小动画控件WebBroser1、WebBroser2和两个DateTimePicker控件显示日期和时间,还有几个Label控件做标签。

程序名称为MinFonBase,本程序较长,因此按结构分成8小节给出并解释。

unit MinFonBase;

interface

uses

Windos,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,

Dialogs,StdCtrls,Buttons,OleCtrls,SHDocVw,ExtCtrls,ComCtrls;

type

TForm1 = class(TForm)

Memo1: TMemo;

ComboBox1: TComboBox;

ComboBox2: TComboBox;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Memo2: TMemo;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

WebBroser1: TWebBroser;

WebBroser2: TWebBroser;

DateTimePicker1: TDateTimePicker;

DateTimePicker2: TDateTimePicker;

Timer1: TTimer;

Edit1: TEdit;

Label6: TLabel;

Edit2: TEdit;

Label5: TLabel;

Procedure FormCreate(Sender: Tobject);//初始化

Procedure BitBtn1Click(Sender: Tobject); //转换

Procedure BitBtn2Click(Sender: Tobject); //关闭

Procedure Bintasc(binby:byte;hi:byte;n0:integer); //按位整理字模

Procedure COUNT_1616;//16×16点阵处理

Procedure COUNT_2424;//24×24点阵处理

Procedure COUNT_4848;//48×48点阵处理

Procedure Timer1Timer(Sender: Tobject);//定时器

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

verstr:string;

dirstr2:string; // 当前路径

dirstr1:string; // 小字库路径

implementation

var

3.1 各种字模存储格式

以下6个数组是16×16、24×24、48×48三种汉字点阵的汇编语言和C语言每一行字模的存储格式:

c51buf16:string='0x00000,0x00000,0x00000, 0x00000,0x00000,0x00000,0x00000,0x00000,';

a51buf16:string='dw00000h,00000h,00000h, 00000h,00000h,00000h,00000h,00000h ';

c51buf24:string='0x000,0x000,0x000,0x000, 0x000,0x000,0x000,0x000,0x000,0x000,0x000, 0x000,0x000,0x000,0x000,0x000,0x000,0x000,';

a51buf24:string='db000h,000h,000h,000h, 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h ';

c51buf48:string='0x000,0x000,0x000,0x000, 0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,';

a51buf48:string='db000h,000h,000h,000h, 0 00h,000h,000h,000h,000h,000h,000h,000h,00 0h,000h,000h,000h,000h,000h ';

qh,wh:integer; //区位码变量定义

location: Longint;//以下为各种变量定义

sf:file of byte;

a51c51Flag:integer;

dzkFlag:integer;

c51buf161:string;

a51buf161:string;

c51buf241:string;

a51buf241:string;

c51buf481:string;

a51buf481:string;

bufch16:array[0..31] of byte;

bufch24:array[0..71] of byte;

bufch48:array[0..287] of byte;

x:integer;

{$R *.dfm}

//---------------------------------

// 初始化

//---------------------------------

Procedure TForm1.FormCreate(Sender: Tobject);

begin

dirstr2:=GetCurrentDir; //取当前路径

dirstr2:=IncludeTrailingPathDelimiter(dirstr2); //规范当前路径

self.WebBroser1.Navigate(dirstr2+'44a[1].gif'); //引入两个小动画

self.WebBroser2.Navigate(dirstr2+'6a[1].gif');

Memo1.Clear; // Memo清0

Memo2.Clear;

x:=0;

3.2 字模形式选择

ComboBox1框选择提取字模是C语言形式还是汇编语言形式。

ComboBox1.Items.Add('C51形式'); // ComboBox1初始化

ComboBox1.Items.Add('A51形式');

ComboBox1.ItemIndex:=0;

3.3 点阵形式选择

ComboBox2框选择提取字模的点阵形式。

ComboBox2.Items.Add ('8×8 点阵西文字库');

ComboBox2.Items.Add ('8×16点阵西文字库');

ComboBox2.Items.Add ('16×16点阵图标库');

ComboBox2.Items.Add('16×29点阵中等数字库');

ComboBox2.Items.Add ('32×49点阵大数字库');

ComboBox2.Items.Add('16×16点阵宋体汉字库');

ComboBox2.Items.Add('16×16点阵仿宋体汉字库');

ComboBox2.Items.Add('24×24点阵宋体汉字库');

ComboBox2.Items.Add('24×24点阵仿宋体汉字库');

ComboBox2.Items.Add('48×48点阵宋体汉字库');

ComboBox2.ItemIndex:=0;

edit1.Text:=''; //路径框清0

end;

//---------------------------------

// 关闭

//---------------------------------

Procedure TForm1.BitBtn1Click(Sender: Tobject);

begin

close;

end;

//---------------------------------// 转换

//--------------------------------- Procedure TForm1.BitBtn2Click(Sender: Tobject);

3.4 核对密码、选字库

核对密码、根据ComboBox2内容选字库、做标记和调相应提字模程序,转换结果存储。

var

i,j: integer;

wsstr:string;

xzkfilename:string; //小字库名

dazkfilename:string; //大字库名

begin

if edit2.text'194512125019' then//密码错

begin

showmessage('密码错,);

exit;

end;

if edit1.text='' then

begin

showmessage('小字库路径错!');

exit;

end

else

dirstr1:=edit1.Text; //取路径

dirstr1:=IncludeTrailingPathDelimiter(dirstr1);//确保路径后有定界符"\"

if not DirectoryExists( dirstr1) then //如路径不存在,就建一个

CreateDir(dirstr1);

if ComboBox1.Text='C51形式' thena51c51 Flag:=1 //设标志

elsea51c51Flag:=0;

if (ComboBox2.Text='8×8 点阵西文字库') or (ComboBox2.Text='8×16点阵西文字库')or

(ComboBox2.Text='16×16点阵图标库') or (ComboBox2.Text='16×29点阵中等数字库') or (ComboBox2.Text='32×49点阵大数字库')

then

begin

showmessage('字库已存在,文件在'+dirstr2 +'文件夹中');

xzkfilename:='';

end;

if (ComboBox2.Text='16×16点阵宋体汉字库') then begin

dazkfilename:=dirstr2+'HZK16';

xzkfilename:=dirstr1+'XHZK16';

dzkFlag:=1;

end;

if (ComboBox2.Text='16×16点阵仿宋体汉字库') then begin

dazkfilename:=dirstr2+'HZK16F';

xzkfilename:=dirstr1+'XHZK16F';

dzkFlag:=1;

end;

if (ComboBox2.Text='24×24点阵宋体汉字库') then begin

dazkfilename:=dirstr2+'HZK24S';

xzkfilename:=dirstr1+'XHZK24S';

dzkFlag:=2;

end;

if (ComboBox2.Text='24×24点阵仿宋体汉字库') then begin

dazkfilename:=dirstr2+'HZK24F';

xzkfilename:=dirstr1+'XHZK24F';

dzkFlag:=2;

end;

if (ComboBox2.Text='48×48点阵宋体汉字库') then begin

dazkfilename:=dirstr2+'HZK48S';

xzkfilename:=dirstr1+'XHZK48S';

dzkFlag:=3;

end;

AssignFile(sf,dazkfilename); //关联大字库文件逻辑文件

Reset(sf); //为读写文件做准备

for i:=0 to Memo1.Lines.count-1 do

//遍历Memo1

begin

wsstr:= Memo1.Lines.Strings[i]; // 逐串处理输入汉字

for j:=1 to Length( wsstr) do //处理一串中的各个汉字

begin

iford(WSStr[j])

showmessage('输入错,重新输入!');

xzkfilename:='';

end

else

if((j mod 2)= 1) then

begin

qh:=ord( wsstr[j])-160; //区码

wh:=ord( wsstr[j+1])-160; //位码

case dzkFlag of //处理各种点阵

1: COUNT_1616;

2:COUNT_2424;

3:COUNT_4848

else

exit;

end;

end;

end;

end;

if xzkfilename ''then begin //小字库名如果不空

xzkfilename:=xzkfilename+'.txt';

Memo2.Lines.SaveToFile(xzkfilename); //小汉字库存为.txt文件

showmessage('小字库已建立,字膜存'+xzkfilename+'文件中');

end;

end;

//---------------------------------

//按位转换

//--------------------------------- Procedure TForm1.Bintasc(binby:byte;hi:byte;n0:integer);// 按位转换

3.5 转换和存储

TForm1.Bintasc()根据ComboBox1内容,分别按C语言格式或汇编语言格式逐位转换,并将结果存放入相应格式数组。

begin

case hi of

0: binby:=binby and $of;

1: binby:=( binby shr 4) and $of;

else

Exit;

end;

if(binby>9)then

binby:=binby+$37

else

binby:=binby+$30;

ifa51c51Flag=1 then

begin

case dzkFlag of

1: c51buf16[n0]:=chr(binby);

2: c51buf24[n0]:=chr(binby);

3: c51buf48[n0]:=chr(binby)

else

exit;

end;

end

else begin

case dzkFlag of

1: a51buf16[n0]:=chr(binby);

2: a51buf24[n0]:=chr(binby);

3: a51buf48[n0]:=chr(binby)

else

exit;

end;

end;

end;

//---------------------------------// 1ms定时

//--------------------------------- {

Procedure TForm1.Timer1Timer(Sender: Tobject); //更新时钟

begin

DateTimePicker1.Date:=Now;

DateTimePicker2.Time:=Now;

end;

}

//---------------------------------// 16×16点阵字模提取

//---------------------------------

3.6 16×16点阵转换

16×16点阵一次转换2字节,每字节先转换低4位,再转换高4位。转换后32个字节排两行,每行按8个字(16个字节)存储。

Procedure TForm1.COUNT_1616; //16×16点阵字模提取

var

k,l:integer;

begin

location:=( (qh-1)*94+(wh-1))*32;

//计算偏移量

Seek(sf,0);

Seek(sf,location); //移指针

BlockRead(sf,bufch16,32);

//读32个字节给bufch16

c51buf161:=c51buf16;

a51buf161:=a51buf16;

for k:=0 to 1 do

//修改数据为C或汇编形式

begin

for l:=0 to 7 do

//排二行,一行8个字

begin

//c51

ifa51c51Flag=1 then begin

bintasc(bufch16[k*16+l*2+0],1,l*8+4+0);//第一个字节高位

bintasc(bufch16[k*16+l*2+0],0,l*8+4+1);

//第一个字节低位

bintasc(bufch16[k*16+l*2+1],1,l*8+4+2);

//第二个字节高位

bintasc(bufch16[k*16+l*2+1],0,l*8+4+3);

//第二个字节低位

end

else

begin

//a51

bintasc(bufch16[k*16+l*2+0],1,l*7+6+0);

bintasc(bufch16[k*16+l*2+0],0,l*7+6+1);

bintasc(bufch16[k*16+l*2+1],1,l*7+6+2);

bintasc(bufch16[k*16+l*2+1],0,l*7+6+3);

end;

end;

ifa51c51Flag=1 then

Memo2.Lines.add(c51buf16)

else

Memo2.Lines.add(a51buf16);

c51buf16:= c51buf161;

a51buf16:= a51buf161;

end;

x:=x+1;

if a51c51Flag=1 then

Memo2.Lines.add('// '+chr(160+qh)+chr(160+ wh)+'查询索引号:'+inttostr(x-1))

else

Memo2.Lines.add('; '+chr(160+qh)+chr(160+ wh)+'查询索引号:'+inttostr(x-1));

end;

//---------------------------------// 24×24点阵字模提取

//---------------------------------

3.7 24×24点阵汉字转换

根据区位码移指针,读72个字节给bufch24。24×24点阵汉字72个字节,排4行,一行18个字节。

Procedure TForm1.COUNT_2424; //24×24点阵字模提取

var

k,l:integer;

begin

location:=( (qh-16)*94+(wh-1))*72; //根据区位码移指针

Seek(sf,0);

Seek(sf,location);

BlockRead(sf,bufch24,72);

//读72个字节给bufch24

c51buf241:= c51buf24;

a51buf241:= a51buf24;

for k:=0 to 3 do

begin

for l:=0 to 17 do

begin

//c51

ifa51c51Flag=1 then begin

bintasc(bufch24[k*18+l],1,l*6+4+0);

bintasc(bufch24[k*18+l],0,l*6+4+1);

end

else

begin

//a51

bintasc(bufch24[k*18+l],1,l*5+6+0);

bintasc(bufch24[k*18+l],0,l*5+6+1);

end;

end; //l end

ifa51c51Flag=1 then

Memo2.Lines.add(c51buf24)

else

Memo2.Lines.add(a51buf24);

c51buf24:= c51buf241;

a51buf24:= a51buf241;

end;

//Memo2.Lines.add('');

// Memo2.Lines.add('//'+chr(160+qh)+chr(160+wh));

x:=x+1;

if a51c51Flag=1 then

Memo2.Lines.add('// '+chr(160+qh)+chr(160+ wh)+' 查询索引号:'+inttostr(x-1))

else

Memo2.Lines.add('; '+chr(160+qh)+chr(160+ wh)+' 查询索引号:'+inttostr(x-1));

end;

//---------------------------------

// 48×48点阵字模提取

//---------------------------------

3.8 48×48点阵汉字转换

根据区位码移指针,读288个字节给bufch48。48×48点阵汉字288个字节,排16行,一行18个字节。

Procedure TForm1.COUNT_4848; //48×48点阵字模提取

var

k,l:integer;

begin

location:=( (qh-16)*94+(wh-1))*288; //根据区位码移指针

Seek(sf,0);

Seek(sf,location);

BlockRead(sf,bufch48,288);

//读288个字节给bufch48

c51buf481:= c51buf48;

a51buf481:= a51buf48;

for k:=0 to 15 do

begin

for l:=0 to 17 do

begin

//c51

ifa51c51Flag=1 then begin

bintasc(bufch48[k*18+l],1,l*6+4+0);

bintasc(bufch48[k*18+l],0,l*6+4+1);

end

else

begin

//a51

bintasc(bufch48[k*18+l],1,l*5+6+0);

bintasc(bufch48[k*18+l],0,l*5+6+1);

end;

end; //l end

ifa51c51Flag=1 then

Memo2.Lines.add(c51buf48)

else

Memo2.Lines.add(a51buf48);

c51buf48:= c51buf481;

a51buf48:= a51buf481;

end;

//Memo2.Lines.add('//'+chr(160+qh)+chr(160+ wh));

x:=x+1;

if a51c51Flag=1 then

Memo2.Lines.add('// '+chr(160+qh)+chr(160+ wh)+' 查询索引号:'+inttostr(x-1))

else

Memo2.Lines.add('; '+chr(160+qh)+chr(160+ wh)+' 查询索引号:'+inttostr(x-1));

end;

//---------------------------------// 1ms定时

//---------------------------------

Procedure TForm1.Timer1Timer(Sender: Tobject);//更新时间和日期

begin

DateTimePicker1.Date:=now;

DateTimePicker2.Time:=now;

end;

end.

程序执行画面如图1所示:

4 通用字模提取程序使用说明

通用字模提取程序是用Delphi编写的,如果你对Delphi不熟,不用看程序的源代码,直接使用它的可执行文件即可。

程序使用非常方便,在语言选择框中选择你要提取的字模形式是汇编语言还是C语言,然后选择字库,可以选择的字库是16×16点阵宋体汉字库、16×16点阵仿宋体汉字库、24×24点阵宋体汉字库、24×24点阵仿宋体汉字库、48×48点阵宋体汉字库。

如果你选择区位码输入方式,则可以提取国标上有的拉丁文数字、一般符号、序号、日文假名、希腊字母、英文、俄罗斯文、汉语拼音符号、汉语注音字母等字模。

接着输入密码:194512125019,之后将光标移到中文输入框,用任一种中文输入法输入中文,将小字库存放的盘符输入到选择框,例如D:\,按转换键,则转换好的字模会在“字模输出框”中显示,同时在D盘中会建立一个XHZK16.TXT的文件(假定提取的字模是16×16点阵),将文件打开,将字模最后一个“,”去掉,复制到一个数组中就可以在程序中使用了。

参考文献

[1]王士元,C高级实用程序设计[M]. 北京:清华大学出版社,2000.

[2] 郭 强. 液晶显示应用技术[M]. 北京:电子工业出版社,2000.

[3] S3C2410X 32-BIT RISC MICROPROCESSOR USER'S MANUAL. SAMSUNG ELECTRONICS,2003.

[4] HD66421 DOT MATRIX GRAPHICS LCD. HITACHI SE- MICONDUCTOR,1999.

[5] 孙俊喜. 液晶(LCD)显示原理、编程及应用[M]. 人民邮电出版社,2008.

作者简介:侯殿有(1945-),男,籍贯吉林省长春市,毕业于哈尔滨工业大学,工学硕士,研究方向为嵌入式控制系统设计,长期在中国兵器工业第55研究所从事嵌入式控制系统科研工作,教授级高级工程师。现聘为长春理工大学光电信息学院信息工程分院院长。迄今为止获部科技进步一等奖一次,省级或其它奖励四次,光华三等奖一次。并被收入中国当代科技专家大全,参加多个国家指令性课题和横向课题,如国防科工委BQ-MFS柔性制造系统中的数控制导车,中国运载火箭研究院和中国工程物理研究院的计算机伺服控制双轮旋压机,中国兵器工业总公司的录返式数控旋压和二十多项横向课题。公开出版专著两部, “LCD原理和驱动程序设计”,已由人民邮电出版社正式出版;“ARM9 C语言程序设计标准教程”正在审稿中,现从事“嵌入式设计”等课程教学和科研工作。E-mail:。