【二代示波器教程】第11章 示波器设计—功能模块划分

第11章      示波器设计—功能模块划分

二代示波器的界面上做了五个按钮,分别用于不同功能的配置,本章节就为大家讲解这五个按钮实现的功能。

11.1   主界面上的五个按钮

11.2    Measure测量功能

11.3    ADC电压测量功能

11.4    DAC信号发生器

11.5    Math数字信号处理

11.6    Settings设置

11.7    总结

11.1  主界面上的五个按钮

为了方便各个功能的配置,主界面右侧做了五个按钮,用于实现五个不同功能的配置。

代码如下:

/* 创建需要的按钮*************************************************************/

hButton0 = BUTTON_Create(670, 40, 100, 44, GUI_ID_BUTTON0, WM_CF_SHOW);

BUTTON_SetText(hButton0, "Measure");

WM_SetHasTrans(hButton0);

WM_SetCallback(hButton0, _cbButton);

hButton1 = BUTTON_Create(670, 90-1, 100, 44, GUI_ID_BUTTON1, WM_CF_SHOW);

BUTTON_SetText(hButton1, "ADC");

WM_SetHasTrans(hButton1);

WM_SetCallback(hButton1, _cbButton);

hButton2 = BUTTON_Create(670, 140-2, 100, 44, GUI_ID_BUTTON2, WM_CF_SHOW);

BUTTON_SetText(hButton2, "DAC");

WM_SetHasTrans(hButton2);

WM_SetCallback(hButton2, _cbButton);

hButton3 = BUTTON_Create(670, 190-3, 100, 44, GUI_ID_BUTTON3, WM_CF_SHOW);

BUTTON_SetText(hButton3, "Math");

WM_SetHasTrans(hButton3);

WM_SetCallback(hButton3, _cbButton);

hButton4 = BUTTON_Create(670, 240-4, 100, 44, GUI_ID_BUTTON4, WM_CF_SHOW);

BUTTON_SetText(hButton4, "Settings");

WM_SetHasTrans(hButton4);

WM_SetCallback(hButton4, _cbButton);

这些按钮都是创建在桌面窗口上的,点击这些按钮后,会触发桌面窗口回调函数中的按钮消息,从而弹出相应的设置对话框:

/*

*********************************************************************************************************

*    函 数 名: _cbBkWin

*    功能说明: 桌面窗口的回调函数

*    形    参: pMsg

*    返 回 值: 无

*********************************************************************************************************

*/

static void _cbBkWin(WM_MESSAGE * pMsg)

{

     int NCode, Id;

     switch (pMsg->MsgId)

     {

         /* 桌面背景重绘 */

         case WM_PAINT:

              DSO_Init(0);                    

              break;

         /* 通过设置触发标志来更新一次触发游标的显示 */

         case WM_TIMER:

              g_Flag->ucWaveRefresh = 1;

              //WM_RestartTimer(pMsg->Data.v, 1000);        

              break;

         case WM_NOTIFY_PARENT:

              Id = WM_GetId(pMsg->hWinSrc);

              NCode = pMsg->Data.v;       

              switch (Id)

              {

                    /* 按钮0:打开Measure对话框 */

                    case GUI_ID_BUTTON0:

                        switch(NCode)

                        {

                            case WM_NOTIFICATION_RELEASED:

                                DSO_CreateMeasureDlg();

                                break;

                        }

                       break;

                    /* 按钮1:打开ADC对话框 */

                    case GUI_ID_BUTTON1:

                        switch(NCode)

                        {

                            case WM_NOTIFICATION_RELEASED:

                                DSO_CreateAdcDlg();

                                break;

                        }

                       break;

                   /* 按钮2:打开DAC对话框 */

                    case GUI_ID_BUTTON2:

                        switch(NCode)

                        {

                             case WM_NOTIFICATION_RELEASED:

                                DSO_CreateDacDlg();

                                break;

                        }

                       break;

                   /* 按钮3:打开Math对话框 */

                    case GUI_ID_BUTTON3:

                    switch(NCode)

                    {

                        case WM_NOTIFICATION_RELEASED:

                            DSO_CreateMathDlg();

                            break;

                    }

                       break;

                    /* 按钮4:打开Settings对话框 */

                    case GUI_ID_BUTTON4:

                    switch(NCode)

                    {

                        case WM_NOTIFICATION_RELEASED:

                            DSO_CreateSettingsDlg();

                            break;

                    }

                       break;

              }

              break;

         default:

              WM_DefaultProc(pMsg);

     }

}

下面分别将这五个对话框所实现的功能为大家做个讲解。

11.2  Measure测量功能

测量界面的效果如下:

当前二代示波器仅支持打对勾的这六种测量值,分别是频率,峰峰值,最大值,最小值,均方根和平均值。其它的测量选项还不支持,勾选或者取消对主界面没有影响。而支持的这六个测量功能取消勾选的话,主界面对应的数值将停止更新,勾选上将继续更新。

测量对话框的创建也比较简单,采用非阻塞方式创建:

