第一步:新建一個qt C++項目
在此需要注意,名稱和路徑不能有中文。
第二步:添加控件完成UI布局
IC讀寫器讀寫IC卡數(shù)據(jù)塊
第三步:開始寫代碼
使設備發(fā)出滴滴響聲
#define BLOCK0_EN 0x01 #define BLOCK1_EN 0x02 #define BLOCK2_EN 0x04 #define NEEDSERIAL 0x08 #define EXTERNKEY 0x10 #define NEEDHALT 0x20 //#define NEEDSERIAL 0x08 #define EXTERNKEY 0x10 //讓讀寫器發(fā)出聲音 typedef unsigned char (*pcdbeep)(unsigned long xms); //返回本讀寫器獨一無二的設備編號 typedef unsigned char (*pcdgetdevicenumber)(unsigned long devicenumber); //輕松讀卡 typedef unsigned char (*piccreadex)(unsigned char ctrlword,unsigned char *serial,unsigned char area,unsigned char keyA1B0,unsigned char *picckey,unsigned char *piccdata0_2); //輕松寫卡 typedef unsigned char (*piccwriteex)(unsigned char ctrlword,unsigned char *serial,unsigned char area, unsigned char keyA1B0,unsigned char *picckey,unsigned char *piccdata0_2); //改單區(qū)密碼 typedef unsigned char (*piccchangesinglekeyex)(unsigned char ctrlword,unsigned char *serial,unsigned char area,unsigned char keyA1B0,unsigned char *piccoldkey,unsigned char *piccdata); //讀出一塊的數(shù)據(jù),也就是16個字節(jié) typedef unsigned char (*piccread)(unsigned char block,unsigned char *piccdata); //檢測輸入數(shù)據(jù)是否為16進制數(shù) static bool checkinput(QString inputstr){ QString inputyes="0123456789abcdefABCDEF"; for(int i=0;isetupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_4_clicked()//讓設備發(fā)出聲響 { unsigned char result; QLibrary mylib("OUR_MIFARE.dll"); if (!mylib.load()) //判斷是否正確加載 { QMessageBox::information(NULL, "提示", "動態(tài)庫沒裝載!原因是動態(tài)庫OUR_MIFARE.dll沒放在生成exe文件相同目錄下!"); return; } pcdbeep mypcdbeep = (pcdbeep)mylib.resolve("pcdbeep"); if (mypcdbeep == NULL) //是否成功連接上 idr_beep()函數(shù) { mylib.unload(); QMessageBox::information(NULL, "提示", "請檢查函數(shù)名是否正確!"); return; } result = mypcdbeep(30); //這里函數(shù)指針調用dll中的idr_beep() 函數(shù) mylib.unload(); if(result > 0) { if(result == 23) { QMessageBox::information(NULL, "提示", "機器沒連上或者驅動沒下載"); } else { QMessageBox::information(NULL, "提示", "錯誤代碼:" + QString::number(result)); }; } //qDebug()
讀卡功能
void MainWindow::on_pushButton_3_clicked()//輕松讀卡 { unsigned char ctrlword;//控制字 unsigned char serial[4];//可寫數(shù)組 unsigned char area;//讀出的區(qū)號 unsigned char keyA1B0;//AB密碼認證 unsigned char picckey[6];//存放卡密碼的數(shù)組 unsigned char piccdata0_2[48];//下標0~15存放作為讀出的塊0的數(shù)據(jù),下標16~31存放作為讀出的塊1的數(shù)據(jù),下標32~47存放作為讀出的塊2的數(shù)據(jù) unsigned char status;//返回 unsigned char status1; unsigned char result; QString piccdata[16]; //卡數(shù)據(jù)緩沖 //unsigned char myareano = ui->lineEdit_5 ; '指定為第8區(qū) //以下控制字含義:讀塊0、塊1、塊2,僅讀指定序列號的卡,需要每次指定密碼 if (ui->radioButton->isChecked()) { ctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY; } else {//內部密碼 ctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN; } area = ui->comboBox->currentText().toUShort(); keyA1B0 = 1;//用A密碼 //qDebug()text().mid(0,2); //qDebug()text().mid(2,2); // qDebug()text().mid(2,2); // qDebug()text().mid(2,2); QString Key_str = ui->lineEdit->text().trimmed(); if(Key_str.length() < 12) { QMessageBox::information(NULL, "提示", "密碼長度不夠12位!"); ui-?>lineEdit->setFocus(); return; } char c; for (int var = 0; var < 12; ++var) { c = Key_str.at(var).toLatin1(); if(!((('0' <= c) && (c <= '9')) || (('A' <= c) && (c <= 'F')) || (('a' <= c) && (c <= 'f')))) { QMessageBox::information(NULL, "提示", "密碼輸入字符不正確!"); //ui-?>lineEdit->setSelection(var,1); ui->lineEdit->setSelection(var,1); ui->lineEdit->setFocus(); return; } } bool ok; // picckey[0]=(unsigned char)(Key_str.mid(0,2).toUShort(nullptr,16)); // picckey[1] = Key_str.mid(2,2).toShort(); // picckey[2] = Key_str.mid(4,2).toShort(); // picckey[3] = Key_str.mid(6,2).toShort(); // picckey[4] = Key_str.mid(8,2).toShort(); // picckey[5] = Key_str.mid(10,2).toShort(); for(int i = 0; i < 6; i++) { picckey[i]=QString(Key_str.mid(i*2,2)).toInt(&ok,16); } QLibrary mylib("OUR_MIFARE.dll"); if (!mylib.load()) //判斷是否正確加載 { QMessageBox::information(NULL, "提示", "動態(tài)庫沒裝載!原因是動態(tài)庫OUR_MIFARE.dll沒放在生成exe文件相同目錄下!"); return; } piccreadex mypiccreadex = (piccreadex)mylib.resolve("piccreadex"); status = mypiccreadex(ctrlword,serial,area,keyA1B0,picckey,piccdata0_2); if(status == 0) { //qDebug()setText(QString::asprintf("%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X",picckey[0],picckey[1],picckey[2],picckey[3],picckey[4],picckey[5],picckey[6],serial[1],serial[2],serial[3])); ui->lineEdit_2->setText(QString::asprintf("%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X ",piccdata0_2[0],piccdata0_2[1],piccdata0_2[2],piccdata0_2[3],piccdata0_2[4],piccdata0_2[5],piccdata0_2[6],piccdata0_2[7],piccdata0_2[8],piccdata0_2[9],piccdata0_2[10],piccdata0_2[11],piccdata0_2[12],piccdata0_2[13],piccdata0_2[14],piccdata0_2[15])); ui->lineEdit_3->setText(QString::asprintf("%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X ",piccdata0_2[16],piccdata0_2[17],piccdata0_2[18],piccdata0_2[19],piccdata0_2[20],piccdata0_2[21],piccdata0_2[22],piccdata0_2[23],piccdata0_2[24],piccdata0_2[25],piccdata0_2[26],piccdata0_2[27],piccdata0_2[28],piccdata0_2[29],piccdata0_2[30],piccdata0_2[31])); ui->lineEdit_4->setText(QString::asprintf("%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X ",piccdata0_2[32],piccdata0_2[33],piccdata0_2[34],piccdata0_2[35],piccdata0_2[36],piccdata0_2[37],piccdata0_2[38],piccdata0_2[39],piccdata0_2[40],piccdata0_2[41],piccdata0_2[42],piccdata0_2[43],piccdata0_2[44],piccdata0_2[45],piccdata0_2[46],piccdata0_2[47])); piccread mypiccread = (piccread)mylib.resolve("piccread"); //typedef unsigned char (*piccread)(unsigned char block,unsigned char *piccdata); status1 = piccread(area * 4 + 3,piccdata); pcdbeep mypcdbeep = (pcdbeep)mylib.resolve("pcdbeep"); if (mypcdbeep == NULL) //是否成功連接上 idr_beep()函數(shù) { mylib.unload(); QMessageBox::information(NULL, "提示", "請檢查函數(shù)名是否正確!"); return; } result = mypcdbeep(30); //這里函數(shù)指針調用dll中的idr_beep() 函數(shù) mylib.unload(); } else if(status == 8) { ui->lineEdit_2->clear(); ui->lineEdit_3->clear(); ui->lineEdit_4->clear(); QMessageBox::information(NULL, "提示", "尋卡錯誤,根本就沒有卡在感應區(qū)"); } else if(status == 12) { ui->lineEdit_2->clear(); ui->lineEdit_3->clear(); ui->lineEdit_4->clear(); QMessageBox::information(NULL, "提示", "密碼認證失敗"); } //qDebug() 審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
IC
+關注
關注
36文章
6097瀏覽量
178425 -
讀寫器
+關注
關注
3文章
699瀏覽量
39541 -
C++
+關注
關注
22文章
2117瀏覽量
74783
發(fā)布評論請先 登錄
相關推薦
熱點推薦
高頻工業(yè)RFID讀寫器
高頻工業(yè)RFID讀寫器 型號:SG-HF40-485、SG-HF40-TCP 產品功能 高頻工業(yè)讀寫器(RFID)產品用在自動化生產線,自動化分揀系統(tǒng),零部件組裝產線等情境下,在自動化節(jié)點的工位上部

