欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Qt編寫(xiě)串口通信程序全程圖文講解

在Qt中并沒(méi)有特定的串口控制類(lèi),現在大部分人使用的是第三方寫(xiě)的qextserialport類(lèi),我們這里也是使用的該類(lèi)。我們可以去

http://sourceforge.net/projects/qextserialport/files/

進(jìn)行下載,也可以去下載我上傳到網(wǎng)上的:

http://download.csdn.net/source/1762781  或 http://www.qtcn.org/bbs/read.php?tid=22847

下載到的文件為:qextserialport-1.2win-alpha.zip

其內容如下圖:

我們在windows下只需要使用其中的6個(gè)文件:

qextserialbase.cpp和qextserialbase.h,qextserialport.cpp和qextserialport.h,win_qextserialport.cpp和win_qextserialport.h

如果在Linux下只需將win_qextserialport.cpp和win_qextserialport.h 換為 posix_qextserialport.cpp和posix_qextserialport.h即可。

第一部分:

下面我們將講述編程的詳細過(guò)程,這里我們先給出完整的程序,然后到第二部分再進(jìn)行逐句分析。

1.打開(kāi)Qt Creator,新建Qt4 Gui Application,工程名設置為mycom,其他使用默認選項。

(注意:建立的工程路徑不能有中文。)

2.將上面所說(shuō)的6個(gè)文件復制到工程文件夾下,如下圖。

3.在工程中添加這6個(gè)文件。

在Qt Creator中左側的文件列表上,鼠標右擊工程文件夾,在彈出的菜單中選擇Add Existing Files,添加已存在的文件。如下圖:

選擇工程文件夾里的那6個(gè)文件,進(jìn)行添加。如下圖。

添加好后文件列表如下圖所示:

4.點(diǎn)擊mainwindow.ui,在窗口上加入一個(gè)Text Browser,用來(lái)顯示信息。如下圖。

5.在mainwindow.h的相應位置添加頭文件#include "win_qextserialport.h",添加對象聲明Win_QextSerialPort *myCom;添加槽函數聲明 void readMyCom();添加完后,如下圖。

6.在mainwindow.cpp的類(lèi)的構造函數中添加如下語(yǔ)句。

MainWindow::MainWindow(QWidget *parent)

: QMainWindow(parent), ui(new Ui::MainWindow)

{

ui->setupUi(this);

struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};

//定義一個(gè)結構體,用來(lái)存放串口各個(gè)參數

myCom = new Win_QextSerialPort("com1",myComSetting,QextSerialBase::EventDriven);

//定義串口對象,并傳遞參數,在構造函數里對其進(jìn)行初始化

myCom ->open(QIODevice::ReadWrite);

//以可讀寫(xiě)方式打開(kāi)串口

connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));

//信號和槽函數關(guān)聯(lián),當串口緩沖區有數據時(shí),進(jìn)行讀串口操作

}

在下面添加readMyCom()函數的定義,添加如下代碼。

void MainWindow::readMyCom() //讀串口函數

{

QByteArray temp = myCom->readAll();

//讀取串口緩沖區的所有數據給臨時(shí)變量temp

ui->textBrowser->insertPlainText(temp);

//將串口的數據顯示在窗口的文本瀏覽器中

}

添加完代碼后如下圖。

此時(shí)如果運行程序,已經(jīng)能實(shí)現讀取串口數據的功能了。我們將單片機采集的溫度信息由串口傳給計算機,效果如下圖。

這樣最簡(jiǎn)單的串口通信程序就完成了??梢钥吹剿恍枰尤霂仔写a即可,非常簡(jiǎn)單。


第二部分:

上一部分中已經(jīng)介紹了實(shí)現最簡(jiǎn)單的串口接收程序的編寫(xiě),下面將對程序內容進(jìn)行分析。

1.首先應說(shuō)明操作串口的流程。

步驟一:設置串口參數,如:波特率,數據位,奇偶校驗,停止位,數據流控制等。

步驟二:選擇串口,如windows下的串口1為“com1”,Linux下為“ttyS0”等,并打開(kāi)串口。

