📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function MCS_LED(_bOnOff:Byte):Word;
StdCall external 'MCS_SR.dll';
function MCS_InitComm(_bPort:BYTE;_dwCommBaudRate:DWORD):Word;
StdCall external 'MCS_SR.dll';
function MCS_ErrorMsg(_wErrNo:WORD;_bErrMsg:PCHAR):Word;
StdCall external 'MCS_SR.dll';
function MCS_ExitComm():Word;
StdCall external 'MCS_SR.dll';
function MCS_Load_Key(_bMode,_bSecNr,_bNKey1,_bNKey2,_bNKey3,_bNKey4,_bNKey5,_bNKey6:Byte):Word;
StdCall external 'MCS_SR.dll';
function MCS_Config(_bMode,_bBaud:Byte):Word;
StdCall external 'MCS_SR.dll';
function MCS_Request(_bMode:Byte;_wTagType:PWORD ):Word;
StdCall external 'MCS_SR.dll';
function MCS_Buzzer(_bOnOff:Byte):Word;
StdCall external 'MCS_SR.dll';
function MCS_Anticoll(_bBcnt:Byte;_dwSnr:PDWORD):Word;
StdCall external 'MCS_SR.dll';
function MCS_Select(_dwSnr:DWORD;_bSize:PCHAR):Word;
StdCall external 'MCS_SR.dll';
function MCS_Authentication(_bMode,_bSecNr:Byte):Word;
StdCall external 'MCS_SR.dll';
function MCS_SetStringMode(_bStringMode:Byte):Word;
StdCall external 'MCS_SR.dll';
function MCS_Read(_bAdr:Byte;_bData:pChar):Word;
StdCall external 'MCS_SR.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
ret,_TagType,icc_port :integer;
_lno: longint;
_BsIZE,Cardno: Pchar;
mess:pchar;
label lbl_end;
begin
GetMem(mess,50);
GetMem(_Bsize,50);
GetMem(Cardno,50);
//搜索天线范围内是否有Mifare卡存在
ret := MCS_Request(1,@_TagType);
if ret<>0 then
begin
MCS_ErrorMsg(ret,mess);
ret:=MCS_ExitComm();
mcs_led(1);
Showmessage('Request error'+mess);
goto lbl_end;
end;
//控制读写器的蜂鸣器的状态
ret := mcs_buzzer(1);
if ret<>0 then
begin
MCS_ErrorMsg(ret,mess);
mcs_buzzer(0);
ret := MCS_ExitComm();
mcs_led(1);
Showmessage('buzzer error'+mess);
goto lbl_end;
end;
//获得天线范围内的一张卡的卡号
ret := MCS_Anticoll(0,@_lno);
if ret<>0 then
begin
MCS_ErrorMsg(ret,mess);
ret:=MCS_ExitComm();
mcs_buzzer(0);
mcs_led(1);
Showmessage('Anticoll error'+mess);
goto lbl_end;
end;
//选定天线范围内指定卡号的卡片,_bsize为函数返回的卡片容量大小
ret:=mcs_select(_lno,_bsize);
if ret<>0 then
begin
MCS_ErrorMsg(ret,mess);
mcs_buzzer(0);
ret := MCS_ExitComm();
mcs_led(1);
Showmessage('SELECT error'+mess);
goto lbl_end;
end;
//进行读写器控制模块与Mifare卡的认证
//对第一区以kay A进行认证(0为读写认证,1为读认证)
ret:=MCS_Authentication(0,1);
if ret<>0 then
begin
MCS_ErrorMsg(ret,mess);
Showmessage('Authentication error'+mess);
mcs_buzzer(0);
mcs_led(1);
mcs_exitcomm();
goto lbl_end;
end;
//设置随后操作中的字符串传递方式为asc方式(0为asc,1为hex,帮助有错)
ret:=MCS_SetStringMode(0);
if ret<>0 then
begin
MCS_ErrorMsg(ret,mess);
Showmessage('SetStringMode error'+mess);
mcs_buzzer(0);
mcs_led(1);
mcs_exitcomm();
goto lbl_end;
end;
//从卡片内的指定块地址读取卡号字符串,必须先为CardNo分配16个字节以上的空间,以访溢出
// fillchar(CardNo,16,ord('*'));
ret := MCS_Read(4,CardNo); //4即表示读第一区的第一块
if ret<>0 then
begin
MCS_ErrorMsg(ret,mess);
Showmessage('read error'+mess);
mcs_buzzer(0);
mcs_led(1);
mcs_exitcomm();
goto lbl_end;
end;
Strcopy(CardNo,Pchar(Copy(CardNo,1,5))); //卡号为5位
lbl_end:
Showmessage(cardno);
FreeMem(MESS);
FreeMem(_Bsize);
FreeMem(Cardno);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
mcs_buzzer(0);
mcs_led(1);
mcs_exitcomm();
end;
procedure TForm1.Button3Click(Sender: TObject);
var
ret,_TagType,icc_port :integer;
_lno: longint;
_BsIZE,Cardno: Pchar;
mess:pchar;
label lbl_end;
begin
GetMem(mess,50);
GetMem(_Bsize,50);
GetMem(Cardno,50);
// 读卡流程
icc_port := 1; //读卡器端口号,从0开始
//每个区的最后一个块前后6字节为密码区,中间4个字节为读写权限区(固定为FF078069,16进制)
Mcs_Led(2); //指示灯变红
ret := 0;
//初使化端口
ret := MCS_InitComm(ICC_PORT,115200);
if ret<>0 then
begin
MCS_ErrorMsg(ret,mess);
mcs_led(1);
ret := MCS_ExitComm();
Showmessage('init_comm error'+mess);
goto lbl_end;
end;
//将第一区密钥下载至读写器控制模块内,初使密码都为255,可自行更改密码
ret := mcs_load_key(0,1,255,255,255,255,255,255);
if ret<>0 then
begin
MCS_ErrorMsg(ret,mess);
Showmessage('Load key error'+mess);
goto lbl_end;
end;
ret:=mcs_load_key(4,1,255,255,255,255,255,255);
if ret<>0 then
begin
MCS_ErrorMsg(ret,mess);
Showmessage('Load key error'+mess);
goto lbl_end;
end;
//设置卡片与读写器控制模块之间的通讯模式及速率
ret:=MCS_Config(198,14);
if ret<>0 then
begin
MCS_ErrorMsg(ret,mess);
mcs_led(1);
ret := MCS_ExitComm();
Showmessage('config error'+mess);
goto lbl_end;
end;
lbl_end:
FreeMem(MESS);
FreeMem(_Bsize);
FreeMem(Cardno);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -