⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.~pas

📁 单片机显示汉字实验
💻 ~PAS
字号:
unit main;

interface

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

type
  TForm1 = class (TForm)
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    function Convert(s:Byte): string;
  public
    {1 将十六进制数化为字符 }
    function HEXtoSTR(StringStream:TStringStream): TStringStream;
  end;
  
var
  Form1: TForm1;

implementation

{$R *.dfm}

{
************************************ TForm1 ************************************
}
procedure TForm1.Button1Click(Sender: TObject);
var
  aa: TstringStream;
  hz_buffer: array of byte;
  tep: array[0..31] of byte;
  i,size:integer;
  hzfile:TfileStream;
  begin

  hzfile:=TfileStream.Create('hzk16',fmOpenRead	);
  aa:=TstringStream.Create('');

   //取得汉字的编码
  aa.WriteString(form1.Edit1.Text);

  //将编码取出
  setlength(hz_buffer,aa.size);
  aa.Position:=0;
  aa.ReadBuffer(hz_buffer[0],aa.size);

  // 将编码化为区位码
  for i:=0 to aa.Size-1 do
    begin
     hz_buffer[i]:=hz_buffer[i]-160;
    end;


 //的到点阵
  size:=aa.Size;
  aa.Size:=0;
  for i:=0 to (size div 2) -1  do
     begin
      hzfile.Position:=((hz_buffer[2*i]-1)*94+hz_buffer[2*i+1]-1)*32;
      hzfile.Read(tep[0],32);
      aa.WriteBuffer(tep[0],32);
     end;
 // 启动转换
  aa:=HEXtoSTR(aa);
  aa.Position:=0;
  form1.Memo1.Lines.LoadFromStream(aa);
  aa.Free;
  hzfile.Free;
  end;

function TForm1.Convert(s:Byte): string;
var
  high, low: Byte;
  out_str: string;
begin
  out_str:='';
  low:=s and $0f;
  high:=s shr 4;
  
   if high<=$09 then
      out_str:=out_str+chr(high+$30)
   else
      out_str:=out_str+chr(high+$37);
  
   if low<=$09 then
      out_str:=out_str+chr(low+$30)
   else
      out_str:=out_str+chr(low+$37);
  
    out_str:='0x'+out_str+',';
  
    Result:=out_str;
  
  
end;

function TForm1.HEXtoSTR(StringStream:TStringStream): TStringStream;
var
  in_buffer: Array of byte;
  i, j, in_size: Integer;
  out_buffer: AnsiString;
begin
  
  out_buffer:='';
  in_size:=StringStream.size;   //取得数据流的长度
  setlength(in_buffer,in_size);//给读数据区分配空间
  
  StringStream.Position:=0;     //读出数据
  StringStream.ReadBuffer(in_buffer[0],in_size);
  StringStream.Size:=0 ;  //输入数据清零
  
  //开始转化
  
  
  // 行的循环
  
     for i:=0 to ((in_size div 8)-1)   do
          begin
             for j:=0 to 7 do
               begin
               out_buffer:=out_buffer+Convert(in_buffer[i*8+j]);
               end;
         out_buffer:=out_buffer+chr($0d)+chr($0a);
        end;
  
   //余数的循环
     j:=  (in_size div 8)*8;
     for i:=0 to ((in_size mod 8)-1)   do
           begin
               out_buffer:=out_buffer+Convert(in_buffer[i+j]);
           end;
   out_buffer:=out_buffer+chr($0d)+chr($0a);
  
  //回写
    StringStream.WriteString(out_buffer);
  
    Result:=StringStream;
  
  
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Memo1.Lines.SaveToFile('MyHzk.txt');
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -