📄 cardwriteread.~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 + -