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

📄 cardwriteread.~pas

📁 关于手持机的LCD显示模块的设计LCD的显示固定为每行16个字符
💻 ~PAS
字号:
//////////////////////////////////////////////
// This sample is write for HY60 serials
// copyright by huoyan ltd.
// Author: superb
// writen: 12-Mar-2002
// Change: 20-Apr-2006
///////////////////////////////////////////////
unit CardWriteRead;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, ExtCtrls, StdCtrls, Menus,UnitCallDll,UnitRegister, Grids,
  ValEdit, DBGrids, DB, ADODB, ImgList;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    pgcReader: TPageControl;
    tbsLowLevel: TTabSheet;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Exit1: TMenuItem;
    N1: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    Mifare1S501: TMenuItem;
    ImageList: TImageList;
    Panel1: TPanel;
    StaticTextState: TStaticText;
    StaticText1: TStaticText;
    GroupBoxBodyCenter: TGroupBox;
    GroupBox19: TGroupBox;
    GroupBox3: TGroupBox;
    Label2: TLabel;
    Label9: TLabel;
    LabReadCardType: TLabel;
    edtCrdSn: TEdit;
    GroupBox2: TGroupBox;
    Label3: TLabel;
    GroupBox4: TGroupBox;
    RadioButKeyA: TRadioButton;
    RadioButKeyB: TRadioButton;
    GroupBox1: TGroupBox;
    cbInPwdSec: TComboBox;
    edtPwd: TEdit;
    GroupBox11: TGroupBox;
    GroupBox12: TGroupBox;
    ComboBoxChangePassword: TComboBox;
    GroupBox9: TGroupBox;
    Label10: TLabel;
    Label18: TLabel;
    Edit1PasswordA: TEdit;
    Edit1PasswordB: TEdit;
    GroupBox10: TGroupBox;
    EditControlBIt: TEdit;
    GroupBox5: TGroupBox;
    GroupBox13: TGroupBox;
    Label1: TLabel;
    Label5: TLabel;
    Label8: TLabel;
    GroupBox16: TGroupBox;
    cbPurseSec: TComboBox;
    EditHexToIntShow: TEdit;
    EditHexReadData: TEdit;
    GroupBox15: TGroupBox;
    ComboBoxBlockSel: TComboBox;
    GroupBox14: TGroupBox;
    Label4: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label11: TLabel;
    GroupBox18: TGroupBox;
    cbRWSec: TComboBox;
    edtBlock0: TEdit;
    edtBlock1: TEdit;
    edtBlock2: TEdit;
    edtBlock3: TEdit;
    CheckBoxForWriteDataBlock1: TCheckBox;
    CheckBoxForWriteDataBlock0: TCheckBox;
    CheckBoxForWriteDataBlock2: TCheckBox;
    CheckBoxForWriteDataBloc3: TCheckBox;
    PanelcomPostion: TPanel;
    StaticText2: TStaticText;
    StaticTextComport: TStaticText;
    MenuHelp: TMenuItem;
    ConnectCom: TMenuItem;
    CloseCom: TMenuItem;
    BtnFindCard: TButton;
    BtnPassLoad: TButton;
    BtnPassVerify: TButton;
    BtnChangePass: TButton;
    BtnInitPurse: TButton;
    BtinInc: TButton;
    BtnDec: TButton;
    BtnReadPurse: TButton;
    BtnRead: TButton;
    BtnWriteBlock: TButton;
    BtnCardIdle: TButton;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure N8Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure cbRWSecChange(Sender: TObject);
    procedure cbPurseSecChange(Sender: TObject);
    procedure EditHexToIntShowKeyPress(Sender: TObject; var Key: Char);
    procedure ConnectComClick(Sender: TObject);
    procedure CloseComClick(Sender: TObject);
    procedure BtnFindCardClick(Sender: TObject);
    procedure BtnPassLoadClick(Sender: TObject);
    procedure BtnPassVerifyClick(Sender: TObject);
    procedure BtnChangePassClick(Sender: TObject);
    procedure BtnInitPurseClick(Sender: TObject);
    procedure BtinIncClick(Sender: TObject);
    procedure BtnDecClick(Sender: TObject);
    procedure BtnReadPurseClick(Sender: TObject);
    procedure BtnReadClick(Sender: TObject);
    procedure BtnWriteBlockClick(Sender: TObject);
    procedure BtnCardIdleClick(Sender: TObject);

  private
    procedure SetUpOrReadComportSetting;
  public
    { Public declarations }
  end;
var
   Form1: TForm1;
   BaudRateValueIndex:smallint;

implementation

