易语言读写富士通MB89R118卡 NXP15693标签源码

news2024/11/16 5:52:51

 本示例发卡器介绍:Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/智能海报/-淘宝网 (taobao.com)

 DLL命令定义表

.版本 2

.DLL命令 蜂鸣器嘀一声, 字节型, "OUR_MIFARE.dll", "pcdbeep"
    .参数 xms, 整数型

.DLL命令 读取设备编号, 字节型, "OUR_MIFARE.dll", "pcdgetdevicenumber"
    .参数 设备编号, 字节型, 传址 数组

.DLL命令 提示, 整数型, "user32", "MessageBoxA"
    .参数 句柄, 整数型
    .参数 提示内容, 文本型
    .参数 提示内容, 文本型
    .参数 类型, 整数型

.DLL命令 寻感应区内单张卡, 字节型, "OUR_MIFARE.dll", "iso15693inventory"
    .参数 操作标志, 字节型
    .参数 应用标识, 字节型
    .参数 掩码长度, 字节型
    .参数 卡号掩码, 字节型, 传址 数组
    .参数 UID缓冲, 字节型, 传址 数组

.DLL命令 轻松读取15693卡数据, 字节型, "OUR_MIFARE.dll", "iso15693readex"
    .参数 控制位, 字节型
    .参数 应用标识, 字节型
    .参数 起始块地址, 字节型
    .参数 读写块数, 字节型
    .参数 UID缓冲, 字节型, 传址 数组
    .参数 读卡数据缓冲, 字节型, 传址 数组

.DLL命令 轻松写数据到15693卡块内, 字节型, "OUR_MIFARE.dll", "iso15693writeex"
    .参数 控制位, 字节型
    .参数 应用标识, 字节型
    .参数 起始块地址, 字节型
    .参数 读写块数, 字节型
    .参数 UID缓冲, 字节型, 传址 数组
    .参数 写卡数据缓冲, 字节型, 传址 数组

.DLL命令 寻感应区内多张卡, 字节型, "OUR_MIFARE.dll", "iso15693inventory16"
    .参数 操作标志, 字节型
    .参数 应用标识, 字节型
    .参数 掩码长度, 字节型
    .参数 卡号掩码, 字节型, 传址 数组
    .参数 UID缓冲, 字节型, 传址 数组
    .参数 缓冲长度, 字节型, 传址 数组

.DLL命令 让卡静止, 字节型, "OUR_MIFARE.dll", "iso15693stayquiet"
    .参数 操作标志, 字节型
    .参数 UID缓冲, 字节型, 传址 数组

.DLL命令 让静止卡重启, 字节型, "OUR_MIFARE.dll", "iso15693resettoready"
    .参数 操作标志, 字节型
    .参数 UID缓冲, 字节型, 传址 数组

.DLL命令 选中卡片, 字节型, "OUR_MIFARE.dll", "iso15693Select"
    .参数 操作标志, 字节型
    .参数 UID缓冲, 字节型, 传址 数组

.DLL命令 读指定块数据, 字节型, "OUR_MIFARE.dll", "iso15693readblock"
    .参数 操作标志, 字节型
    .参数 起始块地址, 字节型
    .参数 读写块数, 字节型
    .参数 UID缓冲, 字节型, 传址 数组
    .参数 数据长度, 字节型, 传址 数组
    .参数 读卡数据缓冲, 字节型, 传址 数组

.DLL命令 写数据到指定块, 字节型, "OUR_MIFARE.dll", "iso15693writeblock"
    .参数 操作标志, 字节型
    .参数 起始块地址, 字节型
    .参数 读写块数, 字节型
    .参数 UID缓冲, 字节型, 传址 数组
    .参数 数据长度, 字节型
    .参数 写卡数据缓冲, 字节型, 传址 数组

.DLL命令 写应用标识, 字节型, "OUR_MIFARE.dll", "iso15693writeafi"
    .参数 操作标志, 字节型
    .参数 应用标识, 字节型
    .参数 UID缓冲, 字节型, 传址 数组

.DLL命令 写存储格式标识, 字节型, "OUR_MIFARE.dll", "iso15693writedsfid"
    .参数 操作标志, 字节型
    .参数 存储格式标识, 字节型
    .参数 UID缓冲, 字节型, 传址 数组

.DLL命令 读卡片系统信息, 字节型, "OUR_MIFARE.dll", "iso15693readinfo"
    .参数 操作标志, 字节型
    .参数 UID缓冲, 字节型, 传址 数组
    .参数 信息长度, 字节型, 传址 数组
    .参数 卡片系统信息, 字节型, 传址 数组

