QT上位机的学习

news2024/11/24 4:00:30

 后面又该找工作了,这块的内容也需要好好学习!

QT 篇 QT上位机串口编程-CSDN博客

(1)可以通过安装虚拟串口来模拟串口通信的情况

发现我之前安装过(9.0):

可以生成虚拟串口,无需实际硬件串口就可以实现同一台电脑上串口模拟通信。

(但好像用不了,还是用人家的吧)(7.2)

如何进行虚拟串口测试呢?

串口模拟工具实现测试-CSDN博客

安装了这个软件:

好像是可以了,但我不是很理解。

什么是串口通信呢?

波特率是什么?

数据位,校验位,停止位。

串口通信详解-CSDN博客

串行通信: 

同一时刻,只能传输一个bit位的信号,只需要一根信号线。

异步串行通信:发送方和接收方,使用各自的时钟控制数据发送和数据接收。

(为使双方收发协调,要求双方时钟尽可能一致)

串口通信通常是:异步串行通信总线(两条数据线)(全双工)

串口发送一串数据不是连续发送,而是一个字节一个字节发送的。

这是为了防止接收和发送的累计误差。

编程:

QT       +=serialport

#include <QSerialPort> //访问串口的库

#include <QSerialPortInfo> //查询串口信息的库

 QSerialPort *serialport;
 serialport = new QSerialPort(this);
    QList<QSerialPortInfo> ports=QSerialPortInfo::availablePorts();
    for(int i=0;i<ports.count();i++)
    {
        QSerialPortInfo info=ports.at(i);
        qDebug()<<"串口"<<i+1<<":"<<info.portName();
    }

设置串口名称 

serialport->setPortName(name);
if (!serialport->open(QIODevice::ReadWrite))
   {
		qDebug()<<"错误,串口无法打开,可能被占用!";
		QMessageBox::about(this,"错误","串口无法打开,可能被占用!");
		serialport->close();
		return ;
   }

设置波特率(通常是115200) 

 serialport->setBaudRate(baudRate);

设置停止位(高电平)

serialport->setStopBits(QSerialPort::OneStop);
serialport->setStopBits(QSerialPort::TwoStop);

Unknown number of stop bits. This value is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.

未知的停止位数。该值被淘汰了。它被提供来维持旧代码工作。强烈建议新代码中别用它了。

设置数据位 

serialport->setDataBits(QSerialPort::Data5);

设置奇偶位(校验位)

serialport->setParity(QSerialPort::NoParity);
serialport->setParity(QSerialPort::OddParity);
serialport->setParity(QSerialPort::EvenParity); 

数据流量控制(不控制)

serialport->setFlowControl(QSerialPort::NoFlowControl) ;

硬件控制,软件控制 

接收数据

    connect(serialport,SIGNAL(readyRead()),this,
                              SLOT(serialPortReadyRead()));
                              
void MainWindow::serialPortReadyRead()
{
    QByteArray temp = serialport->readAll();  
}
    

发送数据

QByteArray buff;
//写入数据
serialport->write(buff);

示例:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSerialPort>			//访问串口的库
#include <QSerialPortInfo>		//查询串口信息的库
#include <QDebug>				//用于调试打印输出的库
namespace Ui {
class widget;
}

class widget : public QWidget
{
    Q_OBJECT

public:
    explicit widget(QWidget *parent = 0);
    ~widget();
public slots:
    void serialPortReadyRead();
private slots:
    void on_pushButton_clicked();

private:
    Ui::widget *ui;
    QSerialPort *serialport;
};

#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
widget::widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::widget)
{
    ui->setupUi(this);
    serialport = new QSerialPort(this);
    connect(serialport,SIGNAL(readyRead()),this,
                              SLOT(serialPortReadyRead()));
    QList<QSerialPortInfo> ports=QSerialPortInfo::availablePorts();
    for(int i=0;i<ports.count();i++)
    {
        QSerialPortInfo info=ports.at(i);
        qDebug()<<"串口"<<i+1<<":"<<info.portName();
    }
    QString name="COM2";
    serialport->setPortName(name);
    if (!serialport->open(QIODevice::ReadWrite))
    {
            qDebug()<<"错误,串口无法打开,可能被占用!";
            QMessageBox::about(this,"错误","串口无法打开,可能被占用!");
            serialport->close();
            return ;
    }
    int baudRate=115200;
    serialport->setBaudRate(baudRate);
    serialport->setStopBits(QSerialPort::OneStop);
    serialport->setDataBits(QSerialPort::Data8);
    serialport->setParity(QSerialPort::NoParity);
    serialport->setFlowControl(QSerialPort::NoFlowControl);
}

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

