硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1164|回复: 6
收起左侧

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

[复制链接]

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
发表于 2018-7-7 16:22:19 | 显示全部楼层 |阅读模式
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=45785


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

    二代示波器的界面上做了五个按钮,分别用于不同功能的配置,本章节就为大家讲解这五个按钮实现的功能。
11.1 主界面上的五个按钮
11.2  Measure测量功能
11.3  ADC电压测量功能
11.4  DAC信号发生器
11.5  Math数字信号处理
11.6  Settings设置
11.7  总结
11.1  主界面上的五个按钮
    为了方便各个功能的配置,主界面右侧做了五个按钮,用于实现五个不同功能的配置。
11.1.png
                              
代码如下:
  1. /* 创建需要的按钮*************************************************************/

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

  3. BUTTON_SetText(hButton0, "Measure");

  4. WM_SetHasTrans(hButton0);

  5. WM_SetCallback(hButton0, _cbButton);



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

  7. BUTTON_SetText(hButton1, "ADC");

  8. WM_SetHasTrans(hButton1);

  9. WM_SetCallback(hButton1, _cbButton);



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

  11. BUTTON_SetText(hButton2, "DAC");

  12. WM_SetHasTrans(hButton2);

  13. WM_SetCallback(hButton2, _cbButton);



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

  15. BUTTON_SetText(hButton3, "Math");

  16. WM_SetHasTrans(hButton3);

  17. WM_SetCallback(hButton3, _cbButton);



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

  19. BUTTON_SetText(hButton4, "Settings");

  20. WM_SetHasTrans(hButton4);

  21. WM_SetCallback(hButton4, _cbButton);
复制代码
这些按钮都是创建在桌面窗口上的,点击这些按钮后,会触发桌面窗口回调函数中的按钮消息,从而弹出相应的设置对话框:
  1. /*

  2. *********************************************************************************************************

  3. *    函 数 名: _cbBkWin

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

  5. *    形    参: pMsg

  6. *    返 回 值: 无

  7. *********************************************************************************************************

  8. */

  9. static void _cbBkWin(WM_MESSAGE * pMsg)

  10. {

  11.      int NCode, Id;

  12.    

  13.      switch (pMsg->MsgId)

  14.      {

  15.         

  16.          /* 桌面背景重绘 */

  17.          case WM_PAINT:

  18.               DSO_Init(0);                    

  19.               break;



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

  21.          case WM_TIMER:

  22.               g_Flag->ucWaveRefresh = 1;

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

  24.               break;

  25.             

  26.          case WM_NOTIFY_PARENT:

  27.               Id = WM_GetId(pMsg->hWinSrc);

  28.               NCode = pMsg->Data.v;      

  29.               switch (Id)

  30.               {

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

  32.                     case GUI_ID_BUTTON0:

  33.                         switch(NCode)

  34.                         {

  35.                             case WM_NOTIFICATION_RELEASED:

  36.                                 DSO_CreateMeasureDlg();

  37.                                 break;

  38.                         }

  39.                        break;

  40.                      

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

  42.                     case GUI_ID_BUTTON1:

  43.                         switch(NCode)

  44.                         {

  45.                             case WM_NOTIFICATION_RELEASED:

  46.                                 DSO_CreateAdcDlg();

  47.                                 break;

  48.                         }

  49.                        break;

  50.                   

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

  52.                     case GUI_ID_BUTTON2:

  53.                         switch(NCode)

  54.                         {

  55.                              case WM_NOTIFICATION_RELEASED:

  56.                                 DSO_CreateDacDlg();

  57.                                 break;

  58.                         }

  59.                        break;

  60.                   

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

  62.                     case GUI_ID_BUTTON3:

  63.                     switch(NCode)

  64.                     {

  65.                         case WM_NOTIFICATION_RELEASED:

  66.                             DSO_CreateMathDlg();

  67.                             break;

  68.                     }

  69.                        break;

  70.                      

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

  72.                     case GUI_ID_BUTTON4:

  73.                     switch(NCode)

  74.                     {

  75.                         case WM_NOTIFICATION_RELEASED:

  76.                             DSO_CreateSettingsDlg();

  77.                             break;

  78.                     }

  79.                        break;

  80.               }

  81.               break;

  82.             

  83.          default:

  84.               WM_DefaultProc(pMsg);

  85.      }

  86. }
复制代码
下面分别将这五个对话框所实现的功能为大家做个讲解。


努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
 楼主| 发表于 2018-7-7 16:23:50 | 显示全部楼层
11.2  Measure测量功能
    测量界面的效果如下:
11.2.png
                              
当前二代示波器仅支持打对勾的这六种测量值,分别是频率,峰峰值,最大值,最小值,均方根和平均值。其它的测量选项还不支持,勾选或者取消对主界面没有影响。而支持的这六个测量功能取消勾选的话,主界面对应的数值将停止更新,勾选上将继续更新。
    测量对话框的创建也比较简单,采用非阻塞方式创建:
  1. /*

  2. *********************************************************************************************************

  3. *    函 数 名: DSO_CreateMeasureDlg

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

  5. *    形    参: 无         

  6. *    返 回 值: 无

  7. *********************************************************************************************************

  8. */

  9. WM_HWIN DSO_CreateMeasureDlg(void)

  10. {

  11.      WM_HWIN hWin;



  12.      hWin = GUI_CreateDialogBox(_aDialogCreateMeasure,

  13.                                 GUI_COUNTOF(_aDialogCreateMeasure),

  14.                                 _cbDialogMeasure,

  15.                                 WM_HBKWIN,

  16.                                 0,

  17.                                0);

  18.      return hWin;

  19. }