uses ParSetup, shellapi;

{$R *.dfm}


procedure TForm1.SetUpOrReadComportSetting;
begin

    RegisterFirstWriteForComSetUp('UserCardComSettingData','UserComPortSet_PortValue',ComPortNumberStr);
    RegisterFirstWriteForComSetUp('UserCardComSettingData','UserComPortSet_BaudValue',inttostr(ComBaudrateSet));
    ComPortNumberStr:=RegisterReadForComSetUp('UserCardComSettingData','UserComPortSet_PortValue');
    ComBaudrateSet:=strtoint(RegisterReadForComSetUp('UserCardComSettingData','UserComPortSet_BaudValue'));
    BaudRateValueIndex:=ComBaudrateSet div 4800;
    SetComPortStateBool:=Com_Open(ComPortNumberStr,ComBaudrateSet);
end;


procedure TForm1.FormShow(Sender: TObject);
var
  ReturnAutosearchState:string;
begin

    GroupBoxBodyCenter.Left:=(form1.Width-GroupBoxBodyCenter.Width) div 2;

   ComPortNumberStr:='COM3';
   ComBaudrateSet:=19200;
   SetUpOrReadComportSetting;
   StaticTextState.Caption:='';
   if cbPurseSec.ItemIndex=0 then
      begin
        ComboBoxBlockSel.Clear;
        ComboBoxBlockSel.AddItem('1',self);
        ComboBoxBlockSel.AddItem('2',self);
        ComboBoxBlockSel.ItemIndex:=0;
     end;
    if  SetComPortStateBool=true then
       begin
        StaticTextComport.caption:=(ComPortNumberStr+':串口打开成功,速率:'+Inttostr(ComBaudrateSet));
        FormSetUp.cbComName.ItemIndex:=strtoint(copy(ComPortNumberStr,4,1))-1;
        FormSetUp.BtnComOpen.Caption:='关闭串口';
        FormSetUp.cbComName.Enabled:=false;
        FormSetUp.cbBaudRate.Enabled:=false;
        FormSetUp.cbBaudRate.ItemIndex := BaudRateValueIndex-1;
        ReturnReadDataState:=AutoSearch_Card(0);
       end
    else
      begin
       StaticTextComport.caption:=(ComPortNumberStr+'串口打开失败速率:'+Inttostr(ComBaudrateSet));
       FormSetUp.BtnComOpen.Caption:='打开串口';
      end;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var temp:smallint;
begin
    temp:=Com_Close;
end;


procedure TForm1.N8Click(Sender: TObject);
begin
   FormSetUp.show;
end;


procedure TForm1.Exit1Click(Sender: TObject);
var temp:smallint;
begin
    temp:=Com_Close;
    Close;
end;

procedure TForm1.cbRWSecChange(Sender: TObject);
begin
  if cbRWSec.ItemIndex=0 then
    begin
      edtBlock0.Enabled:=false;
      CheckBoxForWriteDataBlock0.Enabled :=false;
      Label4.Enabled:=false;
    end
  else
     begin
      edtBlock0.Enabled:=true;
      CheckBoxForWriteDataBlock0.Enabled :=true;
      Label4.Enabled:=true;
  end;
end;



procedure TForm1.cbPurseSecChange(Sender: TObject);
begin
   if cbPurseSec.ItemIndex=0 then
      begin
        ComboBoxBlockSel.Clear;
        ComboBoxBlockSel.AddItem('1',self);
        ComboBoxBlockSel.AddItem('2',self);
        ComboBoxBlockSel.ItemIndex:=0;
      end
   else
      begin
        ComboBoxBlockSel.Clear;
        ComboBoxBlockSel.AddItem('0',self);
        ComboBoxBlockSel.AddItem('1',self);
        ComboBoxBlockSel.AddItem('2',self);
        ComboBoxBlockSel.ItemIndex:=0;
      end;
end;


procedure TForm1.EditHexToIntShowKeyPress(Sender: TObject; var Key: Char);
begin
   EditValueInput(Sender,key);
end;



