第11章 示波器設計—功能模塊劃分 二代示波器的界面上做了五個按鈕,分別用於不同功能的配置,本章節就為大家講解這五個按鈕實現的功能。 11.1 主界面上的五個按鈕 11.2 Measure測量功能 11.3 ADC電壓測量功能 11.4 DAC信號發生器 11.5 Math數字信號處理 11.6 S ...
第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 總結
本章節的內容比較簡單,主要是讓大家對這五個對話框的功能有個瞭解,看代碼時就比較容易理解了。