QT5 串口收发实例代码
以下代码是自己测试门禁系统使用的
主要用到了串口的接收和发送
开发环境: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 com
qDebug() << "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 串口收发实例代码的更多相关文章
- STM32F103C8T6-CubeMx串口收发程序详细设计与测试(1)——CubeMx生成初始代码
STM32F103C8T6-CubeMx串口收发程序详细设计与测试(1)--CubeMx生成初始代码 关键词:STM32F103C8T6 CubeMX UART 详细程序设计 1.开发环境 (1)ST ...
- Android单片机与蓝牙模块通信实例代码
Android单片机与蓝牙模块通信实例代码 参考路径:http://www.jb51.net/article/83349.htm 啦啦毕业了,毕业前要写毕业设计,需要写一个简单的蓝牙APP进行交互,通 ...
- [ZigBee] 8、ZigBee之UART剖析·二(串口收发)
前言:上一节讲UART基本知识介绍完了,并深入剖析了一个串口发送工程,本节将进一步介绍串口收发! 1.初始化 在串口初始化部分,和上一节不同的地方是: 51 U0CSR |= 0x40; //允许接收 ...
- VS2015 +Qt5 串口工具
简单的小工具是VS2015 + Qt5.6.1实现的,界面部分是Qt实现,串口是封装的WinAPI,把串口收发模块封装成了个Serialport.dll 供Qt界面调用. 由于VS2015需要CRT运 ...
- Linux 虚拟串口及 Qt 串口通信实例
Linux 虚拟串口及 Qt 串口通信实例 2011-06-22 17:49 佚名 互联网 字号:T | T Linux 虚拟串口及 Qt 串口通信实例是本文所要介绍的内容,在实现过程中,打开了两个伪 ...
- stm32串口收发导致的死机
stm32串口收发导致的死机 很久以前有偶尔遇到过串口死机的情况,那是当时的我写出来的代码自己都觉得有问题,也就没注意.用了stm32做项目以后也就没遇到过了,今天做了个高压测试,每5ms定时发送一次 ...
- C++11 变长模版和完美转发实例代码
C++11 变长模版和完美转发实例代码 #include <memory>#include <iostream>#include <vector>#include ...
- PHP读取超大文件的实例代码
数据量大带来的问题就是单个文件很大,能够打开这个文件相当不容易,记事本就不要指望了,果断死机 去年年底的各种网站帐号信息的数据库泄漏,很是给力啊,趁机也下载了几个数据库,准备学学数据分析家来分析一 ...
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...
随机推荐
- 【转】【玩转cocos2d-x之二十三】多线程和同步03-图片异步加载
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/15334159 cocos2d-x中和Android,Windows都 一样, ...
- 关于Android Studio升级到2.0后和Gradle插件不兼容的问题
今天升级AS到2.0后,用AS在真机上调试,发现报了如下错误: This version of Android Studio is incompatible with the Gradle Plugi ...
- w3c盒子模型与ie盒子模型
盒子模型是css的专有名词,用来描述页面设置中的各种属性,如内容(content).填充(padding).边框(border).边界(margin),由于这些属性拼在一起,与日常生活中的“盒子”很相 ...
- 搞明白这八个问题,Linux系统就好学多了。
正在犹豫入坑Linux学习的同学或者已经入坑的同学,经常会问到这样八个问题.今天,这些问题我都会一一解答,希望我的看法能帮助各位同学.常言道“好的开始是成功的一半”,如果你明白了以下八个问题,就能有一 ...
- RESTLET开发实例(一)基于JAX-RS的REST服务
RESTLET介绍 Restlet项目为“建立REST概念与Java类之间的映射”提供了一个轻量级而全面的框架.它可用于实现任何种类的REST式系统,而不仅仅是REST式Web服务. Restlet项 ...
- HDU5045-Contest(状压dp)
题意: 有n个学生,m道题,给出每个同学解出m个问题的概率,在解题过程中每个学生的解题数的差不大于1,求最大能解出题目数的期望 分析: n很小,知道用状压,但是比赛没做出来(脑子太死了,有一个限制条件 ...
- AppServ的安装与配置
AppServ是一个软件集合,包括Apache(HTTP服务器软件).PHP(网页程序设计语言).MySQL(数据库管理系统软件).phpMyAdmin(图形界面的数据库管理软件)四个组成部分.App ...
- 为什么你写的Python运行的那么慢呢?
大约在一年前,也就是2013年在Waza(地名),Alex Gaynor提到了一个很好的话题:为什么用Python.Ruby和Javascript写的程序总是运行的很慢呢?正如他强调的,关键就是现在出 ...
- 写i2c_client驱动的两种方式
http://www.cnblogs.com/simonshi/archive/2011/02/24/1963426.html
- 只有IE能上网,其他浏览器均不可以!
今天起来,高高兴兴的来到实验室,发现电脑打开上不了网.本人平时喜欢用Chrome,发现上不了网,就开始ping.发现可以ping通,但是网页打不开! 第一反应是DNS的问题,可以发现DNS没问题,能正 ...