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

📄 unit1.~pas

📁 一个很好的串口编程示例 一个很好的串口编程示例
💻 ~PAS
字号:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Label1: TLabel;
    Button1: TButton;
    Comm1: TComm;
    Button2: TButton;
    ListBox1: TListBox;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    procedure Button2Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    //-----------------刷IC卡----------------
     procedure CardSound;//鸣叫;
     procedure FindCard; //寻卡;
     procedure downloatPW;//验证密码;
     procedure ReadCard;//读卡
     procedure CloseCard;//关闭卡
  end;

var
  Form1: TForm1;
  //ictag:Integer;
  //-----------------IC卡----------------
  iclist:TStringList;//读卡器返回值
  ICTag:Integer;//读卡操作表示,1:寻卡,2:验证密码,3:读卡,4:关闭卡
  ICSuc:Integer;//读卡操作表示,1:操作成功;2:操作失败;
  cardID1,cardID2,cardID3,cardID4:Byte;
  cardID:array [0..20] of Byte;
  CardI:Integer;

implementation

{$R *.DFM}

//-----------------刷IC卡----------------------------
procedure TForm1.ReadCard;//读卡
var
   bufs:Byte;
   s:Byte;
   a:string;
begin
  ListBox1.Items.Add('   ');
  ListBox1.Items.Add('======发送读卡命令=========');
  ictag:=3;
  bufs:=$3C;
  s:=bufs;
  a:=chr(bufs);
  bufs:=4;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=1;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$66;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$20;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=0;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  a:=a+chr(s);
  bufs:=$0D;
  a:=a+chr(bufs);
  Comm1.WriteCommData(PChar(a),Length(a));
end;
procedure TForm1.CloseCard;//关闭卡
var
   bufs:Byte;
   s:Byte;
   a:string;
begin
  ictag:=4;
  bufs:=$3C;
  s:=bufs;
  a:=chr(bufs);
  bufs:=$04;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$01;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$68;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$00;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$00;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  a:=a+chr($51);
  bufs:=$0D;
  a:=a+chr(bufs);
  Comm1.WriteCommData(PChar(a),Length(a));
  ListBox1.Items.Add('   ');
  ListBox1.Items.Add('======发送关闭卡命令=========');
end;
procedure TForm1.downloatPW;//验证密码;
var
   bufs:Byte;
   s:Byte;
   a:string;
begin
  ictag:=2;
  bufs:=$3C;
  s:=bufs;
  a:=chr(bufs);
  bufs:=$08;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$01;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$6A;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$00;  //'模式1
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$20;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=cardID1;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=cardID2 ;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=cardID3;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=cardID4;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  a:=a+chr(s);
  bufs:=$0D;
  a:=a+chr(bufs);
  Comm1.WriteCommData(PChar(a),Length(a));
  ListBox1.Items.Add('   ');
  ListBox1.Items.Add('======发送验证密码命令=========');
end;
procedure TForm1.FindCard; //寻卡;
var
   bufs:Byte;
   s:Byte;
   a:string;
begin
  ICTag:=1;
  bufs:=$3C;
  s:=bufs;
  a:=chr(bufs);
  bufs:=$04;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$01;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$70;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$01;  //'模式1
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$00;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  a:=a+chr(s);
  bufs:=$0D;
  a:=a+chr(bufs);
  Comm1.WriteCommData(PChar(a),Length(a));
  ListBox1.Items.Add('   ');
  ListBox1.Items.Add('======发送寻卡卡命令=========');
end;

procedure TForm1.CardSound;//鸣叫;
var
   bufs:Byte;
   s:Byte;
   a:string;
begin
  a:='';
  bufs:=$3C;
  s:=$3C;
  a:=chr(bufs);
  bufs:=$03;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$01;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$6B;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$10;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  a:=a+chr(s);
  bufs:=$0D;
  a:=a+chr(bufs);
  Comm1.WriteCommData(PChar(a),Length(a));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Comm1.StopComm;
  Comm1.CommName:=Trim(ComboBox1.Text);
  Comm1.StartComm;
  ListBox1.Items.Clear;
end;

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
type
  ss=array[1..500]of char ;
var    str1:^ss;
       i:integer;
       s:array[0..15] of char ;
       n:integer;
       strlist:TStringList;
       cardbh:string;
       cardint:Int64;
