以下代码是自己测试门禁系统使用的

主要用到了串口的接收和发送

 开发环境:xp  QT5.1.1

串口:38400   N  8  1

自动检测可用串口

在xp上测试没问题

有些usb转串口会出现波特率不准的问题,CH340的usb转232使用完全正常

以下为收发的线程.h 和.cpp两个文件

最后附上转sacii显示的代码

如果要参考的话,源代码已上传:http://download.csdn.net/detail/liang890319/6463227

#ifndef MYTHREAD_H
#define MYTHREAD_H#include <QThread>
#include <stdio.h>
#include <QtGlobal>class MyThread : public QThread
{Q_OBJECT
public:QByteArray requestData;QByteArray TxData;MyThread();void setMessage(const QString &message);void setPortnum(const QString &num);void stop();void startCom();void changeTxState(bool stat);void changeRxState(bool stat);void changeComState(bool stat);signals:void request(const QString &s);void comRecive();protected:void run();private:QString messageStr;QString portnum;volatile bool com_opened;volatile bool stopped;volatile bool tx_event;volatile bool rx_event;
};#endif // MYTHREAD_H
#include "mythread.h"
#include <QtDebug>
//FOR RS232
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>MyThread::MyThread()
{stopped=false;}void MyThread::run()
{QSerialPort *my_serialport= new QSerialPort;while(!stopped){if(stopped&&com_opened){my_serialport->close();com_opened=false;}if(!com_opened){//open comqDebug() << "Brush:" <<"---open com port------";com_opened=true;my_serialport->setPortName(portnum);my_serialport->open(QIODevice::ReadWrite);my_serialport->setBaudRate(QSerialPort::Baud38400,QSerialPort::AllDirections);my_serialport->setDataBits(QSerialPort::Data8);my_serialport->setParity(QSerialPort::NoParity);my_serialport->setStopBits(QSerialPort::OneStop);// my_serialport->setStopBits(QSerialPort::TwoStop);my_serialport->setFlowControl(QSerialPort::NoFlowControl);com_opened=true;}if(this->com_opened&&this->tx_event){this->tx_event=false;my_serialport->clear(QSerialPort::AllDirections);qDebug() << "Brush:" <<"send data to com2"<<this->TxData.length();qDebug() << "arr size:" <<this->TxData.length();my_serialport->write(this->TxData);if (my_serialport->waitForBytesWritten(5)){qDebug() << "Brush:" <<"send data success";if (my_serialport->waitForReadyRead(1500))  //1s{requestData = my_serialport->readAll();while (my_serialport->waitForReadyRead(15))requestData += my_serialport->readAll();emit(this->comRecive());}else{qDebug() << "Brush:" <<"wait return time out";}}else{qDebug() << "Brush:" <<"send time out";}}if (my_serialport->waitForReadyRead(5))  //50ms{while (my_serialport->waitForReadyRead(5))this->msleep(20);requestData = my_serialport->readAll();emit(this->comRecive());}if(stopped&&com_opened){my_serialport->close();com_opened=false;}}
}void MyThread::stop()
{stopped=true;}
void MyThread::startCom()
{stopped=false;}
void MyThread::changeComState(bool stat){com_opened=stat;
}
void MyThread::setMessage(const QString &message)
{messageStr = message;}
void MyThread::setPortnum(const QString &num)
{portnum=num;}
void MyThread:: changeTxState(bool stat)
{tx_event=stat;
}
void MyThread:: changeRxState(bool stat)
{rx_event=stat;
}

显示部分 比如收到0xff  在text框显示 FF

void MainWindow::displayRxData()
{QString str;char tmp[100];char *buf;char var;QDateTime *datatime=new QDateTime(QDateTime::currentDateTime());if(threadA.requestData.size()>0){str="收到数据: ";str+=datatime->time().toString();ui->textEdit_rx->append(str);str.clear();buf=threadA.requestData.data();if(buf[3]==0x01) ui->textEdit_tx->append("加卡成功!");if(buf[3]==0x02) ui->textEdit_tx->append("删卡成功!");if(buf[3]==0x03) ui->textEdit_tx->append("开门成功!");if(buf[3]==0x04) ui->textEdit_tx->append("关门成功!");qDebug() << "receive num:" <<threadA.requestData.size();for(var=0;var<threadA.requestData.size();var++){::snprintf(tmp,100, "%02X", (unsigned char)(*buf));buf++;str+=QString::fromUtf8(tmp);str+=" ";}ui->textEdit_rx->append(str);}threadA.requestData.clear();
}

QT5 串口收发实例代码相关推荐

  1. 51单片机串口通信原理、相关寄存器配置与简单串口收发程序代码

    目录 1. 串口通信原理 2. 51单片机串口通信 2.1 串口简要模式图 2.2 相关寄存器 (1)PCON.SCON.SBUF (2)IE.IPH.IP (3)配置T1定时器 2.3 波特率和系统 ...

  2. [CSR]在CSR8675的Source工程实现串口收发实例

    最近在做一个source工程项目,主要是实现将I2S的音频通过蓝牙发射出去,串口作为控制外扩芯片的接口,真是困难重重啊,只想吐槽下ADK的功能强大,但是难用的特色(个人观点). 因为CSR在sourc ...

  3. QT5实现串口收发数据(上位机与下位机通信)

    最近帮老师做一个应用程序,通过上位机与下位机进行串口通信,最后实现实时绘图,通过几天努力,成功实现蓝牙串口通信. 参考博客1 注意:代码中一些与串口无关代码,可以忽略掉 一.QT5串口基础知识 1. ...

  4. QT5系列教程二---基于qcustomplot的QT5 GUI串口收发绘图软件实现

    QT5系列教程二---基于qcustomplot的QT5 GUI串口收发绘图软件实现 结构 UI部分 代码部分 step1:实现串口数据接受 串口接受数据格式 在`.pro`文件中添加`serialp ...

  5. stc12串口收发计算机,半双工串口通信实例36:STC12单片机和STC12单片机串口通信...

    半双工串口通信实例36:STC12单片机和STC12单片机串口通信 一.串口通信实例目的: STC12单片机主站数字量输入DI01~DI08控制STC12单片机从站数字量输出DO01~DO08: ST ...

  6. 【教程】nrf51822实例代码解析及修改实例

    [教程]nrf51822实例代码解析及修改实例 http://www.eeboard.com/bbs/thread-42757-1-1.html 说在前面:此说明用于nrf51822的主从机的实例代码 ...

  7. STM32兴趣篇四:STM32F103C8T6工控板与LabVIEW的串口通讯实例

    串口通信(Serial Communications)是指外设与计算机间,通过数据线按位进行传输数据的一种通讯方式.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根 ...

  8. MTK:串口学习和代码调试

    MTK之UART串口收发数据 (必看) https://blog.csdn.net/ivy_reny/article/details/51192110 MTK串口调试方法|MTK串口工具 MTK串口调 ...

  9. Win10下VB6.0开发之串口通信基础(二)代码功能篇

    MSComm控件串口通信开发 1. MSComm控件的处理流程   MSComm在适当时候引发控件的处理流程主要分为两步: 1)通过事件驱动处理连接端口通信   在收发一个字符或者生一个事件时,不管是 ...

最新文章

  1. python matplotlib散点图-python的matplotlib散点图
  2. 019_Vue子组件向父组件传值
  3. python 队列 一次取多个_Queue 队列模块-Python成为专业人士笔记
  4. QNX6.5编译libcurl
  5. Sublime Text快捷键去除空白行
  6. oracle查询题目2道
  7. Python 字符串(二)
  8. 【4】Kafka集群启动/关闭脚本
  9. 多个线程交替打印ABC,打印10次
  10. VS2013 VC2013 VC 远程调试 配置步骤
  11. 维基百科放弃php,部署维基百科后页面出现的错误
  12. 十六、响应式布局--媒体查询
  13. Word2010如何从正文开始设置页码
  14. 载硫酸庆大霉素PLGA纳米粒PNPs(GS修饰PLGA纳米粒)/cRGD修饰PLGA纳米粒的制备方法
  15. 图像处理基础知识——图片存储形式、色域、图片文件格式
  16. 迅捷路由器设置连接服务器无响应,迅捷(fast)路由器连不上网怎么办? | 192路由网...
  17. iOS视频编辑SDK
  18. 摩托罗拉Android系统,摩托罗拉Droid官方Android 2.2系统详细功能展示
  19. 【职场攻略】送礼给老板有讲究
  20. 《C语言程序设计》江宝钏主编-习题3-7-交换变量

热门文章

  1. linux行位换行符,换行符或标点符号作为elasticsearch中的位置间隔
  2. linux进程状态d状态,linux – 进程永久停留在D状态
  3. MySQL对于有大量重复数据表的处理方法
  4. 框架页面中,从子页面刷新父页面问题解决
  5. Bash-Shell-02
  6. Hadoop联姻Excel: 微软巩固Office帝国
  7. Android 开发者的 RxJava 详解(一)
  8. 部分 I. 教程_第 2 章 SQL语言_2.2. 概念
  9. linux命令:watch 、lsmod、mdadm 创建软RAID
  10. SaltStack实战之远程执行-Modules