POVLED 上位机 实现(1)串口功能
软件总体为三个部分串口配置及数据收发、文件目录及文本读取、设备管理及文本数据发送。
串口部分实现使用了QT自带类 QSerialPort。
界面用5个组合框分别配置COM口、波特率、检验位、数据位、停止位。外加一个状态显示、两个按键。
组合框内的参数需要与独立用户数据关联。代码部分我专门加了注释。
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); parameterInit(); } MainWindow::~MainWindow() { delete ui; } QStringList MainWindow::getPortNameList() { QStringList serialPortNameList; foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts()) { serialPortNameList << info.portName(); qDebug() << "serialPortName:" << info.portName(); } return serialPortNameList; } void MainWindow::parameterInit(void) { m_portNameList = getPortNameList(); //检查可用COM口并填充到组合框 ui->ComID->addItems(m_portNameList); //初始化波特率组合框并连接用户数据 ui->ComSpeed->addItem(QStringLiteral("9600"), QSerialPort::Baud9600); ui->ComSpeed->addItem(QStringLiteral("19200"), QSerialPort::Baud19200); ui->ComSpeed->addItem(QStringLiteral("38400"), QSerialPort::Baud38400); ui->ComSpeed->addItem(QStringLiteral("115200"), QSerialPort::Baud115200); //初始化数据位组合框并连接用户数据 ui->ComBitCn->addItem(QStringLiteral("5"), QSerialPort::Data5); ui->ComBitCn->addItem(QStringLiteral("6"), QSerialPort::Data6); ui->ComBitCn->addItem(QStringLiteral("7"), QSerialPort::Data7); ui->ComBitCn->addItem(QStringLiteral("8"), QSerialPort::Data8); ui->ComBitCn->setCurrentIndex(3); //初始化检验位组合框 ui->ComCkCode->addItem(tr("None"), QSerialPort::NoParity); ui->ComCkCode->addItem(tr("Even"), QSerialPort::EvenParity); ui->ComCkCode->addItem(tr("Odd"), QSerialPort::OddParity); ui->ComCkCode->addItem(tr("Mark"), QSerialPort::MarkParity); ui->ComCkCode->addItem(tr("Space"), QSerialPort::SpaceParity); //初始化停止位组合框 ui->ComStopBit->addItem(QStringLiteral("1"), QSerialPort::OneStop); ui->ComStopBit->addItem(QStringLiteral("2"), QSerialPort::TwoStop); ui->ComDiscnt->setEnabled(true); } void MainWindow::srlPortTrMsg(void) //test { const char *ptrdata = "12345"; //发送数据 m_serialPort->write(ptrdata); } void MainWindow::srlPortRxMeg(void) //test { QByteArray info = m_serialPort->readAll(); //接收并打印数据 qDebug()<<"receive info:"<<info; } void MainWindow::on_ComConnect_clicked() { m_serialPort = new QSerialPort(); if(m_serialPort->isOpen()) { m_serialPort->clear(); m_serialPort->close(); } //初始化串口对象 m_serialPort->setPortName(ui->ComID->currentText()); m_serialPort->setBaudRate(ui->ComSpeed->currentData().toInt()); m_serialPort->setDataBits(QSerialPort::DataBits(ui->ComBitCn->currentData().toInt())); m_serialPort->setStopBits(QSerialPort::StopBits(ui->ComStopBit->currentData().toInt())); m_serialPort->setParity(QSerialPort::Parity(ui->ComCkCode->currentData().toInt())); m_serialPort->setFlowControl(QSerialPort::NoFlowControl); //打开串口 if(!m_serialPort->open(QIODevice::ReadWrite)) { qDebug() << "打开失败!"; ui->ComState->setText("串口未打开"); return; } //屏蔽配置组合框 ui->ComID->setEnabled(false); ui->ComSpeed->setEnabled(false); ui->ComBitCn->setEnabled(false); ui->ComCkCode->setEnabled(false); ui->ComStopBit->setEnabled(false); ui->ComConnect->setEnabled(false); ui->ComDiscnt->setEnabled(true); qDebug() << "串口打开成功!"; ui->ComState->setText("串口已打开"); qDebug() << ui->ComID->currentText(); qDebug() << ui->ComSpeed->currentData().toInt(); qDebug() << QSerialPort::DataBits(ui->ComBitCn->currentData().toInt()); qDebug() << QSerialPort::StopBits(ui->ComStopBit->currentData().toInt()); qDebug() << QSerialPort::Parity(ui->ComCkCode->currentData().toInt()); qDebug() << QSerialPort::NoFlowControl; //连接信号到数据接收 connect(m_serialPort,SIGNAL(readyRead()),this,SLOT(srlPortRxMeg()));//test } void MainWindow::on_SendData_clicked() //test { srlPortTrMsg(); } //关闭串口 void MainWindow::on_ComDiscnt_clicked() { m_serialPort->close(); m_serialPort->deleteLater(); ui->ComID->setEnabled(true); ui->ComSpeed->setEnabled(true); ui->ComBitCn->setEnabled(true); ui->ComCkCode->setEnabled(true); ui->ComStopBit->setEnabled(true); ui->ComConnect->setEnabled(true); ui->ComDiscnt->setEnabled(false); ui->ComState->setText("串口已关闭"); qDebug() << "串口已经关闭!"; }
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QSerialPort> #include <QSerialPortInfo> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); QStringList getPortNameList(); void parameterInit(); void srlPortTrMsg(); //void srlPortRxMeg(); private slots: void on_ComConnect_clicked(); void on_SendData_clicked(); void srlPortRxMeg(); void on_ComDiscnt_clicked(); private: Ui::MainWindow *ui; QSerialPort* m_serialPort; //串口类 QStringList m_portNameList; }; #endif // MAINWINDOW_H

浙公网安备 33010602011771号