第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 总结
本章节的内容比较简单,主要是让大家对这五个对话框的功能有个了解,看代码时就比较容易理解了。