在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術(shù)嵌入式Linux主板Qt串口應(yīng)用程序簡介

英創(chuàng)信息技術(shù) ? 來源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2020-01-17 09:41 ? 次閱讀

串口和其他設(shè)備一樣,在Linux系統(tǒng)中都是以設(shè)備文件的形式存在的,在英創(chuàng)公司提供的Linux主板配套光盤中,已經(jīng)提供了基于C/C++ 的Linux標(biāo)準(zhǔn)串口操作例程,使用open函數(shù)來打開串口設(shè)備文件:'/dev/ttyS1',設(shè)置串口參數(shù),創(chuàng)建一個(gè)單獨(dú)的線程來對數(shù)據(jù)進(jìn)行收發(fā),使用read函數(shù)讀取數(shù)據(jù),write函數(shù)發(fā)送數(shù)據(jù)。并且英創(chuàng)公司將其封裝成一個(gè)serial類,可以使用serial類方便的操作英創(chuàng)工控主板的串口資源。

本文介紹如何在英創(chuàng)公司提供的Linux工控主板的串口例程Step2_serialtest的基礎(chǔ)上,加入了Qt顯示,實(shí)現(xiàn)在LCD顯示屏上控制串口通訊。基本的思想是利用Qt的信號和插槽機(jī)制進(jìn)行對象間的通訊,當(dāng)串口接收的數(shù)據(jù)的時(shí)候,發(fā)出Signal,Qt 的顯示事件循環(huán)中接收到這個(gè)信號,調(diào)用定義好的Slot顯示串口的數(shù)據(jù),如下圖:

串口和Qt顯示

先使用Qt Creator創(chuàng)建一個(gè)工程,加入英創(chuàng)公司提供的Linux工控主板串口例程中的serial.h和serial.cpp文件,因?yàn)橐赟tep2_serialtest例程的基礎(chǔ)上加入Qt顯示單元,所以我們需要讓英創(chuàng)公司封裝好的serial類繼承QObject類的屬性,使QObject成為serial類的基類,然后在serial類中加入一個(gè)signal,讓serial類和Qt顯示通過信號和插槽的機(jī)制連接。但是對于串口的操作部分并不用做修改。

QObject類是所有Qt對象的基類并且是Qt對象模型的中心。這個(gè)模型的中心特征就是一種用于無縫對象通訊的被叫做信號和槽的非常強(qiáng)大的機(jī)制。只有繼承了 QObject 類的類,才具有信號和槽的能力。所以,為了使用信號和槽,必須繼承 QObject。凡是 QObject 類(不管是直接子類還是間接子類),都應(yīng)該在第一行代碼寫上 Q_OBJECT。不管是不是使用信號和槽,都應(yīng)該添加這個(gè)宏。這個(gè)宏的展開將為我們的類提供信號和槽機(jī)制、國際化機(jī)制以及 Qt 提供的不基于 C++ RTTI 的反射能力。所以在serial.h中作如下修改:

class CSerial: public QObject //繼承QObject
{
Q_OBJECT
signals:
void readyRead(QString);
};

在serial.cpp中,串口數(shù)據(jù)接收線程檢測到有數(shù)據(jù)可讀時(shí),添加發(fā)送信號的語句,提示顯示對象有數(shù)據(jù)可以顯示,并把數(shù)據(jù)發(fā)送給顯示對象:

emit pSer->readyRead(pSer->DatBuf);

對串口程序的修改已經(jīng)完成,在工程中加入Qt設(shè)計(jì)師界面,根據(jù)需要設(shè)計(jì)顯示界面,本例程中的界面如下:

設(shè)計(jì)的界面

可以看到,在界面中添加了三個(gè)按鈕,分別為“打開串口”,“關(guān)閉串口”和“清除數(shù)據(jù)”,兩個(gè)組合框,用來選擇串口的端口號和比特率,一個(gè)文本瀏覽器用來顯示串口接收的數(shù)據(jù)。在工程中加入窗口顯示程序:widget.h和 widget.cpp,首先要對顯示界面進(jìn)行初始化,實(shí)現(xiàn)代碼如下:

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this); //顯示界面的初始化
setActionsEnabled(true); //使能組件
setComboBoxEnabled(true);
}

