找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11222|回復(fù): 21
打印 上一主題 下一主題
收起左側(cè)

串口助手源碼,利用Qt制作的

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:287121 發(fā)表于 2018-3-3 10:35 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
之前學(xué)了一下Qt,然后做了一個串口助手。功能測試穩(wěn)定!初學(xué)者可以參考一下!
串口助手-精簡版-V3.14

作者:
    付強
    bearfq@126.com

時間:
    2018年1月19日 10:50:53

實現(xiàn)功能:
    1.串口收發(fā)
    2.保存數(shù)據(jù)到本地
    3.打開本地數(shù)據(jù)文件
    4.調(diào)整波特率等參數(shù)
   
測試實現(xiàn):
    性能穩(wěn)定


源程序如下:
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"


  3. MainWindow::MainWindow(QWidget *parent) :
  4.     QMainWindow(parent),
  5.     ui(new Ui::MainWindow)
  6. {
  7.     ui->setupUi(this);

  8.     /*設(shè)置窗口圖標*/
  9.     this->setWindowIcon(QIcon(":/logo256_256.ico"));

  10.     /*激活參數(shù)選擇框*/
  11.     activeComboBox(true);

  12.     /*顯示所有可用端口*/
  13.     showAllPort();

  14.     /*設(shè)置接收文本框的光標一直保持在中心*/
  15.     connect(ui->recvTextEdit, SIGNAL(textChanged()), ui->recvTextEdit, SLOT(centerCursor()));
  16. }

  17. MainWindow::~MainWindow()
  18. {
  19.     delete ui;
  20. }

  21. /*激活/失活參數(shù)選擇框*/
  22. void MainWindow::activeComboBox(bool status)
  23. {
  24.     ui->serialPortComboBox->setEnabled(status);//端口下選框
  25.     ui->BaudrateComboBox->setEnabled(status);//波特率下選框
  26.     ui->dataBitComboBox->setEnabled(status);//數(shù)據(jù)位數(shù)
  27.     ui->stopBitComboBox->setEnabled(status);//停止位
  28.     ui->parityComboBox->setEnabled(status);//奇偶校驗
  29.     ui->flushPortBtn->setEnabled(status);//刷新按鈕
  30. }

  31. //反轉(zhuǎn)runFlag標志,并返回標志狀態(tài)
  32. bool MainWindow::reverseRunFlag()
  33. {
  34.     if (myThread->runFlag)
  35.     {
  36.         myThread->runFlag = false;
  37.     }
  38.     else
  39.     {
  40.         myThread->runFlag = true;
  41.     }

  42.     return myThread->runFlag;
  43. }

  44. /*顯示所有可用端口*/
  45. void MainWindow::showAllPort()
  46. {
  47.     const auto infos = QSerialPortInfo::availablePorts();//返回可用的端口

  48.     for (const QSerialPortInfo &info : infos)//將所有可用端口加入到下拉框中
  49.     {
  50.         ui->serialPortComboBox->addItem(info.portName());
  51.     }
  52. }

  53. /*清除接收文本框中的信息*/
  54. void MainWindow::on_clearRecvBtn_clicked()
  55. {
  56.     ui->recvTextEdit->clear();
  57. }

  58. /*清除發(fā)送文本框中的信息*/
  59. void MainWindow::on_clearSendBtn_clicked()
  60. {
  61.     ui->sendTextEdit->clear();
  62. }

  63. /*點擊open按鈕*/
  64. void MainWindow::on_openBtn_clicked()
  65. {
  66.     DBUG_OUT;

  67.     if(!reverseRunFlag())//子線程在運行--->關(guān)閉子線程
  68.     {
  69.         /*參數(shù)設(shè)置combobox全部激活*/
  70.         activeComboBox(true);

  71.         /*修改子線程運行標志*/
  72.         myThread->runFlag = false;
  73.        // myThread->finished();
  74.     }
  75.     else//沒有運行子線程--->開啟子線程
  76.     {
  77.         /*參數(shù)設(shè)置combobox全部失活*/
  78.         activeComboBox(false);

  79.         /*創(chuàng)建線程*/
  80.         myThread = new MyThread;

  81.         /*傳遞參數(shù)給子線程*/
  82.         myThread->portNameStr = ui->serialPortComboBox->currentText();
  83.         myThread->baudRateStr = ui->BaudrateComboBox->currentText();
  84.         myThread->parityStr = ui->parityComboBox->currentText();
  85.         myThread->dataBitsStr = ui->dataBitComboBox->currentText();
  86.         myThread->stopBitsStr = ui->stopBitComboBox->currentText();

  87.         /*連接信號與槽(將接收的數(shù)據(jù)顯示在接收區(qū)中)*/
  88.         connect(myThread, SIGNAL(output(QString)), this, SLOT(showData(QString)));

  89.         //啟動線程--->執(zhí)行線程的run函數(shù)
  90.         myThread->start();
  91.     }
  92. }

  93. /*顯示接收的數(shù)據(jù)*/
  94. void MainWindow::showData(QString data)
  95. {
  96.     DBUG_OUT;

  97.     ui->recvTextEdit->insertPlainText(data);
  98. }

  99. /*點擊發(fā)送按鈕,發(fā)送數(shù)據(jù)*/
  100. void MainWindow::on_sendBtn_clicked()
  101. {
  102.     DBUG_OUT;

  103.     //1.提取發(fā)送數(shù)據(jù)框文本
  104.     myThread->sendData = ui->sendTextEdit->toPlainText();

  105.     //2.發(fā)送標志置1
  106.     myThread->sendFlag = true;
  107. }

  108. /*保存接收的數(shù)據(jù)到文件*/
  109. void MainWindow::on_saveRecvBtn_clicked()
  110. {
  111.     DBUG_OUT;

  112.     //1.彈出保存文件的對話框
  113.     QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),"./recvdata",tr("text (*.txt *.cpp *.h)"));

  114.     //2.創(chuàng)建新文件
  115.     QFile file(fileName);
  116.     file.open(QIODevice::ReadWrite | QIODevice::Truncate);

  117.     //3.寫入文本到文件中
  118.     //3.1獲取text中的文本
  119.     QString text = ui->recvTextEdit->toPlainText();//轉(zhuǎn)成純文本

  120.     //3.2將文本寫入文件中
  121.     file.write(text.toStdString().c_str());//轉(zhuǎn)為標準字符串并返回其首地址

  122.     //4.關(guān)閉文件
  123.     file.close();
  124. }

  125. /*打開數(shù)據(jù)文件*/
  126. void MainWindow::on_openDataBtn_clicked()
  127. {
  128.     DBUG_OUT;

  129.     //1.彈出對話框:選擇文件,獲取文件名
  130.     QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
  131.                                                       "./",
  132.                                                       tr("Text (*.txt *.cpp *.h)"));
  133.     //2.讀文件
  134.     //2.1打開文件
  135.     QFile file(fileName);
  136.     file.open(QIODevice::ReadOnly);

  137.     //2.2讀文件
  138.     char buf[1024] = {0};
  139.     file.read(buf, sizeof(buf));

  140.     //2.3關(guān)閉文件
  141.     file.close();

  142.     //3.在發(fā)送區(qū)中顯示文件信息
  143.     QString text(buf);
  144.     ui->sendTextEdit->insertPlainText(text);
  145. }

  146. /*刷新端口*/
  147. void MainWindow::on_flushPortBtn_clicked()
  148. {
  149.     ui->serialPortComboBox->clear();//清除原有端口號

  150.     showAllPort();//顯示現(xiàn)有端口號
  151. }