.DLL命令 读取卡块安全状态, 字节型, "OUR_MIFARE.dll", "iso15693readsecuritystate"
    .参数 操作标志, 字节型
    .参数 起始块地址, 字节型
    .参数 读写块数, 字节型
    .参数 UID缓冲, 字节型, 传址 数组
    .参数 信息长度, 字节型, 传址 数组
    .参数 卡片块安全信息, 字节型, 传址 数组

.DLL命令 锁应用标识, 字节型, "OUR_MIFARE.dll", "iso15693lockafi"
    .参数 操作标志, 字节型
    .参数 UID缓冲, 字节型, 传址 数组

.DLL命令 锁存储格式标识, 字节型, "OUR_MIFARE.dll", "iso15693lockdsfid"
    .参数 操作标志, 字节型
    .参数 UID缓冲, 字节型, 传址 数组

.DLL命令 锁卡数据块, 字节型, "OUR_MIFARE.dll", "iso15693lockblock"
    .参数 操作标志, 字节型
    .参数 起始块地址, 字节型
    .参数 UID缓冲, 字节型, 传址 数组
 

窗口程序集

.版本 2

.程序集 窗口程序集_启动窗口

.子程序 显示错误
.参数 错误代码, 字节型
.局部变量 句柄, 整数型

.如果 (错误代码 = 8)
    提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,未寻到发卡器上的卡!”, “提示”, 0)
.否则
    .如果 (错误代码 = 9)
        提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,读序列吗错误!”, “提示”, 0)
    .否则
        .如果 (错误代码 = 10)
            提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,选卡错误!”, “提示”, 0)
        .否则
            .如果 (错误代码 = 11)
                提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,装载密码错误!”, “提示”, 0)
            .否则
                .如果 (错误代码 = 12)
                    提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,密码认证错误!”, “提示”, 0)
                .否则
                    .如果 (错误代码 = 13)
                        提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,读卡错误!”, “提示”, 0)
                    .否则
                        .如果 (错误代码 = 14)
                            提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,写卡错误!”, “提示”, 0)
                        .否则
                            .如果 (错误代码 = 21)
                                提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,没有动态库!”, “提示”, 0)
                            .否则
                                .如果 (错误代码 = 22)
                                    提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,动态库或驱动程序异常!”, “提示”, 0)
                                .否则
                                    .如果 (错误代码 = 23)
                                        提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,驱动程序错误或发卡器未连接!”, “提示”, 0)
                                    .否则
                                        .如果 (错误代码 = 24)
                                            提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,操作超时,一般是动态库没有反映!”, “提示”, 0)
                                        .否则
                                            .如果 (错误代码 = 25)
                                                提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,发送字数不够!”, “提示”, 0)
                                            .否则
                                                .如果 (错误代码 = 26)
                                                    提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,发送的CRC错!”, “提示”, 0)
                                                .否则
                                                    .如果 (错误代码 = 27)
                                                        提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,接收的字数不够!”, “提示”, 0)
                                                    .否则
                                                        .如果 (错误代码 = 28)
                                                            提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,接收的CRC错!”, “提示”, 0)
                                                        .否则
                                                            提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,未知的错误!”, “提示”, 0)
                                                        .如果结束

                                                    .如果结束

                                                .如果结束

                                            .如果结束

                                        .如果结束

                                    .如果结束

                                .如果结束

                            .如果结束

                        .如果结束

                    .如果结束

                .如果结束

            .如果结束

        .如果结束

    .如果结束

.如果结束


.子程序 十六进制转十进制, 整数型
.参数 十六进制, 文本型
.局部变量 i, 整数型
.局部变量 十进制, 整数型


.计次循环首 (取文本长度 (十六进制), i)
    十进制 = 十进制 × 16 + 寻找文本 (“0123456789ABCDEF”, 取文本中间 (到大写 (十六进制), i, 1), , 假) - 1
.计次循环尾 ()
返回 (十进制)

.子程序 _驱动发卡器响声_被单击
.局部变量 返回值, 字节型

返回值 = 蜂鸣器嘀一声 (100)
.如果 (返回值 ≠ 0)
    显示错误 (返回值)
.否则

.如果结束

.子程序 _获取发卡器编号_被单击
.局部变量 句柄, 整数型
.局部变量 返回值, 字节型
.局部变量 设备编号, 字节型, 静态, "4"

返回值 = 读取设备编号 (设备编号)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)
    提示 (句柄, “读取成功,设备序列号:” + 到文本 (设备编号 [1]) + “-” + 到文本 (设备编号 [2]) + “-” + 到文本 (设备编号 [3]) + “-” + 到文本 (设备编号 [4]), “提示”, 0)