定義接收串口發(fā)送信號的插槽,在窗口的文本瀏覽器中顯示串口接收的數(shù)據(jù):

void Widget::readMyCom(QString buf)
{
//將串口的數(shù)據(jù)顯示在窗口的文本瀏覽器中
ui->textBrowser->setText(ui->textBrowser->document()->toPlainText() + buf);
QTextCursor cursor = ui->textBrowser->textCursor();
cursor.movePosition(QTextCursor::End);
ui->textBrowser->setTextCursor(cursor);
}

將串口發(fā)送的Signal和顯示窗口類中Slot連接起來,以便響應(yīng):

QObject::connect(myCom,SIGNAL(readyRead(QString)),this,SLOT(readMyCom(QString)),Qt::QueuedConnection);

這里需要特別說明一點(diǎn),由于串口例程會(huì)打開一個(gè)線程對數(shù)據(jù)進(jìn)行處理,所以這里發(fā)送Signal的是串口處理數(shù)據(jù)的線程,而接收Signal是在顯示的線程中,所以他們的連接方式需要采用Qt::QueuedConnection,這樣使用跨線程的Signal和Slot連接,Signal發(fā)送以后,會(huì)等到控制權(quán)返回到接收者線程的事件循環(huán)后才調(diào)用槽,就是說槽在接收者的線程中被執(zhí)行,如果采用其他方式連接,顯示可能就會(huì)出現(xiàn)各種錯(cuò)誤。

如果在顯示界面中添加了一些其他功能組件,比如按鈕等,可以在這里編寫組件的事件響應(yīng)函數(shù),實(shí)現(xiàn)想要的功能,在本例程中,添加了一些組合框和按鈕,用來選擇串口的端口號和波特率,并且打開或者關(guān)閉串口,部分實(shí)現(xiàn)代碼如下:

