首先的引用RC500_232.dll和zlg500B.dll这两个dll功能是一样,只是zlg500B.dll的功能有多一些!

如果是应用程序,将这两个dll放到bin文件夹中,如果是asp.net 程序 则将dll 放到系统盘中的system32文件夹中

(using System.Runtime.InteropServices; 一定要添加这个命名空间!!!!!!)

添加API申明如下:

        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_init(int mport, int mbaud);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_config();
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_exit();
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_request(byte mmode, ref UInt16 mtagtype);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_anticoll(byte mbcnt, ref UInt32 msnr);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_select(UInt32 msnr, ref byte msize);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_authkey(byte mmode, byte msecnr, byte[] mkey);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_read(byte maddr, byte[] mdata);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_write(byte maddr, byte[] mdata);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_readval(byte maddr, ref Int32 value);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_writeval(byte maddr, Int32 value);
        [DllImport("zlg500B.dll")]
        private static extern byte zlg500B_increment(byte maddr, ref Int32 value);
        [DllImport("zlg500B.dll")]
        private static extern byte zlg500B_decrement(byte maddr, ref Int32 value);

具体功能看代码:(这些函数都有说明的,自己看下吧!)

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="mport">端口</param>
        /// <param name="mbaud">平率</param>
        /// <returns></returns>
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_init(int mport, int mbaud);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_config();
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_exit();
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_request(byte mmode, ref UInt16 mtagtype);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_anticoll(byte mbcnt, ref UInt32 msnr);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_select(UInt32 msnr, ref byte msize);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_authkey(byte mmode, byte msecnr, byte[] mkey);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_read(byte maddr, byte[] mdata);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_write(byte maddr, byte[] mdata);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_readval(byte maddr, ref Int32 value);
        [DllImport("RC500_232.dll")]
        private static extern byte RC500_232_writeval(byte maddr, Int32 value);
        [DllImport("zlg500B.dll")]
        private static extern byte zlg500B_increment(byte maddr, ref Int32 value);
        [DllImport("zlg500B.dll")]
        private static extern byte zlg500B_decrement(byte maddr, ref Int32 value);

        ushort tagtype;
        UInt32 snr;
        byte size;
        byte[] key = new byte[6] { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
        byte[] data = new byte[16];

        byte byteDataArea;  //选择的数据块
     
        byte byteSQ;  //选择扇区

        private void Form1_Load(object sender, EventArgs e)
        {
  
        }

        private void toolStripLabel1_Click(object sender, EventArgs e)
        {

        }

        private void but_connect_m_Click(object sender, EventArgs e)
        {

            if (RC500_232_init(Convert.ToInt32(box_com.Text.Replace("com","")), Convert.ToInt32(box_hz.Text)) != 0)
                 MessageBox.Show("端口打开失败!");
             else if (RC500_232_config() != 0)
                 MessageBox.Show("初始化失败!");
             else txt_log.Text="端口打开成功,读卡器初始化成功!\r\n";
        }

        private void but_close_m_Click(object sender, EventArgs e)
        {
              long i=1;
              int j = 0;
              while(i!=0){
                  i = RC500_232_exit();
                  j++;
                  if (j > 10)
                         break;
              }
             Log("关闭串口成功");
        }

        public void Log(string mess) {
            txt_log.Text += mess+"\r\n";
        }

        private void but_exti_m_Click(object sender, EventArgs e)
        {
            but_close_m_Click(null,null);
            Application.Exit();
        }

        Regex rgKey = new Regex(" ");
        private void but_readData_Click(object sender, EventArgs e)
        {

            if (Init())
            {

                if (RC500_232_read(byteDataArea, data) != 0)// 将0扇区数据读入byte类型数组data中,//data为16字节长   
                {
                    MessageBox.Show("数据读取失败");
                }
                else
                {
                    txt_code.Text = Convert.ToString(snr, 16);
                    Log("数据读取成功: " + ReadData(data));
                }
            }
           
        }

        public string ReadData(byte[] data)
        {

            string tempt = "";

            foreach (byte r in data)
            {
                tempt += Convert.ToString(r,16)+ " ";
            }
            return tempt;
        }

       
        private void but_readValue_Click(object sender, EventArgs e)
        {

            if (Init())
            {
                Int32 intValue = 0x500;

                if (RC500_232_readval(byteDataArea, ref intValue) != 0)// 将0扇区数据读入byte类型数组data中,//data为16字节长   
                {
                    MessageBox.Show("数值读取失败");
                }
                else
                {
                    txt_code.Text = Convert.ToString(snr, 16);
                    Log("数值读取成功: " +Convert.ToString(intValue,16));
                }
            }
        }

        private void box_SQ_SelectedIndexChanged(object sender, EventArgs e)
        {
            int intSQ = Convert.ToInt32(box_SQ.Text);
            int temp = intSQ * 4;
            box_dataArea.Items.Clear();
            box_dataArea.Items.Add(temp);
            box_dataArea.Items.Add(temp+1);
            box_dataArea.Items.Add(temp+2);
            box_dataArea.Items.Add(temp+3);
            box_dataArea.SelectedIndex = 0;

            box_dataArea2.Items.Clear();
            if (intSQ != 0)
            {
                box_dataArea2.Items.Add(temp);
            }
            box_dataArea2.Items.Add(temp + 1);
            box_dataArea2.Items.Add(temp + 2);
            box_dataArea2.Items.Add(temp + 3);
            box_dataArea2.SelectedIndex = 0;
        }

        private void but_writeDate_Click(object sender, EventArgs e)
        {
            string value = txt_writeDate.Text.Trim();

            if (!string.IsNullOrEmpty(value))
            {
                int index = 0;

                foreach (string pt in rgKey.Split(value))
                {
                    if (string.IsNullOrEmpty(pt))
                    {
                        MessageBox.Show("写入数据时有多余的空格!"); return;
                    }

                    int intValue = 0;

                    try
                    {
                       intValue = Convert.ToInt32(pt, 16);
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("写入数据含有非法字符!");
                        return;
                    }
                   
                    if (intValue > 255 || intValue < 0)
                    {
                        MessageBox.Show("写入数据范围错误(00-ff)!");
                        return;
                    }

                    byte bt = (byte)intValue;

                    data[index] = bt;
                    index++;
                }

                if (index != 16)
                {
                    MessageBox.Show("写入数据错误,长度不为16个!"); return;
                }

                if (Init())
                {
                    if (RC500_232_write(byteDataArea, data) != 0)// 将0扇区数据读入byte类型数组data中,//data为16字节长   
                    {
                        MessageBox.Show("数据写入失败");
                    }
                    else
                    {
                        txt_code.Text = Convert.ToString(snr, 16);
                        Log("数据写入成功: " + ReadData(data));
                    }
                }
            }
            else {
                MessageBox.Show("写入数据不能为空!");
            }
        }
       

        public bool Init()
        {

            byteDataArea = (byte)Convert.ToInt32(box_dataArea.Text); //选择的数据块

             byteSQ = (byte)Convert.ToInt32(box_SQ.Text); //选择扇区
       
            string strKey = txt_key.Text;

            if (!string.IsNullOrEmpty(strKey))
            {
                int index = 0;

                foreach (string pt in rgKey.Split(strKey))
                {

                    byte bt = (byte)Convert.ToInt32(pt, 16);
                    key[index] = bt;
                    index++;

                }
            }
            else
            {
                key = new byte[6] { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
            }

            bool flag = false;
            if (RC500_232_request(0, ref tagtype) != 0) //检查有效范围是否有卡   
            {

                if (RC500_232_request(0, ref tagtype) != 0) //检查有效范围是否有卡   
                {
                    MessageBox.Show("没有卡!"); return false;
                }
                else
                    flag = true;
            }
            else
                flag = true;

            if (flag)
            {

                if (RC500_232_anticoll(0, ref snr) != 0) //防碰撞控制,snr返回卡的序列号                                    
                {
                    MessageBox.Show("防碰撞错误!"); return false;
                }
                else if (RC500_232_select(snr, ref size) != 0) //选择某一序号的卡,//size返回卡的容量大小            
                {
                    MessageBox.Show("选择错误!"); return false;
                }
                else if (RC500_232_authkey((byte)box_keyMode.SelectedIndex, byteSQ, key) != 0) //密码验证,密码存放在 key数组中    
                {
                    MessageBox.Show("密码验证错误!"); return false;
                }

               
            }

            return true;
        }

        private void but_writeValue_Click(object sender, EventArgs e)
        {
            if (Init())
            {
                string value = txt_writeValue.Text.Trim();
                if(string.IsNullOrEmpty(value)){
                    MessageBox.Show("写入数值不能为空");
                    return;
                }

                Int32 intValue = Convert.ToInt32(value,16);

                if (RC500_232_writeval(byteDataArea, intValue) != 0)// 将0扇区数据读入byte类型数组data中,//data为16字节长   
                {
                    MessageBox.Show("数值写入失败");
                }
                else
                {
                    txt_code.Text = Convert.ToString(snr, 16);
                    Log("数值写入成功: " + value);
                }
            }
        }

        private void but_add_Click(object sender, EventArgs e)
        {
           
            if (Init())
            {
              
                string value = txt_addValue.Text.Trim();
                if(string.IsNullOrEmpty(value)){
                    MessageBox.Show("写入数值不能为空");
                    return;
                }

                Int32 temp = 1; //Convert.ToInt32(txt_addValue.Text.Trim(),16);

                if (zlg500B_increment(byteDataArea, ref temp) != 0)// 将0扇区数据读入byte类型数组data中,//data为16字节长   
                {           
                    MessageBox.Show("数值写入失败");
                }
                else
                {
                    txt_code.Text = Convert.ToString(snr, 16);
                    Log("数值写入成功: " + value);
                }
            }
        }

        private void but_decrement_Click(object sender, EventArgs e)
        {
            if (Init())
            {

                string value = txt_dec.Text.Trim();
                if (string.IsNullOrEmpty(value))
                {
                    MessageBox.Show("写入数值不能为空");
                    return;
                }

                Int32 temp = 1; //Convert.ToInt32(txt_addValue.Text.Trim(), 16);

                if (zlg500B_decrement(byteDataArea, ref temp) != 0)// 将0扇区数据读入byte类型数组data中,//data为16字节长   
                {
                    MessageBox.Show("数值写入失败");
                }
                else
                {
                    txt_code.Text = Convert.ToString(snr, 16);
                    Log("数值写入成功: " + value);
                }
            }
        }

    }
}

