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

📄 unit1.pas

📁 考勤卡结合考勤读卡机的端口应用编程。只要卡在天线接收范围内
💻 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 + -