.否则
    显示错误 (返回值)
.如果结束


.子程序 _轻松读15693卡_被单击
.局部变量 句柄, 整数型
.局部变量 返回值, 字节型
.局部变量 控制位, 字节型
.局部变量 应用标识, 字节型
.局部变量 起始地址, 字节型
.局部变量 读写块数, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 读写缓冲, 字节型, 静态, "255"
.局部变量 显示信息, 文本型
.局部变量 总数, 整数型

控制位 = 0
应用标识 = 十六进制转十进制 (应用标识框.内容)
起始地址 = 到字节 (起始地址框.内容)
读写块数 = 到字节 (读写块数框.内容)

.如果 (读写块数 > 12)
    提示 (句柄, “轻松读写卡一次最多只能读写12块!”, “提示”, 0)
    返回 ()
.否则

.如果结束

UID框.内容 = “”
读写数据.内容 = “”

返回值 = 轻松读取15693卡数据 (控制位, 应用标识, 起始地址, 读写块数, UID缓冲, 读写缓冲)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)

    显示信息 = “”
    总数 = 1
    .判断循环首 (总数 < 9)
        显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (UID缓冲 [总数]), 2)
        总数 = 总数 + 1
    .判断循环尾 ()
    UID框.内容 = 显示信息

    显示信息 = “”
    总数 = 2
    .判断循环首 (总数 ≤ 读写缓冲 [1] + 1)
        显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (读写缓冲 [总数]) + “ ”, 3)
        总数 = 总数 + 1
    .判断循环尾 ()
    读写数据.内容 = 显示信息

.否则
    显示错误 (返回值)
.如果结束


.子程序 _轻松写15693卡_被单击
.局部变量 句柄, 整数型
.局部变量 返回值, 字节型
.局部变量 控制位, 字节型
.局部变量 应用标识, 字节型
.局部变量 起始地址, 字节型
.局部变量 读写块数, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 读写缓冲, 字节型, 静态, "255"
.局部变量 显示信息, 文本型
.局部变量 总数, 整数型
.局部变量 每块字节数, 字节型
.局部变量 写卡信息, 字节集, , "0"

UID框.内容 = “”

控制位 = 0
应用标识 = 十六进制转十进制 (应用标识框.内容)
起始地址 = 到字节 (起始地址框.内容)
读写块数 = 到字节 (读写块数框.内容)

.如果 (读写块数 > 12)
    提示 (句柄, “轻松读写卡一次最多只能读写12块!”, “提示”, 0)
    返回 ()
.否则

.如果结束

.如果 (卡类型.现行选中项 = 0)
    每块字节数 = 4
.否则
    .如果 (卡类型.现行选中项 = 1)
        每块字节数 = 8
    .否则
        每块字节数 = 32
    .如果结束

.如果结束

读写缓冲 [1] = 读写块数 × 每块字节数

写卡信息 = 分割字节集 (到字节集 (读写数据.内容), 到字节集 (“ ”), )

.如果 (取数组成员数 (写卡信息) < 读写缓冲 [1])
    .如果 (提示 (句柄, “写卡信息不足,是否尾部补0写入!”, “提示”, 1) ≠ 1)
        返回 ()
    .否则

    .如果结束

.否则

.如果结束

总数 = 2
.判断循环首 (总数 ≤ 取数组成员数 (写卡信息) + 1)
    读写缓冲 [总数] = 十六进制转十进制 (到文本 (写卡信息 [总数 - 1]))
    总数 = 总数 + 1
.判断循环尾 ()


返回值 = 轻松写数据到15693卡块内 (控制位, 应用标识, 起始地址, 读写块数, UID缓冲, 读写缓冲)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)

    显示信息 = “”
    总数 = 1
    .判断循环首 (总数 < 9)
        显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (UID缓冲 [总数]), 2)
        总数 = 总数 + 1
    .判断循环尾 ()
    UID框.内容 = 显示信息
    提示 (句柄, “卡号:” + 显示信息 + “,写卡成功!”, “提示”, 0)

.否则
    显示错误 (返回值)
.如果结束


.子程序 _寻单卡_被单击
.局部变量 返回值, 字节型
.局部变量 应用标识, 字节型
.局部变量 操作标志, 字节型
.局部变量 掩码长度, 字节型
.局部变量 卡号掩码, 字节型, 静态, "8"
.局部变量 UID缓冲, 字节型, 静态, "9"
.局部变量 显示信息, 文本型
.局部变量 数组指针, 整数型


UID框.内容 = “”

操作标志框.内容 = “36”
操作标志 = 十六进制转十进制 (操作标志框.内容)
应用标识 = 十六进制转十进制 (应用标识框.内容)
掩码长度 = 十六进制转十进制 (掩码长度框.内容)