void Widget::on_openpushButton_clicked() //打開按鈕
{
qint8 i;
portno=ui->portNamecomboBox->currentText(); //讀取端口號
ba = portno.toLatin1();
m_portno=ba.data(); //轉(zhuǎn)換為字符串
ba.clear();
baudRate=ui->baudRatecomboBox->currentText(); //讀取波特率
m_baudRate=baudRate.toInt(); //轉(zhuǎn)換為整形
myCom=new CSerial;
i=myCom ->OpenPort( m_portno, m_baudRate, '8', '1', 'N' ); //打開串口
if(i<0)
{
QMessageBox::information(this, tr('打開失敗'), tr('打開串口失敗') , QMessageBox::Ok); //打開失敗彈出提示框
delete myCom;
myCom = NULL;
return;
}

void Widget::on_closeopenpushButton_clicked() //關(guān)閉按鈕
{
myCom->ClosePort(); //關(guān)閉串口
delete myCom;
myCom = NULL;
setComboBoxEnabled(true);
ui->closeopenpushButton->setEnabled(false);
}

最后在工程中添加main.cpp,在main函數(shù)中,主要是對字體進(jìn)行設(shè)置,并且顯示我們設(shè)計(jì)的窗口:

int main( int argc,char* argv[] )
{
QApplication a(argc, argv);
QFont font('simsun',11,QFont::Bold); //設(shè)置字體
a.setFont(font);
QTextCodec::setCodecForTr(QTextCodec::codecForName('utf8'));
Widget w;
w.showFullScreen(); //顯示窗口
return a.exec();
}

運(yùn)行程序,例程的效果如下:

程序運(yùn)行效果

可以通過顯示界面選擇開啟哪一路串口,設(shè)置波特率,顯示接收到的數(shù)據(jù)。本例程只是簡單的把Step2_serialtest和Qt的顯示連接起來,將串口收到的數(shù)據(jù)顯示在Qt的界面中,并且進(jìn)行回發(fā),客戶的使用方法還是和以前的Step2_serialtest一樣只是增加了顯示界面。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11469

    瀏覽量

    212923
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6097

    瀏覽量

    36177
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式主板詳解與選購指南

    什么是嵌入式主板?嵌入式主板是專為嵌入式系統(tǒng)設(shè)計(jì)的核心計(jì)算平臺(tái)。它與我們?nèi)粘J褂玫呐_(tái)式機(jī)或筆記本電腦主板
    的頭像 發(fā)表于 06-06 13:23 ?89次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>詳解與選購指南

    高可靠性嵌入式主板設(shè)計(jì)

    設(shè)計(jì)直接影響整個(gè)系統(tǒng)的穩(wěn)定性和壽命。因此,設(shè)計(jì)高可靠性的嵌入式主板不僅是技術(shù)挑戰(zhàn),也是提高產(chǎn)品競爭力的關(guān)鍵因素。本文將深入探討高可靠性嵌入式主板
    的頭像 發(fā)表于 03-25 15:11 ?423次閱讀
    高可靠性<b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>設(shè)計(jì)

    嵌入式主板選型與應(yīng)用指南

    嵌入式主板是專為嵌入式系統(tǒng)設(shè)計(jì)的核心硬件平臺(tái),廣泛應(yīng)用于工業(yè)控制、物聯(lián)網(wǎng)、醫(yī)療設(shè)備等領(lǐng)域。以下是關(guān)于嵌入式主板的詳細(xì)介紹:1.
    的頭像 發(fā)表于 02-27 14:53 ?423次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>選型與應(yīng)用指南

    小身材大能量:解讀小尺寸嵌入式主板

    此前,已經(jīng)帶大家認(rèn)識了嵌入式主板的尺寸版型,相信大家對此已有了初步印象。在科技日新月異的當(dāng)下,各類設(shè)備都朝著更小體積、更高性能的方向發(fā)展。小尺寸嵌入式主板正悄無聲息改變著我們的生活與商
    的頭像 發(fā)表于 02-17 18:02 ?531次閱讀
    小身材大能量:解讀小尺寸<b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>

    盤點(diǎn)無風(fēng)扇嵌入式主板應(yīng)用優(yōu)勢

    在科技飛速發(fā)展的今天,嵌入式主板在各個(gè)領(lǐng)域發(fā)揮著重要作用。而無風(fēng)扇嵌入式主板以獨(dú)特優(yōu)勢在工業(yè)自動(dòng)化、醫(yī)療設(shè)備和智能交通等領(lǐng)域廣泛應(yīng)用。今天,就讓我們一起深入了解無風(fēng)扇
    的頭像 發(fā)表于 02-15 18:04 ?328次閱讀
    盤點(diǎn)無風(fēng)扇<b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>應(yīng)用優(yōu)勢

    嵌入式主板的概述與發(fā)展

    隨著科技的迅猛發(fā)展,嵌入式系統(tǒng)在現(xiàn)代電子產(chǎn)品中扮演著越來越重要的角色。嵌入式主板作為嵌入式系統(tǒng)的核心組件之一,承擔(dān)著控制、處理和通訊等多種功能。本文將對
    的頭像 發(fā)表于 01-13 16:30 ?710次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>的概述與發(fā)展

    基于QT開發(fā)國產(chǎn)主板終端桌面程序 高效、穩(wěn)定、跨平臺(tái)的解決方案

    了開發(fā)者們面臨的一個(gè)重要挑戰(zhàn)。本文將介紹如何基于QT框架,開發(fā)適用于國產(chǎn)主板的終端桌面程序,并探討其優(yōu)勢和應(yīng)用場景。 QT是一個(gè)跨平臺(tái)的C++圖形用戶界面
    的頭像 發(fā)表于 01-08 15:34 ?738次閱讀

    ARM架構(gòu)嵌入式主板特點(diǎn)

    嵌入式主板可以理解為嵌入在設(shè)備中用于控制和數(shù)據(jù)處理的CPU板,也就是設(shè)備的“大腦”。當(dāng)主板嵌入到設(shè)備中,當(dāng)然對
    的頭像 發(fā)表于 12-31 16:03 ?921次閱讀
    ARM架構(gòu)<b class='flag-5'>嵌入式</b><b class='flag-5'>主板</b>特點(diǎn)

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被稱為嵌入式系統(tǒng)的核心組件,是一種用于控制和數(shù)據(jù)處理的計(jì)算機(jī)硬件,其設(shè)計(jì)旨在嵌入特定設(shè)備中執(zhí)行專門任務(wù)。嵌入式
    的頭像 發(fā)表于 09-30 10:05 ?1530次閱讀

    嵌入式linux開發(fā)的基本步驟有哪些?

    嵌入式Linux開發(fā)是一個(gè)復(fù)雜的過程,涉及到硬件選擇、操作系統(tǒng)移植、驅(qū)動(dòng)開發(fā)、應(yīng)用程序開發(fā)等多個(gè)方面。以下是嵌入式Linux開發(fā)的基本步驟,
    的頭像 發(fā)表于 09-02 09:11 ?1128次閱讀

    嵌入式linux開發(fā)板芯片的工作原理

    嵌入式Linux開發(fā)板是一種基于Linux操作系統(tǒng)的嵌入式系統(tǒng)開發(fā)平臺(tái),它廣泛應(yīng)用于工業(yè)控制、智能家居、智能交通、醫(yī)療設(shè)備等領(lǐng)域。 嵌入式
    的頭像 發(fā)表于 09-02 09:07 ?742次閱讀

    C28x嵌入式應(yīng)用程序二進(jìn)制接口

    電子發(fā)燒友網(wǎng)站提供《C28x嵌入式應(yīng)用程序二進(jìn)制接口.pdf》資料免費(fèi)下載
    發(fā)表于 08-31 09:39 ?0次下載
    C28x<b class='flag-5'>嵌入式</b><b class='flag-5'>應(yīng)用程序</b>二進(jìn)制接口

    MSP430嵌入式應(yīng)用程序二進(jìn)制接口

    電子發(fā)燒友網(wǎng)站提供《MSP430嵌入式應(yīng)用程序二進(jìn)制接口.pdf》資料免費(fèi)下載
    發(fā)表于 08-30 11:43 ?0次下載
    MSP430<b class='flag-5'>嵌入式</b><b class='flag-5'>應(yīng)用程序</b>二進(jìn)制接口

    C6000嵌入式應(yīng)用程序二進(jìn)制接口

    電子發(fā)燒友網(wǎng)站提供《C6000嵌入式應(yīng)用程序二進(jìn)制接口.pdf》資料免費(fèi)下載
    發(fā)表于 08-29 14:52 ?0次下載
    C6000<b class='flag-5'>嵌入式</b><b class='flag-5'>應(yīng)用程序</b>二進(jìn)制接口

    嵌入式QT常見開發(fā)方式有哪些?

    ,嵌入式工程師可以使用同一套代碼庫開發(fā)適用于不同嵌入式操作系統(tǒng)(如Linux、RTOS)的應(yīng)用程序,只需針對目標(biāo)平臺(tái)調(diào)整編譯選項(xiàng)和配置即可。 6.
    發(fā)表于 08-12 10:05
    主站蜘蛛池模板: 欧美日本一区 | 色爱区综合激月婷婷激情五月 | 国产精品怡红院永久免费 | 天天看天天爽 | 黄页网址免费观看18网站 | 免费特黄一区二区三区视频一 | 欧美色图俺去了 | 成人特黄午夜性a一级毛片 成人网18免费下 | 美女屁屁免费视频网站 | 男女午夜特黄毛片免费 | 天天干天天操天天爱 | 在线免费看片 | 三级毛片在线免费观看 | 国产欧美精品一区二区色综合 | 四虎影院在线网址 | 亚洲精品一线二线三线 | 欧美婷婷综合 | 国产成人精品曰本亚洲 | 欧美亚洲在线 | 影院成人区精品一区二区婷婷丽春院影视 | kkkbo色综合| 国产成人精品本亚洲 | 亚洲ay| 午夜影院三级 | 国产一区中文字幕 | 三级网在线 | 成人伊人青草久久综合网 | 三级www| 国模精品一区二区 | 美女张开腿露出尿口让男人桶 | 91夜夜人人揉人人捏人人添 | 黄网站色视频免费看无下截 | 国产精品1区2区3区在线播放 | 大美女久久久久久j久久 | 福利99| 日本免费网站在线观看 | 三级视频中文字幕 | 久久婷婷综合中文字幕 | 成年大片免费播放视频人 | 亚洲一卡2卡3卡4卡5卡乱码 | 黄色视屏日本 |