RFID讀寫器高頻與超高頻技術特性和應用差異對比
高頻與超高頻讀寫器作為RFID技術的兩大支柱,分別在安全性與效率性上形成差異化優(yōu)勢。在智能倉儲、智能制造等復雜場景中,混合部署高頻與超高頻讀寫器已成為趨勢。
RFID讀寫器哪種性價比高?RFID讀寫器哪家做的比較好
在探討RFID讀寫器性價比及品牌優(yōu)劣時,我們不得不將目光聚焦于行業(yè)內的佼佼者,遠望谷與遠景達無疑是兩顆璀璨的明星。這兩家企業(yè)不僅在國內RFID及物聯(lián)網(wǎng)領域享有盛譽,更以其卓越的技術實力、豐富的產品線

制鞋線體去毛刺工藝段現(xiàn)場RFID讀寫器進行數(shù)據(jù)傳輸應用
在制鞋廠的去毛刺工藝段,RFID標簽被固定在鞋子上,讀寫器則安裝在生產線上。當鞋子經(jīng)過讀寫器時,讀寫器會迅速讀取標簽中的信息,并將數(shù)據(jù)傳輸給管理系統(tǒng)。
基于QT開發(fā)國產主板終端桌面程序 高效、穩(wěn)定、跨平臺的解決方案
了開發(fā)者們面臨的一個重要挑戰(zhàn)。本文將介紹如何基于QT框架,開發(fā)適用于國產主板的終端桌面程序,并探討其優(yōu)勢和應用場景。 QT是一個跨平臺的
USB免驅全協(xié)議IC卡讀寫器 QT程序開發(fā)
? 讀取15693卡,IC讀卡器如下入所示: 15693卡片,通常指的是符合ISO/IEC 15693標準的非接觸式智能卡或RFID卡。以下是對15693卡片的詳細介紹: 一、基本概述 15693

