Qt串口通信程序

这是我在看了几个串口通信程序之后自己根据自己需求写出来的,发送的数据是以16进制格式写入单片机SBUF的,接收的数据也是以16进制格式显现,我想要实现的功能是当发送1时单片机开发板上的led灯就熄灭,发送其他数据时就亮,当然我还是个刚学的新手,有的地方写的不好,大家多指教,

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include
#include

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QSerialPort *serial;
private slots:
    void clearButton_onclick();//清空接收按钮槽函数
    void sendButton_onclick();//发送数据按钮槽函数
    void openButton_onclick();//打开文件按钮槽函数
    void read_Data();//速去数据槽函数
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowTitle(tr("serialport"));
    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts()){
        QSerialPort myserial;//串口类对象
        myserial.setPort(info);
        if(myserial.open(QIODevice::ReadWrite)){
            ui->portcomboBox->addItem(myserial.portName());//添加串口名字
            myserial.close();
        }
    }
    //设置波特率下拉菜单默认显示第六项
    ui->baoudcomboBox->setCurrentIndex(5);
    //关闭发送串口按钮功能
    ui->SendpushButton->setEnabled(false);
    //QDebug<ClearpushButton,SIGNAL(clicked(bool)),this,SLOT(clearButton_onclick()));
    QObject::connect(ui->OpenpushButton,SIGNAL(clicked(bool)),this,SLOT(openButton_onclick()));
    QObject::connect(ui->SendpushButton,SIGNAL(clicked(bool)),this,SLOT(sendButton_onclick()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::clearButton_onclick(){//清除接收功能函数
    ui->textEdit->clear();
}
void MainWindow::sendButton_onclick(){//发送数据功能
    QByteArray writeData;
    writeData=QByteArray::fromHex(ui->textEdit_2->toPlainText().toLatin1().data());
    serial->write(writeData);//按16进制编码接入文本
    qDebug()<OpenpushButton->text()==tr("打开串口")){
        serial=new QSerialPort;
        serial->setPortName(ui->portcomboBox->currentText());//设置串口名
        serial->open(QIODevice::ReadWrite);//打开串口
        serial->setBaudRate(ui->baoudcomboBox->currentText().toInt());//设置波特率
        switch (ui->datacomboBox->currentIndex()) {//设置数据位
        case 8:
            serial->setDataBits(QSerialPort::Data8);
            break;
        default:
            break;
        }
        switch (ui->checkcomboBox->currentIndex()) {//设置奇偶校验
        case 0:
            serial->setParity(QSerialPort::NoParity);
            break;
        default:
            break;
        }
        switch(ui->stopcomboBox->currentIndex()){//设置停止位
        case 1:
            serial->setStopBits(QSerialPort::OneStop);
            break;
        case 2:
            serial->setStopBits(QSerialPort::TwoStop);
            break;
        default:
            break;
        }
        serial->setFlowControl(QSerialPort::NoFlowControl);//设置流控制
        //关闭设置菜单使能
        ui->portcomboBox->setEnabled(false);
        ui->baoudcomboBox->setEnabled(false);
        ui->datacomboBox->setEnabled(false);
        ui->checkcomboBox->setEnabled(false);
        ui->stopcomboBox->setEnabled(false);
        ui->OpenpushButton->setText(tr("关闭串口"));
        ui->SendpushButton->setEnabled(true);
        //连接信号槽
        QObject::connect(serial,&QSerialPort::readyRead,this,&MainWindow::read_Data);
    }
    else{
        //关闭串口
        serial->clear();
        serial->close();
        serial->deleteLater();

        //恢复设置使能
        ui->portcomboBox->setEnabled(true);
        ui->baoudcomboBox->setEnabled(true);
        ui->datacomboBox->setEnabled(true);
        ui->checkcomboBox->setEnabled(false);
        ui->stopcomboBox->setEnabled(true);
        ui->OpenpushButton->setText(tr("打开串口"));
        ui->SendpushButton->setEnabled(true);

    }
}

void MainWindow::read_Data(){
    QByteArray buf;
    buf=serial->readAll();
    qDebug()<textEdit->toPlainText();
        str=tr(buf);
        QByteArray str2=QByteArray::fromHex(str.toLatin1().data());
       // QString strDis;
        QString str3=str2.toHex().data();
        str3=str3.toUpper();*/
        QString str3=buf.toHex();//https://www.2cto.com/kf/201210/163401.html
        ui->textEdit->append(str3);
    }
    buf.clear();
}

ui部分:

Qt串口通信程序_第1张图片

不要忘记在.pro里边加入:

QT       +=serialport

main.cpp保持不变就可以了

当然我自己写的程序未必是你想要的,我当时查找资料的时候最初写出的程序是无法控制开发板上灯亮灭的,后来想到可能是传送的数据跟判断条件里的条件数据格式不同,后来查了资料将收发的数据都转换成16进制格式,就成功的,第一次写这么多,如果能帮到一些人就好,随着以后学习的深入会慢慢改进自己的不足之处。

你可能感兴趣的:(Qt)