步驟三:讀或寫(xiě)串口。

步驟四:關(guān)閉串口。

(我們上一個(gè)程序沒(méi)有寫(xiě)串口和關(guān)閉串口的功能,打開(kāi)串口也是在構造函數里完成的,因為那只是為了用最簡(jiǎn)單的方法完成串口程序的編寫(xiě)。在后面我們將會(huì )對它進(jìn)行修改和完善。)

2.下面我們將按照上面的操作串口的流程,講解第一個(gè)程序的編寫(xiě)。

第一,我們在寫(xiě)程序之前,應該瀏覽一下那6個(gè)文件,大概看一下它們里面都是什么內容,各個(gè)文件各個(gè)類(lèi)之間有什么聯(lián)系。在win_qextserialport.cpp文件中,我們看它的最后一個(gè)構造函數,會(huì )發(fā)現,串口可以在這里進(jìn)行初始化。


Win_QextSerialPort::Win_QextSerialPort(const QString & name, const PortSettings& settings, QextSerialBase::QueryMode mode) {

Win_Handle=INVALID_HANDLE_VALUE;

setPortName(name);

setBaudRate(settings.BaudRate);

setDataBits(settings.DataBits);

setStopBits(settings.StopBits);

setParity(settings.Parity);

setFlowControl(settings.FlowControl);

setTimeout(settings.Timeout_Millisec);

setQueryMode(mode);

init();

}

它共有三個(gè)參數,其中第一個(gè)參數const QString & name,應該是串口的名字,是QString類(lèi)型,我們可以用串口1即“com1”,不用過(guò)多說(shuō)明。下面我們主要研究第二個(gè)和第三個(gè)參數。

第二,我們查看第二個(gè)參數的位置。

在Qt Creator的菜單中選擇Edit->Find/Replace->All projects,如下圖。

在彈出的對話(huà)框中輸入要查找的內容PortSettings,如下圖。

點(diǎn)擊Search后,便能在下面顯示出整個(gè)工程中所有PortSettings的位置。如下圖。

我們點(diǎn)擊第一條,可以看到在qextserialbase.h文件中有一個(gè)struct PortSettings,如下圖。

我們雙擊這一條,進(jìn)入相應的文件。如下圖。

struct PortSettings

{

BaudRateType BaudRate;

DataBitsType DataBits;

ParityType Parity;

StopBitsType StopBits;

FlowType FlowControl;

long Timeout_Millisec;

};

可以看到在這個(gè)結構體里定義了串口初始化的各個(gè)參數,而對于BaudRateType等類(lèi)型的定義,我們在這個(gè)結構體的上面可以看到,它們是多個(gè)枚舉變量。如下圖。


這時(shí)我們便應該明白了,這個(gè)結構體便是實(shí)現串口參數設置的。

第三,定義串口參數。

BaudRateType BaudRate;

波特率設置,我們設置為9600,即程序中用BAUD9600;

DataBitsType DataBits;

數據位設置,我們設置為8位數據位,即DATA_8;

ParityType Parity;

奇偶校驗設置,我們設置為無(wú)校驗,即PAR_NONE;

StopBitsType StopBits;

停止位設置,我們設置為1位停止位,即STOP_1;

FlowType FlowControl;

數據流控制設置,我們設置為無(wú)數據流控制,即FLOW_OFF;

long Timeout_Millisec;

延時(shí)設置,我們設置為延時(shí)500ms,即500;

這樣便寫(xiě)出了程序中的那句:

struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};

我們定義了一個(gè)結構體變量myComSetting,并對其進(jìn)行了初始化。

第四,設置第三個(gè)參數。

我們先按上面的方法找到它的定義位置,在qextserialbase.h中,如下圖。

可以看到查詢(xún)模式也是枚舉變量,有兩個(gè)選項,我們選擇第二個(gè)EventDriven,事件驅動(dòng)。

到這里,我們就可以定義Win_QextSerialPort類(lèi)的變量了,就是那句:

myCom = new Win_QextSerialPort("com1",myComSetting,QextSerialBase::EventDriven);