void widget::serialPortReadyRead()
{
    QByteArray temp = serialport->readAll();
    qDebug()<<"recv:"<<temp;
}

void widget::on_pushButton_clicked()
{
    QByteArray buff=(ui->lineEdit->text().toLocal8Bit());
    //写入数据
    serialport->write(buff);
}

效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1640292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言的完结】:最后的测试题

看到这句话的时候证明&#xff1a; 此刻你我都在努力~ 个人主页&#xff1a; Gu Gu Study ​​ 专栏&#xff1a;语言的起点-----C语言 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹…

手撸Mybatis(三)——收敛SQL操作到SqlSession

本专栏的源码&#xff1a;https://gitee.com/dhi-chen-xiaoyang/yang-mybatis。 引言 在上一章中&#xff0c;我们实现了读取mapper配置并构造相关的mapper代理对象&#xff0c;读取mapper.xml文件中的sql信息等操作&#xff0c;现在&#xff0c;在上一章的基础上&#xff0c…

利用大语言模型(KIMI)构建控制信息模型

数字化的核心是数字化建模&#xff0c;为一个事物构建数字模型是一项十分复杂的工作。不同的应用场景&#xff0c;对事物的关注重点的不同的。例如&#xff0c;对于一个智能传感器而言&#xff0c;从商业的角度看&#xff0c;产品的信息模型中应该包括产品的类型&#xff0c;名…

IDEA 申请学生许可证

如果你有学生账号&#xff0c;并且账号是 EDU 结尾的&#xff0c;可以申请 IDEA 的学生许可证。 有效期一年&#xff0c;完全免费。 在界面上输入邮件地址&#xff0c;然后单击按钮提交。 邮件中单击链接 JetBrains 会把一个带有链接的邮件发送到你的邮箱中。 单击邮箱中的…

【Python文字识别】基于HyperLPR3实现车牌检测和识别(Python版本快速部署)

闲来无事&#xff0c;想复现一下网上的基于YOLO v5的单目测距算法。然后就突然想在这个场景下搞一下车牌识别&#xff0c;于是就有了这篇文章。今天就给大家分享基于HyperLPR3实现车牌检测和识别。 原创作者&#xff1a;RS迷途小书童 博客地址&#xff1a;https://blog.csdn.ne…

Qt 信号槽中信号重名解决办法

1、类似与Qt4中的写法&#xff1a; 2、函数指针 3、泛型 connect(ui->combox, QOverload<int>::of(&QCombox::currentIndexChanged), this ,&mainwindow::onindexchange);

【数学 排列组合】1643. 第 K 条最小指令

本文涉及知识点 数学 排列组合 LeetCode1643. 第 K 条最小指令 Bob 站在单元格 (0, 0) &#xff0c;想要前往目的地 destination &#xff1a;(row, column) 。他只能向 右 或向 下 走。你可以为 Bob 提供导航 指令 来帮助他到达目的地 destination 。 指令 用字符串表示&am…

每日一题-贪心算法

目录 前言 买入股票的最佳时机(1) 买入股票的最好时机(2) 前言 当你踏上贪心算法的旅程&#xff0c;仿佛置身于一场智慧的盛宴&#xff0c;每一步都是对问题解决方案的审慎选择&#xff0c;每一次决策都是对最优解的向往。贪心算法以其简洁高效的特性&#xff0c;被广泛运用于…

SSM+Vue在线OA办公系统

在线办公分三个用户登录&#xff0c;管理员&#xff0c;经理&#xff0c;员工。 SSM架构&#xff0c;maven管理工具&#xff0c;数据库Mysql&#xff0c;系统有文档&#xff0c;可有偿安装调试及讲解&#xff0c;项目保证质量。需要划到 最底 下可以联系到我。 功能如下&am…

