QT串口通讯源代码

这篇博客分享了一段使用QT库进行串口通信的源代码,适合需要在QT环境中进行串口操作的开发者参考。
摘要由CSDN通过智能技术生成

代码如下:

#ifndef MAINETHREAD_H
#define MAINETHREAD_H
#include <QThread>
#include <QMutex>
#include <QWaitCondition>
#include <QDebug>
class mainEthread : public QThread
{
    Q_OBJECT
public:
    mainEthread();
    ~mainEthread();
    void run();
    void transaction(const QString &request);
    void reaseive1(const QString &baudrate, const QString &checkCode,const QString &checklen);
    void openserial();
    void check(const QString &s);
    bool CRC(const QString &s1,const QString &s2);
    unsigned char crc8(unsigned char *ptr,unsigned int len, unsigned char check_code);
    unsigned int  crc16(unsigned char *ptr,unsigned int len, unsigned int check_code);
    unsigned long int crc32(unsigned char *ptr,unsigned int len, unsigned long int check_code);
    bool ASCIItoCHAR(QByteArray GET_DATA1,unsigned  int GET_DATA_len);
    unsigned char ASCIItoCHAR8(QByteArray GET_DATA1, unsigned int GET_DATA_len);
    unsigned int  ASCIItoCHAR16(QByteArray GET_DATA1, unsigned int GET_DATA_len);
    unsigned long int ASCIItoCHAR32(QByteArray GET_DATA1, unsigned int GET_DATA_len);
    void CHECK_SET();
signals:
    void response();
    void responsedata(const QString &s1, const QString &s2);
    void responserror();
private slots:
    void stopserial();
private:
    QString request;
    QString baudrate;
    QString checkCode;
    QString checklen;
    int DATA_LEN;
    QMutex mutex;
    QWaitCondition cond;
    bool quit;
    bool ok;
    int long1;
    QString response2;
    unsigned char char_8;
    unsigned int int_16;
    unsigned long int long_32;
};

#endif // MAINETHREAD_H



#ifndef MAINWINDOWS_H
#define MAINWINDOWS_H
#include <QtWidgets/QWidget>
#include <QtWidgets/QTextBrowser>
#include <QtWidgets/QLCDNumber>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QGridLayout>
#include <mainethread.h>
#include <QTimer>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QRadioButton>

class MainWindows : public QWidget
{
    Q_OBJECT
public:
    MainWindows();
    ~MainWindows();
    void setbaudrate();
    void Edit_SET();
    void CHECKCODE_CHOSE();
private:
    QLabel *label1;
    QLabel *label2;
    QLabel *label4;
    QLabel *label5;
    QLabel *label6;
    QLabel *label7;
    QLabel *label8;
    QLabel *label9;
    QLabel *label10;
    QLabel *label11;
    QLabel *CHECK_8;
    QLabel *CHECK_16;
    QLabel *CHECK_32;
    QLabel *DATA_LENGTH;
    QLineEdit *edit1;
    QLineEdit *edit_8;
    QLineEdit *edit_16;
    QLineEdit *edit_32;
    QLineEdit *edit_length;
    QTextBrowser *browser1;
    QTextBrowser *browser4;
    QTextBrowser *browser2;
    QTextBrowser *browser3;
    QLCDNumber *lcd1;
    QPushButton *button1;
    QPushButton *button2;
    QPushButton *button3;
    QPushButton *button4;
    QRadioButton *CHECK8;
    QRadioButton *CHECK16;
    QRadioButton *CHECK32;
    mainEthread *thread;
    QComboBox *baudrateCombox;
    QGridLayout *layout1;
    long int num1;
    long int num2;
private slots:
    void transaction();
    void send1();
    void showResponse();
    void showdata(const QString &s1, const QString &s2);
    void clearwindows();
    void showerror();
};

#endif // MAINWINDOWS_H



#include <mainwindows.h>
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc,argv);
    MainWindows w;
    w.show();
    return a.exec();
}



#include "mainethread.h"
#include <QtSerialPort/QSerialPort>

mainEthread::mainEthread()
{
    long1 = 0;
    quit=false;
}
void mainEthread::transaction(const QString &request)
{
    quit=false;
    QMutexLocker locker(&mutex);
    this->request = request;
    if (!isRunning())
        start();
    else
        cond.wakeOne();
}

//接收波特率和校验码
void mainEthread::reaseive1(const QString &baudrate, const QString &checkCode,const QString &checklen)
{
    QMutexLocker locker(&mutex);
    this->baudrate = baudrate;
    this->checkCode = checkCode;
    this->checklen = checklen;
    DATA_LEN = this->checklen.toInt(&ok
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值