begin
    Application.ProcessMessages;
    //iclist.Clear;
    strlist:=TStringList.Create; strlist.Clear;
    str1:=Buffer;
    for i:=0 to 9 do s[i]:=chr(48+i);
    for i:=10 to 15 do s[i]:=chr(55+i);
    for i:=1 to bufferlength do
    begin
      n:=ord(str1^[i]);
      strlist.add(s[n div 16]+s[n mod 16]);
      //iclist.Add(IntToStr(n));
      //iclist.Add(IntToHex(n,2));

    end;
  case ICTag of
      1:begin //寻卡;
          ListBox1.Items.Add('     ');
          ListBox1.Items.Add(strlist.Text);
          ListBox1.Items.Add('=========接收寻卡返回值=========');
          if (strlist.Strings[0]='3C')and(strlist.Strings[1]='05')and(strlist.Strings[2]<>'FF') then
          begin
            ICSuc:=0;   //Byte(StrToInt('$'+aa));
            cardID1:=StrToInt('$'+Trim(strlist.Strings[2]));
            cardID2:=StrToInt('$'+trim(strlist.Strings[3]));
            cardID3:=StrToInt('$'+trim(strlist.Strings[4]));
            cardID4:=StrToInt('$'+trim(strlist.Strings[5]));
            cardbh:='';
            cardbh:=trim(strlist.Strings[2])
                    +trim(strlist.Strings[3])
                    +trim(strlist.Strings[4])
                    +trim(strlist.Strings[5]);
              //cardID[n]:=Byte(StrToInt('$'+trim(iclist.Strings[i])));;
              //Inc(n);

            cardint:=StrToInt64('$'+cardbh);
            cardbh:='';
            cardbh:=Trim(FormatFloat('0',cardint));
            ListBox1.Items.Add('此卡卡号:'+cardbh);
            //ListBox1.Items.Add('==========================');
            Sleep(30);
            downloatPW;
            //CloseCard;
            //Sleep(500);
            //TimerIC.Enabled:=True;
            //ListBox1.Items.Add('========================寻卡2');
          end else
          begin
            Sleep(100);
            CloseCard;
            Sleep(500);
            //TimerIC.Enabled:=True;
            ICSuc:=0;
          end;
        end;
      2:begin //验证密码;
          ListBox1.Items.Add('     ');
          ListBox1.Items.Add(strlist.Text);
          ListBox1.Items.Add('=======接收验证密码返回值=======');
          if (Trim(strlist.Strings[0])='3C')and(Trim(strlist.Strings[1])='02')and(Trim(strlist.Strings[2])='00') then
          begin
            Sleep(30);
            ReadCard;
            ICSuc:=0;
            ListBox1.Items.Add('========================验证密码成功!');
          end else
          begin
            ListBox1.Items.Add('========================验证密码失败!');
            Sleep(100);
            CloseCard;
            Sleep(500);
            //TimerIC.Enabled:=True;
            ICSuc:=0;
          end;
        end;
      3:begin //读卡;
          //ShowMessage('读卡1'+strlist.Text);
          ListBox1.Items.Add('     ');
          ListBox1.Items.Add(strlist.Text);
          ListBox1.Items.Add('========接受读卡返回值=========');
          if (strlist.Strings[0]='3C')and(strlist.Strings[1]='12')and(strlist.Strings[2]='00') then
          begin
            ICSuc:=0;
            //ListBox1.Items.Add('========================读卡1');
             n:=0; cardbh:='';
            for i:=3 to strlist.Count-3 do
            begin
              //if Trim(strlist.Strings[i])<>'20' then
              cardbh:=cardbh+trim(strlist.Strings[i]);
              //cardID[n]:=Byte(StrToInt('$'+trim(iclist.Strings[i])));;
              //Inc(n);
            end;
            cardint:=StrToInt64('$'+cardbh);
            cardbh:='';
            cardbh:=Trim(FormatFloat('0',cardint));
            ListBox1.Items.Add('卡号:'+cardbh);
            ListBox1.Items.Add('===============卡里数据内容====读卡成功!=======');
            //DoTmBuf(cardbh);
            //CardI:=n-1;
            //ShowMessage('读卡2'+strlist.Text);
            Sleep(20);
            CloseCard;
          end else
          begin
            ListBox1.Items.Add('========================读卡失败!');
            Sleep(50);
            CloseCard;
            Sleep(500);
            //TimerIC.Enabled:=True;
            ICSuc:=0;
          end;
        end;
      4:begin  //关闭卡;
          if ICSuc=4 then Exit;
          ListBox1.Items.Add('     ');
          ListBox1.Items.Add(strlist.Text);
          ListBox1.Items.Add('=========接收关闭卡返回值========');
          if (strlist.Strings[0]='3C')and(strlist.Strings[1]='02')and(strlist.Strings[2]='00') then
          begin
            //ListBox1.Items.Add('========================关闭卡1');
            Sleep(50);
            CardSound;
            Sleep(500);
            //Comm1.StopComm;
            //TimerIC.Enabled:=True;
            ICSuc:=4;
          end else
          begin
            //ListBox1.Items.Add('========================关闭卡2');
            Sleep(100);
            //CloseCard;
            Sleep(500);
            //TimerIC.Enabled:=True;
            ICSuc:=0;
          end;
        end;
      5:begin
          ListBox1.Items.Add('     ');
          ListBox1.Items.Add(strlist.Text);
          ListBox1.Items.Add('=====================单独===寻卡');
          if (strlist.Strings[0]='3C')and(strlist.Strings[1]='05')and(strlist.Strings[2]<>'FF') then
          begin
            ICSuc:=0;   //Byte(StrToInt('$'+aa));
            cardID1:=StrToInt('$'+Trim(strlist.Strings[2]));
            cardID2:=StrToInt('$'+trim(strlist.Strings[3]));
            cardID3:=StrToInt('$'+trim(strlist.Strings[4]));
            cardID4:=StrToInt('$'+trim(strlist.Strings[5]));
            cardbh:='';
            cardbh:=trim(strlist.Strings[2])
                    +trim(strlist.Strings[3])
                    +trim(strlist.Strings[4])
                    +trim(strlist.Strings[5]);
              //cardID[n]:=Byte(StrToInt('$'+trim(iclist.Strings[i])));;
              //Inc(n);
            end;
            cardint:=StrToInt64('$'+cardbh);
            cardbh:='';
            cardbh:=Trim(FormatFloat('0',cardint));
            ListBox1.Items.Add('此卡卡号:'+cardbh);
            ListBox1.Items.Add('=====================单独===寻卡成功');

        end;
        6:begin //验证密码;
          ListBox1.Items.Add('     ');
          ListBox1.Items.Add(strlist.Text);
          ListBox1.Items.Add('=====================单独===验证密码');
          if (strlist.Strings[0]='3C')and(strlist.Strings[1]='02')and(strlist.Strings[2]='00') then
          begin
            Sleep(30);
            ReadCard;
            ICSuc:=0;
            ListBox1.Items.Add('=====================单独===验证密码成功');
          end else
          begin
            ListBox1.Items.Add('=====================单独===验证密码失败');
            Sleep(100);
            CloseCard;
            Sleep(500);
            //TimerIC.Enabled:=True;
            ICSuc:=0;
          end;
        end;
    end;

  //ShowMessage(strlist.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  //Comm1.StopComm;
  //omm1.StartComm;

  FindCard;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
   bufs:Byte;
   s:Byte;
   a:string;