C#操作-LX3600非接触式IC卡读写器相关推荐

  1. 磁条卡,接触式IC卡,非接触式IC卡的优缺点

    磁条卡的特点: 磁条卡由于其结构简单,存储容量小,安全保密性差,读写设备复杂且维护费用高,作为七.八十年代技术水平的产品已风光不再,即将面临淘汰. 智能IC卡与磁条卡相比有哪些优势? 接触式IC卡与磁 ...

  2. 非接触式IC卡与条码卡磁卡接触式IC卡相比较

    一.最新技术-非接触IC卡 非接触IC卡,又名感应卡,诞生于90年代初,由于存在着条码卡.磁卡和接触式IC卡不可比拟的优点,使之一经问世,便立刻引起了广泛的关注,并以惊人的速度得到推广应用. 非接触式 ...

  3. iso14443 非接触式IC卡协议

    转自百度百科 http://baike.baidu.com/link?url=Y1koEW6mX0AgDV5kt37i7M5RaV0g_WwxU163dO-VKUbR5w4qEHv0OMOnbw1BT ...

  4. S50非接触式IC卡 学习笔记

    S50非接触式IC卡性能简介(M1) 一. 主要指标 l 容量为8K位EEPROM(1K 字节) l 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位 l 每个扇区有独立的一组密码及访问 ...

  5. 非接触式IC卡性能简介(M1)

    卡片的电气部分只由一个天线和ASIC组成. 天线:卡片的天线是只有几组绕线的线圈,很适于封装到IS0卡片中. ASIC:卡片的ASIC由一个高速(106KB波特率)的RF接口,一个控制单元和一个 8K ...

  6. 非接触式IC卡、条码卡、磁道卡、接触式IC卡、芯片卡

    转自 http://blog.csdn.net/lvxiangan/article/details/40953831 非接触式IC卡:门禁卡.工卡 条码卡:较少接触到 磁道卡:带黑色磁条的卡,如可刷的 ...

  7. 非接触式IC卡存储结构

    非接触式IC卡Contactless Smart Card(CSS),也称作感应卡.射频卡,由IC芯片.感应天线组成,并完全密封在一个标准PVC卡片中, 无外露部分,其结构示意图如下. 非接触IC卡工 ...

  8. Mifare One 非接触式IC卡介绍

    贴一篇关于Mifare1的介绍 Mifare l卡特性简介 M1卡为8K位的非接触式IC卡. 电气特性 l         容量为8K位EEPrOM l         分为16个扇区,每个扇区为4块 ...

  9. 非接触式IC卡中的射频识别技术

    非接触式IC卡中的射频识别技术 湖南大学电气与信息工程学院 刘铮 章兢 摘 要:介绍了射频识别技术在非接触式IC卡中的应用,对非接触式IC卡的射频通讯在实现中的问题作了探讨.并对Type At Typ ...

  10. 全球与中国非接触式IC卡芯片市场现状及未来发展趋势2022

    根据QYR(恒州博智)的统计及预测,2021年全球非接触式IC卡芯片市场销售额达到了 亿美元,预计2028年将达到 亿美元,年复合增长率(CAGR)为 %(2022-2028).地区层面来看,中国市场 ...

