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

 时间:2024-10-25 21:23:11

Qt软件编程,windows下的Qt编程,实现功能串口通信,数据发送和接收。根据协议编写打印机串口通信程序。

工具/原料

windowsxp系统一个

Qt5.4.1软件安装包

方法/步骤

1、新建一个Qt项目:文件->新建文件或项目(ctrl+n)

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

2、单机choose之后

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

3、全部下一步到完成

4、成功建立一个QtWidgetsApplication

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

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

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

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

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

7、编写SPComm类:在SPComm.h中加入头文件#include<QtSerialPort/QtSerialPort>

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

8、在头文件中声明串口功能:boolisOpen()const;void咯悝滩镞setPortName(constQString&name);求溻皑恰QStringportName()const;voidsetBaudRate(intbaudRate);intbaudRate()const;virtualboolopen();virtualvoidclose();virtualboolclear();intreadData(char*buffer,intcount,inttimeout=1000);intwriteData(char*data,intsize);intwrite(charch);protected:QStringm_portName;intm_baudRate;QSerialPort*m_serialPort;

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

9、在CPP文件中实现对应的功能://这个函数用来设置波特率,打开串口的时候用到sta隋茚粟胫ticQSerialPort::BaudRatege墉掠载牿tBaudRate(intbaudRate){switch(baudRate){case1200:returnQSerialPort::Baud1200;case2400:returnQSerialPort::Baud2400;case4800:returnQSerialPort::Baud4800;case9600:returnQSerialPort::Baud9600;case19200:returnQSerialPort::Baud19200;case38400:returnQSerialPort::Baud38400;case57600:returnQSerialPort::Baud57600;case115200:returnQSerialPort::Baud115200;default:returnQSerialPort::UnknownBaud;}}//这个函数用来设置串口的名字//window下用"com1"linux下用"/dev/ttyS0"voidSPComm::setPortName(constQString&name){m_portName=name;}//用来获取串口的名字QStringSPComm::portName()const{returnm_portName;}//设置波特率96001920038400voidSPComm::setBaudRate(intbaudRate){m_baudRate=baudRate;}//用来打开串口,调用前,先设置串口名字和波特率boolSPComm::open(){if(m_serialPort->isOpen()){returntrue;}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);returnm_serialPort->open(QSerialPort::ReadWrite);}

10、//用来关闭串口voidSPComm::close(){if(m_serialPort->isOpen()){m_serialPort->close();}}

11、//重启串口,清楚数据boolSPComm::clear(){if(m_serialPort->isOpen()){m_serialPort->clear();this->close();returnthis->open();}returnfalse;}

12、//用来接收串口发来的数据intSPComm::readData(char*buffer,坡纠课柩intcount,惺绅寨瞀inttimeout){intlen=0;forever{intn=m_serialPort->read(&buffer[len],count-len);if(n==-1){return-1;}elseif(n==0&&!m_serialPort->waitForReadyRead(timeout)){return-2;}else{len+=n;if(count==len)break;}}returnlen;}

13、//发送数据到串口比如发送协议intSPComm::writeData(char*data巳呀屋饔,intsize){intlen=0;forever{int惺绅寨瞀n=m_serialPort->write(&data[len],size-len);if(n==-1){return-1;}else{len+=n;if(size==len)break;}}returnlen;}

14、//别忘记了//构造函数添加初始化数据SPComm::SPComm(QObject*par娣定撰钠ent):惺绅寨瞀QObject(parent){m_serialPort=newQSerialPort();m_baudRate=9600;m_portName="";}//析构的时候删除数据SPComm::~SPComm(){deletem_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=newSPComm();析构函数中添加deletem_spcomm;

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

22、双击mainwindow.cpp回到按钮那里添加功能voidMainWindow::o艘绒庳焰n_pushButton_click髫潋啜缅ed(){if(m_spcomm->isOpen())return;m_spcomm->setBaudRate(9600);m_spcomm->setPortName("com1");if(m_spcomm->open())qDebug()<<"打开串口成功";}

23、同上关闭串口的代码为voidMainWindow::on_pushButton_2_clicked(){if(m_spcomm->isOpen())m_spcomm->close();qDebug()<<"关闭串口成功";}

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

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

25、如果想编写一个打印机串口程序根据以上步骤同理添加一个Printer类根据协议编发送指令,写打印机的功能。比如发送协议进行切纸换行打印数据

关闭445端口如何共享文件 AutoCAD autodesk recap有什么用如何完全卸载? SQL Server 2016 怎么用(真!!!) 达梦数据库有哪些产品系列,有何区别? 在 Win 10 中使用注册表编辑器防止更改桌面背景
热门搜索
林肯suv报价及图片 海绵宝宝图片简笔画 梨图片 护栏图片 街景图片