用Qt编写一个串口通讯程序

2025-10-16 15:23:24

1、新建一个Qt项目:

文件->新建文件或项目(ctrl+n)

用Qt编写一个串口通讯程序

2、单机 choose 之后

用Qt编写一个串口通讯程序

3、全部下一步到完成

4、成功建立一个Qt Widgets Application

用Qt编写一个串口通讯程序

5、新建一个管理SerialPort的类   右击项目名字->添加新文件  弹出  如下框:

用Qt编写一个串口通讯程序

6、选择C++ Class,单机 choose 弹出如下框: 并填写  单机下一步  之后  单机完成

用Qt编写一个串口通讯程序

7、编写SPComm类:

在SPComm.h中加入头文件

#include <QtSerialPort/QtSerialPort>

用Qt编写一个串口通讯程序

8、在头文件中 声明串口功能:

    bool isOpen() const;

    void setPortName(const QString &name);

    QString portName() const;

    void setBaudRate(int baudRate);

    int baudRate() const;

    virtual bool open();

    virtual void close();

    virtual bool clear();

    int readData(char *buffer, int count, int timeout = 1000);

    int writeData(char *data, int size);

    int write(char ch);

protected:

    QString m_portName;

    int m_baudRate;

    QSerialPort *m_serialPort;

用Qt编写一个串口通讯程序

9、在CPP文件中实现对应的功能:

//这个函数用来设置波特率,打开串口的时候用到

static QSerialPort::BaudRate getBaudRate(int baudRate)

{

    switch (baudRate)

    {

    case 1200:

        return QSerialPort::Baud1200;

    case 2400:

        return QSerialPort::Baud2400;

    case 4800:

        return QSerialPort::Baud4800;

    case 9600:

        return QSerialPort::Baud9600;

    case 19200:

        return QSerialPort::Baud19200;

    case 38400:

        return QSerialPort::Baud38400;

    case 57600:

        return QSerialPort::Baud57600;

    case 115200:

        return QSerialPort::Baud115200;

    default:

        return QSerialPort::UnknownBaud;

    }

}

//这个函数用来设置串口的名字

//window 下用"com1"   linux下用"/dev/ttyS0"

void SPComm::setPortName(const QString &name)

{

    m_portName = name;

}

//用来获取串口的名字

QString SPComm::portName() const

{

    return m_portName;

}

//设置波特率 9600  19200  38400

void SPComm::setBaudRate(int baudRate)

{

    m_baudRate = baudRate;

}

//用来打开串口,调用前,先设置串口名字和波特率

bool SPComm::open()

{

    if (m_serialPort->isOpen())

    {

        return true;

    }

    m_serialPort->setPortName(m_portName);

    m_serialPort->setBaudRate(getBaudRate(m_baudRate));

    m_serialPort->setParity(QSerialPort::NoParity);

    m_serialPort->setDataBits(QSerialPort::Data8);

    m_serialPort->setStopBits(QSerialPort::OneStop);

    m_serialPort->setFlowControl(QSerialPort::NoFlowControl);

    m_serialPort->setReadBufferSize(1024);

    return m_serialPort->open(QSerialPort::ReadWrite);

}

10、//用来关闭串口

void SPComm::close()

{

    if (m_serialPort->isOpen())

    {

        m_serialPort->close();

    }

}

11、//重启串口,清楚数据

bool SPComm::clear()

{

    if (m_serialPort->isOpen())

    {

        m_serialPort->clear();

        this->close();

        return this->open();

    }

    return false;

}

12、//用来接收串口发来的数据

int SPComm::readData(char *buffer, int count, int timeout)

{

    int len = 0;

    forever

    {

        int n = m_serialPort->read(&buffer[len], count - len);

        if (n == -1)

        {

            return -1;

        }

        else if (n == 0 && !m_serialPort->waitForReadyRead(timeout))

        {

            return -2;

        }

        else

        {

            len += n;

            if (count == len)

                break;

        }

    }

    return len;

}

13、//发送数据到串口  比如发送协议 

int SPComm::writeData(char *data, int size)

{

    int len = 0;

    forever

    {

        int n = m_serialPort->write(&data[len], size - len);

        if (n == -1)

        {

            return -1;

        }

        else

        {

            len += n;

            if (size == len)

                break;

        }

    }

    return len;

}

14、//别忘记了

//构造函数 添加初始化数据   

SPComm::SPComm(QObject *parent) : QObject(parent)

{

    m_serialPort = new QSerialPort();

    m_baudRate = 9600;

    m_portName = "";

}

//析构的时候  删除 数据

SPComm::~SPComm()

{

    delete m_serialPort;

}

15、串口类编写完成:

测试一下能否调用:

1.双击mainwindow.ui

用Qt编写一个串口通讯程序

16、切换到了设计模式:

2 拖入按钮

用Qt编写一个串口通讯程序

17、双击按钮,设置按钮的名字

用Qt编写一个串口通讯程序

18、置好按钮的名字为 <打开串口>

5右击按钮->转到曹->选择clicked()->点击OK  

跳转到了 一下界面

用Qt编写一个串口通讯程序

19、为这个按钮添加功能代码:

首先在mainwindow.h中添加SPComm.h的头文件

用Qt编写一个串口通讯程序

20、在mainwindow.h头文件中,添加这行代码 SPComm *m_spcomm;

private:    

      Ui::MainWindow *ui;

      SPComm *m_spcomm;

用Qt编写一个串口通讯程序

21、在mainwindow.cpp的构造函数中

添加  m_spcomm = new SPComm();

析构函数中 

添加delete m_spcomm;

用Qt编写一个串口通讯程序

22、双击mainwindow.cpp 回到按钮那里添加功能

void MainWindow::on_pushButton_clicked()

{

    if(m_spcomm->isOpen())

        return;

    m_spcomm->setBaudRate(9600);

    m_spcomm->setPortName("com1");

    if(m_spcomm->open())

        qDebug() << "打开串口成功";

}

23、同上关闭串口的代码为

void MainWindow::on_pushButton_2_clicked()

{

    if(m_spcomm->isOpen())

        m_spcomm->close();

        qDebug() << "关闭串口成功";

}

24、点击 按钮 编译 并且运行成

用Qt编写一个串口通讯程序

25、如果想编写一个打印机串口程序

根据以上步骤 同理

添加一个Printer类 

根据协议编发送指令,写打印机的功能。

比如发送协议  进行 切纸  换行  打印数据

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