begin
  ictag:=3;
  bufs:=$3C;
  s:=bufs;
  a:=chr(bufs);
  bufs:=4;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=1;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$66;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$20;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=0;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  a:=a+chr(s);
  bufs:=$0D;
  a:=a+chr(bufs);
  Comm1.WriteCommData(PChar(a),Length(a));
end;

procedure TForm1.Button6Click(Sender: TObject);
var
   bufs:Byte;
   s:Byte;
   a:string;
begin
  //ictag:=4;
  bufs:=$3C;
  s:=bufs;
  a:=chr(bufs);
  bufs:=$04;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$01;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$68;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$00;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$00;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  a:=a+chr($51);
  bufs:=$0D;
  a:=a+chr(bufs);
  Comm1.WriteCommData(PChar(a),Length(a));
end;

procedure TForm1.Button4Click(Sender: TObject);
var
   bufs:Byte;
   s:Byte;
   a:string;
begin
  ictag:=6;
  bufs:=$3C;
  s:=bufs;
  a:=chr(bufs);
  bufs:=$08;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$01;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$6A;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$00;  //'模式1
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$20;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=cardID1;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=cardID2;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=cardID3;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=cardID4;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  a:=a+chr(s);
  bufs:=$0D;
  a:=a+chr(bufs);
  Comm1.WriteCommData(PChar(a),Length(a));
end;

procedure TForm1.Button3Click(Sender: TObject);
var
   bufs:Byte;
   s:Byte;
   a:string;
begin
  ICTag:=5;
  bufs:=$3C;
  s:=bufs;
  a:=chr(bufs);
  bufs:=$04;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$01;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$70;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$01;  //'模式1
  s:=s Xor bufs;
  a:=a+chr(bufs);
  bufs:=$00;
  s:=s Xor bufs;
  a:=a+chr(bufs);
  a:=a+chr(s);
  bufs:=$0D;
  a:=a+chr(bufs);
  Comm1.WriteCommData(PChar(a),Length(a));
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  ListBox1.Items.Clear;
end;

end.

⌨️ 快捷键说明

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