STC8G1K示波器教程

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


前言

本文基于本人对应开源工程[对应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示波器的部分关键点,希望大家可以从中学习,做成属于自己的示波器。


附录

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

版权声明:本文为CSDN博主「Eltecz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Eltecz/article/details/122293592

生成海报
点赞 0

Eltecz

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

基于8051单片机实现电子时钟+数字秒表设计

概述 电子时钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显 示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许

普中51-单核-A2单片机

合伙创业、商业需求 Q:1274510382 https://www.bilibili.com/video/av286413345/ 功能与使用 单核A2产品 基于STC89C52 低功耗,高性能的51内核的CMOS 8位单片

51单片机学习笔记7 -- 超声波测距

1.超声波 蝙蝠和某些海洋动物都能够利用高频率的声音进行回声定位或信息交流。它们能通过口腔或鼻腔把从喉部产生的超声波发射出去,利用折回的声波来定向,并判定附近物体的位置、大小以及是否在移动。超声波是一种频率高于20