\
\我安装的是QT5.8,QTcreater 4.1.0。由于在官网下载比较麻烦,所以可以再这个镜像网站上下到适合自己版本的QT。
http://mirror.bit.edu.cn/qtproject/archive/qt/5.1/5.1.0/。
可能用到的软件1.串口调试助手 2虚拟串口。
然后先制作一个最简单可以查看接收数据的上位机
http://blog.csdn.net/u014695839/article/details/50611549 我参考了这个博主做的过程。
几个可以参考的帖子
https://blog.csdn.net/lovebird_27/article/details/49515881
https://blog.csdn.net/wamani/article/details/52849043
串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
在低版本QT中是没有QSerialPort的串口类的,制作上位机会复杂许多。QT5是自带QSerialPort这个类的,但是在使用时,我们需要在.Pro文件中添加一行才可以使用。在之后Debug过程中如果会再报错的话,再添加到.pro文件中
QT+= core gui//使用GUI界面
QT+= serialport//使用自带串口类
打开界面文件下的.ui文件可以对我们上位机的界面进行编辑
从左侧工具栏中选择要用的工具拖到
添加textEdit 作为数据接收显示框,combobox作为串口选择框 pushubutton作为打开串口按钮,这样最基本的界面就完成了!
双击combox对串口进行编辑,右键点击 open port 按钮 转到槽,可以对单击按钮后的事件进行编辑。
接下来就是函数部分
在QT中我们用到了哪个函数需要在.h文件开始处声明,自定义函数以及自定义变量 都需要在头文件.h文件中事先声明,在这里声明的变量为全局变量。
首先在文件开始处添加
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
QSerialPort:提供访问串口的功能
QSerialPortInfo:提供系统中存在的串口的信息
1.设置串口
对串口设置如下
void weite::on_openportbutton_clicked()
{ if(ui->portnamebox->isEnabled())
{
ui->openportbutton->setText("ClosePort"); //按下“OpenPort”后,按键显示为“ClosePort”
ui->portnamebox->setDisabled(true); //按下“OpenPort”后,禁止再修改COM口
serial1.setPortName(ui->portnamebox->currentText()); //设置COM口
serial1.setBaudRate(QSerialPort::Baud115200,QSerialPort::AllDirections);//设置波特率和读写方向
serial1.open(QIODevice::ReadWrite);
// connect(&serial1,SIGNAL(readyRead()),this,SLOT(read_com())); //把串口的readyRead()信号绑定到read_Com()这个槽函数上
}
else
{
ui->openportbutton->setText("OpenPort"); //按下“ClosePort”后,按键显示为“OpenPort”
ui->portnamebox->setEnabled(true); //按下“ClosePort”后,COM口可被修改
serial1.close(); //关串口
}
}
2.接收数据
当串口收到数据并且接收完毕后,会发出一个readyRead()的信号,因此只需要编写一个槽函数read_com(),设置信号槽,并在槽函数中使用readAll()把收到的数据读到requestData中。
3.数据显示
这里我们用了自带的append 函数来显示收到的数据 ,使用toHex()函数来将收到的8位ascii码 转换为16进制字符型显示
(在使用QT过程中在使用某个函数前,可以上网搜索其功能,QT中也自带帮助功能,按下F1可以查看某个函数功能及示例)
2和3部分代码如下
void weite::read_com()
{
QByteArray requestData;
requestData= serial1.readAll();
// qDebug()<<"---hsy--test--showtable---1";
QString buf ;
// requestData.clear();
ui->textEdit->append(requestData.toHex());
}
到这里我们最简单的上位机制作便完成了,可以连接上不需要启动信息的(串口设备)传感器来测试我们上位机效果