最新文章

  1. 自然语言推理和数据集
  2. 11g废弃的Hint - BYPASS_UJVC
  3. 织梦(dedecms)当前位置{dede:field name='position' /}修改
  4. html本地载入缓存文件,Flutter中如何加载并预览本地的html文件的方法
  5. [转]ClassPath是什么
  6. kibana使用详解
  7. Vue结合Echarts
  8. 【Monkey】Monkey基础概念
  9. C++的堆与拷贝构造函数
  10. 日调度5万亿次 腾讯云微服务架构体系TSF深度解读
  11. 南阳理工ACM111
  12. SuperMap iDesktop常见问题解答集锦(九)
  13. 2022年各行业白皮书市场研报合集(共125份)
  14. Diligent调查发现,董事会成员是安全和公司治理的关键环节
  15. NRF52832 SPI 资料收集
  16. Unity3D教程:手游开发常用排序算法 -下
  17. 清华计算机408考研真题资料经验分享
  18. docker下启动phpMyAdmin
  19. how to do research
  20. CentOS 8.2云服务器定时运行脚本

热门文章

  1. 一个有趣的二维码生成库Qart
  2. 转载四代重歼的一片博文 - 漏斗子:“三大战役”完成 人民币国际化就登场
  3. 怎么学计算机基本步骤,学习计算机知识的基本步骤是什么?
  4. linux 键盘描述符,USB HID Report Descriptor 报告描述符详解
  5. iOS SceneDelegate使用总结
  6. 失败程序员的十年总结
  7. 同条网线电脑正常上网,手机连接wifi成功,但是无法访问互联网
  8. 【5G NR】手机身份证号IMEI与IMEISV
  9. android partition tool apk,分区修复工具 MiniTool Partition Recovery
  10. 跨境电商必看:amazon账号关联因素