它完成了串口的選擇和串口的初始化。

第五,寫(xiě)打開(kāi)串口函數和讀串口函數。

查看win_qextserialport.h文件,我們會(huì )發(fā)現Win_QextSerialPort類(lèi)繼承自QextSerialBase類(lèi)。

查看qextserialbase.h文件,我們會(huì )發(fā)現QextSerialBase類(lèi)繼承自QIODevice 類(lèi)。

我們在Qt的幫助中查看QIODevice 類(lèi),如下圖。

其部分內容如下圖??梢钥吹狡渲杏衑num OpenModeFlag { NotOpen, ReadOnly, WriteOnly, ReadWrite, ..., Unbuffered },virtual bool open ( OpenMode mode ),QByteArray readAll ()等內容。

而下面的信號函數中有void readyRead ();它可以查看串口是否有新的數據傳來(lái)。

所以,我們可以用這個(gè)類(lèi)里的這些函數操作串口。

如程序中的語(yǔ)句:

myCom ->open(QIODevice::ReadWrite);

//我們調用了其中的open函數,用ReadWrite可讀寫(xiě)的方式進(jìn)行打開(kāi)串口,這個(gè)open函數在win_qextserialport.cpp中被重定義了

connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));

//我們關(guān)聯(lián)信號readyRead(),和自己寫(xiě)的槽函數readMyCom(),當串口有數據傳來(lái)時(shí)進(jìn)行讀串口操作

void MainWindow::readMyCom() //自己寫(xiě)的讀串口函數

{

QByteArray temp = myCom->readAll();

//我們調用readAll()函數,讀取串口中所有數據,在上面可以看到其返回值是QByteArray類(lèi)型

ui->textBrowser->insertPlainText(temp);

//調用insertPlainText()函數,是窗口上的文本瀏覽器中連續輸出數據,而不是每次寫(xiě)數據前都清除以前的

//數據,可以在Qt的幫助里查看這個(gè)函數的說(shuō)明

}

這樣我們便寫(xiě)完了所有的語(yǔ)句,最后只需要在mainwindow.h文件中加入相應的頭文件,對象聲明,函數聲明即可。

      這里需要說(shuō)明的是我們一定要學(xué)會(huì )查看文件和使用幫助文檔,將我們不懂得知識一點(diǎn)一點(diǎn)搞明白。

第三部分:

下面的程序在第一部分中所寫(xiě)的程序上進(jìn)行了一些改進(jìn)。加入打開(kāi)和關(guān)閉串口,發(fā)送數據等功能。

1.加入了“打開(kāi)串口”,“關(guān)閉串口”“傳送數據”三個(gè)按鈕,加入了一個(gè)行編輯框Line Edit。它們的命名如下:

“打開(kāi)串口”按鈕命名為:openMyComBtn

“關(guān)閉串口”按鈕命名為:closeMyComBtn

“傳送數據”按鈕命名為:sendMsgBtn

要傳送數據的行編輯框命名為:sendMsgLineEdit

界面如下圖。

2.在“打開(kāi)串口”按鈕上右擊,選擇Go to slot選項,然后選擇clicked()選項,進(jìn)入它的單擊事件槽函數中,將上個(gè)程序中在構造函數里寫(xiě)的語(yǔ)句全部剪切到這里。然后加入幾句按鈕的狀態(tài)設置語(yǔ)句。如下:

void MainWindow::on_openMyComBtn_clicked()

{

struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};

//定義一個(gè)結構體,用來(lái)存放串口各個(gè)參數

myCom = new Win_QextSerialPort("com1",myComSetting,QextSerialBase::EventDriven);

//定義串口對象,并傳遞參數,在構造函數里對其進(jìn)行初始化

myCom ->open(QIODevice::ReadWrite);

//以可讀寫(xiě)方式打開(kāi)串口

connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));

//信號和槽函數關(guān)聯(lián),當串口緩沖區有數據時(shí),進(jìn)行讀串口操作

ui->openMyComBtn->setEnabled(false); //打開(kāi)串口后“打開(kāi)串口”按鈕不可用