返回值 = 寻感应区内单张卡 (操作标志, 应用标识, 掩码长度, 卡号掩码, UID缓冲)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)
    存储格式标识框.内容 = 取文本右边 (“00” + 取十六进制文本 (UID缓冲 [1]), 2)

    显示信息 = “”
    数组指针 = 2
    .判断循环首 (数组指针 < 10)
        显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (UID缓冲 [数组指针]), 2)
        数组指针 = 数组指针 + 1
    .判断循环尾 ()
    UID框.内容 = 显示信息
.否则
    显示错误 (返回值)
.如果结束


.子程序 _同时寻多张卡_被单击
.局部变量 返回值, 字节型
.局部变量 应用标识, 字节型
.局部变量 操作标志, 字节型
.局部变量 掩码长度, 字节型
.局部变量 卡号掩码, 字节型, 静态, "8"
.局部变量 UID缓冲, 字节型, 静态, "1000"
.局部变量 缓冲长度, 字节型, 静态, "1"
.局部变量 显示信息, 文本型
.局部变量 数组指针, 整数型
.局部变量 UID指针, 整数型

UID框.内容 = “”
UID列表.清空 ()

操作标志框.内容 = “16”
操作标志 = 十六进制转十进制 (操作标志框.内容)
应用标识 = 十六进制转十进制 (应用标识框.内容)
掩码长度 = 十六进制转十进制 (掩码长度框.内容)

返回值 = 寻感应区内多张卡 (操作标志, 应用标识, 掩码长度, 卡号掩码, 缓冲长度, UID缓冲)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)

    数组指针 = 1
    .判断循环首 (数组指针 < 缓冲长度 [1])
        显示信息 = “DSFID:” + 取文本右边 (“00” + 取十六进制文本 (UID缓冲 [数组指针]), 2) + “,UID:”
        UID指针 = 1
        .判断循环首 (UID指针 < 9)
            显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (UID缓冲 [UID指针 + 数组指针]), 2)
            UID指针 = UID指针 + 1
        .判断循环尾 ()
        UID列表.加入项目 (显示信息, )
        数组指针 = 数组指针 + 9
    .判断循环尾 ()
    UID列表.现行选中项 = 0
    _UID列表_列表项被选择 ()

.否则
    显示错误 (返回值)
.如果结束


.子程序 _UID列表_列表项被选择

.如果 (UID列表.取项目数 () > 0)
    UID框.内容 = 取文本右边 (UID列表.内容, 16)
    存储格式标识框.内容 = 取文本右边 (取文本左边 (UID列表.内容, 9), 2)
.否则


.如果结束


.子程序 _让卡静止_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 UID号, 文本型
.局部变量 UID指针, 整数型

操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
    信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
    返回 ()
.否则

.如果结束

UID指针 = 1
.判断循环首 (UID指针 < 9)
    UID缓冲 [UID指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
    UID号 = 取文本右边 (UID号, 16 - UID指针 × 2)
    UID指针 = UID指针 + 1
.判断循环尾 ()

返回值 = 让卡静止 (操作标志, UID缓冲)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)
    信息框 (“UID:” + 删全部空 (UID框.内容) + “,卡片已经静止,需要将卡拿开重刷才能再次寻到此卡!”, 0, “提示”, )
.否则
    .如果 (返回值 = 40)
        信息框 (“UID:” + 删全部空 (UID框.内容) + “,进入静止(Quiet)状态失败!”, 0, “提示”, )
    .否则
        显示错误 (返回值)
    .如果结束

.如果结束


.子程序 _让卡从静止中重起_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 UID号, 文本型
.局部变量 UID指针, 整数型

操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
    信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
    返回 ()
.否则

.如果结束

UID指针 = 1
.判断循环首 (UID指针 < 9)
    UID缓冲 [UID指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
    UID号 = 取文本右边 (UID号, 16 - UID指针 × 2)
    UID指针 = UID指针 + 1
.判断循环尾 ()

返回值 = 让静止卡重启 (操作标志, UID缓冲)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)
    信息框 (“UID:” + 删全部空 (UID框.内容) + “,已从静止中重起到准备状态!”, 0, “提示”, )
.否则
    .如果 (返回值 = 42)
        信息框 (“UID:” + 删全部空 (UID框.内容) + “,从静止中重起准备失败!”, 0, “提示”, )
    .否则
        显示错误 (返回值)
    .如果结束

.如果结束


.子程序 _选择卡_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 UID号, 文本型
.局部变量 UID指针, 整数型

操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
    信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
    返回 ()
.否则

.如果结束