/*

*********************************************************************************************************

*    函 数 名: DSO_CreateMeasureDlg

*    功能说明: 创建测量对话框

*    形    参: 无          

*    返 回 值: 无

*********************************************************************************************************

*/

WM_HWIN DSO_CreateMeasureDlg(void)

{

     WM_HWIN hWin;

     hWin = GUI_CreateDialogBox(_aDialogCreateMeasure,

                                GUI_COUNTOF(_aDialogCreateMeasure),

                                _cbDialogMeasure,

                                WM_HBKWIN,

                                0,

                               0);

     return hWin;

}

11.3 ADC电压测量功能

ADC电压测量功能的界面比较简单,就是显示ADC2所采集的电压,并显示电压曲线。

ADC电压测量对话框的创建也比较简单,采用非阻塞方式创建:

/*

*********************************************************************************************************

*    函 数 名: DSO_CreateAdcDlg

*    功能说明: 创建对话框

*    形    参: 无          

*    返 回 值: 无

*********************************************************************************************************

*/

WM_HWIN DSO_CreateAdcDlg(void)

{

     WM_HWIN hWin;

     hWin = GUI_CreateDialogBox(_aDialogCreateADC,

                                GUI_COUNTOF(_aDialogCreateADC),

                                _cbCallbackADC,

                                WM_HBKWIN,

                                0,

                                0);

     return hWin;

}

11.4 DAC信号发生器

DAC信号发生器对话框主要实现了正弦波,方波和三角波的幅值,频率以及占空比的设置,界面效果如下:

这个界面的实现代码要稍复杂些,具体实现在第14章会为大家详细讲解。DAC信号发生器对话框的创建采用非阻塞方式创建:

/*

*********************************************************************************************************

*    函 数 名: DSO_CreateDacDlg

*    功能说明: 创建对话框

*    形    参: 无          

*    返 回 值: 无

*********************************************************************************************************

*/

WM_HWIN DSO_CreateDacDlg(void)

{

     WM_HWIN hWin;

     hWin = GUI_CreateDialogBox(_aDialogCreateDAC,

                                GUI_COUNTOF(_aDialogCreateDAC),

                                _cbCallbackDAC,

                                WM_HBKWIN,

                                0,

                                0);

     return hWin;

}

11.5 Math数字信号处理

Math数字信号处理界面用于FIR低通滤波器的截止频率配置,界面效果如下:

具体的功能实现已经在前面第10章为大家进行了讲解。DAC信号发生器对话框的创建采用非阻塞方式创建:

/*

*********************************************************************************************************

*    函 数 名: DSO_CreateMathDlg

*    功能说明: 创建对话框

*    形    参: 无          

*    返 回 值: 无

*********************************************************************************************************

*/

WM_HWIN DSO_CreateMathDlg(void)

{

     WM_HWIN hWin;

     hWin = GUI_CreateDialogBox(_aDialogCreateMath,

                                GUI_COUNTOF(_aDialogCreateMath),

                                _cbDialogMath,

                                WM_HBKWIN,

                                0,

                                0);

     return hWin;

}

11.6 Settings设置

Settings设置对话框的界面效果如下:

设置对话框主要实现了以下五个功能的配置:

1、 Motion功能设置

(1) Y motion表示选择波形垂直方向滑动。

(2) X motion 表示选择波形水平方向滑动。

2、 水平和垂直测量功能的选择

(1) Hide Cursor表示隐藏水平测量和垂直测量。

(2) Display HorizontalCursor表示显示水平测量。

(3) Display VerticalCursor表示显示垂直测量。

3、 设置水平和垂直测量游标每次移动的像素个数

(1)MoveCursorStep = 1表示每次移动1个像素。

(2)MoveCursorStep = 2 表示每次移动2个像素。

(3)MoveCursorStep = 5 表示每次移动5个像素。

(4)MoveCursorStep = 10 表示每次移动10个像素。

4、Hide RFFT2048 Display 表示隐藏FFT频谱显示。

5、Hide AmplitudeDlg, StatusDlg, ScaleDlg and SysInfoDlg表示隐藏幅值窗口,状态窗口,频率窗口和系统信息窗口。

Settings设置对话框的创建也采用非阻塞方式创建:

/*

*********************************************************************************************************

*    函 数 名: DSO_CreateSettingsDlg

*    功能说明: 创建设置对话框

*    形    参: 无          

*    返 回 值: 无

*********************************************************************************************************

*/

WM_HWIN DSO_CreateSettingsDlg(void)

{

     WM_HWIN hWin;

     hWin = GUI_CreateDialogBox(_aDialogCreateSettings,

                                GUI_COUNTOF(_aDialogCreateSettings),

                                _cbDialogSettings,

                                WM_HBKWIN,

                                0,

                                0);

     return hWin;

}

11.7 总结

本章节的内容比较简单,主要是让大家对这五个对话框的功能有个了解,看代码时就比较容易理解了。

原文地址:https://www.cnblogs.com/armfly/p/9277757.html

时间: 2024-11-14 09:02:18

【二代示波器教程】第11章 示波器设计—功能模块划分的相关文章

mySQL教程 第1章 数据库设计