手持式RFID讀寫器可以當pda手持終端用嗎
隨著科技的不斷進步,手持式RFID讀寫器作為一種新興的便攜式讀寫器,逐漸在各行各業(yè)中發(fā)揮著重要作用。而在很多場景下,手持式RFID讀寫器是否能替代傳統(tǒng)的PDA(數(shù)據(jù)采集終端)手持終端也成為了一個備受

超高頻讀寫器究竟是什么,能做什么?一文讀懂!
在物聯(lián)網(wǎng)技術日新月異的今天,超高頻讀寫器作為射頻識別(RFID)技術的重要組成部分,正逐漸滲透到我們生活的各個領域。那么,超高頻讀寫器究竟是什么?它又能做些什么呢?本文將帶您一探究竟。一、超高頻

工業(yè)制造行業(yè)的RFID讀寫器形狀大小如何選型
在工業(yè)制造行業(yè),RFID讀寫器的形狀和大小選型主要取決于具體的應用場景、工作環(huán)境、安裝條件以及讀寫需求。以下是一些關鍵的選型因素和建議:

巴魯夫rfid讀頭國產平替版——高頻RFID讀寫器
隨著RFID技術的不斷發(fā)展,國內RFID企業(yè)的數(shù)量也在不斷地變多,國產RFID讀寫器的質量也越來越高。具有著價格實惠、質量可靠等特點,成為了可平替國外RFID產品的首要選擇。健永科技的高頻RFID讀寫器JY-H830,是一款可平替巴魯夫rfid讀頭的國產RFID

使用TRF7970A的NFC/HF RFID讀寫器
電子發(fā)燒友網(wǎng)站提供《使用TRF7970A的NFC/HF RFID讀寫器.pdf》資料免費下載
發(fā)表于 09-18 14:42
?0次下載

嵌入式QT常見開發(fā)方式有哪些?
嵌入式QT常見開發(fā)方式有哪些?
嵌入式工程師在學習和使用Qt進行開發(fā)時,常見的幾種開發(fā)方式包括:
1.
發(fā)表于 08-12 10:05

RFID讀寫器選擇指南:專家解答您的疑惑
一芯未來在這些普通的RFID讀寫器基礎上,自主研發(fā)、生產、銷售的超高頻 RFID國軍標讀寫器,外觀小巧,結構堅固可靠,采用防水、防震及寬溫度適應范圍設計。在軍事領域具有更廣泛的應用前景和潛力,為部隊提供了高效、可靠的物資和人員管理解決方案。

評論