TA的每日心情 | 奋斗 2022-10-13 10:27 |
---|
签到天数: 216 天 连续签到: 1 天 [LV.7]常住居民III
|
UP-Board 试用汇总
前面搭建好了Windows开发板平台,说是开发平台不如说是一款名副其实的掌上电脑,同样的X86架构,所以如果之前有Windows下的一些项目,基本上无需移植就可以直接再我们的Upboard上运行了,这里我给出了前段时间做的一个Qt串口助手和一个小人时钟,关于Qt串口助手设计如下:
首先是设计界面
代码实现如下
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <QKeyEvent>
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- qDebug()<<"start";
- ui->radioButton->setChecked(true);
- ui->radioButton_3->setChecked(true);
- ui->closeMyComBtn->setEnabled(false); //开始“关闭串口”按钮不可用
- ui->sendMsgBtn->setEnabled(false); //开始“发送数据”按钮不可用
- connect(ui->textBrowser, SIGNAL(cursorPositionChanged()), this, SLOT(autoScroll()));
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- QByteArray MainWindow::QString2Hex(QString str)
- {
- QByteArray senddata;
- int hexdata,lowhexdata;
- int hexdatalen = 0;
- int len = str.length();
- senddata.resize(len/2);
- char lstr,hstr;
- for(int i=0; i<len; )
- {
- hstr=str[i].toAscii();
- if(hstr == ' ')
- {
- i++;
- continue;
- }
- i++;
- if(i >= len)
- break;
- lstr = str[i].toAscii();
- hexdata = ConvertHexChar(hstr);
- lowhexdata = ConvertHexChar(lstr);
- if((hexdata == 16) || (lowhexdata == 16))
- break;
- else
- hexdata = hexdata*16+lowhexdata;
- i++;
- senddata[hexdatalen] = (char)hexdata;
- hexdatalen++;
- }
- senddata.resize(hexdatalen);
- return senddata;
- }
- char MainWindow::ConvertHexChar(char ch) //16进制字符“d”转为16进制d
- {
- if((ch >= '0') && (ch <= '9'))
- return ch-0x30;
- else if((ch >= 'A') && (ch <= 'F'))
- return ch-'A'+10;
- else if((ch >= 'a') && (ch <= 'f'))
- return ch-'a'+10;
- else return (-1);
- }
- void MainWindow::readMycom()
- {
- qDebug()<<"read";
- QByteArray temp = myCom->readAll();
- //QByteArray temp = MainWindow::QString2Hex(temp1);
- qDebug()<<"readOver";
- if( ui->radioButton_2->isChecked())
- {
- //ui->radioButton_2->setChecked( true );
- qDebug("read Hex choiced!");
- ui->textBrowser->insertPlainText(temp.toHex());
- }
- else if(ui->radioButton->isChecked())
- {
- qDebug("read Ascll choiced!");
- ui->textBrowser->insertPlainText(temp);
- }
- else
- {
- qDebug("read set default!");
- ui->textBrowser->insertPlainText(temp);
- }
- void MainWindow::on_openMyComBtn_clicked()
- {
- QString portName = ui->portNameComboBox->currentText();//获取端口号
- myCom = new Win_QextSerialPort(portName,QextSerialBase::EventDriven); //定义串口对象,并传递参数,在构造函数里对其进行初始化
- // myCom = new Win_QextSerialPort(tr("\\\\.\\%1").arg(ui->portNameComboBox->currentText()),QextSerialBase::EventDriven);
- myCom ->open(QIODevice::ReadWrite); //打开串口
- if(ui->baudRateComboBox->currentText()==tr("1200")) //根据组合框内容对串口进行设置
- myCom->setBaudRate(BAUD1200);
- else if(ui->baudRateComboBox->currentText()==tr("2400"))
- myCom->setBaudRate(BAUD2400);
- else if(ui->baudRateComboBox->currentText()==tr("4800"))
- myCom->setBaudRate(BAUD4800);
- else if(ui->baudRateComboBox->currentText()==tr("9600"))
- myCom->setBaudRate(BAUD9600);
- else if(ui->baudRateComboBox->currentText()==tr("14400"))
- myCom->setBaudRate(BAUD14400);
- else if(ui->baudRateComboBox->currentText()==tr("19200"))
- myCom->setBaudRate(BAUD19200);
- else if(ui->baudRateComboBox->currentText()==tr("38400"))
- myCom->setBaudRate(BAUD38400);
- else if(ui->baudRateComboBox->currentText()==tr("56000"))
- myCom->setBaudRate(BAUD56000);
- else if(ui->baudRateComboBox->currentText()==tr("57600"))
- myCom->setBaudRate(BAUD57600);
- else if(ui->baudRateComboBox->currentText()==tr("115200"))
- myCom->setBaudRate(BAUD115200);
- else if(ui->baudRateComboBox->currentText()==tr("128000"))
- myCom->setBaudRate(BAUD128000);
- //设置波特率
- if(ui->dataBitsComboBox->currentText()==tr("8"))
- myCom->setDataBits(DATA_8);
- else if(ui->dataBitsComboBox->currentText()==tr("7"))
- myCom->setDataBits(DATA_7);
- //设置数据位
- if(ui->parityComboBox->currentText()==tr("无"))
- myCom->setParity(PAR_NONE);
- else if(ui->parityComboBox->currentText()==tr("奇"))
- myCom->setParity(PAR_ODD);
- else if(ui->parityComboBox->currentText()==tr("偶"))
- myCom->setParity(PAR_EVEN);
- //设置奇偶校验
- if(ui->stopBitsComboBox->currentText()==tr("1"))
- myCom->setStopBits(STOP_1);
- else if(ui->stopBitsComboBox->currentText()==tr("2"))
- myCom->setStopBits(STOP_2);
- //设置停止位
- myCom->setFlowControl(FLOW_OFF); //设置数据流控制,我们使用无数据流控制的默认设置
- myCom->setTimeout(500); //设置延时
- connect(myCom,SIGNAL(readyRead()),this,SLOT(readMycom()));
- //信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作
- ui->openMyComBtn->setEnabled(false); //打开串口后“打开串口”按钮不可用
- ui->closeMyComBtn->setEnabled(true); //打开串口后“关闭串口”按钮可用
- ui->sendMsgBtn->setEnabled(true); //打开串口后“发送数据”按钮可用
- ui->baudRateComboBox->setEnabled(false); //设置各个组合框不可用
- ui->dataBitsComboBox->setEnabled(false);
- ui->parityComboBox->setEnabled(false);
- ui->stopBitsComboBox->setEnabled(false);
- ui->portNameComboBox->setEnabled(false);
- myCom->close();
- ui->openMyComBtn->setEnabled(true); //关闭串口后“打开串口”按钮可用
- ui->closeMyComBtn->setEnabled(false); //关闭串口后“关闭串口”按钮不可用
- ui->sendMsgBtn->setEnabled(false); //关闭串口后“发送数据”按钮不可用
- ui->baudRateComboBox->setEnabled(true); //设置各个组合框可用
- ui->dataBitsComboBox->setEnabled(true);
- ui->parityComboBox->setEnabled(true);
- ui->stopBitsComboBox->setEnabled(true);
- ui->portNameComboBox->setEnabled(true);
- }
- void MainWindow::on_sendMsgBtn_clicked()
- {
- //qDebug()<< myCom->write(ui->sendMsgLineEdit->toPlainText().toAscii());
- //以ASCII码形式将行编辑框中的数据写入串口
- if( ui->radioButton_4->isChecked())
- {
- //ui->radioButton_2->setChecked( true );
- qDebug("send Hex choiced!");
- QByteArray senddata = MainWindow::QString2Hex(ui->sendMsgLineEdit->toPlainText().toAscii());
- myCom->write(senddata);
- }
- else if(ui->radioButton_3->isChecked())
- {
- qDebug("send Ascll choiced!");
- // 串口发送数据Ascll
- myCom->write(ui->sendMsgLineEdit->toPlainText().toAscii());
- }
- else
- {
- qDebug("send set default!");
- // 串口发送数据Ascll
- myCom->write(ui->sendMsgLineEdit->toPlainText().toAscii());
- }
- }
- void MainWindow::debugtest()
- {
- qDebug()<<"slots is runing !";
- }
- void MainWindow::autoScroll()
- {
- ui->textBrowser->moveCursor(QTextCursor::End);
- // QTextCursor cursor = this->tex
- // cursor.movePosition(QTextCursor::End);
- // ui->textBrowser->setTextCursor(cursor);
- }
- void MainWindow::on_RXButton_clicked()
- {
- ui->textBrowser->clear();
- }
- void MainWindow::on_TXButton_clicked()
- {
- ui->sendMsgLineEdit->clear();
- }
- void MainWindow::on_quitButton_clicked()
- {
- exit(0);
- }
- // 键盘按下事件实现快捷键
- void MainWindow::keyPressEvent(QKeyEvent *event)
- {
- // 是否按下Ctrl键
- if(event->modifiers() == Qt::ControlModifier){
- // 是否按下Enter键
- if(event->key() == Qt::Key_Return)
- {
- if( ui->radioButton_4->isChecked())
- {
- //ui->radioButton_2->setChecked( true );
- qDebug("Receive Hex choiced!");
- QByteArray senddata = MainWindow::QString2Hex(ui->sendMsgLineEdit->toPlainText().toAscii());
- myCom->write(senddata);
- }
- else if(ui->radioButton_3->isChecked())
- {
- qDebug("Receive Ascll choiced!");
- // 串口发送数据Ascll
- myCom->write(ui->sendMsgLineEdit->toPlainText().toAscii());
- }
- else
- {
- qDebug("Receive set default!");
- // 串口发送数据Ascll
- myCom->write(ui->sendMsgLineEdit->toPlainText().toAscii());
- }
- }
- }
- else MainWindow::keyPressEvent(event);
- }
- // 按键释放事件
- //void MainWindow::keyReleaseEvent(QKeyEvent *event)
- //{
- // //其他操作
- //}
复制代码 Qt来做图形界面实在是比较方便,Windows和嵌入式平台都不错,这里设计比较简单,大家可以参考上面代码,下面是运行效果,实现了我们平常用的串口助手上的基本功能
后面接着测试了一个小人时钟,这个是网上的一个开源软件,感觉还不错,效果如下
总结:
对于Upboard这样一款能够完全运行Windows系统的板卡,如果想移植之前的程序可以说十分方便,上面的两个例子大家也看到了,基本上你电脑开发的项目都可以再上面跑,不过如果都运行工程量比较大的程序,直接运行windwos上,或许就要考虑关闭掉一些不必要的资源占用问题了,大家可以根据开发需求做相应的调整。
|
|