基于QT与单片机的串口示波器实现与波形动态显示

基于Qt5-将串口助手打造成“示波器” 有段时间,做电赛题的时候,在那看波形调PID参数,因为要同时观察电压和两路电流,无奈只有一台示波器,遂有一想法,将单片机采集的电流数据通过串口发送给上位机,然后在上位机上以波形的形式显示出来,方便观察。因为时间问题,都是现学现用,整体做的很简陋,只是实现了要用到的功能,还请选择性浏览。 1.上位机是基于Qt5编写的,还用到了用于绘图第三方库--qcustomplot,具体使用可以百度,我这里... 阅读详情

1. 项目背景与需求分析

做嵌入式开发的朋友们应该都深有体会,调试传感器数据或者分析电路信号时,一台示波器是多么重要。但专业示波器价格昂贵,携带也不方便。我之前在做智能小车项目时,就经常需要实时观察电机转速和姿态传感器的数据变化,于是萌生了自己动手做一个简易示波器的想法。

基于QT和单片机串口通信的示波器方案,正好解决了这个痛点。单片机负责采集模拟信号(比如温度、电压、加速度等),通过串口发送给上位机,QT程序接收数据并实时绘制成波形图。这种方案成本极低,只需要一块常见的STC89C51或STM32单片机,加上QT开发的PC端软件就能实现基本示波器功能。

我最初尝试这个项目时,主要考虑三个应用场景:首先是教学演示,学生可以通过直观的波形理解传感器工作原理;其次是工业监控,比如生产线上的温度波动监测;最后是个人项目调试,比如机器人的姿态数据可视化。实际用下来发现,这种软硬件结合的方式不仅灵活,而且扩展性很强,后期添加新的传感器或数据分析功能都非常方便。

2. 硬件准备与单片机端编程

2.1 硬件选型与连接

单片机我选择了最经典的STC89C51,价格便宜且资料丰富,特别适合初学者。传感器方面,可以用简单的电位器模拟电压变化,或者使用MPU6050这类数字传感器获取更复杂的数据。关键是要注意电平匹配,51单片机的工作电压是5V,如果使用3.3V的传感器需要加电平转换模块。

串口通信硬件连接很简单:单片机的TXD引脚接USB转串口模块的RXD,RXD接TXD,地线对接。我建议使用CH340G或FT232芯片的串口模块,稳定性比PL2303好很多。第一次连接时最好用万用表测量电压,避免接反烧毁芯片,这个坑我亲自踩过。

2.2 数据采集与串口配置

单片机端的核心任务是采集数据并通过串口发送。对于模拟信号,需要用到ADC转换。STC89C51内部没有ADC,我外挂了PCF8591模块,支持4通道8位精度采集,完全够用。如果是STM32,可以直接使用内置的12位ADC,精度更高。

串口配置要注意波特率匹配,常用115200或9600。我的经验是短距离传输用115200,长距离则降低波特率提高稳定性。配置代码示例:

void uart_init()
{
    SM0 = 0;  // 8位数据位
    SM1 = 1;  // 可变波特率
    PCON = 0; // 波特率不加倍
    TMOD = 0x20; // 定时器1工作方式2
    TH1 = 256 - 3; // 波特率9600
    TL1 = 256 - 3;
    TR1 = 1; // 启动定时器
    REN = 1; // 允许接收
    EA = 1;  // 开总中断
    ES = 1;  // 开串口中断
}

2.3 数据发送格式设计

数据格式设计很重要,既要保证传输效率,又要便于QT端解析。我推荐两种方案:对于简单数据,可以直接发送原始字节流;复杂数据则用JSON格式,可读性好且扩展方便。实测发现JSON虽然有些冗余,但开发效率更高。

下面是发送JSON数据的示例代码:

void send_sensor_data(float voltage, float temperature)
{
    unsigned char json_buffer[64];
    sprintf(json_buffer, "{\"v\":%.2f,\"t\":%.2f}\n", voltage, temperature);
    string(json_buffer);
}

