基本信息
源码名称:qt 串口通信示例源码
源码大小:1.01M
文件格式:.rar
开发语言:C/C++
更新时间:2019-05-28
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
#include "mycommdialog.h" #include "ui_mycommdialog.h" #include<QTimer> mycommDialog::mycommDialog(QWidget *parent) : QDialog(parent), ui(new Ui::mycommDialog) { ui->setupUi(this); time_ReadSerialPort = new QTimer(this); time_Datafresh = new QTimer(this); ui->comboBoxBaudRate->addItem("9600"); ui->comboBoxBaudRate->addItem("38400"); ui->comboBoxBaudRate->addItem("57600"); ui->comboBoxBaudRate->addItem("115200"); ui->comboBoxBaudRate->setCurrentIndex(3); ui->comboBoxDataBits->addItem(QString("7位")); ui->comboBoxDataBits->addItem(QString("8位")); ui->comboBoxDataBits->setCurrentIndex(1); ui->comboBoxStopBits->addItem(QString("1位")); ui->comboBoxStopBits->addItem(QString("2位")); ui->comboBoxStopBits->setCurrentIndex(0); ui->comboBoxCheckBits->addItem("N"); ui->comboBoxCheckBits->addItem("O"); ui->comboBoxCheckBits->addItem("E"); ui->comboBoxCheckBits->setCurrentIndex(0); ui->comboBoxPort->addItem("ttyUSB0"); ui->comboBoxPort->addItem("ttyUSB1"); ui->comboBoxPort->setCurrentIndex(0); ui->pushButtonCloseCom->setEnabled(false); ui->pushButtonLed0->setEnabled(false); ui->pushButtonLed1->setEnabled(false); //以可读写方式打开串口 //定义一个结构体,用来存放串口各个参数 //信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作 connect(this,SIGNAL(nowStartSerialPort(bool)),&commThread,SLOT(set_SerialPortFullLoad(bool))); connect(this,SIGNAL(writeToSerialPort(unsigned char * , int )),&commThread,SLOT(readyWriteSerialPort(unsigned char * , int))); connect(&commThread,SIGNAL(sendDataToUI( unsigned char*, int)),this,SLOT(recieveDataFromSerialPort ( unsigned char * , int))); connect(&commThread,SIGNAL(sendDataToServer( unsigned char*, int)),&sockThread,SLOT(recieveDataFromSerialPort ( unsigned char * , int))); connect(this,SIGNAL(nowStartCommHost( QString , int )),&sockThread,SLOT(readyCommHost( QString , int ))); connect(this,SIGNAL(writeToHost(unsigned char * , int )),&sockThread,SLOT(readyWriteToHost(unsigned char * , int))); connect(&sockThread,SIGNAL(sendDataToUI( unsigned char*, int)),this,SLOT(recieveDataFromHost ( unsigned char * , int))); connect(this,SIGNAL(SetPort( int )),&commThread,SLOT(setPort( int))); connect(this,SIGNAL(SetBaudRate( int )),&commThread,SLOT(setBaudRate( int))); connect(this,SIGNAL(SetDataBits( int )),&commThread,SLOT(setDataBits( int))); connect(this,SIGNAL(SetStopBits( int )),&commThread,SLOT(setStopBits( int))); connect(this,SIGNAL(SetCheckBits( int )),&commThread,SLOT(setCheckBits( int))); } mycommDialog::~mycommDialog() { delete ui; } void mycommDialog::recieveDataFromSerialPort( unsigned char * buff, int len) { if(len==sizeof(DataBuf1)) { DataBuf1 * rxdata = (DataBuf1 *)buff; unsigned int temp =( unsigned int) rxdata->data.tValue; unsigned int hum = (unsigned int)rxdata->data.hValue; hum = hum & 0x0000ffff; temp = temp & 0x0000ffff; ui->lineEditTemp->setText(QString::number(temp)); ui->lineEditHum->setText(QString::number(hum)); } } void mycommDialog::recieveDataFromHost( unsigned char * buff, int len) { } void mycommDialog::CleanUI() { time_Datafresh->stop(); ui->lineEditTemp->clear(); ui->lineEditHum->clear(); } void mycommDialog::on_pushButtonOpencom_clicked() { emit nowStartSerialPort(true); commThread.start(); sockThread.start(); emit nowStartCommHost(ui->lineEditServIP->text(),ui->lineEditPort->text().toInt()); time_Datafresh->start(1000); ui->pushButtonOpencom->setEnabled(false); ui->pushButtonCloseCom->setEnabled(true); ui->pushButtonLed0->setEnabled(true); ui->pushButtonLed1->setEnabled(true); ui->comboBoxBaudRate->setEnabled(false); ui->comboBoxCheckBits->setEnabled(false); ui->comboBoxDataBits->setEnabled(false); ui->comboBoxPort->setEnabled(false); ui->comboBoxStopBits->setEnabled(false); //struct PortSettings myCommSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500}; /* myComm = new Posix_QextSerialPort("/dev/ttyUSB0",QextSerialBase::Polling); if(myComm->isOpen()) { myComm->close(); } myComm ->open(QIODevice::ReadWrite); myComm->setBaudRate(BAUD115200); myComm->setDataBits(DATA_8); myComm->setStopBits(STOP_1); myComm->setParity(PAR_NONE); myComm->setFlowControl(FLOW_OFF); myComm->setTimeout(50); myComm->flush(); // connect(myComm,SIGNAL(readyRead()),this,SLOT(readCom())); */ //connect(time_ReadSerialPort,SIGNAL(timeout()),this,SLOT(readCom())); //QextSerialBase::Polling //time_ReadSerialPort->start(1500); } void mycommDialog::on_pushButtonCloseCom_clicked() { time_ReadSerialPort->stop(); emit nowStartSerialPort(false); sockThread.terminate(); commThread.terminate(); ui->pushButtonOpencom->setEnabled(true); ui->pushButtonCloseCom->setEnabled(false); ui->pushButtonLed0->setEnabled(false); ui->pushButtonLed1->setEnabled(false); ui->comboBoxBaudRate->setEnabled(true); ui->comboBoxCheckBits->setEnabled(true); ui->comboBoxDataBits->setEnabled(true); ui->comboBoxPort->setEnabled(true); ui->comboBoxStopBits->setEnabled(true); } void mycommDialog::readCom() { /*DataBuf * rxdata = new DataBuf; //定义好的包头标志定义好的包头标志 //注意:原包头为shor int (0x55aa),但存储顺序为小尾顺序,在内存中是0xaa在前,0x55在后 unsigned char startBytes[2] = {0xaa,0x55}; unsigned char buff[40]; int len = sizeof(DataBuf); //if(serialPort->GetBytes(buff,len)) if(serialPort->GetBytesAt(buff,len,startBytes,2))//通过查找包头标志,在数据包的起始位置读取数据 { rxdata = (DataBuf *)buff; int temp = (int) rxdata->data.tValue; int hum = (int)rxdata->data.hValue; ui->lineEditTemp->setText(QString::number(temp)); ui->lineEditHum->setText(QString::number(hum)); } ////////////////////////////////// //DataBuf * rxdata; //int len =myComm-> bytesAvailable(); // if(myComm->bytesAvailable()>=sizeof(DataBuf)) // { // // QByteArray temp = myComm->readAll(); //rxdata = (DataBuf*)temp.data(); // int datalen = myComm->readData((char*)rxdata,sizeof(DataBuf)); // if(datalen == sizeof(rxdata)) // { // int temp = (int) rxdata->data.tValue; // int hum = (int)rxdata->data.hValue; // ui->lineEditTemp->setText(QString::number(temp)); // ui->lineEditHum->setText(QString::number(hum)); // } // } //////////////////////////////////////////// //读取串口缓冲区的所有数据给临时变量temp //QByteArray temp = myComm->readAll(); //将串口的数据显示在窗口的文本浏览器中 //ui->textBrowser->insertPlainText(temp); */ } void mycommDialog::on_pushButtonLed0_clicked() { cmdBuf cmdbuf; memset(cmdbuf.data, 0, sizeof(cmdbuf.data)); cmdbuf.bufHead = 0x55aa; cmdbuf.bufEnd=0xaa55; cmdbuf.cmd = 0x01; cmdbuf.data_len = 1; cmdbuf.data[0] = 5; emit writeToSerialPort((unsigned char*)&cmdbuf, sizeof(cmdBuf)); } void mycommDialog::on_pushButtonLed1_clicked() { cmdBuf cmdbuf; memset(cmdbuf.data, 0, sizeof(cmdbuf.data)); cmdbuf.bufHead = 0x55aa; cmdbuf.bufEnd=0xaa55; cmdbuf.cmd = 0x02; cmdbuf.data_len = 1; cmdbuf.data[0] = 5; emit writeToSerialPort((unsigned char*)&cmdbuf, sizeof(cmdBuf)); } void mycommDialog::on_comboBoxPort_currentIndexChanged(int index) { emit SetPort(index); } void mycommDialog::on_comboBoxBaudRate_currentIndexChanged(int index) { emit SetBaudRate(index); } void mycommDialog::on_comboBoxDataBits_currentIndexChanged(int index) { emit SetDataBits(index); } void mycommDialog::on_comboBoxStopBits_currentIndexChanged(int index) { emit SetStopBits(index); } void mycommDialog::on_comboBoxCheckBits_currentIndexChanged(int index) { emit SetCheckBits(index); } void mycommDialog::on_lineEditServIP_editingFinished() { unsigned char strIP[20]; //ui->lineEditServIP->setText(QString::number(192.168.1.100)); //emit servIPChanged(strIP,20); }