请教大家字模点阵的问题!请各位高手帮帮忙,急啊!(100分)

  • 主题发起人 主题发起人 happytimes_dsq
  • 开始时间 开始时间
H

happytimes_dsq

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现的是把字模点阵码通过串口发给单片机,它根据我的点阵码在屏幕上描绘出汉字或英文数字!小弟没有任何经验!所以我找了点资料,现在调用的HZK16能转换汉字字模.但是好象不支持英文和数字.现在我想也能是支持英文和数字!同时我觉得是不是存在汉字的16*16和英文,数字的8*16的问题!请教大家有什么方法可以解决呢?我想,把汉字库里面,加入英文,数字,然后直接调用 应该是方法,但是但是怎么样加如英文和数字呢?加入进去他们的位置呢?那是不是又用同样的算法查找呢?还有16*16和8*16的问题呢?这些小弟都不会!唉~求那位大侠能在小弟的代码是修改.或者有什么更好的办法!谢谢了!
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;

type
TForm1 = class(TForm)
Panel1: TPanel;
Image1: TImage;
Label1: TLabel;
Edit1: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label2: TLabel;
Memo1: TMemo;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
f: File;
GetStr: array [0..31] of byte;
implementation

{$R *.dfm}


procedure GetQWCode(HZ: string; var Q, W: Word);
begin
Q := Byte(HZ[1]) - $A0;
W := Byte(HZ[2]) - $A0;
end;

procedure MakeChar(HZ: String; n: integer);
var
OffSet: integer;
//GetStr: array [0..31] of byte;
temp,dis:byte;
x, y, i, j: integer;
Q, W: word;
begin
GetQWCode(HZ,Q, W);
OffSet := (94*(Q-1)+(W-1))*32;
Seek(f, OffSet);
BlockRead(f, GetStr, SizeOf(GetStr));
//GetStr
x:=0;
y:=0;
i:=0;
j:=0;
while(i<=31) do
begin
temp:=getstr;
for j:=0 to 7 do begin
dis:=temp and 128;
dis:=dis shr 7;
if dis=1 then
form1.Image1.Canvas.Rectangle(n*32+(x+1)*2-1,(y+1)*2-1,n*32+(x+1)*2-1+3,(y+1)*2-1+3);
inc(x);
if x>15 then begin
x:=0;
inc(y);
end;
temp:=temp shl 1;
end;
inc(i);
end;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
edit1.Text:='';memo1.Clear;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
strChinese, strChar: String;
i, n,l: integer;
begin
form1.Image1.Canvas.Brush.Color := clBlack;
form1.Image1.Canvas.FillRect(rect(0,0,324,36));
form1.Image1.Canvas.Brush.Color := clRed;
form1.Image1.Canvas.Pen.Color := clBlack;
strChinese := Edit1.Text;
if Length(strChinese) > 0 then begin
AssignFile(f, 'd:/Hzk16.bin');
reset(f, 1);
n := Length(strChinese) div 2;
for i := 0 to n - 1 do begin
strChar := Copy(strChinese, i*2+1, 2);
MakeChar(strChar, i);
for l:=0 to 31 do
begin
Memo1.Lines.Add(inttohex(getstr[l],2));
end;
end;
CloseFile(f);
end;
end;

end.
 
帮顶!

╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯
 
happytimes_dsq真佩服你 ,不过还有几个小问题等你解决呢.
1.如果是字母或空格/特殊字母怎么办?
2.如果多汉字怎么折行?
 
楼上的大哥能帮帮忙吗?对,小弟现在就是不知道应该怎么支持英文和数字!至于空格,输入的时候限制不用空格的.多个汉字现在是能够拆分的,现在就是一个汉字汉字的取.主要是HZK16不支持英文和汉字.所以想各位大哥帮忙了!!
 
帮顶!

╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯
 
请大家帮帮忙啊,小弟急死了!~
 
多人接受答案了。
 
后退
顶部