void string(unsigned char *p)
{
    while(*p != 0) {
        SBUF = *p;
        while(TI != 1); // 等待发送完成
        TI = 0;
        p++;
    }
}

注意每个数据包末尾加换行符\n,这样QT端可以用readLine()方便地分割数据包。如果数据传输频率高,可以改用二进制协议,效率提升明显但调试更麻烦。

3. QT开发环境搭建

3.1 QT与QCustomPlot安装

推荐使用QT5.12或更高版本,这个版本比较稳定且资料丰富。安装时记得勾选MSVC编译器(Windows)或G

QT串口示波器实战:从数据采集到波形动态渲染 本文详细介绍了如何使用QT开发串口示波器,实现从单片机数据采集、串口通信到波形动态渲染的全过程。通过QT的SerialPort模块和QCustomPlot库,开发者可以构建跨平台的实时数据可视化工具,适用于工业测控、传感器监控等场景,提升调试效率。 阅读详情

相关推荐

51单片机计算器设计:从矩阵键盘、数码管驱动到状态机与Proteus仿真全解析

在嵌入式系统与单片机开发领域,IO口操作、定时器中断和动态扫描是构建人机交互界面的基础技术。其核心原理在于通过分时复用有限的硬件资源,如利用矩阵键盘扫描以8个IO口识别16个按键,以及通过动态扫描驱动多位数码管实现稳定显示。这些技术能有效节省单片机宝贵的IO资源,并提升系统效率,是学习单片机输入输出控制的经典实践。在诸如智能仪表、工控面板和家用电器等应用场景中,稳定可靠的键盘输入与信息显示至关重要。本文聚焦于基于AT89C51单片机的简易计算器项目,深入剖析了矩阵键盘的防抖处理与扫描逻辑、数码管动态显示的无

weixin_30527423的博客 356

情系淮思:五款车规MCU横向对比与VCU选型

本文对比五款车规MCU中的S32K312与S32K324,聚焦核心架构、存储、通信及安全特性。S32K324为双核160MHz Cortex-M7,内存、外设(如以太网、QuadSPI、SAI)全面升级,支持高实时并行处理与复杂应用;而S32K312为单核120MHz,适用于中端车身控制。两者均满足ASIL B功能安全,具备完整安全引擎。选型建议:中端用S32K312,高端复杂系统优选S32K324。

本不平凡 318

21 硬件工程师笔面试高频考点真题解析——单片机

本文系统介绍了单片机的核心概念与应用知识,包括:单片机定义与选型要点(性能、存储、外设等);核心参数(主频、I/O、通信接口等);最小系统组成(电源、复位、晶振、BOOT);常见外设(GPIO、ADC、定时器等);GPIO工作模式(输入/输出);死机原因分析(硬件干扰、软件错误等);上电故障排查流程(电源、时钟、程序等);与DSP、FPGA的对比(控制vs运算vs可编程);常用通信总线特点(UART、I2C、SPI、CAN);看门狗功能(超时复位防死机)。内容涵盖单片机硬件设计关键要点,适合嵌入式开发者参考

XU157303764的博客 1323

NV MCU与SoC的交互

MCU通过IST_REQ信号触发SoC执行IST,由IST_DONE_N通知完成,SOC_RESET_N由MCU控制。MCU与SoC间通过通信通道(如以太网)传输IST结果。热/电压监测通过I2C实现,阈值由MCU初始设置、SoC动态更新,异常可中止IST。客户应用可在检测严重错误时通过IST管理器中止IST,相关原因与状态将被记录。

liu-yonggang的专栏 56

华为BEM战略解码体系完整版(85页PPT)(文末有下载方式)

在部门层面,战略解码的核心是将公司战略逐层分解到部门,确保部门目标能够有效支撑公司战略。战略解码的关键原则包括:对公司战略和业务目标的支撑、指标选取考虑部门责任特色、对公司业务流程的支撑、战略解码,华为公司实现了从战略制定到执行的闭环管理,确保了战略目标能够通过可衡量的。战略解码,华为公司实现了从战略制定到执行的闭环管理,确保了战略目标能够通过可衡量的。战略解码体系的核心目标是将公司战略逐层分解,确保战略目标能够通过可衡量的。在公司层面,战略解码的第一步是战略澄清,明确公司的使命、愿景、战略目标及。