procedure TForm1.ConnectComClick(Sender: TObject);
begin
  if  SetComPortStateBool then
     showmessage('串口已经连接!')
  else
    begin

       SetComPortStateBool:=Com_Open(ComPortNumberStr,ComBaudrateSet);
      if  SetComPortStateBool then
      begin
          FormSetUp.StatusBarForMessage.Panels[0].Text:=(ComPortNumberStr+':串口打开成功,速率:'+Inttostr(ComBaudrateSet));
          StaticTextComport.Caption :=(ComPortNumberStr+':串口打开成功,速率:'+Inttostr(ComBaudrateSet));
          FormSetUp.BtnComOpen.Caption:='关闭串口';
          SetComPortStateBool:=true;
          FormSetUp.cbComName.Enabled:=false;
          FormSetUp.cbBaudRate.Enabled:=false;
       end
       else
           begin
               SetComPortStateBool:=false;
               FormSetUp.BtnComOpen.Caption:='打开串口';
               FormSetUp.cbComName.Enabled:=true;
               FormSetUp.cbBaudRate.Enabled:=true;
               FormSetUp.StatusBarForMessage.Panels[0].Text:=(ComPortNumberStr+'串口打开失败速率:'+Inttostr(ComBaudrateSet));
               StaticTextComport.Caption:=(ComPortNumberStr+'串口打开失败速率:'+Inttostr(ComBaudrateSet));
       end;
   end;
end;

procedure TForm1.CloseComClick(Sender: TObject);
 var temp:smallint;
begin
  temp:=Com_Close;
  SetComPortStateBool:=false;
  FormSetUp.StatusBarForMessage.Panels[0].Text:='您已经断开连接!';
  StaticTextComport.Caption:='您已经断开连接!';
  FormSetUp.cbComName.Enabled:=true;
  FormSetUp.cbBaudRate.Enabled:=true;
  FormSetUp.BtnComOpen.Caption:='打开串口';
  showmessage('您已经断开连接!')


end;

procedure TForm1.BtnFindCardClick(Sender: TObject);
var
   ReadCardTypeStr,tmpstr,ReadCardNumberString:string;
begin
  edtCrdSn.Text:='';                                 // 清空寻卡序列号
  LabReadCardType.caption:='';                        //清空卡类型
  ReturnReadDataState:=RF_M1_SerialNo(ReturnDataStrFromCard);  //读取卡序列号给ReturnDataStrFromCard输出变量,并返回读取状态值ReturnReadDataState

  ReadCardNumberString:=ReturnDataStrFromCard;
   StaticTextState.caption:=OperateState[ReturnReadDataState];   //解释并注释返回状态含义
  if ReadCardNumberString='' then
     exit;
  edtCrdSn.Text:=ReadCardNumberString;                //显示卡序列号

  ReturnReadDataState:=RF_M1_CardType(ReturnDataStrFromCard);
  ReadCardTypeStr:= ReturnDataStrFromCard;

  tmpstr:=copy(ReadCardTypeStr,1,2);
  if tmpstr='04' then
         LabReadCardType.caption:= 'Mifare one S50'
         else if tmpstr='02' then
             LabReadCardType.caption:= 'Mifare one S70'
         else if tmpstr='16' then
             LabReadCardType.caption:= 'Mifare Light'
         else
             LabReadCardType.caption:= '其它类型';
  StaticTextState.caption:=OperateState[ReturnReadDataState];
end;

procedure TForm1.BtnPassLoadClick(Sender: TObject);
var
  BlockIndex:smallint;
  PassKeyType:string;
begin
  if RadioButKeyA.Checked  then
      PassKeyType:='60'
  else
     PassKeyType:='61';
 BlockIndex:=(cbInPwdSec.ItemIndex);
 ReturnReadDataState:=RF_M1_PassLoad(PassKeyType,BlockIndex,edtPwd.Text);
 StaticTextState.caption:=OperateState[ReturnReadDataState];
end;

procedure TForm1.BtnPassVerifyClick(Sender: TObject);
var
  BlockIndex:smallint;
  KeyType:string;
begin
  if RadioButKeyA.Checked  then
      KeyType:='60'
  else
     KeyType:='61';
 BlockIndex:=(cbInPwdSec.ItemIndex);
 ReturnReadDataState:= RF_M1_VerifyPassword(KeyType,BlockIndex);
 StaticTextState.caption:=OperateState[ReturnReadDataState];
end;

procedure TForm1.BtnChangePassClick(Sender: TObject);
var
  PassWordString:string;
  BlockIndex:smallint;
begin
      BlockIndex:=ComboBoxChangePassword.ItemIndex*4+3;
      ReturnReadDataState:=RF_M1_ChangePassword(BlockIndex,Edit1PasswordA.Text,EditControlBIt.Text,Edit1PasswordB.Text);
      StaticTextState.caption:=OperateState[ReturnReadDataState];

end;

procedure TForm1.BtnInitPurseClick(Sender: TObject);
var
  BlockIndex:smallint;
