手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

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

时间:2025-01-10 22:13:34

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 38400void 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、3 双击按钮,设置按钮的名字

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

18、4设置好按钮的名字为 <打开串口>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类根据协议编发送指令,写打印机的功能。比如发送协议 进行 切纸 换行 打印数据

© 手抄报圈