Java 获取 Outlook 邮箱的日历事件

Java 获取 Outlook 邮箱的日历事件 1.需求描述2.实现方案3.运行结果 IDE&#xff1a;IntelliJ IDEA 2022.3.3 JDK&#xff1a;1.8.0_351 Outlook&#xff1a;Microsoft Office 2016 1.需求描述 比如现在需要获取 Outlook 邮箱中四月的全部的会议安排&#xff0c;如下图所示 …

指标完成情况对比查询sql

指标完成情况对比查询sql 1. 需求 2. SQL select--部门dept.name as bm,--年度指标任务-新签&#xff08;万元&#xff09;ndzbwh.nxqndzbrw as nxqndzbrw,--年度指标任务-收入&#xff08;万元&#xff09;ndzbwh.nsrndzbrw as nsrndzbrw,--年度指标任务-回款&#xff08;万…

软件工程毕业设计选题100例

文章目录 0 简介1 如何选题2 最新软件工程毕设选题3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题&#xff0c;难度适中&#xff0c;适合作为毕业设计&#xff0c;大家参考。 学长整理的题目标准&#xff1a; 相对容易工作量达标题目新颖 1 如何选题 最近非常多的…

dnf游戏攻略:保姆级游戏攻略!

欢迎来到DNF&#xff0c;一个扣人心弦的2D横版格斗游戏世界&#xff01;无论你是新手还是老玩家&#xff0c;这篇攻略都将为你提供宝贵的游戏技巧和策略&#xff0c;助你在游戏中大展身手&#xff0c;成为一名强大的冒险者。 一、角色选择 在DNF中&#xff0c;角色的选择至关重…

Python的使用

1、打印&#xff1a;print&#xff08;‘hello’&#xff09; 2、Python的除法是数学意义上的除法 print&#xff08;2/3&#xff09; 输出&#xff1a;0.6666... 3、a18 a‘hello’ print(a) 可以直接输出 4、**2 表示2的平方 5、打印类型 print&#xff08;type&am…

安卓四大组件之Activity

目录 一、简介二、生命周期三、启动模式3.1 Standard3.2 Single Task3.3 SingleTop3.4 Single Instance3.5 启动模式的配置 四、Activity 的跳转和数据传递4.1 Activity 的跳转4.1.1 直接跳转4.1.2 回调 4.2 Activity 的数据传递4.2.1 传递普通数据4.2.2 传递一组数据4.2.3 传递…

【LinuxC语言】系统日志

文章目录 前言一、系统日志的介绍二、向系统日志写入日志信息三、示例代码总结 前言 在Linux系统中&#xff0c;系统日志对于监控和排查系统问题至关重要。它记录了系统的运行状态、各种事件和错误信息&#xff0c;帮助系统管理员和开发人员追踪问题、进行故障排除以及优化系统…

分割链表----一道题目的3种不同的解法

1.题目概述 以这个题目的事例作为例子&#xff0c;我们看一下这个题目到底是什么意思&#xff08;Leedcode好多小伙伴说看不懂题目是什么意思&#xff09;&#xff0c;就是比如一个x3&#xff0c;经过我们的程序执行之后&#xff1b;大于3的在这个链表的后面&#xff0c;小于3的…

Linux使用操作(二)

进程的管理_ps 程序运行在计算机操作系统中&#xff0c;由操作系统进行管理。为了管理正在运行的程序&#xff0c;每个程序在运行时都被注册到操作系统中&#xff0c;形成进程 每个进程都有一个独特的进程ID&#xff08;进程号&#xff09;&#xff0c;用来区别不同的进程。进…

C++初阶-----对运算符重载的进一步理解(2)

目录 1.对于加加&#xff0c;减减运算符的重载理解 2.const修饰的一些事情 3.日期对象之间的减法实现逻辑 1.对于加加&#xff0c;减减运算符的重载理解 &#xff08;1&#xff09;在C语言里面&#xff0c;我们已经知道并且了解加加&#xff0c;减减的一些基本的用法&#…