UID指针 = 1
.判断循环首 (UID指针 < 9)
    UID缓冲 [UID指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
    UID号 = 取文本右边 (UID号, 16 - UID指针 × 2)
    UID指针 = UID指针 + 1
.判断循环尾 ()

返回值 = 选中卡片 (操作标志, UID缓冲)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)
    信息框 (“UID:” + 删全部空 (UID框.内容) + “,卡片已在选中状态!”, 0, “提示”, )
.否则
    .如果 (返回值 = 41)
        信息框 (“UID:” + 删全部空 (UID框.内容) + “,使卡进入选中状态失败!”, 0, “提示”, )
    .否则
        显示错误 (返回值)
    .如果结束

.如果结束


.子程序 _读一块数据_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 起始地址, 整数型
.局部变量 终止地址, 整数型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 数据长度, 字节型, 静态, "1"
.局部变量 数据缓冲, 字节型, 静态, "255"
.局部变量 UID号, 文本型
.局部变量 指针, 整数型
.局部变量 读写块地址, 整数型
.局部变量 显示信息, 文本型


读写数据.内容 = “”

操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)

起始地址 = 到字节 (起始地址框.内容)
终止地址 = 起始地址 + 到字节 (读写块数框.内容)

UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
    信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
    返回 ()
.否则

.如果结束

指针 = 1
.判断循环首 (指针 < 9)
    UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
    UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
    指针 = 指针 + 1
.判断循环尾 ()

显示信息 = “”
读写块地址 = 起始地址
.判断循环首 (读写块地址 < 终止地址)
    返回值 = 读指定块数据 (操作标志, 读写块地址, 1, UID缓冲, 数据长度, 数据缓冲)
    .如果 (返回值 = 0)
        指针 = 1
        .判断循环首 (指针 ≤ 数据长度 [1])
            显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (数据缓冲 [指针]), 2) + “ ”
            指针 = 指针 + 1
        .判断循环尾 ()
        读写块地址 = 读写块地址 + 1

    .否则
        终止地址 = 读写块地址 - 1
    .如果结束

.判断循环尾 ()

.如果 (读写块地址 = 终止地址)
    蜂鸣器嘀一声 (100)
    读写数据.内容 = 显示信息
    信息框 (“UID:” + 删全部空 (UID框.内容) + “,读卡成功!”, 0, “提示”, )
.否则
    信息框 (“在读取第:” + 到文本 (读写块地址) + “块时,返回错误代码:” + 到文本 (返回值), 0, “提示”, )
.如果结束

.子程序 _写一块数据_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 起始地址, 整数型
.局部变量 终止地址, 整数型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 数据长度, 字节型, 静态, "1"
.局部变量 数据缓冲, 字节型, 静态, "2000"
.局部变量 UID号, 文本型
.局部变量 指针, 整数型
.局部变量 写字节指针, 整数型
.局部变量 写卡信息, 字节集, , "0"
.局部变量 显示信息, 文本型
.局部变量 每块字节数, 字节型
.局部变量 写卡总长度, 整数型
.局部变量 块数据缓冲, 字节型, 静态, "32"


操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)

起始地址 = 到字节 (起始地址框.内容)
终止地址 = 起始地址 + 到字节 (读写块数框.内容)

.如果 (卡类型.现行选中项 = 0)
    每块字节数 = 4
.否则
    .如果 (卡类型.现行选中项 = 1)
        每块字节数 = 8
    .否则
        每块字节数 = 32
    .如果结束

.如果结束

写卡总长度 = 到数值 (读写块数框.内容) × 每块字节数

UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
    信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
    返回 ()
.否则
    指针 = 1
    .判断循环首 (指针 < 9)
        UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
        UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
        指针 = 指针 + 1
    .判断循环尾 ()
.如果结束

写卡信息 = 分割字节集 (到字节集 (读写数据.内容), 到字节集 (“ ”), )
.如果 (取数组成员数 (写卡信息) < 写卡总长度)
    .如果 (信息框 (“写卡信息不足,是否尾部补0写入!”, 1, “提示”, ) = 1)
        返回 ()
    .否则

    .如果结束

.否则

.如果结束
指针 = 1
.判断循环首 (指针 ≤ 取数组成员数 (写卡信息))
    数据缓冲 [指针] = 十六进制转十进制 (到文本 (写卡信息 [指针]))
    指针 = 指针 + 1
.判断循环尾 ()

