国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

串口助手

2019-11-08 19:43:22
字體:
來源:轉載
供稿:網友
//mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QtSerialPort/QSerialPort>#include <QtSerialPort/QSerialPortInfo>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); char ConvertHexChar(char ch); void String2Hex(QString str, QByteArray &senddata);PRivate: Ui::MainWindow *ui; QSerialPort *my_serialport; bool isOpen;private slots: void my_readData(); //讀取串口數據的槽 void my_sendData(); //發送數據的槽 void set_SerialPort();};#endif // MAINWINDOW_H//mainwindow.cpp#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); isOpen = false; //遍歷可用的串口 foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { QSerialPort serial; serial.setPort(info); //串口可打開則放到列表選項上 if (serial.open(QIODevice::ReadWrite)) { ui->PortComboBox->addItem(info.portName()); serial.close(); } } my_serialport= new QSerialPort();//初始化串口 QObject::connect(ui->OpenButton,SIGNAL(clicked(bool)),this,SLOT(set_SerialPort())); //打開按鈕按下時觸發 QObject::connect(my_serialport,SIGNAL(readyRead()),this,SLOT(my_readData())); //接收到數據時觸發 QObject::connect(ui->SendButton,SIGNAL(clicked(bool)),this,SLOT(my_sendData())); //發送按鈕按下時觸發}MainWindow::~MainWindow(){ delete ui;}void MainWindow::my_readData(){ QByteArray requestData; requestData = my_serialport->readAll(); //讀取數據 if(requestData!= NULL) { if(ui->HexCheckBox->isChecked()) { ui->ReceiveTextEdit->append(tr(requestData.toHex())); //使用16進制顯示 } else { ui->ReceiveTextEdit->append(tr(requestData)); } } requestData.clear();}void MainWindow::set_SerialPort(){ if(!isOpen) { isOpen = true; my_serialport->setPortName(ui->PortComboBox->currentText()); //設置端口號 my_serialport->open(QIODevice::ReadWrite); //要先打開才能設置,否則出錯 my_serialport->setBaudRate(ui->BaudComboBox->currentText().toInt()); //設置波特率 switch(ui->DataBitComboBox->currentIndex()) //設置數據位 { case 0: my_serialport->setDataBits(QSerialPort::Data8);break; case 1: my_serialport->setDataBits(QSerialPort::Data7);break; case 2: my_serialport->setDataBits(QSerialPort::Data6);break; } switch(ui->StopBitComboBox->currentIndex()) //設置停止位 { case 0: my_serialport->setStopBits(QSerialPort::OneStop);break; case 1: my_serialport->setStopBits(QSerialPort::TwoStop);break; } my_serialport->setParity(QSerialPort::NoParity); //校驗位 my_serialport->setFlowControl(QSerialPort::NoFlowControl); //流控 ui->OpenButton->setText("關閉串口"); connect(my_serialport,SIGNAL(readyRead()),this,SLOT(my_readData())); //可以接收串口數據了 } else { isOpen = false; ui->OpenButton->setText("打開串口"); my_serialport->close(); }}void MainWindow::my_sendData(){ if(ui->HexSendCheckBox->isChecked()) { QByteArray sendData; String2Hex(ui->SendTextEdit->toPlainText(),sendData); //16進制發送 my_serialport->write(sendData); } else { my_serialport->write(ui->SendTextEdit->toPlainText().toLatin1()); }}//將一個字符串轉換成字節數組void MainWindow::String2Hex(QString str, QByteArray &senddata){ int hexdata,lowhexdata; int hexdatalen = 0; int len = str.length(); //字符串長度 senddata.resize(len/2); //兩個字符轉成一個字節的16進制,所以先預定一個大小 char lstr,hstr; for(int i=0; i<len; ) { hstr=str[i].toLatin1(); //將每個字符都轉成ASCII碼 if(hstr == ' ') //判斷是否為空格 { i++; continue; } i++; if(i >= len) break; lstr = str[i].toLatin1(); hexdata = ConvertHexChar(hstr); //字符轉換成16進制數 lowhexdata = ConvertHexChar(lstr); if((hexdata == 16) || (lowhexdata == 16)) break; else hexdata = hexdata*16+lowhexdata; //兩個字符轉成一個字節的16進制數 i++; senddata[hexdatalen] = (char)hexdata; //保存到字節數組中 hexdatalen++; } senddata.resize(hexdatalen); //設置實際的字節數組大小}//將一個字符轉換成16進制數char MainWindow::ConvertHexChar(char ch){ if((ch >= '0') && (ch <= '9')) return ch-0x30; else if((ch >= 'A') && (ch <= 'F')) return ch-'A'+10; else if((ch >= 'a') && (ch <= 'f')) return ch-'a'+10; else return (-1);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 同仁县| 泾川县| 宿州市| 汉沽区| 万全县| 攀枝花市| 西平县| 大田县| 鹤峰县| 康乐县| 唐山市| 福安市| 化德县| 清河县| 岳普湖县| 渝北区| 萨嘎县| 团风县| 饶河县| 沛县| 东兰县| 廊坊市| 普格县| 阳原县| 涞源县| 甘泉县| 房产| 朝阳县| 横峰县| 登封市| 浮梁县| 林州市| 板桥市| 合阳县| 三门峡市| 怀来县| 兰西县| 滨海县| 寿光市| 运城市| 奎屯市|