ui->closeMyComBtn->setEnabled(true); //打開(kāi)串口后“關(guān)閉串口”按鈕可用

ui->sendMsgBtn->setEnabled(true); //打開(kāi)串口后“發(fā)送數據”按鈕可用

}

在構造函數里也添加幾句按鈕初始狀態(tài)設置語(yǔ)句,如下:

MainWindow::MainWindow(QWidget *parent)

: QMainWindow(parent), ui(new Ui::MainWindow)

{

ui->setupUi(this);

ui->closeMyComBtn->setEnabled(false); //開(kāi)始“關(guān)閉串口”按鈕不可用

ui->sendMsgBtn->setEnabled(false); //開(kāi)始“發(fā)送數據”按鈕不可用

}

更改后程序如下圖所示:

這時(shí)運行程序,效果如下:

3.按上面的方法進(jìn)入“關(guān)閉串口”按鈕和“發(fā)送數據”按鈕的單擊事件的槽函數,更改如下。

void MainWindow::on_closeMyComBtn_clicked()      //關(guān)閉串口槽函數

{

myCom->close(); //關(guān)閉串口,該函數在win_qextserialport.cpp文件中定義

ui->openMyComBtn->setEnabled(true); //關(guān)閉串口后“打開(kāi)串口”按鈕可用

ui->closeMyComBtn->setEnabled(false); //關(guān)閉串口后“關(guān)閉串口”按鈕不可用

ui->sendMsgBtn->setEnabled(false); //關(guān)閉串口后“發(fā)送數據”按鈕不可用

}

/***********************************/

void MainWindow::on_sendMsgBtn_clicked()       //發(fā)送數據槽函數

{

myCom->write(ui->sendMsgLineEdit->text().toAscii());

//以ASCII碼形式將行編輯框中的數據寫(xiě)入串口

}

程序如下圖:

最終效果如下:

(將數據x發(fā)送給單片機,單片機返回you send message is : x)

第四部分:

本文一開(kāi)始先講解對程序的改進(jìn),在文章最后將要講解一些重要問(wèn)題。

1.在窗口中加入一些組合框Combo Box,它們的名稱(chēng)及條目如下:

串口:portNameComboBox,條目為:COM1,COM2

波特率:baudRateComboBox,條目為:9600,115200

數據位:dataBitsComboBox,條目為:8,7

校驗位:parityComboBox,條目為:無(wú),奇,偶

停止位:stopBitsComboBox,條目為:1,2

(注:在窗口上的Combo Box上雙擊,在彈出的對話(huà)框上按“+”號,可添加條目。我們只是為了演示,所以只加了這幾個(gè)條目,你可以根據自己的需要添加。)

改好的窗口如下所示:

2.更改“打開(kāi)串口”按鈕的單擊事件槽函數。

void MainWindow::on_openMyComBtn_clicked()

{

QString portName = ui->portNameComboBox->currentText(); //獲取串口名

myCom = new Win_QextSerialPort(portName,QextSerialBase::EventDriven);

//定義串口對象,并傳遞參數,在構造函數里對其進(jìn)行初始化

myCom ->open(QIODevice::ReadWrite); //打開(kāi)串口

if(ui->baudRateComboBox->currentText()==tr("9600")) //根據組合框內容對串口進(jìn)行設置

myCom->setBaudRate(BAUD9600);

else if(ui->baudRateComboBox->currentText()==tr("115200"))

myCom->setBaudRate(BAUD115200);

//設置波特率

if(ui->dataBitsComboBox->currentText()==tr("8"))

myCom->setDataBits(DATA_8);

else if(ui->dataBitsComboBox->currentText()==tr("7"))

myCom->setDataBits(DATA_7);

//設置數據位

if(ui->parityComboBox->currentText()==tr("無(wú)"))

myCom->setParity(PAR_NONE);

else if(ui->parityComboBox->currentText()==tr("奇"))

myCom->setParity(PAR_ODD);

else if(ui->parityComboBox->currentText()==tr("偶"))

myCom->setParity(PAR_EVEN);

//設置奇偶校驗

if(ui->stopBitsComboBox->currentText()==tr("1"))

myCom->setStopBits(STOP_1);

else if(ui->stopBitsComboBox->currentText()==tr("2"))

myCom->setStopBits(STOP_2);

//設置停止位

myCom->setFlowControl(FLOW_OFF); //設置數據流控制,我們使用無(wú)數據流控制的默認設置

myCom->setTimeout(500); //設置延時(shí)

connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));