写字节指针 = 0
.判断循环首 (起始地址 < 终止地址)
    指针 = 1
    .判断循环首 (指针 ≤ 每块字节数)
        块数据缓冲 [指针] = 数据缓冲 [写字节指针 + 指针]
        指针 = 指针 + 1
    .判断循环尾 ()
    返回值 = 写数据到指定块 (操作标志, 起始地址, 1, UID缓冲, 每块字节数, 块数据缓冲)
    .如果 (返回值 = 0)
        起始地址 = 起始地址 + 1
        写字节指针 = 写字节指针 + 每块字节数
    .否则
        终止地址 = 起始地址 - 1
    .如果结束

.判断循环尾 ()

.如果 (起始地址 = 终止地址)
    蜂鸣器嘀一声 (100)
    信息框 (“UID:” + 删全部空 (UID框.内容) + “,写卡成功!”, 0, “提示”, )
.否则
    信息框 (“在写第:” + 到文本 (起始地址) + “块时,返回错误代码:” + 到文本 (返回值), 0, “提示”, )
.如果结束


.子程序 _写AFI_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 应用标识, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型


操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
应用标识 = 十六进制转十进制 (应用标识框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
    信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
    返回 ()
.否则
    指针 = 1
    .判断循环首 (指针 < 9)
        UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
        UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
        指针 = 指针 + 1
    .判断循环尾 ()
.如果结束

返回值 = 写应用标识 (操作标志, 应用标识, UID缓冲)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)
    信息框 (“写AIF操作成功!”, 0, “提示”, )
.否则
    .如果 (返回值 = 46)
        信息框 (“写AIF操作失败!”, 0, “提示”, )
    .否则
        显示错误 (返回值)
    .如果结束

.如果结束


.子程序 _写DSFID_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 存储格式标识, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型


操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
存储格式标识 = 十六进制转十进制 (存储格式标识框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
    信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
    返回 ()
.否则
    指针 = 1
    .判断循环首 (指针 < 9)
        UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
        UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
        指针 = 指针 + 1
    .判断循环尾 ()
.如果结束

返回值 = 写存储格式标识 (操作标志, 存储格式标识, UID缓冲)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)
    信息框 (“写存储格式标识DSFID操作成功!”, 0, “提示”, )
.否则
    .如果 (返回值 = 41)
        信息框 (“写存储格式标识DSFID操作失败!”, 0, “提示”, )
    .否则
        显示错误 (返回值)
    .如果结束

.如果结束


.子程序 _读取卡片系统信息_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 信息长度, 字节型, 静态, "1"
.局部变量 卡片系统信息, 字节型, 静态, "255"
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型
.局部变量 显示信息, 文本型

操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)

UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
    信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
    返回 ()
.否则
    指针 = 1
    .判断循环首 (指针 < 9)
        UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
        UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
        指针 = 指针 + 1
    .判断循环尾 ()
.如果结束

返回值 = 读卡片系统信息 (操作标志, UID缓冲, 信息长度, 卡片系统信息)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)
    显示信息 = “”
    指针 = 1
    .判断循环首 (指针 ≤ 信息长度 [1])
        显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (卡片系统信息 [指针]) + “ ”, 3)
        指针 = 指针 + 1
    .判断循环尾 ()
    读写数据.内容 = 显示信息

    信息框 (“读取卡片系统信息成功!”, 0, “提示”, )
.否则
    显示错误 (返回值)

.如果结束


.子程序 _读取块安全状态_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 起始地址, 字节型
.局部变量 读写块数, 字节型
.局部变量 信息长度, 字节型, 静态, "1"
.局部变量 卡片安全信息, 字节型, 静态, "255"
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型
.局部变量 显示信息, 文本型

操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
起始地址 = 到字节 (起始地址框.内容)
读写块数 = 到字节 (读写块数框.内容)

UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
    信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
    返回 ()
.否则
    指针 = 1
    .判断循环首 (指针 < 9)
        UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
        UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
        指针 = 指针 + 1
    .判断循环尾 ()
.如果结束

返回值 = 读取卡块安全状态 (操作标志, 起始地址, 读写块数, UID缓冲, 信息长度, 卡片安全信息)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)
    显示信息 = “”
    指针 = 1
    .判断循环首 (指针 ≤ 信息长度 [1])
        显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (卡片安全信息 [指针]) + “ ”, 3)
        指针 = 指针 + 1
    .判断循环尾 ()
    读写数据.内容 = 显示信息

    信息框 (“读取卡片块安全状态成功!”, 0, “提示”, )
.否则
    显示错误 (返回值)
.如果结束


.子程序 _锁AFI_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型
.局部变量 显示信息, 文本型


.如果 (信息框 (“应用标识AFI锁定后将不能再修改,确定要锁定应用标识AFI吗?”, 1, “提示”, ) = 1)
    返回 ()
.否则

.如果结束

操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)

UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
    信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
    返回 ()
