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

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

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

11.1 主界面上的五个按钮

11.2  Measure测量功能

11.3  ADC电压测量功能

11.4  DAC信号发生器

11.5  Math数字信号处理

11.6  Settings设置

11.7  总结

 

 

11.1  主界面上的五个按钮

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

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

{

     intNCode, Id;

    

     switch(pMsg->MsgId)

     {

        

         /* 桌面背景重绘 */

         caseWM_PAINT:

              DSO_Init(0);                    

              break;

 

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

         caseWM_TIMER:

              g_Flag->ucWaveRefresh= 1;

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

              break;

             

         caseWM_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)

                   {

                        caseWM_NOTIFICATION_RELEASED:

                            DSO_CreateMathDlg();

                            break;

                   }

                       break;

                      

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

                    case GUI_ID_BUTTON4:

                   switch(NCode)

                   {

                        caseWM_NOTIFICATION_RELEASED:

                            DSO_CreateSettingsDlg();

                            break;

                   }

                       break;

              }

              break;

             

         default:

              WM_DefaultProc(pMsg);

     }

}

 

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

 

11.2  Measure测量功能

测量界面的效果如下:

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

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

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

/*

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

*    函 数名: DSO_CreateMeasureDlg

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

*    形    参:无          

*    返 回值: 无

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

*/

WM_HWIN DSO_CreateMeasureDlg(void)

{

     WM_HWINhWin;

 

     hWin =GUI_CreateDialogBox(_aDialogCreateMeasure,

                               GUI_COUNTOF(_aDialogCreateMeasure),

                                _cbDialogMeasure,

                                WM_HBKWIN,

                                0,

                               0);

     returnhWin;

}

 

11.3 ADC电压测量功能

 

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

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

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

/*

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

*    函 数名: DSO_CreateAdcDlg

*    功能说明: 创建对话框

*    形    参:无          

*    返 回值: 无

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

*/

WM_HWIN DSO_CreateAdcDlg(void)

{

     WM_HWINhWin;

 

     hWin =GUI_CreateDialogBox(_aDialogCreateADC,

                               GUI_COUNTOF(_aDialogCreateADC),

                                _cbCallbackADC,

                                WM_HBKWIN,

                                0,

                                0);

     returnhWin;

}

 

11.4 DAC信号发生器

 

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

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

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

/*

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

*    函 数名: DSO_CreateDacDlg

*    功能说明: 创建对话框

*    形    参:无          

*    返 回值: 无

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

*/

WM_HWIN DSO_CreateDacDlg(void)

{

     WM_HWINhWin;

 

     hWin =GUI_CreateDialogBox(_aDialogCreateDAC,

                               GUI_COUNTOF(_aDialogCreateDAC),

                                _cbCallbackDAC,

                                WM_HBKWIN,

                                0,

                                0);

     returnhWin;

}

 

11.5 Math数字信号处理

 

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

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

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

/*

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

*    函 数名: DSO_CreateMathDlg

*    功能说明: 创建对话框

*    形    参:无          

*    返 回值: 无

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

*/

WM_HWIN DSO_CreateMathDlg(void)

{

     WM_HWINhWin;

 

     hWin =GUI_CreateDialogBox(_aDialogCreateMath,

                                GUI_COUNTOF(_aDialogCreateMath),

                                _cbDialogMath,

                                WM_HBKWIN,

                                0,

                                0);

    

     returnhWin;

}

 

11.6 Settings设置

 

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

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

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

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 andSysInfoDlg表示隐藏幅值窗口,状态窗口,频率窗口和系统信息窗口。

 

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

/*

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

*    函 数名: DSO_CreateSettingsDlg

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

*    形    参:无          

*    返 回值: 无

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

*/

WM_HWIN DSO_CreateSettingsDlg(void)

{

     WM_HWINhWin;

 

     hWin =GUI_CreateDialogBox(_aDialogCreateSettings,

                               GUI_COUNTOF(_aDialogCreateSettings),

                                _cbDialogSettings,

                                WM_HBKWIN,

                                0,

                                0);

    

     returnhWin;

}

 

11.7 总结

 

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

 

 

你可能感兴趣的:(二代示波器教程)