AI_data_cloud的博客 2403

Python读取Matlab v7.3数据

文章目录Matlab保存数据Python读取 v7.3 Mat Matlab保存数据 在matlab设置中,常规->MAT文件,选择MATLAB版本7.3或更高版本保存数据。 注意保存数据的文件名为 corre.mat,保存的数据数组为data; 后面python的读取中会用到这两个参数 Python读取 v7.3 Mat 先安装hdf5storage库,再使用以下代码,就可以读取到mat中的数据,注意 import hdf5storage import numpy as np dataDi

weixin_43121914的博客 1082

SAP 关于WPS上传文件提示“文档中不包含数据“ 和“程序正在运行中“处理办法

最近这一周经常有用户反馈,使用WPS上传文件系统报错,一直提示“程序正在运行中”,另外在导入数据的时候提示"文档中不包含数据",跟进运维过程中遇到的这两种情况,分享一下处理的办法,如果各位更好的办法也可以给我留言分享。

我小时候很黑的博客 2861

fsQCA实战:从数据校准到结果解读的完整流程(附R代码示例)

本文提供了一份完整的模糊集定性比较分析(fsQCA)实战指南,详细阐述了从数据校准、必要条件分析、真值表构建到布尔最小化与结果解读的全流程。通过R语言代码示例,帮助研究者掌握如何将理论转化为可操作的分析步骤,并产出稳健的中间解,以揭示导致结果的复杂条件组合。

d6e7f8g9h的博客 1181

SAP特殊采购类80实战:跨工厂生产配置避坑指南(附完整测试流程)

本文深入解析SAP特殊采购类80在跨工厂生产场景下的实战应用与配置要点。文章从核心业务逻辑出发,详细拆解了后台配置、主数据与BOM的“双工厂”思维模式,并提供了从创建需求到成品收货的完整测试流程。重点揭示了多层BOM下的需求传递陷阱及常见报错解决方案,旨在帮助SAP顾问及用户规避实施风险,实现资源的灵活调度与流程自动化。

wind6的博客 1139

在虚拟机上搭建FTP服务器

chroot_list_file=/etc/vsftpd/chroot_list # 对chroot_list下用户限制。[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf #打开配置文件。# 指定用户的shell: -s /usr/bin/nologin。# 在配置文件中找到以下几行代码, 去掉注释(去掉 "#"号)# 指定用户主目录:/data/ftp/ftpuser -M。(2)修改配置文件,路径/etc/vsftpd/ 下的文件。

weixin_70753380的博客 3211

进阶01:Labview与OPC UA设备通信

LabVIEW通过OPC UA实现高效设备通信方案 本文介绍了使用LabVIEW与OPC UA设备通信的完整实施方案。OPC UA协议具有跨平台兼容、高安全性和高效数据交换等优势。实施步骤包括:1)安装NI OPC UA工具包;2)搭建模拟测试环境,使用OPC UA Simulation Server创建测试变量;3)编写LabVIEW程序,实现连接服务器、事件订阅、数据读写等功能。重点展示了通过用户事件实现设备主动触发的机制,当模拟变量值改变时自动触发LabVIEW事件处理。该方案验证了OPC UA在工业

weixin_38637405的博客 1406

C语言读取CSV文件的方法1

逗号分隔值文件格式(CSV),以纯文本形式存储表格数据,它是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。本文介绍利用C语言标准库中的一个字符串处理函数 strtok()来对CSV文件内容进行读取的基本方法

白马负金羁 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 从游戏化学习到专业设计:Falstad电路模拟器的跨界应用场景探索
下一篇: 从零到一:STM32F103与LVGL的SPI屏幕驱动移植心路历程
寂静夜空35
博客等级 码龄3年 59粉丝 1797原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值