(说明:我们的编程环境是windows xp下,在Qt Creator中进行,假设在Linux下或直接用源代码编写,程序稍有不同,请自己修改。)
在Qt中并没有特定的串口控制类,如今大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类。我们能够去
进行下载,也能够去下载我上传到网上的:
下载到的文件为:qextserialport-1.2win-alpha.zip
其内容例如以下图:
我们在windows下仅仅须要使用当中的6个文件:
qextserialbase.cpp和qextserialbase.h,qextserialport.cpp和qextserialport.h,win_qextserialport.cpp和win_qextserialport.h
假设在Linux下仅仅需将win_qextserialport.cpp和win_qextserialport.h 换为 posix_qextserialport.cpp和posix_qextserialport.h就可以。
第一部分:
以下我们将讲述编程的具体过程,这里我们先给出完整的程序,然后到第二部分再进行逐句分析。
1.打开Qt Creator,新建Qt4 Gui Application,project名设置为mycom,其它使用默认选项。
(注意:建立的project路径不能有中文。)
2.将上面所说的6个文件拷贝到project目录下,例如以下图。
3.在project中加入这6个文件。
在Qt Creator中左側的文件列表上,鼠标右击project目录,在弹出的菜单中选择Add Existing Files,加入已存在的文件。例如以下图:
选择project目录里的那6个文件,进行加入。例如以下图。
加入好后文件列表例如以下图所看到的:
4.点击mainwindow.ui,在窗体上增加一个Text Browser,用来显示信息。例如以下图。
5.在mainwindow.h的对应位置加入头文件#include "win_qextserialport.h",加入对象声明Win_QextSerialPort *myCom;加入槽函数声明 void readMyCom();加入完后,例如以下图。
6.在mainwindow.cpp的类的构造函数中加入例如以下语句。
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};
//定义一个结构体,用来存放串口各个參数
myCom = new Win_QextSerialPort("com1",myComSetting,QextSerialBase::EventDriven);
//定义串口对象,并传递參数,在构造函数里对其进行初始化
myCom ->open(QIODevice::ReadWrite);
//以可读写方式打开串口
connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));
//信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作
}
在以下加入readMyCom()函数的定义,加入例如以下代码。
void MainWindow::readMyCom() //读串口函数
{
QByteArray temp = myCom->readAll();
//读取串口缓冲区的全部数据给暂时变量temp
ui->textBrowser->insertPlainText(temp);
//将串口的数据显示在窗体的文本浏览器中
}
加入完代码后例如以下图。
此时假设执行程序,已经能实现读取串口数据的功能了。我们将单片机採集的温度信息由串口传给计算机,效果例如以下图。
这样最简单的串口通信程序就完毕了。能够看到它仅仅须要增加几行代码就可以,很easy。
第二部分:
上一部分中已经介绍了实现最简单的串口接收程序的编写,以下将对程序内容进行分析。
1.首先应说明操作串口的流程。
步骤一:设置串口參数,如:波特率,数据位,奇偶校验,停止位,数据流控制等。
步骤二:选择串口,如windows下的串口1为“com1”,Linux下为“ttyS0”等,并打开串口。
步骤三:读或写串口。
步骤四:关闭串口。
(我们上一个程序没有写串口和关闭串口的功能,打开串口也是在构造函数里完毕的,由于那仅仅是为了用最简单的方法完毕串口程序的编写。在后面我们将会对它进行改动和完好。)
2.以下我们将依照上面的操作串口的流程,解说第一个程序的编写。
第一,我们在敲代码之前,应该浏览一下那6个文件,大概看一下它们里面都是什么内容,各个文件各个类之间有什么联系。在win_qextserialport.cpp文件里,我们看它的最后一个构造函数,会发现,串口