//信號和槽函數關(guān)聯(lián),當串口緩沖區有數據時(shí),進(jìn)行讀串口操作

ui->openMyComBtn->setEnabled(false); //打開(kāi)串口后“打開(kāi)串口”按鈕不可用

ui->closeMyComBtn->setEnabled(true); //打開(kāi)串口后“關(guān)閉串口”按鈕可用

ui->sendMsgBtn->setEnabled(true); //打開(kāi)串口后“發(fā)送數據”按鈕可用

ui->baudRateComboBox->setEnabled(false); //設置各個(gè)組合框不可用

ui->dataBitsComboBox->setEnabled(false);

ui->parityComboBox->setEnabled(false);

ui->stopBitsComboBox->setEnabled(false);

ui->portNameComboBox->setEnabled(false);

}

這里我們先獲取串口的名稱(chēng),然后調用另一個(gè)構造函數對myCom進(jìn)行定義,這個(gè)構造函數里沒(méi)有串口的設置參數。然后打開(kāi)串口。然后獲取串口的設置數據,用setBaudRate();等一系列函數進(jìn)行串口的設置,這些函數都在win_qextserialport.cpp文件中定義,如下圖。

看完前面幾部分的內容,對于這幾個(gè)函數應該很好理解,這里不再解釋。在最后我們對添加的那幾個(gè)組合框進(jìn)行了不可用設置,使其在串口打開(kāi)的情況下不能選擇。

程序如下:

3.更改“關(guān)閉串口”按鈕單擊事件的槽函數。

void MainWindow::on_closeMyComBtn_clicked()

{

myCom->close();

ui->openMyComBtn->setEnabled(true); //關(guān)閉串口后“打開(kāi)串口”按鈕可用

ui->closeMyComBtn->setEnabled(false); //關(guān)閉串口后“關(guān)閉串口”按鈕不可用

ui->sendMsgBtn->setEnabled(false); //關(guān)閉串口后“發(fā)送數據”按鈕不可用

ui->baudRateComboBox->setEnabled(true); //設置各個(gè)組合框可用

ui->dataBitsComboBox->setEnabled(true);

ui->parityComboBox->setEnabled(true);

ui->stopBitsComboBox->setEnabled(true);

ui->portNameComboBox->setEnabled(true);

}

這里只是加入了一些使組合框在“關(guān)閉串口”按鈕按下后變?yōu)榭捎玫恼Z(yǔ)句。

程序如下:

4.更改main.cpp文件。

#include

#include //加入頭文件

#include "mainwindow.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

//使程序可處理中文

MainWindow w;

w.show();

return a.exec();

}

因為上面的程序中用到了中文,為了能使程序識別中文,我們需要在主函數中加入這些語(yǔ)句。

程序如下:

5.運行程序。

打開(kāi)后程序界面如下。

正常發(fā)送1后效果如下。

設置為“奇校驗”,發(fā)送完1的效果如下圖。(接收到的是亂碼)

到這里,整個(gè)程序就寫(xiě)完了。

重要問(wèn)題說(shuō)明:

(下面所說(shuō)的第一個(gè)程序是指第一部分中寫(xiě)的那個(gè)程序,第二個(gè)程序是指第三部分更改完后的程序,第三個(gè)程序是指第四部分更改完后的程序。)

問(wèn)題一:更改第一個(gè)程序中的代碼。

struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};

myCom = new Win_QextSerialPort("com1",myComSetting,QextSerialBase::EventDriven);

這兩行代碼如果換為下面一行:

myCom = new Win_QextSerialPort("com1",QextSerialBase::EventDriven);

