前言

Qt是我在大一下学期开始接触的,当时刚学完C++,然后每天对着黑漆漆的console窗口,在偶然的机会接触到Qt这个跨平台的C++应用程序开发框架。又在老师的怂恿下(单片机老师说如果做出上下位机实验成绩就是满分),使用Qt来进行上下位机的开发。当然实现的功能很简单,控制LED灯的明灭,输入数字显示在数码管上,控制继电器和蜂鸣器以及定时器。

功能介绍

首先是界面截图


实现原理

其实实现的原理很简单,Qt已经是封装好了串口通信的 QSerialPort类,我们只需要设置好串口通信的相关属性(波特率、数据位、奇偶校验位等等),然后调用 QSerialPort的write方法发送命令到下位机就行。当然了,还需要相应的编写下位机的代码。

void MainWindow::on_openButton_clicked()
{
    if(ui->openButton->text()==tr("打开串口"))
    {
        serial = new QSerialPort;
        //设置串口名
        serial->setPortName(ui->PortBox->currentText());
        //打开串口
        serial->open(QIODevice::ReadWrite);
        //设置波特率
        serial->setBaudRate(ui->BaudBox->currentText().toInt());
        //设置数据位数
        switch(ui->BitNumBox->currentIndex())
        {
         case 8: serial->setDataBits(QSerialPort::Data8); break;
        default: break;
        }
        //设置奇偶校验
        switch(ui->ParityBox->currentIndex())
        {
        case 0: serial->setParity(QSerialPort::NoParity); break;
        default: break;
        }
        //设置停止位
        {
        default: break;
        }
        //设置流控制
        serial->setFlowControl(QSerialPort::NoFlowControl);

        //关闭设置菜单使能
        ui->PortBox->setEnabled(false);
        ui->BaudBox->setEnabled(false);
        ui->BitNumBox->setEnabled(false);
        ui->ParityBox->setEnabled(false);
        ui->openButton->setText(tr("关闭串口"));

        //连接信号槽
        QObject::connect(serial, &QSerialPort::readyRead, this, &MainWindow::Read_Data);
    }
    else
    {
        //关闭串口
        serial->clear();
        serial->close();
        serial->deleteLater();

        //恢复设置使能
        ui->PortBox->setEnabled(true);
        ui->BaudBox->setEnabled(true);
        ui->BitNumBox->setEnabled(true);
        ui->ParityBox->setEnabled(true);
        ui->openButton->setText(tr("打开串口"));
    }
}

相关代码上传至百度云:
链接:https://pan.baidu.com/s/1fCpx_fFD9qsZVWKf89QkXg 密码:0oqe