begin
  BlockIndex:=cbPurseSec.ItemIndex*4+strtoint(ComboBoxBlockSel.Text);
  ReturnReadDataState:=RF_M1_Purse_Init(BlockIndex,Strtofloat(EditHexToIntShow.Text));
  StaticTextState.caption:=OperateState[ReturnReadDataState];

end;

procedure TForm1.BtinIncClick(Sender: TObject);
var
  BlockIndex:smallint;
begin
  BlockIndex:=cbPurseSec.ItemIndex*4+strtoint(ComboBoxBlockSel.Text);
  ReturnReadDataState:=RF_RF_M1_Purse_Increment(BlockIndex,Strtofloat(EditHexToIntShow.Text));
  StaticTextState.caption:=OperateState[ReturnReadDataState];

end;

procedure TForm1.BtnDecClick(Sender: TObject);
var
  BlockIndex:smallint;
begin
  BlockIndex:=cbPurseSec.ItemIndex*4+strtoint(ComboBoxBlockSel.Text);
  ReturnReadDataState:=RF_M1_Purse_Decrement(BlockIndex,strtofloat(EditHexToIntShow.Text));
  StaticTextState.caption:=OperateState[ReturnReadDataState];
end;

procedure TForm1.BtnReadPurseClick(Sender: TObject);
var
  SectorBlockIndex:smallint;
begin

  SectorBlockIndex:=cbPurseSec.ItemIndex*4+strtoint(ComboBoxBlockSel.Text);
  ReturnReadDataState:=RF_M1_Purse_Read(SectorBlockIndex,ReturnDataStrFromCard);
  EditHexReadData.Text:=ReturnDataStrFromCard;
  StaticTextState.caption:=OperateState[ReturnReadDataState];

end;

procedure TForm1.BtnReadClick(Sender: TObject);
var
  SelectSecAndBlockIndex:smallint;
  TempSendDataStr:string;
  ReadEachBlockIndex:smallint;
  ReadEachBlockValueStr:array[0..3] of string;
begin
 for  ReadEachBlockIndex:=0 to 3 do
  begin

    SelectSecAndBlockIndex:=cbRWSec.ItemIndex*4+ReadEachBlockIndex;
    ReturnReadDataState:=RF_M1_Block_Read(SelectSecAndBlockIndex,ReturnDataStrFromCard);
    ReadEachBlockValueStr[ReadEachBlockIndex]:= ReturnDataStrFromCard;
    StaticTextState.caption:=OperateState[ReturnReadDataState];
    if ReadEachBlockValueStr[ReadEachBlockIndex]='' then
      break;
  end;
   edtBlock0.Text:= ReadEachBlockValueStr[0];
   edtBlock1.Text:= ReadEachBlockValueStr[1];
   edtBlock2.Text:= ReadEachBlockValueStr[2];
   edtBlock3.Text:= ReadEachBlockValueStr[3];
end;

procedure TForm1.BtnWriteBlockClick(Sender: TObject);
var
  BlockIndex:smallint;
  SendData:string;
begin
   if CheckBoxForWriteDataBlock0.Checked=true then
   begin
      BlockIndex:=cbRWSec.ItemIndex*4+0;
      SendData:=edtBlock0.Text;
      ReturnReadDataState:=RF_M1_Block_Write(BlockIndex,SendData);
      StaticTextState.caption:=OperateState[ReturnReadDataState];
   end;

   if CheckBoxForWriteDataBlock1.Checked=true then
   begin
      BlockIndex:=cbRWSec.ItemIndex*4+1;
      SendData:=edtBlock1.Text;
      ReturnReadDataState:=RF_M1_Block_Write(BlockIndex,SendData);
      StaticTextState.caption:=OperateState[ReturnReadDataState];
   end;

   if CheckBoxForWriteDataBlock2.Checked=true then
  begin
      BlockIndex:=cbRWSec.ItemIndex*4+2;
      SendData:=edtBlock2.Text;
      ReturnReadDataState:=RF_M1_Block_Write(BlockIndex,SendData);
      StaticTextState.caption:=OperateState[ReturnReadDataState];
   end;
   if CheckBoxForWriteDataBloc3.Checked=true then
   begin
      BlockIndex:=cbRWSec.ItemIndex*4+3;
      SendData:=edtBlock3.Text;
      ReturnReadDataState:=RF_M1_Block_Write(BlockIndex,SendData);
      StaticTextState.caption:=OperateState[ReturnReadDataState];
   end;

end;

procedure TForm1.BtnCardIdleClick(Sender: TObject);
begin
 ReturnReadDataState:=RF_M1_Halt;
  StaticTextState.caption:=OperateState[ReturnReadDataState];
end;

end.

⌨️ 快捷键说明

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