复制代码


努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
 楼主| 发表于 2018-7-7 16:24:39 | 显示全部楼层
11.3 ADC电压测量功能
    ADC电压测量功能的界面比较简单,就是显示ADC2所采集的电压,并显示电压曲线。
11.3.png
                              
ADC电压测量对话框的创建也比较简单,采用非阻塞方式创建:
  1. /*

  2. *********************************************************************************************************

  3. *    函 数 名: DSO_CreateAdcDlg

  4. *    功能说明: 创建对话框

  5. *    形    参: 无         

  6. *    返 回 值: 无

  7. *********************************************************************************************************

  8. */

  9. WM_HWIN DSO_CreateAdcDlg(void)

  10. {

  11.      WM_HWIN hWin;



  12.      hWin = GUI_CreateDialogBox(_aDialogCreateADC,

  13.                                 GUI_COUNTOF(_aDialogCreateADC),

  14.                                 _cbCallbackADC,

  15.                                 WM_HBKWIN,

  16.                                 0,

  17.                                 0);

  18.      return hWin;

  19. }
复制代码


努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
 楼主| 发表于 2018-7-7 16:25:41 | 显示全部楼层
11.4 DAC信号发生器
   DAC信号发生器对话框主要实现了正弦波,方波和三角波的幅值,频率以及占空比的设置,界面效果如下:
11.4.png
                              
这个界面的实现代码要稍复杂些,具体实现在第14章会为大家详细讲解。DAC信号发生器对话框的创建采用非阻塞方式创建:
  1. /*

  2. *********************************************************************************************************

  3. *    函 数 名: DSO_CreateDacDlg

  4. *    功能说明: 创建对话框

  5. *    形    参: 无         

  6. *    返 回 值: 无

  7. *********************************************************************************************************

  8. */

  9. WM_HWIN DSO_CreateDacDlg(void)

  10. {

  11.      WM_HWIN hWin;



  12.      hWin = GUI_CreateDialogBox(_aDialogCreateDAC,

  13.                                 GUI_COUNTOF(_aDialogCreateDAC),

  14.                                 _cbCallbackDAC,

  15.                                 WM_HBKWIN,

  16.                                 0,

  17.                                 0);

  18.      return hWin;

  19. }
复制代码


努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
 楼主| 发表于 2018-7-7 16:26:30 | 显示全部楼层
11.5 Math数字信号处理
    Math数字信号处理界面用于FIR低通滤波器的截止频率配置,界面效果如下:
11.5.png
                              
具体的功能实现已经在前面第10章为大家进行了讲解。DAC信号发生器对话框的创建采用非阻塞方式创建:
  1. /*

  2. *********************************************************************************************************

  3. *    函 数 名: DSO_CreateMathDlg

  4. *    功能说明: 创建对话框

  5. *    形    参: 无         

  6. *    返 回 值: 无

  7. *********************************************************************************************************

  8. */

  9. WM_HWIN DSO_CreateMathDlg(void)

  10. {

  11.      WM_HWIN hWin;



  12.      hWin = GUI_CreateDialogBox(_aDialogCreateMath,

  13.                                 GUI_COUNTOF(_aDialogCreateMath),

  14.                                 _cbDialogMath,

  15.                                 WM_HBKWIN,

  16.                                 0,

  17.                                 0);

  18.    

  19.      return hWin;

  20. }
复制代码


努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
 楼主| 发表于 2018-7-7 16:28:46 | 显示全部楼层
本帖最后由 席萌0209 于 2018-7-7 16:38 编辑

11.6 Settings设置
    Settings设置对话框的界面效果如下:
11.6.png
                              
设置对话框主要实现了以下五个功能的配置:
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设置对话框的创建也采用非阻塞方式创建:
  1. /*

  2. *********************************************************************************************************

  3. *    函 数 名: DSO_CreateSettingsDlg

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

  5. *    形    参: 无         

  6. *    返 回 值: 无

  7. *********************************************************************************************************

  8. */

  9. WM_HWIN DSO_CreateSettingsDlg(void)

  10. {

  11.      WM_HWIN hWin;



  12.      hWin = GUI_CreateDialogBox(_aDialogCreateSettings,

  13.                                 GUI_COUNTOF(_aDialogCreateSettings),

  14.                                 _cbDialogSettings,

  15.                                 WM_HBKWIN,

  16.                                 0,

  17.                                 0);

  18.    

  19.      return hWin;

  20. }
复制代码

努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
 楼主| 发表于 2018-7-7 16:34:33 | 显示全部楼层
11.7   总结
    本章节的内容比较简单,主要是让大家对这五个对话框的功能有个了解,看代码时就比较容易理解了。

努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 22:20 , Processed in 0.175988 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表