第1章 数据库设计 E-R设计 很多同学在学SQL语句时,觉得非常困难,那是因为你在学一个你根本不了解的数据库,数据库中的表不是你设计的,表与表之间的关系你不明白.因此在学SQL语句之前,先介绍一下数据库设计. 下面举例说明数据库设计: 学校需要开发一个系统记录有学生.课程和成绩信息.数据库如何设计? 这里面涉及到两个实体,学生表.课程,这些表为实体表. 这些表之间有什么关系呢?.学生考试出成绩,成绩记录在成绩表. 一个学生可以参加多门课程,关系是1对多. 数据库设计实例 设计数据库和表 安装m

Python基础教程 第11章: 文件和流 学习笔记

本文部分内容转载于: http://www.runoob.com/python/python-files-io.html http://docs.pythontab.com/python/python2.7/inputoutput.html#tut-files 打开文件: 你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅助方法才可以调用它进行读写.语法: file object = open(file_name [, access_mode][, buff

【安富莱二代示波器教程】第2章示波器操作说明及其介绍

教程完整下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=45785 第2章       示波器操作说明及其介绍 本章节主要讲解示波器的操作说明及其相关介绍. 2.1  示波器使用前注意事项 2.2  示波器的按键操作说明 2.3  示波器滑动操作说明 2.4  对话框操作说明 2.5  示波器功能介绍 2.6  波形显示效果 2.8   2048点浮点FFT计算的幅频显示 2.8   水平测量和垂直测量功能 2.9   普通触发

【二代示波器教程】第14章 uCOS-III操作系统版本二代示波器实现

第14章      uCOS-III操作系统版本二代示波器实现 本章教程为大家讲解uCOS-III操作系统版本的二代示波器实现.主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任务栈,系统栈以及全局变量共享问题.同时,工程调试方法也专门做了说明. 14.1  注意事项(重要必读) 14.2  任务功能划分 14.3  用户任务优先级设置 14.4  全局变量分配,系统堆栈和任务堆栈 14.5  任务间通信和全局变量共享问题 14.6  uCOS-III系统调试 14.7  

【安富莱二代示波器教程】第9章 示波器设计—自动触发和普通触发

第9章        示波器设计-自动触发和普通触发 自带触发和普通触发是示波器设计中比较重要的两个功能,本章节为大家讲解二代示波器中自动触发和普通触发的实现. 9.1    自动触发 9.2    普通触发 9.3     总结 9.1  自动触发 由于示波器模拟前端模块稍有些问题,所以自动触发功能是用软件实现的.软件实现自动触发比较容易实现,具体的实现代码如下: /* 通过软件检测实现上升沿触发,并保留最后600的数据不做检测,用于直接显示 2048-600 = 1448; */ j = 0

【安富莱二代示波器教程】第1章 示波器基础知识

第1章   示波器基础知识 本章的内容整理自网络,主要讲解示波器的基础知识.如果初学的话非常有必要对这部分知识有一个了解.因为示波器是硬件调试必不可少的设备. 1.1 什么是示波器 1.2 示波器的发展史 1.3 示波器的基础概念 1.4 触发系统 1.5 李沙育图形 1.6 窗函数选择 1.7 总结 1.1  什么是示波器 示波器是形象地显示信号幅度随时间变化的波形显示仪器,是一种综合的信号特性测试仪,是电子测量仪器的基本种类. 自然界运行着各种形式的正弦波,比如海浪.地震.声波.爆破.空气中

【小梅哥FPGA进阶教程】第九章 基于串口猎人软件的串口示波器

九.基于串口猎人软件的串口示波器 1.实验介绍 本实验,为芯航线开发板的综合实验,该实验利用芯航线开发板上的ADC.独立按键.UART等外设,搭建了一个具备丰富功能的数据采集卡,芯航线开发板负责进行数据的采集并将数据通过串口发送到PC机上,PC端,利用强大的串口调试工具--串口猎人,来实现数据的接收分析,并将数据分别以波形.码表.柱状图的形式动态显示出来,以让使用者能够直观的看到ADC采集到的信号细节.同时,用户也可以使用串口猎人通过串口给下位机(FPGA)发送指令,下位机将对接收到的指令进行解

[转]MySQL性能调优与架构设计——第11章 常用存储引擎优化

第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处.如何将各种存储引擎在自己的应用环境中结合使用,扬长避短,也是一门不太简单的学问.本章选择最为常用的两种存储引擎进行针对性的优化建议,希望能够对读者朋友有一定的帮助. 11.1 MyI SAM存储引擎优化 我们知道,MyISAM存储引擎是MySQL最为古老的存储引擎之一,也是最为流行的存储引擎之一.对

MySQL性能调优与架构设计——第11章 常用存储引擎优化

第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处.如何将各种存储引擎在自己的应用环境中结合使用,扬长避短,也是一门不太简单的学问.本章选择最为常用的两种存储引擎进行针对性的优化建议,希望能够对读者朋友有一定的帮助. 11.1 MyI SAM存储引擎优化 我们知道,MyISAM存储引擎是MySQL最为古老的存储引擎之一,也是最为流行的存储引擎之一.对