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

📄 unit1.pas

📁 IC加密卡的制作(AT88SC102)
💻 PAS
字号:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

function init_com(Port: integer): integer; stdcall; external 'SURE32WC.DLL';

function sele_card(crdno: integer): integer; stdcall; external 'SURE32WC.DLL';

function power_on: integer; stdcall; external 'SURE32WC.DLL';

function power_off: integer; stdcall; external 'SURE32WC.DLL';

function close_com: integer; stdcall; external 'SURE32WC.DLL';

function rd_asc(apz, address, Length: integer; buffer: pchar): integer; stdcall;
  external 'SURE32WC.DLL';

function wr_asc(apz, address, Length: integer; buffer: pchar): integer; stdcall;
  external 'SURE32WC.DLL';

function rd_str(apz, address, Length: integer; buffer: pchar): integer; stdcall;
  external 'SURE32WC.DLL';

function wr_str(apz, address, Length: integer; buffer: pchar): integer; stdcall;
  external 'SURE32WC.DLL';

function chk_sc(i1, i2: Integer; Str: pchar): integer; stdcall; external 'SURE32WC.DLL';

function wr_sc(Str: pchar): integer; stdcall; external 'SURE32WC.DLL';

{$R *.DFM}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  Buf1: array[0..300] of Char; //300个HEX数据缓冲区
  Buf2: array[0..150] of Char; // 150个字符串缓冲区
  Hp, Sp: Pchar;
  A, B, C, D, E, F, G, H: Integer;
begin
  A := Init_Com(1); //初始化串口2
  if A = 4 then //密码错误则退出
  begin
    MessageBox(0, '串口初始化错误', '演示', mb_ok);
    exit;
  end;
  B := Sele_Card(42); //选择Siemens 4442卡,卡型编号42

  C := Power_on; //卡上电操作
  if C <> 0 then //密码错误则退出
  begin
    MessageBox(0, '读写器中无卡', '演示', mb_ok);
    H := Close_com; //关闭串口
    exit;
  end;

  Buf1:='FFFFFFFFFFFFFFFFFFFF';
  Hp := @Buf1;
  E := Rd_Asc(0, 0, 2, Hp); //读取2个字节HEX数据(卡型标志'A213'),返回4个字符
  if E<>0 then
        begin
            MessageBox(0, '读卡错误', '演示', mb_ok);
            H := Close_com; //关闭串口
            exit;
        end;

  if (Buf1[0] <> 'A') or (Buf1[1] <> '2') or (Buf1[2] <> '1') or (Buf1[3] <> '3') then
        begin
            MessageBox(0, '卡型不对', '读卡型', mb_ok);
            H := Close_com; //关闭串口
            exit;
        end;

  Sp := 'FFFFFF'; //Siemens 4442空白卡缺省密码
  D := Chk_SC(0, 3, Sp); //核对密码
  if D <> 0 then //密码错误则退出
  begin
    MessageBox(0, '密码错误', '演示', mb_ok);
    H := Close_com; //关闭串口
    exit;
  end;

  E := Wr_Asc(1, 0, 10, '1234567890ABCDEF1234'); //写10个字节HEX数据
  if E <> 0 then
        begin
            MessageBox(0, '写卡错误', '演示', mb_ok);
            H := Close_com; //关闭串口
            exit;
        end;

  Buf1:='FFFFFFFFFFFFFFFFFFFF';
  Hp := @Buf1;
  E := Rd_Asc(1, 0, 10, Hp); //读取10个字节HEX数据,返回20个字符
  if E<>0 then
        begin
            MessageBox(0, '读卡错误', '演示', mb_ok);
            H := Close_com; //关闭串口
            exit;
        end;

  MessageBox(0, buf1,'rd_asc()卡内容', mb_ok);

  E := Wr_Str(1, 0, 34, '我的姓名叫管康林 电话: 13802570511'); //写20个字节文本数据
  if E <> 0 then
        begin
            MessageBox(0, '写卡错误', '演示', mb_ok);
            H := Close_com; //关闭串口
            exit;
        end;

  Buf2:='FFFFFFFFFF';
  Hp := @Buf2;
  F := Rd_Str(1, 0, 34, Hp); //读取20个字节文本数据
  if F<>0 then
        begin
            MessageBox(0, '读卡错误', '演示', mb_ok);
            H := Close_com; //关闭串口
            exit;
        end;

  MessageBox(0, buf2,'rd_str()卡内容', mb_ok);

  G := Power_off; //卡下电操作
  H := Close_com; //关闭串口

  MessageBox(0, '操作完备','卡内容', mb_ok);
end;

end.

⌨️ 快捷键说明

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