復(fù)制代碼

所有資料51hei提供下載:
串口助手精簡版.rar (43.19 KB, 下載次數(shù): 283)





評分

參與人數(shù) 1黑幣 +7 收起 理由
xiou + 7 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:311481 發(fā)表于 2018-4-19 10:34 | 只看該作者
支持下,感謝分析
回復(fù)

使用道具 舉報

板凳
ID:311481 發(fā)表于 2018-4-19 10:38 | 只看該作者
支持下,感謝分析
回復(fù)

使用道具 舉報

地板
ID:323313 發(fā)表于 2018-6-12 22:28 | 只看該作者
學(xué)習(xí)QT容易嗎?也想學(xué),還有,C語言能寫上位機嗎
回復(fù)

使用道具 舉報

5#
ID:251590 發(fā)表于 2018-11-2 16:49 | 只看該作者
謝樓主分享
回復(fù)

使用道具 舉報

6#
ID:251590 發(fā)表于 2018-11-2 16:51 | 只看該作者
支持樓主,感謝分享
回復(fù)

使用道具 舉報

7#
ID:420013 發(fā)表于 2018-11-3 09:45 | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報

8#
ID:421689 發(fā)表于 2018-11-6 14:04 | 只看該作者
感謝樓主分享!
回復(fù)

使用道具 舉報

9#
ID:455373 發(fā)表于 2018-12-26 13:50 | 只看該作者
不錯不錯
回復(fù)

使用道具 舉報

10#
ID:517138 發(fā)表于 2019-4-20 15:20 | 只看該作者
正好最近要做這個,感謝分享
回復(fù)

使用道具 舉報

11#
ID:334822 發(fā)表于 2019-6-26 16:58 | 只看該作者
學(xué)習(xí)一下
回復(fù)

使用道具 舉報

12#
ID:588657 發(fā)表于 2019-7-23 13:49 | 只看該作者
學(xué)習(xí)哈
回復(fù)

使用道具 舉報

13#
ID:494565 發(fā)表于 2019-8-11 20:50 | 只看該作者
學(xué)習(xí)下
回復(fù)

使用道具 舉報

14#
ID:602542 發(fā)表于 2019-8-22 00:21 | 只看該作者

支持下,感謝分析
回復(fù)

使用道具 舉報

15#
ID:415973 發(fā)表于 2019-9-6 17:42 | 只看該作者
謝謝樓主的分享
回復(fù)

使用道具 舉報

16#
ID:281879 發(fā)表于 2019-9-14 17:07 | 只看該作者
新手 來學(xué)習(xí)一下
回復(fù)

使用道具 舉報

17#
ID:465802 發(fā)表于 2019-11-4 15:29 | 只看該作者
我下載看了下,程序里面只能將串口緩沖區(qū)里面的數(shù)據(jù)直接顯示
回復(fù)

使用道具 舉報

18#
ID:465802 發(fā)表于 2019-11-4 15:30 | 只看該作者
程序里面只能直接顯示串口發(fā)送上來的數(shù)據(jù),但是并不能實現(xiàn)16進制或者ASCII碼顯示切換。
回復(fù)

使用道具 舉報

19#
ID:637424 發(fā)表于 2019-11-7 14:20 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報

20#
ID:383956 發(fā)表于 2019-12-10 18:47 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報

21#
ID:127977 發(fā)表于 2019-12-21 20:54 | 只看該作者
這個很不錯啊
回復(fù)

使用道具 舉報

22#
ID:151626 發(fā)表于 2020-4-2 14:53 | 只看該作者
支持下,感謝分析
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表