提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、示波器采样部分
    • 1.ADC采集
    • 2.定时采集
  • 二、数据处理部分
    • 1.触发
    • 2.数据计算
  • 三、显示部分
    • 1.波形显示
    • 2.数据显示
  • 四、调试注意点
  • 总结
  • 附录

前言

本文基于本人对应开源工程[对应b站链接]所编写的编程思路,旨在分享关键部分的编程方法,来教授大家制作属于自己的示波器。
对应的原理图见附录
本文章将同步至b站专栏


一、示波器采样部分

1.ADC采集

没什么好说的,找个支持ADC的单片机拿来用就好了,同时记得把采样速度调最高

2.定时采集

为保证采样间隔的准确性,这里使用的方法是模拟STM32的定时器ADC触发模式。但一般的51单片机不支持也没有这种功能,因此这里使用定时器中断触发的方式来模拟这种过程,如下代码所示

u8 en_adc;//中断延时控制位
int main()
{...略for(i=0;i<adc_length;i++){adc_db[i]=get_adc();en_adc=1;while(en_adc);       }
...略
}
void TM0_Isr() interrupt 1
{en_adc=0;
}

主函数内,在每一位ADC采集完后都会等待en_adc控制位变成0,这样就可以通过修改定时器的重装值来修改定时器进入中断的时间,从而达到定时采集的效果。
需要注意,进入中断的速度有限,在32M的主频下最高进入中断速率是200k次,再高的速率,即使修改定时器重装值也无济于事。若需要再提高采样速率,就需要使用硬件PWM触发ADC了。本人将在新版本的STC示波器更新这一功能又挖坑了(笑

二、数据处理部分

1.触发

预先设定一个触发电平,然后依次对采样数据进行比较即可

2.数据计算

要怎么算怎么算,最高最小值比较,其他数据按照一般的统计学方法计算即可

三、显示部分

1.波形显示

使用简单的画线函数,随后依次画线即可
做到不闪烁的效果可以预先缓存上一次显示的波形,随后在显示新波形前先运行一次旧波形,便可以达到不闪烁的效果,如下方代码所示

 Gui_linemap(db_old,x+1,y,h,l-1,BLACK); //旧波形Gui_linemap(db,x+1,y,h,l-1,wave_col); //新波形

其中,Gui_linemap是画波形函数,其代码如下

void Gui_linemap(u8 *db,u16 x,u16 y,u16 h,u16 l,u16 color)
{u8 i;for(i=0;i<l-1;i++){LCD_DrawLine(i+x, *(db+i)+y, i+x,*(db+i+1)+y,color);}
}

2.数据显示

没啥好说的,调用对应函数即可
需要注意,51单片机调用sprintf将会大大增加程序存储空间(-9级优化将会增加6kb),因此老老实实拼接把。


四、调试注意点

善用keil设置页面的编译选项,一般来说比较吃紧的是程序空间,善用下图部分便可以很好的来节省程序空间。

待补充。。。

总结

本文介绍了STC示波器的部分关键点,希望大家可以从中学习,做成属于自己的示波器。


附录

视频地址:[链接]
开源工程,有对应原理图:[链接]

STC8G1K示波器教程相关推荐

  1. 【二代示波器教程】第3章 示波器设计—功能划分和准备工作

    第3章       示波器设计-功能划分和准备工作 本章节主要为大家讲解示波器的系统框架设计. 3.1 功能划分 3.2 任务优先级安排 3.3 按分类封装各种变量 3.4 选择编译器最高等级优化 3 ...

  2. 【二代示波器教程】第1章 示波器基础知识

    教程完整下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=45785 第1章 示波器基础知识 本章的内容整理自网络,主要讲解示 ...

  3. 【二代示波器教程】第12章 示波器设计—DAC信号发生器的实现

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=45785 第12章      示波器设计-DAC信号发生器的实现 ...

  4. 【二代示波器教程】第10章 示波器设计—数字信号处理

    完整教程下载地址:https://www.armbbs.cn/forum.php?mod=viewthread&tid=45785 第10章      示波器设计-数字信号处理 本章节为大家讲 ...

  5. 【二代示波器教程】第5章 示波器设计—波形快速刷新方案

    完整教程下载地址: https://www.armbbs.cn/forum.php?mod=viewthread&tid=45785 第5章        示波器设计-波形快速刷新方案 本章节 ...

  6. 【安富莱二代示波器教程】第8章 示波器设计—测量功能

    第8章        示波器设计-测量功能 二代示波器测量功能实现比较简单,使用2D函数绘制即可.不过也专门开辟一个章节,为大家做一个简单的说明,方便理解. 8.1    水平测量功能 8.2    ...

  7. 菜鸟学示波器,示波器视频教程,ZLG示波器学习资料

    示波器是所有电子工程师必备的实用工具. 然而我们大部分人对示波器的使用只是一知半解. 示波器的功能也远远没有发挥出来. 这里记录下周立功致远电子做的示波器教程,视频教程,适用于新手和初级电子工程师 希 ...

  8. STM32 DAC + DMA + TIM 输出正弦波,三角波,方波信号

    硬件平台:STM32F4 库类型:标准库. 参考:[二代示波器教程]第12章 示波器设计-DAC信号发生器的实现 DAC框图如下: 通过TIM触发DAC转换,转换完成后通过DMA输出. DMA通道框图 ...

  9. 深度linux比ubuntukylin,linux ubuntukylin和deepin操作系统的比较及改进方向的建议

    研发中国的操作系统的需求在我看来是安全,还有就是自主.如果做的好还可以在创新上,使用体验上进行一波超越.现有的所谓的国产操作系统我了解的除了基于安卓的凤凰系统就是基于Linux的像优麒麟和deepin ...

最新文章

  1. 刚子扯谈:微信 今天你打飞机了嘛吗?
  2. 百度发布ERNIE 2.0,性能超BERT、XLNet
  3. 安卓开发 底部导航图标切换时动画效果_安卓10系统终于来了,流畅度堪比苹果?...
  4. 苹果工具条_苹果发布iOS 13.4首个测试版:能让iPhone变身为车钥匙
  5. SpringCloud之Feign源码分析
  6. 我的电脑不联网,很安全,黑客:你还有风扇呢。。。
  7. 3.1集合相关知识点
  8. SAP BW 例程(Routine)【开始例程、关键值或特性的例程、结束例程】
  9. 现代操作系统读书笔记
  10. PDG转PDF全攻略
  11. 《简明Python教程》--沈洁元
  12. iframe嵌入微信公众号页面(有图片)
  13. linux下mp3编码库libmp3lame的开发使用
  14. 在iOS应用中跳转到淘宝或天猫客户端商品详情页
  15. Intellij idea和eclipse快捷键—快速复制当前行到上一行或者下一行失效解决
  16. 简单说说 RPC 框架,你 悟到了吗?
  17. 利用代码实现自动刷网课阅读时长功能 JAVA
  18. c#语言编程:定义person类,再派生学生类如何存放学生的成绩,C#定义全班学生成绩类,包括姓名,学号,C++成绩,英语成绩,数学成绩,平均成绩...
  19. Module named ‘XXX’ already exists 错误解决
  20. 如何向一个普通人说明什么是物联网?

热门文章

  1. 我的第一个JavaScript小游戏--战舰世界
  2. android app底部菜单栏,材料设计指南·组件篇(一):AppBars: Bottom 底部栏
  3. Java是一种什么语言
  4. RK3568 Sensor驱动开发移植(3)
  5. 数字货币正确的交易理念——第九章:关于杜绝锁单操作问题
  6. 独立端漫画小程序源码/看漫画微信小程序源码
  7. 工业镜头参数及选型参考
  8. EBS Form开发中LOV实现实例(3)
  9. 小黄鸡微信接口 php,php版小黄鸡simsimi聊天机器人接口分享_PHP教程
  10. 第9期 | 家系、肿瘤临床基因组/外显子组数据分析实战