RYMCU

Qt5串口调试助手(7)--十六进制发送、接收,显示接收时间功能等

Hugh 3 年前
# 串口调试助手 # 十六进制

所属作品集

QT5串口调试助手RYCOM

概述

对于嵌入式调试来说,十六进制发送和接收功能是必不可少的 !在某些时候我们希望软件能够自动添加换行、并且能显示数据的接收时间。当然,我们同样需要有停止显示功能,即在接收的过程中停止显示数据,方便查询历史数据,而不需要改动串口硬件。一键清空发送区、接收区内容当然也是必不可少。

1.功能演示

十六进制功能.png

2.十六进制发送功能实现

step1:在发送槽函数中判断软件界面是否选中,以及是否需要发送换行符,从而实现十六进制功能,代码如下

/***********************************************************
 *发送按钮槽函数
 * 1.读取发送窗口数据
 * 2.判断发送格式,并格式化数据
 *  2.1 十六进制发送,是否添加新行
 *  2.2 文本发送,是否添加新行
 * 3.发送串口数据
 * 4.统计发送流量,并显示在状态栏
 ***********************************************************/
void MainWindow::on_pushButtonSend_clicked()
{
   QByteArray ComSendData;
   QString SendTemp;
   int temp;

   //读取发送窗口数据
   SendTemp = ui->TextSend->toPlainText();

   //判断发送格式,并格式化数据
   if(ui->checkBoxSendHex->checkState() != false)//16进制发送
   {
       if(ui->checkBoxAddNewShift->checkState() != false)
       {
           SendTemp.append("0D0A");// 后面添加换行
       }
       ComSendData = QByteArray::fromHex(SendTemp.toUtf8()).data();//获取字符串
   }
   else //字符串形式发送
   {
       if(ui->checkBoxAddNewShift->checkState() != false)
       {
           SendTemp.append("rn");// 后面添加换行
       }
        ComSendData = SendTemp.toLocal8Bit().data();//获取字符串
   }
   //发送数据
   temp = MyCom.write(ComSendData);

   //统计发送流量,并显示在状态栏
   if(temp)
   {
       ComSendSum +=temp;//发送总数统计
       setNumOnLabel(qlbSendSum, "Tx: ", ComSendSum);// 状态栏显示计数值
   }
}

step2: 接收数据槽函数中判断软件界面是否选中了十六机制、接收时间显示,并进行相应处理,代码如下

/***********************************************************
 *串口接收槽函数
 * 1.接收数据,并显示在接收窗口
 * 2.显示过程中需要判断:
 *  2.1 是否需要16进制显示
 *  2.2 是否需要显示时间
 *  2.3 是否停止显示
 ***********************************************************/
void MainWindow::MyComRevSlot()
{
    QByteArray MyComRevBUff;//接收数据缓存
    QString StrTemp,StrTemp1,StrTimeDate;

    //停止接收延时定时器,读取串口接收到的数据,并格式化数据
    recvDelayTimer->stop();
    MyComRevBUff = MyCom.readAll();
    StrTemp = QString::fromLocal8Bit(MyComRevBUff);

    //接收流量统计,并显示到状态栏
    ComRevSum += MyComRevBUff.size();
    setNumOnLabel(qlbRevSum, "Rx: ", ComRevSum);

    //获取串口数据接收的系统时间,备后续使用
    curDateTime = QDateTime::currentDateTime();
    StrTimeDate = curDateTime.toString("[yyyy-MM-dd hh:mm:ss.zzz] ");

    //开始显示数据,显示模式包括:是否16进制,是否显示接收时间
    if(ui->checkBoxRevHex->checkState() == false)//正常文本显示
    {

        if(TimeDateDisp == true)//显示接收时间
        {
            StrTemp.prepend(StrTimeDate);//前面添加时间
            StrTemp.append("rn");//后面添加换行
        }
        if(StopDis == false)
         {
            ui->TextRev->insertPlainText(StrTemp);//显示数据
            ui->TextRev->moveCursor(QTextCursor::End);//光标移动到文本末尾
        }
    }
    else //16进制显示
    {
       StrTemp =  MyComRevBUff.toHex().toUpper();//转换为16进制数,并大写

       for(int i = 0; i<StrTemp.length (); i+=2)//整理字符串,即添加空格
       {
           StrTemp1 += StrTemp.mid (i,2);
           StrTemp1 += " ";
       }

       if(TimeDateDisp == true)//添加时间显示
       {
           StrTemp1.prepend(StrTimeDate);//前面添加时间
           StrTemp1.append("rn");//后面添加换行
       }
       if(StopDis == false)
       {
         ui->TextRev->insertPlainText(StrTemp1);//显示数据
         ui->TextRev->moveCursor(QTextCursor::End);//光标移动到文本末尾
       }
    }  
}

step3:清空发送、接收区内容,同时请空流量统计

/***********************************************************
 *清空接收区按钮槽函数
 * 1.清空接收区
 * 2.清空流量统计
 ***********************************************************/
void MainWindow::on_pushButtonClearRev_clicked()
{
   ui->TextRev->clear();

   ComSendSum = 0;
   ComRevSum  = 0;

   setNumOnLabel(qlbSendSum, "Tx: ", ComSendSum);
   setNumOnLabel( qlbRevSum, "Rx: ", ComRevSum);
}

/***********************************************************
 *清空发送区按钮槽函数
 * 1.清空发送区
 * 2.清空流量统计
 ***********************************************************/
void MainWindow::on_pushButtonClearSend_clicked()
{
   ui->TextSend->clear();
   ComSendSum = 0;
   ComRevSum  = 0;

   setNumOnLabel(qlbSendSum, "Tx: ", ComSendSum);
   setNumOnLabel( qlbRevSum, "Rx: ", ComRevSum);
}

/***********************************************************
 *接收区停止显示槽函数
 * 1.设置停止接收标志位
 ***********************************************************/
void MainWindow::on_pushButtonStopRev_clicked()
{
    if(ui->pushButtonStopRev->text() == "停止显示")
    {
        ui->pushButtonStopRev->setText("继续显示");
        StopDis = true;
    }
    else
    {
        ui->pushButtonStopRev->setText("停止显示");
        StopDis = false;
    }
}

3.小结

完成了一些嵌入式调试的实用功能。

所属作品集

QT5串口调试助手RYCOM
后发布评论

聚圣源马年宝宝起名女孩名字女孩子起名字用什么字青蛇外传剧情一生一次的机会宝宝起名免费测验灭门惨案借种快穿之炮灰女配逆袭记篮坛之氪金无敌小雪撑肿腿合不上正道圣皇的我娶了邪道魔尊小说起名忌讳猪宝宝宝起名宜用的字给兽药店起名叶辰萧初然完结大结局谈心谈话内容皮肤检测中国卫星通信集团起名成语猪孩子起小名大全起一个比较古风的名字外国人给狗起什么名字姓氏马的起宝宝名字中超联赛赛程制衣厂起名字大全给公司起名生辰八字孩子起名字大全2020建行工行李姓宝宝起名注意给乌龟起个霸气的名字顺溜刀削面淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化