当前位置: 首页 > news >正文

做北京会所网站哪个好电脑培训学校学费多少

做北京会所网站哪个好,电脑培训学校学费多少,网站用户体验评价方案,如何设计一个完整的网站第十六章 串口通信 16.1 串口通信基础 串口通信主要通过DB9接口#xff0c;适用于短距离#xff08;10米#xff09;。关键参数包括#xff1a; 波特率#xff1a;每秒传输bit数#xff0c;如9600。数据位#xff1a;信息包中的有效数据位数。停止位#xff1a;…第十六章 串口通信 16.1 串口通信基础 串口通信主要通过DB9接口适用于短距离10米。关键参数包括 波特率每秒传输bit数如9600。数据位信息包中的有效数据位数。停止位单个包的最后一位通常为1或2位。奇偶校验位检错方式分偶、奇校验。 16.1.1 QtSerialPort模块简介 QtSerialPort是QT5的附加模块为硬件和虚拟串口提供接口。它简化串口应用开发提供配置、I/O操作等功能。 使用QtSerialPort需包含以下头文件 #include QSerialPortInfo #include QSerialPort 并在.pro文件中添加 QT serialport QSerialPort类用于访问串口 QSerialPortInfo用于获取串口信息。 可通过setPort()或setPortName()设置要访问的串口。 使用open()和close()打开和关闭串口。 串口打开后可使用setBaudRate()等函数重新配置。 waitForReadyRead()和waitForBytesWritten()用于阻塞操作。 16.1.2 QSerialPort 成员函数 构造函数 // 构造一个未初始化的QSerialPort对象可选指定父对象 QSerialPort::QSerialPort(QObject *parent nullptr) // 构造并初始化QSerialPort对象指定端口名和可选的父对象 QSerialPort::QSerialPort(const QString name, QObject *parent nullptr) // 构造并初始化QSerialPort对象根据QSerialPortInfo指定端口信息和可选的父对象 QSerialPort::QSerialPort(const QSerialPortInfo serialPortInfo, QObject *parent nullptr) 关键方法 bool atEnd() const检查是否有数据可读。         qint64 bytesAvailable() const返回可读数据字节数。         qint64 bytesToWrite() const返回可写数据字节数。         void close()关闭串口。         void setPort(const QSerialPortInfo serialPortInfo)设置串口信息。         void setPortName(const QString name)设置串口名。 //波特率改变时触发信号         [signal] void baudRateChanged(qint32 baudRate, //新的波特率                         QSerialPort::Directions directions)          //波特率用于哪方 /*检查是否有数据可读,无数据可读返回true*/ [virtual] bool QSerialPort::atEnd() const;/*波特率改变后信号触发*/ [signal] void QSerialPort::baudRateChanged(qint32 baudRate, //新的波特率QSerialPort::Directions directions) //波特率用于哪方 /* QSerialPort::AllDirections //默认,表示读写方向都应用此波特率 QSerialPort::Input //仅用于输入方向 QSerialPort::Output //仅用于输出方向 *//*返回可读数据的字节数*/ [virtual] qint64 QSerialPort::bytesAvailable() const;/*返回可写数据的字节数*/ [virtual] qint64 QSerialPort::bytesToWrite() const;/*关闭串口*/ [virtual] void QSerialPort::close();/*设置串口端口信息为 serialPortInfo*/ void QSerialPort::setPort(const QSerialPortInfo serialPortInfo);/*设置串口名为name*/ void QSerialPort::setPortName(const QString name); 16.2 QSerialPortInfo 16.2.1 QSerialPortInfo 简介 QSerialPortInfo 类用于提供系统中已有串口设备的信息。可通过其静态成员函数获取代表各串口的 QSerialPortInfo 对象链表。每个对象包含端口的详细信息如端口名、系统位置、描述、制造商等并可用于配置 QSerialPort 对象。 16.2.2 QSerialPortInfo 成员函数 构造函数 QSerialPortInfo(const QSerialPort port); QSerialPortInfo(const QString name); QSerialPortInfo(const QSerialPortInfo other); 静态成员函数 static QListQSerialPortInfo availablePorts(); // 返回可用串口链表 static QListqint32 standardBaudRates(); // 返回标准波特率链表 成员函数 QString description() const; // 返回串口描述 bool hasProductIdentifier() const; // 是否有生产编码 bool hasVendorIdentifier() const; // 是否有制造商编码 bool isBusy() const; // 串口是否正忙 QString manufacturer() const; // 返回制造商名称 QString portName() const; // 返回串口名称 quint16 productIdentifier() const; // 返回生产编码 QString serialNumber() const; // 返回序列号 QString systemLocation() const; // 返回系统位置 quint16 vendorIdentifier() const; // 返回制造商编码 void swap(QSerialPortInfo other); // 交换两个对象 16.3 实现简易串口 打开/关闭串口 当点击“打开串口”按钮时配置串口参数并尝试打开串口。如果成功禁用串口配置ComboBox启用发送按钮并更改按钮文本为“关闭串口”。         同时连接串口的 readyRead信号到 readData槽函数。         当点击“关闭串口”按钮时即串口已打开状态关闭串口重新启用串口配置ComboBox更改按钮文本为“打开串口”并禁用发送按钮。 数据发送与接收 点击发送按钮时将发送文本框中的内容以Latin1编码写入串口。         点击清空接收/发送数据按钮时清空相应的文本框内容。         当串口有数据可读时readData槽函数被调用读取所有可用数据并将其追加到接收文本框中。 #ifndef MAINWINDOW_H // 防止头文件重复包含如果已定义MAINWINDOW_H则不再次包含 #define MAINWINDOW_H // 包含必要的Qt库头文件 #include QMainWindow // 主窗口类 #include QSerialPort // 串口通信类 #include QSerialPortInfo // 串口信息类用于获取系统中可用的串口信息 #include QList // 用于存储串口信息列表 #include QDebug // 用于调试输出 // Ui命名空间包含UI类的声明通常由Qt Designer生成 namespace Ui { class MainWindow; } // MainWindow类继承自QMainWindow class MainWindow : public QMainWindow { Q_OBJECT // 使用Qt的宏允许该类使用信号和槽机制 public: // 构造函数explicit关键字防止隐式转换 explicit MainWindow(QWidget *parent 0); // 析构函数 ~MainWindow(); private slots: // 私有槽函数用于处理UI按钮点击事件 void on_btn_openConsole_clicked(); // 打开控制台按钮点击事件处理 void on_btn_send_clicked(); // 发送按钮点击事件处理 void on_btn_clearRecv_clicked(); // 清空接收区按钮点击事件处理 void on_btn_clearSend_clicked(); // 清空发送区按钮点击事件处理 void readData(); // 读取串口数据 private: // Ui类的指针用于访问UI元素 Ui::MainWindow *ui; // QSerialPort类的指针用于串口通信 QSerialPort *serial; }; #endif // MAINWINDOW_H // 结束头文件保护 #include mainwindow.h #include ui_mainwindow.h // 定义一个静态常量字符串用于表示“不可用”或“无数据”的情况 static const char blankString[] QT_TRANSLATE_NOOP(SettingsDialog, N/A); // MainWindow类的构造函数实现 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), // 调用基类的构造函数 ui(new Ui::MainWindow) { // 初始化UI类的指针 ui-setupUi(this); // 设置UI界面 // 初始化串口类的指针 serial new QSerialPort; // 用于存储串口描述、制造商、序列号等信息的字符串 QString description; QString manufacturer; QString serialNumber; // 获取系统中可用的串口信息列表 QListQSerialPortInfo serialPortInfos QSerialPortInfo::availablePorts(); // 输出当前系统可以使用的串口个数 qDebug() Total numbers of ports: serialPortInfos.count(); // 遍历所有可用的串口信息并将其添加到ComboBox中 for (const QSerialPortInfo serialPortInfo : serialPortInfos) { QStringList list; // 用于存储串口信息的字符串列表 description serialPortInfo.description(); // 获取串口描述 manufacturer serialPortInfo.manufacturer(); // 获取制造商信息 serialNumber serialPortInfo.serialNumber(); // 获取序列号 // 将串口的相关信息添加到列表中如果信息为空则使用blankString代替 list serialPortInfo.portName() (!description.isEmpty() ? description : blankString) (!manufacturer.isEmpty() ? manufacturer : blankString) (!serialNumber.isEmpty() ? serialNumber : blankString) serialPortInfo.systemLocation() (serialPortInfo.vendorIdentifier() ? QString::number(serialPortInfo.vendorIdentifier(), 16) : blankString) (serialPortInfo.productIdentifier() ? QString::number(serialPortInfo.productIdentifier(), 16) : blankString); // 将串口名称作为第一项其余信息作为关联数据添加到ComboBox中 ui-comboBox_serialPort-addItem(list.first(), list); } // 添加一个自定义选项到串口ComboBox中 ui-comboBox_serialPort-addItem(tr(custom)); // 设置波特率的ComboBox选项 ui-comboBox_baudRate-addItem(QStringLiteral(9600), QSerialPort::Baud9600); ui-comboBox_baudRate-addItem(QStringLiteral(19200), QSerialPort::Baud19200); ui-comboBox_baudRate-addItem(QStringLiteral(38400), QSerialPort::Baud38400); ui-comboBox_baudRate-addItem(QStringLiteral(115200), QSerialPort::Baud115200); ui-comboBox_baudRate-addItem(tr(Custom)); // 设置数据位的ComboBox选项 ui-comboBox_dataBits-addItem(QStringLiteral(5), QSerialPort::Data5); ui-comboBox_dataBits-addItem(QStringLiteral(6), QSerialPort::Data6); ui-comboBox_dataBits-addItem(QStringLiteral(7), QSerialPort::Data7); ui-comboBox_dataBits-addItem(QStringLiteral(8), QSerialPort::Data8); ui-comboBox_dataBits-setCurrentIndex(3); // 默认选择8数据位 // 设置奇偶校验位的ComboBox选项 ui-comboBox_parity-addItem(tr(None), QSerialPort::NoParity); ui-comboBox_parity-addItem(tr(Even), QSerialPort::EvenParity); ui-comboBox_parity-addItem(tr(Odd), QSerialPort::OddParity); ui-comboBox_parity-addItem(tr(Mark), QSerialPort::MarkParity); ui-comboBox_parity-addItem(tr(Space), QSerialPort::SpaceParity); // 设置停止位的ComboBox选项 ui-comboBox_stopBit-addItem(QStringLiteral(1), QSerialPort::OneStop); ui-comboBox_stopBit-addItem(QStringLiteral(2), QSerialPort::TwoStop); // 设置流控的ComboBox选项 ui-comboBox_flowBit-addItem(tr(None), QSerialPort::NoFlowControl); ui-comboBox_flowBit-addItem(tr(RTS/CTS), QSerialPort::HardwareControl); ui-comboBox_flowBit-addItem(tr(XON/XOFF), QSerialPort::SoftwareControl); // 初始禁用发送按钮 ui-btn_send-setEnabled(false); } // MainWindow类的析构函数实现 MainWindow::~MainWindow() { delete ui; // 释放UI类的指针所指向的内存 } // 打开串口按钮的槽函数实现 void MainWindow::on_btn_openConsole_clicked() { qDebug() ui-btn_openConsole-text(); // 输出按钮的当前文本 if (ui-btn_openConsole-text() tr(打开串口)) { // 配置串口参数 serial-setPortName(ui-comboBox_serialPort-currentText()); // 设置串口名称 serial-setBaudRate(ui-comboBox_baudRate-currentText().toInt()); // 设置波特率 serial-setDataBits(QSerialPort::Data8); // 设置数据位 serial-setParity(QSerialPort::NoParity); // 设置奇偶校验位 serial-setStopBits(QSerialPort::OneStop); // 设置停止位 serial-setFlowControl(QSerialPort::NoFlowControl); // 设置流控 // 尝试打开串口 if (serial-open(QIODevice::ReadWrite)) { // 禁用串口配置相关的ComboBox ui-comboBox_baudRate-setEnabled(false); ui-comboBox_dataBits-setEnabled(false); ui-comboBox_flowBit-setEnabled(false); ui-comboBox_parity-setEnabled(false); ui-comboBox_serialPort-setEnabled(false); ui-comboBox_stopBit-setEnabled(false); // 启用发送按钮 ui-btn_send-setEnabled(true); // 更改按钮文本 ui-btn_openConsole-setText(tr(关闭串口)); // 连接串口的readyRead信号到readData槽函数 connect(serial, QSerialPort::readyRead, this, MainWindow::readData); } } else { // 关闭串口 serial-close(); // 关闭串口连接 // 重新启用串口配置相关的ComboBox ui-comboBox_baudRate-setEnabled(true); ui-comboBox_dataBits-setEnabled(true); ui-comboBox_flowBit-setEnabled(true); ui-comboBox_parity-setEnabled(true); ui-comboBox_serialPort-setEnabled(true); ui-comboBox_stopBit-setEnabled(true); // 更改按钮文本 ui-btn_openConsole-setText(tr(打开串口)); // 禁用发送按钮 ui-btn_send-setEnabled(false); } } // 发送数据按钮的槽函数实现 void MainWindow::on_btn_send_clicked() { // 将发送文本框中的内容以Latin1编码写入串口 serial-write(ui-textEdit_send-toPlainText().toLatin1()); } // 清空接收数据按钮的槽函数实现 void MainWindow::on_btn_clearRecv_clicked() { ui-textEdit_recv-clear(); // 清空接收文本框的内容 } // 清空发送数据按钮的槽函数实现 void MainWindow::on_btn_clearSend_clicked() { ui-textEdit_send-clear(); // 清空发送文本框的内容 } // 读取串口数据的槽函数实现 void MainWindow::readData() { QByteArray buf; // 定义一个字节数组用于存储读取到的数据 qDebug() readData: endl; // 输出调试信息 buf serial-readAll(); // 从串口读取所有可用数据 if (!buf.isEmpty()) { // 如果读取到的数据不为空 QString str ui-textEdit_recv-toPlainText(); // 获取接收文本框的当前内容 str tr(buf); // 将读取到的数据追加到字符串中注意这里tr的使用可能是不必要的除非需要翻译字节数组的内容 ui-textEdit_recv-clear(); // 清空接收文本框的内容 ui-textEdit_recv-append(str); // 将更新后的字符串添加到接收文本框中 } }
http://www.dnsts.com.cn/news/216396.html

