• 【二代示波器教程】第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 总结

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

  • 相关阅读:
    iSeries存储过程笔记
    最近做得的网站
    两个iSeries存储过程的示例
    索引的怪异问题
    Saas的概念感触
    asp.net 2.0的TextBox遭遇ReadOnly=True时ViewState不回传的问题
    网上看到的一句诗
    DB2/400到Oracle的迁移
    如何往自己的网站增加Asp.net Ajax
    default关键字作用
  • 原文地址:https://www.cnblogs.com/armfly/p/9277757.html
Copyright © 2020-2023  润新知