你再運行一下程序,是不是還能用?那是說(shuō)明我們的串口設置的結構體myComSetting沒(méi)有用嗎?你可以把上面的結構體里的波特率由9600改為115200,如果這個(gè)結構體有用,那么程序不可能再接收到數據,不過(guò),你再運行一下程序,是這樣嗎?

如此看來(lái),我們對串口進(jìn)行的設置果真沒(méi)用,那默認的串口設置是什么呢?我們先看下一個(gè)問(wèn)題。

問(wèn)題二:同時(shí)打開(kāi)第三個(gè)程序和第二個(gè)程序。

(注意:兩個(gè)程序的串口不能同時(shí)打開(kāi),所以打開(kāi)一個(gè)程序的串口時(shí)要將另一個(gè)程序的串口關(guān)閉。)

我們先在第三個(gè)程序上按默認設置打開(kāi)串口,發(fā)送數據1。然后關(guān)閉串口,在第二個(gè)程序上打開(kāi)串口,發(fā)送數據1??梢钥吹絻蓚€(gè)程序上接受到的信息都正確。如下圖。

我們關(guān)閉第二個(gè)程序上的串口,再將第三個(gè)程序上設置為奇校驗,然后打開(kāi)串口,發(fā)送數據1,可以看到其收到的數據顯示亂碼。這時(shí)我們關(guān)閉第三個(gè)程序上的串口,打開(kāi)第二個(gè)程序上的串口,發(fā)送數據1,你會(huì )驚奇地發(fā)現,它收到的信息也是亂碼。如下圖。

這到底是怎么回事呢?我們也可以去網(wǎng)上下載其他的串口助手進(jìn)行實(shí)驗,也可以改變波特率進(jìn)行實(shí)驗。由所有的結果得出的結論只能是:我們用那個(gè)結構體作為參數傳過(guò)去后,并沒(méi)有對串口進(jìn)行設置,而程序運行使用的串口設置是系統以前保留的設置。那么,為什么會(huì )這樣呢?我們看下面的一個(gè)問(wèn)題。

問(wèn)題三:更改第三個(gè)程序中的代碼。

myCom ->open(QIODevice::ReadWrite);

放到設置串口的語(yǔ)句之后,

connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));

這句之前,然后再運行程序。你會(huì )發(fā)現程序的串口設置功能已經(jīng)不起作用了?,F在知道原因了吧?!

       其實(shí),上面的三個(gè)問(wèn)題是一個(gè)問(wèn)題,它的結論是,寫(xiě)串口程序時(shí),要先打開(kāi)串口再對它進(jìn)行設置,不然設置就不會(huì )起作用。所以,這里應該說(shuō)明,第一個(gè)和第二個(gè)程序都是不太正確的,正確的方法應該是像第三個(gè)程序一樣,先定義Win_QextSerialPort類(lèi)對象,然后打開(kāi)串口,再用那幾個(gè)設置函數對串口進(jìn)行設置。

       到這里,整篇文章就結束了。對于其中的一些問(wèn)題也只是我個(gè)人的觀(guān)點(diǎn),由于水平有限,所以理解上可能會(huì )有偏差,或者錯誤,還請廣大網(wǎng)友批評指正。我寫(xiě)這篇文章的目的只是想讓Qt初學(xué)者能更輕松的用Qt寫(xiě)出串口通信程序,及掌握Qt寫(xiě)程序時(shí)的一些技巧。如果你從我的文章中學(xué)到了一個(gè)知識點(diǎn),那么我的這篇文章就有它的意義了。

      最后,如果你喜歡我的寫(xiě)作風(fēng)格,并且初學(xué)Qt,可以在我的空間查看Qt Creator系列教程,希望能對你的入門(mén)有所幫助。

到這里可以下載本文的PDF文檔:http://download.csdn.net/source/1763251

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Qt編寫(xiě)串口通信程序全程圖文講解(四)
Linux下基于QT的串口通信程序(Tiny6410)( 轉)
Qt編程之“串口助手”
QT串口助手(五):文件操作
如何使用Python開(kāi)發(fā)串口通訊上位機(二)
利用VC中的通訊控件開(kāi)發(fā)串形通信程序
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久