利用QT制作串口助手
前言:
? ? ? 在嵌入式系統(tǒng)中,諸多設(shè)備都可以通過串口來控制,比如WiFi、藍(lán)牙、RFID等等,因此在嵌入式設(shè)備中使用串口就顯得特別重要。在QT5中又自帶了串口通信模塊,所以用QT來制作串口助手相比較簡單些。
一、工程文件的修改
在項(xiàng)目的.pro文件中加入一句?QT?+=?serialport,如下圖
一、界面設(shè)計(jì)
?如下圖所示,天氣窗口界面由圖中①、②、③三部分。其中:
(1)第①部分是串口信息的配置,打開/關(guān)閉串口按鈕,。
(2)第②部分是信息接收區(qū),由一個(gè)QTextBrowser框和一個(gè)QPushButton按鈕組成
(3)第③部分是信息發(fā)送區(qū),由一個(gè)QTextEdit輸入框和3個(gè)QPushButton按鈕以及QCheckBox復(fù)選框組成
?
三、實(shí)現(xiàn)步驟
? ? ?1、找到串口設(shè)備文件
? ? ?3、配置串口設(shè)備(波特率 、數(shù)據(jù)位 8b、停止位 1b 和校驗(yàn),無硬件流控模式)
? ? ?2、打開串口設(shè)備
? ? ?4、發(fā)送數(shù)據(jù), 接收數(shù)據(jù)
? ? ?5、關(guān)閉串口設(shè)備
四、具體實(shí)現(xiàn)
1、通過QSerialPortInfo查詢所有串口設(shè)備
//掃描串口 void ComWin::on_scanBt_clicked() {ui->comboBox->clear();//獲取當(dāng)前設(shè)備上的所有串口QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();foreach (QSerialPortInfo info, infos){ui->comboBox->addItem( info.portName() );} }2、創(chuàng)建串口對象 ?QSerialPort
QSerialPort mserial;3、配置串口信息(波特率 、數(shù)據(jù)位 、停止位 和校驗(yàn))
//配置串口屬性 void ComWin::setSerial() {//配置串口屬性mserial.setBaudRate(ui->baudBox->currentText().toInt());//波特率switch (ui->dataBox->currentText().toInt()) { //數(shù)據(jù)位case 5: mserial.setDataBits(QSerialPort::Data5);break; //5位case 6: mserial.setDataBits(QSerialPort::Data6);break; //6位case 7: mserial.setDataBits(QSerialPort::Data7);break; //7位case 8: mserial.setDataBits(QSerialPort::Data8);break; //8位}switch (ui->stopBox->currentText().toInt()) { //停止位case 1: mserial.setStopBits(QSerialPort::OneStop);break; //1位case 2: mserial.setStopBits(QSerialPort::TwoStop);break; //2位}if(ui->checkBox->currentText() == "NONE"){mserial.setParity(QSerialPort::NoParity);//無校驗(yàn)}else if(ui->checkBox->currentText() == "ODD"){mserial.setParity(QSerialPort::OddParity);//奇校驗(yàn)}else if(ui->checkBox->currentText() == "EVEN"){mserial.setParity(QSerialPort::EvenParity);//偶校驗(yàn)} }4、調(diào)用對象方法打開/關(guān)閉串口-----open/close
這里有一個(gè)標(biāo)記falg判斷現(xiàn)在按下該按鈕是打開還是關(guān)閉串口,falg初始值為0,當(dāng)按鈕每按下時(shí),標(biāo)記falg就加一,所以判斷falg是否能被2整除,來判斷當(dāng)前按下是做啥操作
//打開/關(guān)閉串口 void ComWin::on_openBt_clicked() {if(falg%2 == 0){setSerial();mserial.setPortName(ui->comboBox->currentText());//打開串口if(!mserial.open(QIODevice::ReadWrite)){qDebug()<<"open fail";}ui->openBt->setText("關(guān)閉");ui->openBt->setStyleSheet("background-color: rgb(0, 255, 0);");ui->label_6->setStyleSheet("border-image: url(:/open.png);");}else {//關(guān)閉串口mserial.close();ui->openBt->setText("打開");ui->openBt->setStyleSheet("background-color: rgb(255, 0, 0);");ui->label_6->setStyleSheet("border-image: url(:/close.png);");}falg++;}5、往串口發(fā)送數(shù)據(jù)---write
這里通過write函數(shù)發(fā)送信息,并且當(dāng)復(fù)選按鈕(自動(dòng)換行)選上的話,line為2,所以發(fā)出去的信息會(huì)加一個(gè)"\n"。
//發(fā)送數(shù)據(jù) void ComWin::on_sendBt_clicked() {msg = ui->textEdit->toPlainText();if(this->line!=0) this->msg+="\n";//發(fā)送數(shù)據(jù)mserial.write(msg.toUtf8()); } //是否自動(dòng)換行 void ComWin::on_newlineBox_stateChanged(int arg1) {this->line = arg1;qDebug()<<line; }6、接收串口的數(shù)據(jù)---當(dāng)串口有數(shù)據(jù)可讀的時(shí)候會(huì)發(fā)送readyRead信號 readall
關(guān)聯(lián)有數(shù)據(jù)可讀的信號
connect(&mserial, &QSerialPort::readyRead, this, &ComWin::read_data);讀數(shù)據(jù)函數(shù)
//讀取串口數(shù)據(jù) void ComWin::read_data() {//讀取串口數(shù)據(jù)msg = mserial.readAll();ui->textBrowser->append(msg);; }五、效果展示
?
問題咨詢及項(xiàng)目源碼請加群:
QQ群
名稱:IT項(xiàng)目交流群
群號:245022761
?
總結(jié)
以上是生活随笔為你收集整理的利用QT制作串口助手的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电源完整性
- 下一篇: 蓝桥杯青少年创意编程C++组赛前集训教程