• 基于VC++和AT89C52单片机的数字存储示波器设计


    目录
    摘 要 I
    Abstract II
    1.绪论 1
    1.1课题研究的目的、意义: 1
    1.2现状分析 1
    2.课题研究的主要内容及实施方案 2
    2.1课题研究的主要内容: 2
    2.2实施方案: 2
    2.3工作条件: 2
    3.问题的分析与几种主要实施方案的讨论 3
    3.1问题的分析 3
    3.2几种方案的讨论 3
    4.本数字存储示波器系统概述 7
    5.硬件系统 8
    6.软件简介 10
    6.1串行数据接收 10
    6.2数字滤波: 10
    6.3图像处理 10
    6.4软件界面效果如下 11
    7. 测试结果 14
    7.1存储输入方式 14
    7.2实时采集方式 16
    7.3关于测试结果的讨论 20
    8. 总结 21
    参考文献 22
    2.课题研究的主要内容及实施方案
    2.1课题研究的主要内容:
    本课题研究的主要内容是如何建立一套可存储虚拟示波器系统,其具体组成为:
    ① 硬件系统:
    硬件系统由计算机硬件系统和外部硬件系统组成。这里主要研究外部硬件系统,其主要目标是实现数据采集、AD转换、数据缓冲及压缩、数据存储、向计算机系统传输。
    ② 软件系统:
    软件系统的主要任务是通过计算机硬件系统读取由外部硬件设备传输来的数据,进行解压、变换、排除干扰信号、将波形显示在显示器上,并进行波形的存储、打印与分析。
    在实现以上基本功能的前提下,还可以进行进一步的扩展国,如硬件系统性能的担高、成本的降低、体积重量的减小、接口的扩展;软件系统功能的完善、用户界面的改进、数据的格式化、网络化,最终目标是产业化。
    6.软件简介
    本软件主要完成数字示波器的数据后期处理工作;
      开发环境:Visual C++ 6.0
    适用平台:Windows 10
    可执行文件大小:2.26MB
    附加文件:mfc42.dll, MSCOMM32.OCX, msvcrt.dll
      主要功能如下:
    6.1串行数据接收
    采用VC附带ActiveX控件Microsoft Communications Control, version 6.0实现串口数据的接收;
    如果内存允许,采集点数不限;因此,本软件也满足过程控制中大容量数据采集及图形处理的需要;    
    6.2数字滤波:
    采用多项式光滑不等距插值,本方法是制定n个不等距节点xi(i=0,1,-------,n-1)上的函数值yi=f(xi)及精度要求,利用阿克玛(Akima)方法,计算指定子区间上的三次插值多项式与指定插值点上的函数值;
    函数的调用格式为:
    GetValueAkima(int n, double x[], double y[], double t, double s[], int k /= -1/)
    6.3图像处理
    (1)波形图:
    完成采集波形的绘制,支持各种动态操作,包括:图像的整体放大,整体缩小,还原初始最佳大小,移动,X向放大、缩小,Y向放大、缩小;
    支持各种编辑操作,包括:图像数据的存储(存储成 .sun文件 ),波形图、频谱图的打印,波形图、频谱图的拷贝(可在Word等编辑软件中粘贴);
    支持波形图相及示波屏幕的视觉效果调整,包括:波形图、频谱图曲线颜色的任意调整条,线条宽度的调整,本文转载自http://www.biyezuopin.vip/onews.asp?id=14755示波屏幕全屏化,背景模式的调整;
    支持波形图处理数据量的动态调整:以克服图像失真,及图形处理速度慢等。

    //
    //
    // 	Filename:	113-06203-001.c
    //	Version:		0.01
    //	Data:		2008.08.31
    //
    //	Author:		Liu, Zemin
    //	Company:	zmLAB
    //
    //-----------------------------------------------------------------------------
    //
    // 	Target: 		ATmega64
    // 	Tool chain: 	WinAvr (GCC-AVR)
    //
    //	Function Descriptions: Project template based on 06200-00A PCB
    //-----------------------------------------------------------------------------
    //	Required files:
    //
    //-----------------------------------------------------------------------------
    //
    //	Notes:
    //		1. Fuse programming configuration: 
    //			Extended Byte: 	0b------11 (Non mega603/103 compatible mode)
    //					Bit 1		- 1 = M64 mode, 0 = M103 mode
    //					Bit 0		- 1 = WDT normal, 0 = WDT always ON
    //			High Byte: 	0b11-00001 (CLKOP = 0 for crystal, EEPROM perserved)
    //					Bit 7		- 1 = OCD disabled
    //					Bit 6		- 1 = JTAG disabled
    //					Bit 5		- 1 = SPI program disabled
    //					bit 4		- Clock options. See datasheet
    //					bit 3		- 1 = EEPROM not preserved, 0 = EEPROM preserved
    //					bit [2:1]	- Boot size configration
    //								Size				Boot loader Start (word address)
    //							11 = 512 words		0x7E00
    //							10 = 1024 words		0x7C00
    //							01 = 2048 words		0x7800
    //							00 = 4096 words		0x7000
    //					bit 0		- 1 = Application Reset, 0 = Boot Loader Reset
    //			Low Byte:	0b10101110 (Use external crystal osc [20MHz])
    //					Bit 7		- BODLEVEL, 1 = 2.7V, 0 = 4.0V
    //					Bit 6		- 1 = BOD disabled, 0 = BOD enabled
    //					Bit [5:4]	- Start-up Time (see datasheet)
    //					bit [3:0]	- Select clock source (See datasheet)
    //
    //
    //-----------------------------------------------------------------------------
    //	Revision History:
    //		V0.01		2008.08.31
    //		1.	First creadted based on 113-06201-040
    //
    ///
    
    #include 
    #include 
    #include 
    #include 
    
    #include "Common.h"
    #include "Board.h"
    #include "Screen.h"
    
    int	main (void)
    {
     // -- Initialize ports
     Port_Init();
    
     // -- Initialize misc registers
     Misc_Init();
    
    // Timer_Init();
    // Comp_Init();
    // ADC_Init();
     
     // -- Initialize Uart 0
     Uart0_Init();
    // u0putc('0');
     
     // -- Initialize Uart 1
    // Uart1_Init();
    // u1putc('1');
    
     uputs((U8 *)"COM0 OK", Uart0);
    
    // sei();
    
     // Initialize LCD
     LCD_Init();
    
     // Clear display buffer
     ClearBuf();
    
    // PutChar5x7(10, 10, 0x41);
    
     // Write a string to display buffer
     LcdPuts(10, 10, "Hello, world!");
    
     LcdPuts(10, 45, "WWW.JYETECH.COM");
    
     // Output display buffer to LCD
     Display();
    
    
     // Halt
     while(1) {
    		}
    
     return (0);
    
    }
    
    
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    FFmpeg进阶: 截取视频生成gif动图
    YOLOv5改进实战 | 更换主干网络Backbone(四)之轻量化模型MobileNetV3
    Service Worker原理
    SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8)
    GIS工具maptalks开发手册(二)01-01之Geometry转化为GeoJSON——渲染点
    【项目小tips】Vue2中如何使用虚拟列表
    时区-Linux Java ConnectorJ MySQL-时间戳-EverNote
    档案馆:如何做到水浸事件及时预警?
    什么是大数据系统存储及管理?
    第三章:人工智能深度学习教程-基础神经网络(第二节-ANN 和 BNN 的区别)
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/127121437