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

前言

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

功能介绍

首先是界面截图
{mdFileName}-20183917547
{mdFileName}-20183917553
{mdFileName}-20183917556
{mdFileName}-20183917559
{mdFileName}-2018391762
{mdFileName}-2018391765
{mdFileName}-2018391767

实现原理

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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;
}
//设置停止位
switch(ui->StopBox->currentIndex())
{
case 1: serial->setStopBits(QSerialPort::OneStop); break;
case 2: serial->setStopBits(QSerialPort::TwoStop); break;
default: break;
}
//设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);

//关闭设置菜单使能
ui->PortBox->setEnabled(false);
ui->BaudBox->setEnabled(false);
ui->BitNumBox->setEnabled(false);
ui->ParityBox->setEnabled(false);
ui->StopBox->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->StopBox->setEnabled(true);
ui->openButton->setText(tr("打开串口"));
}
}

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

-------------本文结束感谢您的阅读-------------
na,给我一个棒棒糖!