.否则
    指针 = 1
    .判断循环首 (指针 < 9)
        UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
        UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
        指针 = 指针 + 1
    .判断循环尾 ()
.如果结束

返回值 = 锁应用标识 (操作标志, UID缓冲)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)
    信息框 (“锁应用标识AFI操作成功!”, 0, “提示”, )
.否则
    显示错误 (返回值)
.如果结束


.子程序 _锁DSFID_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型
.局部变量 显示信息, 文本型


.如果 (信息框 (“卡片存储格式标识DSFID锁定后将不能再修改,确定要锁定卡片存储格式标识DSFID吗?”, 1, “提示”, ) = 1)
    返回 ()
.否则

.如果结束

操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)

UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
    信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
    返回 ()
.否则
    指针 = 1
    .判断循环首 (指针 < 9)
        UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
        UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
        指针 = 指针 + 1
    .判断循环尾 ()
.如果结束

返回值 = 锁存储格式标识 (操作标志, UID缓冲)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)
    信息框 (“数据存储格式标识DSFID锁定成功!”, 0, “提示”, )
.否则
    显示错误 (返回值)
.如果结束


.子程序 _锁数据块_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 起始地址, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型
.局部变量 显示信息, 文本型


.如果 (信息框 (“卡片数据块锁定后将不能再修改,确定要锁定卡片数据块吗?”, 1, “提示”, ) = 1)
    返回 ()
.否则

.如果结束

操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
起始地址 = 到字节 (起始地址框.内容)

UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
    信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
    返回 ()
.否则
    指针 = 1
    .判断循环首 (指针 < 9)
        UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
        UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
        指针 = 指针 + 1
    .判断循环尾 ()
.如果结束

返回值 = 锁卡数据块 (操作标志, 起始地址, UID缓冲)
.如果 (返回值 = 0)
    蜂鸣器嘀一声 (100)
    信息框 (“数据块锁定成功!”, 0, “提示”, )
.否则
    显示错误 (返回值)
.如果结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/671155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

slam中用到的Pangolin安装问题

sudo apt-get install libglew-dev sudo apt-get install cmake sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev cd ~/orbslam_ws/src$ git clone https://github.com/zzx2GH/Pangolin.git把Pangolin/src/CMakeLists.txt注释掉以下…

村田将电动汽车静噪对策用树脂成型表面贴装型MLCC商品化

株式会社村田制作所已开发出电动汽车静噪对策用树脂成型表面贴装型多层陶瓷电容器“EVA系列”。该产品虽然体积小、厚度薄(12.7 x 6.0 x 3.7 mm),但是仍然确保了高电压负载所需的爬电距离(10 mm),并且支持国际标准“IEC60384-14”中的Y2级。 ​ 这是一款…

【高性能计算】无监督学习之层次聚类实验

【高性能计算】基于K均值的划分聚类实验 实验目的实验内容实验步骤1、层次聚类算法1.1 层次聚类算法的基本思想1.2 层次聚类的聚类过程 2、使用Python语言编写层次聚类的源程序代码并分析其分类原理2.1 层次聚类 Python代码2.1.1 计算欧式距离函数euler_distance2.1.2 层次聚类…

每一次Http请求,Java线程是如何处理的?

每一次Http请求,Java线程是如何处理的? 文章目录 每一次Http请求,Java线程是如何处理的?前言一、Http请求处理二、两种服务器模型及处理方式1、两种服务:2.更好的处理方式 总结 前言 当我们写好一个项目时&#xff0c…

【go】Excelize处理excel表

文章目录 1 Excelize介绍2 相关需求与实现2.1 数据的excel文件导出2.2 带数据校验的excel文件导出 1 Excelize介绍 Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库。官方文档:https://xuri.me/excelize/zh-hans/ 引入方法 go get "github.com/…

【MYSQL篇】一文了解mysql事务

文章目录 MYSQL事务事务的四大特性1、原子性2、一致性3、隔离性4、持久性 事务的并发1、脏读2、不可重复读3、幻读 隔离级别Read UncommittedRead CommittedRepeatable ReadSerializable MySQL Innodb 对隔离级别的支持实现方案LBCCMVCC 总结 关于 MYSQL 事务在面试的时候&…

软件系统三基座之二:组织架构

软件系统三基座包含:权限管理、组织架构、用户管理。 一、组织的来源 组织是由若干个人或群体所组成的、有共同目标和一定边界的社会实体。组织是为了提升劳动效率而产生的。 从一个日常案例,讲讲组织是如何提升劳动效率的。 唯美食与美景不可辜负&#…

Java 基础进阶篇(十八):正则表达式匹配规则和应用

