色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++ QT開發,IC讀寫器程序

鄒振豪 ? 來源:jf_51178285 ? 作者:jf_51178285 ? 2024-12-30 14:55 ? 次閱讀

第一步:新建一個qt C++項目

wKgZPGdyP_6AO_KvAAfrLdJihcY379.pngwKgZO2dyQDWABVsZAAgzAvh17MM970.png

在此需要注意,名稱和路徑不能有中文。

第二步:添加控件完成UI布局

wKgZO2dyQKGAQCG_AAF6fUjfXEM123.pngIC讀寫器讀寫IC卡數據塊

第三步:開始寫代碼

使設備發出滴滴響聲

wKgZPGdyQdGAa84uAADRl397VQk748.png

#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
 
 
//讓讀寫器發出聲音
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);
 
//改單區密碼
typedef unsigned char (*piccchangesinglekeyex)(unsigned char ctrlword,unsigned char *serial,unsigned char area,unsigned char keyA1B0,unsigned char *piccoldkey,unsigned char *piccdata);
 
//讀出一塊的數據,也就是16個字節
typedef unsigned char (*piccread)(unsigned char block,unsigned char *piccdata);
 
//檢測輸入數據是否為16進制數
static bool checkinput(QString inputstr){
    QString inputyes="0123456789abcdefABCDEF";
    for(int i=0;isetupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
 
 
void MainWindow::on_pushButton_4_clicked()//讓設備發出聲響
{
    unsigned char result;
    QLibrary mylib("OUR_MIFARE.dll");
    if (!mylib.load())                //判斷是否正確加載
    {
        QMessageBox::information(NULL, "提示", "動態庫沒裝載!原因是動態庫OUR_MIFARE.dll沒放在生成exe文件相同目錄下!");
        return;
    }
 
    pcdbeep mypcdbeep = (pcdbeep)mylib.resolve("pcdbeep");
    if (mypcdbeep == NULL)                   //是否成功連接上 idr_beep()函數
    {
        mylib.unload();
        QMessageBox::information(NULL, "提示", "請檢查函數名是否正確!");
        return;
 
    }
 
 
    result = mypcdbeep(30);      //這里函數指針調用dll中的idr_beep() 函數
    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];//可寫數組
   unsigned char area;//讀出的區號

   unsigned char keyA1B0;//AB密碼認證
   unsigned char picckey[6];//存放卡密碼的數組
   unsigned char piccdata0_2[48];//下標0~15存放作為讀出的塊0的數據,下標16~31存放作為讀出的塊1的數據,下標32~47存放作為讀出的塊2的數據

   unsigned char status;//返回
unsigned char status1;
   unsigned char result;
   QString piccdata[16];  //卡數據緩沖

  //unsigned char myareano = ui->lineEdit_5 ; '指定為第8區

   //以下控制字含義:讀塊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, "提示", "動態庫沒裝載!原因是動態庫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()函數
       {
         mylib.unload();
         QMessageBox::information(NULL, "提示", "請檢查函數名是否正確!");
         return;

       }


       result = mypcdbeep(30);      //這里函數指針調用dll中的idr_beep() 函數
       mylib.unload();



   }
   else if(status == 8)
   {
       ui->lineEdit_2->clear();
       ui->lineEdit_3->clear();
       ui->lineEdit_4->clear();
       QMessageBox::information(NULL, "提示", "尋卡錯誤,根本就沒有卡在感應區");

   }
   else if(status == 12)
   {
       ui->lineEdit_2->clear();
       ui->lineEdit_3->clear();
       ui->lineEdit_4->clear();
       QMessageBox::information(NULL, "提示", "密碼認證失敗");

   }
   //qDebug()

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • IC
    IC
    +關注

    關注

    36

    文章

    5956

    瀏覽量

    175710
  • 讀寫器
    +關注

    關注

    3

    文章

    662

    瀏覽量

    38870
  • C++
    C++
    +關注

    關注

    22

    文章

    2109

    瀏覽量

    73685
收藏 人收藏

    評論

    相關推薦

    USB免驅全協議IC讀寫器 QT程序開發

    ? 讀取15693卡,IC讀卡如下入所示: 15693卡片,通常指的是符合ISO/IEC 15693標準的非接觸式智能卡或RFID卡。以下是對15693卡片的詳細介紹: 一、基本概述 15693
    的頭像 發表于 12-30 17:42 ?95次閱讀
    USB免驅全協議<b class='flag-5'>IC</b>卡<b class='flag-5'>讀寫器</b> <b class='flag-5'>QT</b><b class='flag-5'>程序</b><b class='flag-5'>開發</b>

    手持式RFID讀寫器可以當pda手持終端用嗎

    隨著科技的不斷進步,手持式RFID讀寫器作為一種新興的便攜式讀寫器,逐漸在各行各業中發揮著重要作用。而在很多場景下,手持式RFID讀寫器是否能替代傳統的PDA(數據采集終端)手持終端也成為了一個備受
    的頭像 發表于 12-05 14:58 ?132次閱讀
    手持式RFID<b class='flag-5'>讀寫器</b>可以當pda手持終端用嗎

    超高頻讀寫器究竟是什么,能做什么?一文讀懂!

    在物聯網技術日新月異的今天,超高頻讀寫器作為射頻識別(RFID)技術的重要組成部分,正逐漸滲透到我們生活的各個領域。那么,超高頻讀寫器究竟是什么?它又能做些什么呢?本文將帶您一探究竟。一、超高頻
    的頭像 發表于 10-23 14:41 ?230次閱讀
    超高頻<b class='flag-5'>讀寫器</b>究竟是什么,能做什么?一文讀懂!

    工業制造行業的RFID讀寫器形狀大小如何選型

    在工業制造行業,RFID讀寫器的形狀和大小選型主要取決于具體的應用場景、工作環境、安裝條件以及讀寫需求。以下是一些關鍵的選型因素和建議:
    的頭像 發表于 10-16 10:24 ?225次閱讀
    工業制造行業的RFID<b class='flag-5'>讀寫器</b>形狀大小如何選型

    巴魯夫rfid讀頭國產平替版——高頻RFID讀寫器

    隨著RFID技術的不斷發展,國內RFID企業的數量也在不斷地變多,國產RFID讀寫器的質量也越來越高。具有著價格實惠、質量可靠等特點,成為了可平替國外RFID產品的首要選擇。健永科技的高頻RFID讀寫器JY-H830,是一款可平替巴魯夫rfid讀頭的國產RFID
    的頭像 發表于 10-10 16:05 ?358次閱讀
    巴魯夫rfid讀頭國產平替版——高頻RFID<b class='flag-5'>讀寫器</b>

    使用TRF7970A的NFC/HF RFID讀寫器

    電子發燒友網站提供《使用TRF7970A的NFC/HF RFID讀寫器.pdf》資料免費下載
    發表于 09-18 14:42 ?0次下載
    使用TRF7970A的NFC/HF RFID<b class='flag-5'>讀寫器</b>

    嵌入式QT常見開發方式有哪些?

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

    藍牙RFID讀寫器智慧畜牧芯片掃描儀JY-U706 #RFID #手持機 #RFID讀寫器

    RFID讀寫器
    健永科技
    發布于 :2024年07月19日 15:26:13

    涉密領域好幫手-RFID GJB固定式讀寫器

    RFID GJB固定式讀寫器以其高安全性、耐用堅固、高性能參數和多協議兼容等特點,成為軍事領域和涉密領域的理想選擇。RFID GJB固定式讀寫器將在更多領域展現其獨特的魅力,并逐漸實現成為各領域中不可或缺的重要設備。
    的頭像 發表于 06-24 15:29 ?530次閱讀
    涉密領域好幫手-RFID GJB固定式<b class='flag-5'>讀寫器</b>

    RFID讀寫器選擇指南:專家解答您的疑惑

    一芯未來在這些普通的RFID讀寫器基礎上,自主研發、生產、銷售的超高頻 RFID國軍標讀寫器,外觀小巧,結構堅固可靠,采用防水、防震及寬溫度適應范圍設計。在軍事領域具有更廣泛的應用前景和潛力,為部隊提供了高效、可靠的物資和人員管理解決方案。
    的頭像 發表于 06-14 16:40 ?632次閱讀
    RFID<b class='flag-5'>讀寫器</b>選擇指南:專家解答您的疑惑

    在嵌入式系統中集成Rust和Qt的實踐

    Rust 擁有豐富的庫生態系統,用于序列化和反序列化、異步操作、解析不安全輸入、線程、靜態分析等,而 Qt 是一個 C++ 工具包,支持跨各種平臺的豐富的、基于 GUI 的應用程序,從 iOS 到嵌入式Linux。
    發表于 05-03 10:26 ?1827次閱讀
    在嵌入式系統中集成Rust和<b class='flag-5'>Qt</b>的實踐

    超高頻桌面讀寫器功能介紹,為什么要用超高頻RFID讀寫器

    超高頻桌面讀寫器是一種無線射頻識別(RFID)設備。作為一種高效、準確的自動識別技術,它可以實現對遠距離范圍內的RFID標簽進行高效讀寫,無需接觸或靠近標簽,這種超高頻RFID讀寫器廣泛應用于物流
    的頭像 發表于 04-16 15:00 ?442次閱讀
    超高頻桌面<b class='flag-5'>讀寫器</b>功能介紹,為什么要用超高頻RFID<b class='flag-5'>讀寫器</b>?

    Qt上位機開發實戰案例

    Qt框架的開發人員能迅速上手和操作。 即使不開發Qt應用程序Qt Creator也是一個
    的頭像 發表于 03-13 12:31 ?2572次閱讀
    <b class='flag-5'>Qt</b>上位機<b class='flag-5'>開發</b>實戰案例

    Qt For OpenHarmony圖形化的進展突破

    Qt 適配 OpenHarmony 意義 Qt 是一個 C++ 跨平臺開發框架,主要用于開發圖形用戶界面(Graphical User In
    的頭像 發表于 02-02 14:29 ?1538次閱讀
    <b class='flag-5'>Qt</b> For OpenHarmony圖形化的進展突破

    基于QT5+OpenCV+OpenVINO C++的應用打包過程

    我用QT C++寫了一個YOLOv5模型推理演示應用。
    的頭像 發表于 01-26 10:17 ?1315次閱讀
    基于<b class='flag-5'>QT</b>5+OpenCV+OpenVINO <b class='flag-5'>C++</b>的應用打包過程
    主站蜘蛛池模板: 日韩欧美中文字幕在线| 亚洲国产在线综合018| 在线免费看a| 久久高清内射无套| 18禁三级黄| 女教师二十三岁| xxxxx俄罗斯| 手机观看毛片| 国内精品欧美久久精品| 夜色帮首页| 免费观看99热只有精品| 成人动漫bt种子| 亚洲午夜久久久精品影院| 男女啪啪抽搐呻吟高潮动态图| 粗大分开挺进内射| 亚洲色图在线播放| 欧洲美女高清一级毛片| 国产日韩精品SUV| 最近中文字幕MV免费看| 人妻免费视频公开上传| 韩国成人理伦片免费播放| 999人在线精品播放视频| 同居了嫂子在线观看| 麻豆精品乱码WWW久久密| 国产 有码 无码 电影| 在教室做啊好大用力| a视频免费在线| 人妻洗澡被强公日日澡| 国产成人亚洲精品午夜国产馆| 一级毛片西西人体44rt高清| 欧美性暴力变态xxxx| 好男人的视频在线观看| 日韩欧美中文字幕在线| 久久草香蕉频线观| 高清mv视频免费观看| 亚洲欧美自拍明星换脸| 日本久久和电影| 久久天堂网| 国产高清视频a在线大全| 99re.05久久热最新地址| 亚洲AV精品一区二区三区不卡|