您现在的位置是:网站首页>博客详情博客详情

Qt实现串口通信控制51单片机(上下位机)

边小丰2019年01月30日 大学期间资料 155人已围观


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

copyright: true

前言

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


__EOF__

作  者Dimple
出  处/view/17
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击下方的鼓掌一下。您的鼓励是博主的最大动力!如有疑问请留言!


文章评论

我的名片

网名:Dimple | 裤兜有怪兽

职业:Java开发工程师

现居:四川省-成都市

Email:bianxiaofeng@sohu.com

每日一句

最近更新

点击排行

猜你喜欢