文章目录 一、正则表达式概述二、正则表达式的匹配规则三、正则表达式在方法中的应用3.1 校验手机号、邮箱和座机电话号码3.2 字符串的内容替换和分割 四、编程题目4.1 表示数值的字符串4.2 非严格递增连续数字序列 一、正则表达式概述 正则表达式是对字符串(包括普…

I/O多路转接之select

初识select 系统提供select函数来实现多路复用输入/输出模型: select系统调用是用来让我们的程序监视多个文件描述符的状态变化的;程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变; 文章目录 初识select一:Sel…

Goby 漏洞发布|Avaya Aura Device Services r软件 PhoneBackup 任意文件上传漏洞

漏洞名称:Avaya Aura Device Services r软件 PhoneBackup 任意文件上传漏洞 English Name:Avaya Aura Device Services PhoneBackup File Upload Vulnerability CVSS core: 9.0 影响资产数:565 漏洞描述: Avaya Aura Device …

【linux 新机配置】

1,安装 node https://juejin.cn/post/7102790458132135944 2 linux 安装 Yarn https://juejin.cn/post/7102793669425496077 3 安装Nginx 安装 dnf install nginx 启动 systemctl start nginx systemctl status nginx systemctl enable nginx 配置&#xff0…

python机器人编程——差速AGV机器、基于视觉和预测控制的循迹、自动行驶(下篇)

目录 一、前言二、基于轨迹与路面重心偏离度误差的预测自动差速小车循迹控制策略三、轨迹图像的处理要点四、本篇部分核心控制策略python代码:五、结论 一、前言 基于最近的测试,得到了一种粗略控制的算法,其控制效果适合单线路和急转弯的情…

LLM探索:GPT类模型的几个常用参数 Top-k, Top-p, Temperature

Top-k抽样模型从最可能的"k"个选项中随机选择一个如果k10,模型将从最可能的10个单词中选择一个Top-p抽样模型从累计概率大于或等于“p”的最小集合中随机选择一个如果p0.9,选择的单词集将是概率累计到0.9的那部分Temperature控制生成文本随机性…

对比之前的组件优化说明React.memo的作用

我们之前写的react PureComponent讲述了 PureComponent 组件优化特性的强大功能 还有就是 shouldComponentUpdate 生命周期的一个解决方案 那么呢 今天我们要说另一个 也是类似于组件性能优化的新特性 打开我们的react项目 在src下的components创建一个组件 例如 我这里叫 dom…

【C++】-8.2- string〔string类模拟实现〕

文章目录 //模拟实现string类,并完成测试• string类的基本结构• Destructor• Construct〔构造函数〕‹ 无参构造 ›‹ 单参数构造 ›‹ 全缺省参数构造 › 〔拷贝构造〕 • operator 赋值重载• Element access(operator[])补充&#xff1…

Android强大的原生调试工具adb的常用命令

文章目录 ADB简介常用命令列出链接的设备进入设备的shell环境设备日志安装应用程序卸载应用程序将本地文件复制到调试设备上将设备上的文件拉取到本地启动程序强制停止程序运行截图屏幕录制列出调试设备所有的应用的报名 结语 ADB简介 ADB(Android Debug Bridge&am…

BioXFinder生物数据库

BioXFinder是目前国内第一个也是国内唯一一个生物信息数据库,由享融智云公司精心研发,主要针对生物科研工作者的综合性生物数据检索及分析平台,汇集了核酸、蛋白、蛋白结构、代谢通路和信号通路信息,解决海外数据访问难、访问慢的…

Adobe Creative Cloud 摄影计划 - 当图像与想象力相遇。 PS+LRc套餐 国际版 1年订阅/398

这里重点介绍国际版摄影计划套餐详情: 国际版包括:Photoshop、Lightroom Classic、Photoshop Express、Lightroom Mobile、Lightroom、云服务。中国版包括:Photoshop、Lightroom Classic、Photoshop Express、Lightroom Mobile 桌面应用程序…

SpringBoot集成Kafka的简单实现案列

1&#xff0c;首先搭建一个Springboot项目准备一个测试服务器 2&#xff0c;引入pom <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency>他其中包括一些其他的包如果有冲突可…

有哪些值得注意的隔断小技巧可以让酒店更美观实用

以下是一些可以使酒店隔断更美观实用的小技巧&#xff1a; 1. 选择透明或半透明材料&#xff1a;使用透明或半透明的材料&#xff0c;如玻璃、亚克力或薄钢板&#xff0c;可以增加空间的亮度和通透感。 2. 考虑隔断的尺寸和布局&#xff1a;确保隔断的尺寸和布局适应空间大小和…