相关文章:

  • 上海建设网站平台wordpress个人保险主题
  • 网站建设开发公司地址网站关键词推广哪家好
  • 做网站需要招什么条件个人做美食视频网站
  • 国内最好的软件网站建设个人网站企业备案区别
  • 营销型官方网站关于网站开发的会议纪要
  • 网站建设差打不开菏泽郓城住房和城乡建设局网站
  • 做摄影网站的公司西安网络关键词排名
  • 大沥南海网站建设品牌营销模式
  • 行业网站建设价格长沙企业网站制作哪家好
  • 北京网站设计外包公司价格禁止wordpress保存修订版
  • 辽宁网站建设it运维需要学什么
  • 如何为一个网站做短连接网站建设公司crm系统
  • 洛南网站建设适合穷人翻身的10个行业
  • 推荐几个好的网站wordpress Suffusion
  • 做网站大概要长沙债务优化公司
  • 搭建钓鱼网站教程湛江人才网招聘信息网
  • 淮南专业网站建设邢台公司做网站多少钱
  • 网站在建设中 英语wordpress 4.9中文
  • 上海有哪些网站设计公司做图解的网站
  • 深圳专业做网站排名多少钱先有域名才可以做网站吗
  • html5 网站天津做系统集成的公司网站
  • 网站的页面风格是什么建筑网站编辑工作内容
  • 成都网站建设类岗位常州设计公司排名
  • 跨境电商网站建设开发响水做网站哪家好
  • 用ps怎么做网站导航条珠海科技网站建设
  • 长沙seo网站邢台高端网站建设价格
  • 帝国cms网站地址犀牛云做网站推广怎么样
  • 做网站对企业的好处手机网站接入微信登录
  • 广东源江建设集团有限公司网站甘肃省两学一做专题网站
  • 网站和网页不同吗wordpress 在线游戏网站