赞
踩
操作系统: win10 64位
QT版本: QT5.12.6
编译器: MinGW 32
串口调试助手,在嵌入式开发中是很常用的。比如: 通过串口打印测试数据、调试串口WIFI(ESP8266、有人WIFI..)、调试GSM模块、GPS模块、字库更新等等。
功能支持:
1. 多条发送(调试ESP288、SIM800C、HC05这些类似模块可以提前把条目编辑好,然后导入)
2. 单条发送
3. 文件发送(可以用来实现字库更新)
4. 协议发送(自定义协议与单片机之间交互)
5. 物联网模拟控制(学习单片机串口的字符串收发)
6. 支持16进制发送
7. 数据保存到文本
8. 支持定时循环发送
软件下载地址: download.csdn.net/download/xi…
项目完整源代码下载: download.csdn.net/download/xi…
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
- #include "uart_mainwindow.h"
- #include "ui_uart_mainwindow.h"
-
- /*
- * 设置QT界面的样式
- */
- void UART_MainWindow::SetStyle(const QString &qssFile) {
- QFile file(qssFile);
- if (file.open(QFile::ReadOnly)) {
- QString qss = QLatin1String(file.readAll());
- qApp->setStyleSheet(qss);
- QString PaletteColor = qss.mid(20,7);
- qApp->setPalette(QPalette(QColor(PaletteColor)));
- file.close();
- }
- else
- {
- qApp->setStyleSheet("");
- }
- }
-
-
- UART_MainWindow::UART_MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::UART_MainWindow)
- {
- ui->setupUi(this);
-
- /*1. 页面基本设置*/
- this->SetStyle(":/qss/blue.css"); //设置样式表
- this->setWindowTitle("嵌入式开发-串口调试助手 v2.0 2020年7月10日"); //设置标题
- this->setWindowIcon(QIcon(":/window.ico")); //设置图标
-
- /*2. 多页面切换控件名称设置*/
- ui->tabWidget->setTabText(0,"单条发送");
- ui->tabWidget->setTabText(1,"多条发送");
- ui->tabWidget->setTabText(2,"文件发送");
- ui->tabWidget->setTabText(3,"协议发送");
- ui->tabWidget->setTabText(4,"物联网模拟控制");
-
- /*3. 默认显示的COM口*/
- //刷新串口
- on_pushButton_flush_uart_clicked();
-
- /*4. 设置串口默认的配置*/
- UART_Config =new QSerialPort; //新建串口对象
- UART_Config->setBaudRate(115200); //默认波特率
- UART_Config->setDataBits(QSerialPort::Data8); //数据位
- UART_Config->setParity(QSerialPort::NoParity);//奇偶校验
- UART_Config->setStopBits(QSerialPort::OneStop);//停止位
- UART_Config->setFlowControl(QSerialPort::NoFlowControl); //流控开关
-
- connect(UART_Config, SIGNAL(readyRead()),this, SLOT(ReadUasrtData())); //关联读信号
- connect(UART_Config, SIGNAL(bytesWritten(qint64)),this, SLOT(WriteDataLen(qint64))); //关联写通道信号(实际向串口里写了多少数据)
-
- /*5. 设置数据位选择列表的默认显示参数*/
- ui->comboBox_DataBits->addItem("5");
- ui->comboBox_DataBits->addItem("6");
- ui->comboBox_DataBits->addItem("7");
- ui->comboBox_DataBits->addItem("8");
- ui->comboBox_DataBits->setCurrentText("8"); //设置当前默认显示的文本
-
- /*6. 设置停止位选择列表的默认显示参数*/
- ui->comboBox_StopBit->addItem("1");
- ui->comboBox_StopBit->addItem("1.5");
- ui->comboBox_StopBit->addItem("2");
- ui->comboBox_StopBit->setCurrentText("1"); //设置当前默认显示的文本
-
- /*7.设置奇偶校验位选择列表的默认显示参数*/
- ui->comboBox_Parity->addItem("无校验");
- ui->comboBox_Parity->addItem("奇校验");
- ui->comboBox_Parity->addItem("偶校验");
- ui->comboBox_Parity->setCurrentText("无校验"); //设置当前默认显示的文本
-
-
- ui->plainTextEdit_SendData->setPlainText("https://blog.csdn.net/xiaolong1126626497");
-
- /*8. 定时发送设置*/
-
- UartSendTimer = new QTimer(this); //创建定时器
- connect(UartSendTimer, SIGNAL(timeout()), this, SLOT(SendTimeUpdate())); //关联槽函数
- ui->spinBox_Time->setValue(1000); //默认周期为1000ms
- ui->spinBox_Time->setMaximum(9999); //周期最大值
- ui->spinBox_Time->setMinimum(0); //周期最小值
-
- /*9. 状态栏*/
- StatusWindow = new QWidget;
- LcdShowTxCnt = new QTextEdit;
- LcdShowRxCnt = new QTextEdit;
- LabelShowTx = new QLabel("TX:");
- LabelShowRx = new QLabel("RX:");
- Statuslayout = new QHBoxLayout;
- // Statuslayout->addStretch();
- Statuslayout->addWidget(LabelShowTx);
- Statuslayout->addWidget(LcdShowTxCnt);
- Statuslayout->addWidget(LabelShowRx);
- Statuslayout->addWidget(LcdShowRxCnt);
- StatusWindow->setLayout(Statuslayout);
- // Statuslayout->addStretch();
-
- /*添加状态栏*/
- QStatusBar *StatList=statusBar();
- StatList->addWidget(StatusWindow);
- // StatList->setStyleSheet(QString("QStatusBar::item{border: 0px}"));
- RxCnt=0; //接收数量
- TxCnt=0; //发送数量
- LcdShowTxCnt->setEnabled(false);
- LcdShowRxCnt->setEnabled(false);
-
-
- /*10. 构造多条发送的列表*/
- LineEditSendList.clear(); //清空列表
- LineEditSendList.append(ui->lineEdit_tx_1);
- LineEditSendList.append(ui->lineEdit_tx_2);
- LineEditSendList.append(ui->lineEdit_tx_3);
- LineEditSendList.append(ui->lineEdit_tx_4);
- LineEditSendList.append(ui->lineEdit_tx_5);
- LineEditSendList.append(ui->lineEdit_tx_6);
- LineEditSendList.append(ui->lineEdit_tx_7);
- LineEditSendList.append(ui->lineEdit_tx_8);
- LineEditSendList.append(ui->lineEdit_tx_9);
- LineEditSendList.append(ui->lineEdit_tx_10);
- LineEditSendList.append(ui->lineEdit_tx_11);
- LineEditSendList.append(ui->lineEdit_tx_12);
-
- /*11. 初始化文件发送相关参数*/
- ui->progressBar_SendFileProgress->setMinimum(0); //进度条最小值0
- ui->progressBar_SendFileProgress->setValue(0); //设置进度条当前显示的值0
- ui->spinBox_OnePackageSendByte->setMinimum(1); //每包发送的字节数最小值
- ui->spinBox_OnePackageSendByte->setMaximum(4096); //每包发送的字节数最大值
- ui->spinBox_OnePackageSendByte->setValue(100); //当前默认字节数
- ui->spinBox_OnePackageSendTime->setMaximum(0); //每包发送的最小间隔时间ms
- ui->spinBox_OnePackageSendTime->setMaximum(9999); //每包发送的最大间隔时间ms
- ui->spinBox_OnePackageSendTime->setValue(100); //当前默认间隔时间
-
-
- FileSendTimer = new QTimer(this); //创建定时器
- connect(FileSendTimer, SIGNAL(timeout()), this, SLOT(FileSendTimeUpdate())); //关联槽函数
- FileSendStat=0; //文件发送标志
-
- //数据显示页面
- ui->plainTextEdit_ShowRxData->setReadOnly(true); //设置日志显示界面为只读
- }
-
- UART_MainWindow::~UART_MainWindow()
- {
- delete ui;
- delete UART_Config;
- delete UartSendTimer;
- delete StatusWindow;
- delete LcdShowTxCnt;
- delete LcdShowRxCnt;
- delete LabelShowTx;
- delete LabelShowRx;
- delete Statuslayout;
- delete FileSendTimer;
- }
-
- //设置选中的波特率
- void UART_MainWindow::on_comboBox_BaudSelect_currentTextChanged(const QString &arg1)
- {
- UART_Config->setBaudRate(arg1.toInt()); //设置波特率
- }
-
-
- //设置选中的停止位
- void UART_MainWindow::on_comboBox_StopBit_currentTextChanged(const QString &arg1)
- {
- if(arg1=="2")
- {
- UART_Config->setStopBits(QSerialPort::TwoStop);//2个停止位
- }
- else if(arg1=="1.5")
- {
- UART_Config->setStopBits(QSerialPort::OneAndHalfStop);//1.5个停止位
- }
- else
- {
- UART_Config->setStopBits(QSerialPort::OneStop);//1个停止位
- }
- }
-
- //设置选中的数据位
- void UART_MainWindow::on_comboBox_DataBits_currentTextChanged(const QString &arg1)
- {
- if(arg1=="5")
- {
- UART_Config->setDataBits(QSerialPort::Data5); //数据5位
- }
- else if(arg1=="6")
- {
- UART_Config->setDataBits(QSerialPort::Data6); //数据6位
- }
- else if(arg1=="7")
- {
- UART_Config->setDataBits(QSerialPort::Data7); //数据7位
- }
- else
- {
- UART_Config->setDataBits(QSerialPort::Data8); //数据8位
- }
- }
-
- //设置选中的奇偶校验位
- void UART_MainWindow::on_comboBox_Parity_activated(const QString &arg1)
- {
- if(arg1=="奇校验")
- {
- UART_Config->setParity(QSerialPort::OddParity); //奇校验
- }
- else if(arg1=="偶校验")
- {
- UART_Config->setParity(QSerialPort::EvenParity);//偶校验
- }
- else //无校验
- {
- UART_Config->setParity(QSerialPort::NoParity);//无校验
- }
- }
-
-
- //选择硬件流量控制开关
- void UART_MainWindow::on_checkBox_RTS_CTS_clicked()
- {
- if(ui->checkBox_RTS_CTS->isChecked())
- {
- UART_Config->setFlowControl(QSerialPort::HardwareControl); //硬件流控开关
- }
- else
- {
- UART_Config->setFlowControl(QSerialPort::NoFlowControl); //无流控开关
- }
- }
-
-
- //选择软件流量控制开关
- void UART_MainWindow::on_checkBox_XON_XOFF_clicked()
- {
- if(ui->checkBox_XON_XOFF->isChecked())
- {
- UART_Config->setFlowControl(QSerialPort::SoftwareControl); //软件流控开关
- }
- else
- {
- UART_Config->setFlowControl(QSerialPort::NoFlowControl); //无流控开关
- }
- }
-
-
- //打开串口
- void UART_MainWindow::on_pushButton_OpenUart_clicked()
- {
- if(ui->pushButton_OpenUart->text()=="打开串口") //打开串口
- {
- ui->pushButton_OpenUart->setText("关闭串口");
-
- /*配置串口的信息*/
- UART_Config->setPortName(ui->comboBox_ComSelect->currentText()); //COM的名称
- if(!(UART_Config->open(QIODevice::ReadWrite))) //打开的属性权限
- {
- QMessageBox::warning(this, tr("串口状态提示"),
- tr("串口打开失败!\n请选择正确的COM口"),
- QMessageBox::Ok);
- ui->pushButton_OpenUart->setText("打开串口");
- return;
- }
- }
- else //关闭串口
- {
- ui->pushButton_OpenUart->setText("打开串口");
- /*关闭串口-*/
- UART_Config->clear(QSerialPort::AllDirections);
- UART_Config->close();
- }
- }
-
-
- //读信号
- void UART_MainWindow::ReadUasrtData()
- {
- /*返回可读的字节数*/
- if(UART_Config->bytesAvailable()<=0)
- {
- return;
- }
-
- //设置光标到文本末尾
- ui->plainTextEdit_ShowRxData->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
-
- /*移动滚动条到底部*/
- QScrollBar *scrollbar = ui->plainTextEdit_ShowRxData->verticalScrollBar();
- if(scrollbar)
- {
- scrollbar->setSliderPosition(scrollbar->maximum());
- }
-
- /*定义字节数组*/
- QByteArray rx_data;
-
- /*读取串口缓冲区所有的数据*/
- rx_data=UART_Config->readAll();
- RxCnt+=rx_data.length(); //记录接收长度
- LcdShowRxCnt->setText(QString::number(RxCnt)); //显示接收数量
- QString Rx_str_data;
-
- //显示接收时间
- if(ui->checkBox_ShowTime->isChecked())
- {
- QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间
- Rx_str_data= time.toString("【yyyy-MM-dd hh:mm:ss ddd"); //设置显示格式
- Rx_str_data+="】:";
- }
-
- if(ui->checkBox_HexShow->isChecked())
- {
- rx_data=rx_data.toHex();
- /*显示HEX*/
- Rx_str_data+=tr("").fromLocal8Bit(rx_data.data());
- }
- else
- {
- /*解决中文乱码*/
- Rx_str_data+=tr("").fromLocal8Bit(rx_data.data());
- }
-
- /*当长度大于5000字节时,自动清空显示*/
- if(Rx_str_data.length()>5000)
- {
- //ui->plainTextEdit_ShowRxData->setPlainText("");
- }
-
- /*显示收到的数据--*/
- ui->plainTextEdit_ShowRxData->insertPlainText(Rx_str_data);
- }
-
- //清空显示
- void UART_MainWindow::on_pushButton_ClearData_clicked()
- {
- ui->plainTextEdit_ShowRxData->setPlainText("");
-
- RxCnt=0;
- LcdShowRxCnt->setText(QString::number(RxCnt)); //显示接收数量
- }
-
-
- //发送数据
- void UART_MainWindow::UartSendData(QByteArray SendText)
- {
- if(UART_Config->isOpen()==false)return;
-
- if(SendText.isEmpty()) return; //判断有没有输入数据
-
- TxCnt+=SendText.length(); //记录发送的长度
- LcdShowTxCnt->setText(QString::number(TxCnt)); //显示发送数量
-
- //16进制发送
- if(ui->checkBox_HexSend->isChecked())
- {
- SendText=SendText.toHex();
- }
-
- //发送新行
- if(ui->checkBox_SendNewLine->isChecked())
- {
- SendText+="\r\n";
- }
-
- UART_Config->write(SendText); //发送数据
- }
-
- //发送数据
- void UART_MainWindow::on_pushButton_SendData_clicked()
- {
- QString text=ui->plainTextEdit_SendData->toPlainText();
- UartSendData(text.toLocal8Bit());
- }
-
- //清除发送
- void UART_MainWindow::on_pushButton_ClearSend_clicked()
- {
- ui->plainTextEdit_SendData->setPlainText("");
- TxCnt=0;
- LcdShowTxCnt->setText(QString::number(TxCnt)); //显示接收数量
- }
-
-
- //链接到指定位置
- void UART_MainWindow::on_commandLinkButton_link_clicked()
- {
- QDesktopServices::openUrl(QUrl("https://blog.csdn.net/xiaolong1126626497"));
- }
-
- //定时发送
- void UART_MainWindow::on_checkBox_Time_Send_clicked()
- {
- if(ui->checkBox_Time_Send->isChecked()) //开启定时发送
- {
- int time_cnt=ui->spinBox_Time->value();
- if(time_cnt<=0)
- {
- ui->checkBox_Time_Send->setChecked(false); //没有选中
- QMessageBox::warning(this, tr("定时发送状态提示"),
- tr("请设置正确的时间!"),
- QMessageBox::Ok);
- }
- else
- {
- UartSendTimer->start(time_cnt); //开启定时器
- }
- }
- else //关闭定时发送
- {
- UartSendTimer->stop();
- }
- }
-
-
- //定时器 超时函数,用于定时发送
- void UART_MainWindow::SendTimeUpdate()
- {
- on_pushButton_SendData_clicked(); //发送数据
- }
-
-
- //保存接收的数据到文件
- void UART_MainWindow::on_pushButton_SaveData_clicked()
- {
- QString filename=QFileDialog::getSaveFileName(this,"保存串口数据","D:/UatrRxData.txt",tr("*.txt"));
- if(filename.isEmpty())
- {
- QMessageBox::warning(this, tr("文件保存状态提示"),
- tr("----------文件名为空!--------------"),
- QMessageBox::Ok);
- return; //判断是否为空
- }
-
- QFile file(filename);
- if(file.open(QIODevice::WriteOnly|QIODevice::Append)==false) //只写与追加模式
- {
- QMessageBox::warning(this, tr("文件保存状态提示"),
- tr("-----------------文件创建失败!----------------"),
- QMessageBox::Ok);
- return;
- }
-
- QByteArray array=ui->plainTextEdit_ShowRxData->toPlainText().toLocal8Bit();
- file.write(array);
- file.close();
- }
-
-
- /*
- 多条发送处理
- */
-
- void UART_MainWindow::on_pushButton_send_1_clicked()
- {
- QString text=ui->lineEdit_tx_1->text();
- UartSendData(text.toLocal8Bit());
- }
-
- void UART_MainWindow::on_pushButton_send_2_clicked()
- {
- QString text=ui->lineEdit_tx_2->text();
- UartSendData(text.toLocal8Bit());
- }
-
- void UART_MainWindow::on_pushButton_send_3_clicked()
- {
- QString text=ui->lineEdit_tx_3->text();
- UartSendData(text.toLocal8Bit());
- }
-
- void UART_MainWindow::on_pushButton_send_4_clicked()
- {
- QString text=ui->lineEdit_tx_4->text();
- UartSendData(text.toLocal8Bit());
- }
-
- void UART_MainWindow::on_pushButton_send_5_clicked()
- {
- QString text=ui->lineEdit_tx_5->text();
- UartSendData(text.toLocal8Bit());
- }
-
- void UART_MainWindow::on_pushButton_send_6_clicked()
- {
- QString text=ui->lineEdit_tx_6->text();
- UartSendData(text.toLocal8Bit());
- }
-
- void UART_MainWindow::on_pushButton_send_7_clicked()
- {
- QString text=ui->lineEdit_tx_7->text();
- UartSendData(text.toLocal8Bit());
- }
-
- void UART_MainWindow::on_pushButton_send_8_clicked()
- {
- QString text=ui->lineEdit_tx_8->text();
- UartSendData(text.toLocal8Bit());
- }
-
- void UART_MainWindow::on_pushButton_send_9_clicked()
- {
- QString text=ui->lineEdit_tx_9->text();
- UartSendData(text.toLocal8Bit());
- }
-
- void UART_MainWindow::on_pushButton_send_10_clicked()
- {
- QString text=ui->lineEdit_tx_10->text();
- UartSendData(text.toLocal8Bit());
- }
-
- void UART_MainWindow::on_pushButton_send_11_clicked()
- {
- QString text=ui->lineEdit_tx_11->text();
- UartSendData(text.toLocal8Bit());
- }
-
- void UART_MainWindow::on_pushButton_send_12_clicked()
- {
- QString text=ui->lineEdit_tx_12->text();
- UartSendData(text.toLocal8Bit());
- }
-
-
- //导入发送条目
- void UART_MainWindow::on_pushButton_SlectSendList_clicked()
- {
- QString filename=QFileDialog::getOpenFileName(this,"选择导入的条目文件","esp8266+sta+tcp_server.txt",tr("*.txt"));
- //filename==选择文件的绝对路径
-
- QFile file(filename);
- if(file.open(QIODevice::ReadOnly)==false) //只读
- {
- QMessageBox::warning(this, tr("文件状态提示"),
- tr("-----------------存放条目的文件打开失败!----------------"),
- QMessageBox::Ok);
- return;
- }
-
- //导入条目
- for(int i=0;i<LineEditSendList.count();i++)
- {
- if(file.atEnd()){break;} //文件读取完毕
- QByteArray array=file.readLine();//读取一行,以\n结束
- LineEditSendList.at(i)->setText(QString(array)); //设置文本编辑器显示
- }
-
- file.close(); //关闭文件
- }
-
-
- //清除条目
- void UART_MainWindow::on_pushButton_ClearSendList_clicked()
- {
- //清除条目
- for(int i=0;i<LineEditSendList.count();i++)
- {
- LineEditSendList.at(i)->setText(""); //设置文本编辑器显示
- }
- }
-
- //条目创建说明
- void UART_MainWindow::on_pushButton_SendListExplain_clicked()
- {
- QMessageBox::warning(this, tr("条目编辑说明"),
- tr("1. 存放条目的文件需要以xxx.txt结尾(就是普通文本文件)\n"
- "2. 文本文件里每一行的条目数据需要以\\n结束\n"
- "(也就是说,编辑一行数据就按回车,在第二行再继续编辑)\n"
- "3. 条目最大只能存放12行数据,多出的数据不会导入!"),
- QMessageBox::Ok);
- }
-
-
- //选择发送的文件
- void UART_MainWindow::on_pushButton_SelectSendFile_clicked()
- {
- QString filename=QFileDialog::getOpenFileName(this,"选择发送的文件","D:/",tr("*.*"));
- //filename==选择文件的绝对路径
-
- if(filename.isEmpty())
- {
- QMessageBox::warning(this, tr("文件状态提示"),
- tr("路径为空,请选择正确的路径!"),
- QMessageBox::Ok);
- ui->lineEdit_SendFileAddr->setText(""); //清除数据
- }
- ui->lineEdit_SendFileAddr->setText(filename); //设置要发送的文件路径
- }
-
- //开始发送文件
- void UART_MainWindow::on_pushButton_StartSendFile_clicked()
- {
- if(UART_Config->isOpen()==false)
- {
- QMessageBox::warning(this, tr("状态提示"),
- tr("请先打开串口,在继续操作!"),
- QMessageBox::Ok);
- return;
- }
- QString filename=ui->lineEdit_SendFileAddr->text(); //获取文件路径
- SendFile.setFileName(filename); //设置发送的文件路径
- SendFile.close(); //先关闭再打开
- if(SendFile.open(QIODevice::ReadOnly)==false) //只读
- {
- QMessageBox::warning(this, tr("文件状态提示"),
- tr("文件打开失败,请选择正确的路径!"),
- QMessageBox::Ok);
- ui->lineEdit_SendFileAddr->setText(""); //清除数据
- return;
- }
- ui->label_All_Byete->setText(tr("总字节数:%1").arg(SendFile.size()));
- ui->progressBar_SendFileProgress->setMaximum(SendFile.size()); //设置进度条最大值
- ui->progressBar_SendFileProgress->setValue(0); //进度条清0
- FileSendCnt=0; //清除文件发送的字节数
- TxCnt=0; //清除发送的字节数
- FileSendTimer->start(ui->spinBox_OnePackageSendTime->value()); //设置定时器超时时间
- FileSendStat=1; //开始发送标志
- UartSendTimer->stop(); //停止循环发送的定时器,防止干扰计数
-
- ui->tabWidget->setTabEnabled(0,false); //设置指定页面失能
- ui->tabWidget->setTabEnabled(1,false); //设置指定页面失能
- ui->tabWidget->setTabEnabled(3,false); //设置指定页面失能
- ui->tabWidget->setTabEnabled(4,false); //设置指定页面失能
- }
-
-
- //文件发送帮助提示
- void UART_MainWindow::on_pushButton_SendFileHelp_clicked()
- {
- QMessageBox::warning(this, tr("文件发送帮助"),
- tr("为了方便下位机接收文件数据,文件将进行分包发送\n"
- "每一包的字节大小可以自行设置,范围(1~4096字节)\n"
- "每一包数据发送的时间间隔也可以自行设置,范围(1~9999ms)\n"
- "注意: 每包的字节数量和间隔时间只有在开始发送文件之前设置有效!\n"),
- QMessageBox::Ok);
- }
-
-
- //停止文件发送
- void UART_MainWindow::on_pushButton_StopSendFile_clicked()
- {
- FileSendTimer->stop(); //停止定时器
- FileSendStat=0; //清除标志
-
- ui->tabWidget->setTabEnabled(0,true); //设置指定页面使能
- ui->tabWidget->setTabEnabled(1,true); //设置指定页面使能
- ui->tabWidget->setTabEnabled(3,true); //设置指定页面使能
- ui->tabWidget->setTabEnabled(4,true); //设置指定页面使能
- }
-
-
- //开始文件发送
- void UART_MainWindow::FileSendTimeUpdate()
- {
- int sen_len=ui->spinBox_OnePackageSendByte->value(); //每次发送的长度
- int cnt=SendFile.read(FileSendBuff,sen_len);
- QByteArray array(FileSendBuff,cnt); //构造数组
- UartSendData(array); //发送数据
- if(cnt!=sen_len)
- {
- FileSendTimer->stop(); //停止定时器
- }
-
- //可以增加优化代码,等待发送完毕
- }
-
-
- //实际发送成功的数据
- void UART_MainWindow::WriteDataLen(qint64 cnt)
- {
- if(FileSendStat)
- {
- FileSendCnt+=cnt;
- ui->progressBar_SendFileProgress->setValue(FileSendCnt); //更新进度条
-
- if(FileSendCnt==SendFile.size()) //判断是否发送完毕
- {
- QMessageBox::warning(this, tr("文件发送状态"),
- tr("----文件发送成功!----"),
- QMessageBox::Ok);
- FileSendStat=0; //清除标志
- SendFile.close(); //关闭文件
-
- ui->tabWidget->setTabEnabled(0,true); //设置指定页面使能
- ui->tabWidget->setTabEnabled(1,true); //设置指定页面使能
- ui->tabWidget->setTabEnabled(3,true); //设置指定页面使能
- ui->tabWidget->setTabEnabled(4,true); //设置指定页面使能
- }
- }
- }
-
-
- //模拟物联网控制_LED1
- void UART_MainWindow::on_pushButton_LED1_clicked()
- {
- if(UART_Config->isOpen()==false)return;
- static bool state=1;
- if(state) //开启LED
- {
- UartSendData( QByteArray("LED1_ON"));
- ui->pushButton_LED1->setText("关闭LED1");
- }
- else
- {
- UartSendData( QByteArray("LED1_OFF"));
- ui->pushButton_LED1->setText("开启LED1");
- }
- state=!state;
- }
-
-
- //模拟物联网控制_LED2
- void UART_MainWindow::on_pushButton_LED2_clicked()
- {
- if(UART_Config->isOpen()==false)return;
- static bool state=1;
- if(state) //开启LED
- {
- UartSendData( QByteArray("LED2_ON"));
- ui->pushButton_LED2->setText("关闭LED2");
- }
- else
- {
- UartSendData( QByteArray("LED2_OFF"));
- ui->pushButton_LED2->setText("开启LED2");
- }
- state=!state;
- }
-
- //模拟物联网控制_LED3
- void UART_MainWindow::on_pushButton_LED3_clicked()
- {
- if(UART_Config->isOpen()==false)return;
- static bool state=1;
- if(state) //开启LED
- {
- UartSendData( QByteArray("LED3_ON"));
- ui->pushButton_LED3->setText("关闭LED3");
- }
- else
- {
- UartSendData( QByteArray("LED3_OFF"));
- ui->pushButton_LED3->setText("开启LED3");
- }
- state=!state;
- }
-
- //模拟物联网控制_LED4
- void UART_MainWindow::on_pushButton_LED4_clicked()
- {
- if(UART_Config->isOpen()==false)return;
- static bool state=1;
- if(state) //开启LED
- {
- UartSendData( QByteArray("LED4_ON"));
- ui->pushButton_LED4->setText("关闭LED4");
- }
- else
- {
- UartSendData( QByteArray("LED4_OFF"));
- ui->pushButton_LED4->setText("开启LED4");
- }
- state=!state;
- }
-
- //模拟物联网控制_BEEP
- void UART_MainWindow::on_pushButton_BEEP_clicked()
- {
- if(UART_Config->isOpen()==false)return;
- static bool state=1;
- if(state) //开启LED
- {
- UartSendData( QByteArray("BEEP_ON"));
- ui->pushButton_BEEP->setText("关闭BEEP");
- }
- else
- {
- UartSendData( QByteArray("BEEP_OFF"));
- ui->pushButton_BEEP->setText("开启BEEP");
- }
- state=!state;
- }
-
- //模拟物联网控制_RTC时间校准
- void UART_MainWindow::on_pushButton_RTC_Time_clicked()
- {
- QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间
- QString str1="按照本地时间进行校准:\n";
- str1+=time.toString("yyyy-MM-dd hh:mm:ss ddd\n"); //设置显示格式
-
- //获取本地时间校准物联网开发板RTC时间
- QString str2="*"; //加上标识符进行区分
- str2+=time.toString("yyyyMMddhhmmss"); //设置显示格式
-
- str1+="串口发出的数据:";
- str1+=str2;
- QMessageBox::about(this,"校准RTC时间",str1);
-
- QByteArray text=str2.toLocal8Bit();
- UartSendData(text); //发送数据
- }
-
- //帮助信息提示
- void UART_MainWindow::on_action_help_info_triggered()
- {
- QMessageBox::about(this,"关于","软件用于串口调试,支持基本数据收发,支持文件发送\n"
- "支持模拟物联网控制\n"
- "软件作者:DS小龙哥\n"
- "BUG反馈:1126626497@qq.com");
- }
-
-
- void UART_MainWindow::on_pushButton_flush_uart_clicked()
- {
- QList<QSerialPortInfo> UartInfoList=QSerialPortInfo::availablePorts(); //获取可用串口端口信息
- ui->comboBox_ComSelect->clear();
- if(UartInfoList.count()>0)
- {
- for(int i=0;i<UartInfoList.count();i++)
- {
- if(UartInfoList.at(i).isBusy()) //如果当前串口 COM 口忙就返回真,否则返回假
- {
- QString info=UartInfoList.at(i).portName();
- info+="(占用)";
- ui->comboBox_ComSelect->addItem(info); //添加新的条目选项
- }
- else
- {
- ui->comboBox_ComSelect->addItem(UartInfoList.at(i).portName()); //添加新的条目选项
- }
- }
- }
- else
- {
- ui->comboBox_ComSelect->addItem("无可用串口"); //添加新的条目选项
- }
- }
- #ifndef UART_MAINWINDOW_H
- #define UART_MAINWINDOW_H
-
- #include <QMainWindow>
- #include <QFile>
- #include <QSerialPortInfo>
- #include <QSerialPort>
- #include <QDebug>
- #include <QMessageBox>
- #include <QDateTime>
- #include <QScrollBar>
- #include <QDesktopServices>
- #include <Qtimer>
- #include <QFileDialog>
- #include <QTextEdit>
- #include <QHBoxLayout>
- #include <QLineEdit>
- #include <QThread>
-
-
- namespace Ui {
- class UART_MainWindow;
- }
-
- class UART_MainWindow : public QMainWindow
- {
- Q_OBJECT
-
- public:
- explicit UART_MainWindow(QWidget *parent = 0);
- ~UART_MainWindow();
- void SetStyle(const QString &qssFile); //样式表设置函数
- void UartSendData(QByteArray SendText);
- QSerialPortInfo *UART_Info;
- QSerialPort *UART_Config; //串口
- QTimer *UartSendTimer;
- QTimer *FileSendTimer;
-
- /*状态栏*/
- QWidget *StatusWindow;
- QTextEdit *LcdShowTxCnt;
- QTextEdit *LcdShowRxCnt;
- QLabel *LabelShowTx;
- QLabel *LabelShowRx;
- QHBoxLayout *Statuslayout;
-
- int RxCnt; //接收数量
- int TxCnt; //发送数量
-
- QList<QLineEdit*> LineEditSendList; //构造多条发送的列表
- QFile SendFile; //发送的文件
-
- char FileSendBuff[4096]; //最大发送数量
- int FileSendCnt; //记录文件发送字节数
- bool FileSendStat; //文件发送状态
- private slots:
- void FileSendTimeUpdate();
- void WriteDataLen(qint64); //实际发送的数据通知
- void on_comboBox_BaudSelect_currentTextChanged(const QString &arg1);
-
- void on_comboBox_StopBit_currentTextChanged(const QString &arg1);
-
- void on_comboBox_DataBits_currentTextChanged(const QString &arg1);
-
- void on_comboBox_Parity_activated(const QString &arg1);
-
- void on_checkBox_RTS_CTS_clicked();
-
- void on_checkBox_XON_XOFF_clicked();
-
- void on_pushButton_OpenUart_clicked();
-
- void ReadUasrtData();
- void on_pushButton_ClearData_clicked();
-
- void on_pushButton_SendData_clicked();
-
- void on_pushButton_ClearSend_clicked();
-
- void on_commandLinkButton_link_clicked();
-
- void on_checkBox_Time_Send_clicked();
-
- void SendTimeUpdate();
- void on_pushButton_SaveData_clicked();
-
- void on_pushButton_send_1_clicked();
-
- void on_pushButton_send_2_clicked();
-
- void on_pushButton_send_3_clicked();
-
- void on_pushButton_send_4_clicked();
-
- void on_pushButton_send_5_clicked();
-
- void on_pushButton_send_6_clicked();
-
- void on_pushButton_send_7_clicked();
-
- void on_pushButton_send_8_clicked();
-
- void on_pushButton_send_9_clicked();
-
- void on_pushButton_send_10_clicked();
-
- void on_pushButton_send_11_clicked();
-
- void on_pushButton_send_12_clicked();
-
- void on_pushButton_SlectSendList_clicked();
-
- void on_pushButton_ClearSendList_clicked();
-
- void on_pushButton_SendListExplain_clicked();
-
- void on_pushButton_SelectSendFile_clicked();
-
- void on_pushButton_StartSendFile_clicked();
-
- void on_pushButton_SendFileHelp_clicked();
-
- void on_pushButton_StopSendFile_clicked();
-
- void on_pushButton_LED1_clicked();
-
- void on_pushButton_LED2_clicked();
-
- void on_pushButton_LED3_clicked();
-
- void on_pushButton_LED4_clicked();
-
- void on_pushButton_BEEP_clicked();
-
- void on_pushButton_RTC_Time_clicked();
-
- void on_action_help_info_triggered();
-
- void on_pushButton_flush_uart_clicked();
-
- private:
- Ui::UART_MainWindow *ui;
- };
-
-
-
- #endif // UART_MAINWINDOW_H
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
作者:DS小龙哥
链接:https://juejin.cn/post/6985337432614895629
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。