当前位置:   article > 正文

Labwindows/CVI基础教程(1)

labwindows

本文主要解释labwindows中LED和按键的使用方法,将通过一个使用按键控制LED亮灭的简单工程来解释这个两个基础控件的使用方法:

1.面板设置

首先打开Labwindos,点击Flie->new-> User Interface 创建一个新的面板

然后右击面板空白处打开控件菜单,在控件菜单的LED中选择一个LED控件和command button中选择一个按钮控件进行放置。

如果需要对控件进行对齐和等间距排列,可以通过鼠标左键拖拽选中目标器件,然后单击工具栏中的Arrange,在其菜单中,Alignment下对应着各种对齐方式,Distribution下对应着各种等间距排列方式

双击led,打开其属性界面,其中Constant name将在后续的代码编写中使用到,为了代码的简洁尽量起一个简短且用意义的名称,Label为控件在面板中显示的名称,中英文都可,也可以为空白,点击...可以进入Lable属性界面,在Lable属性界面中可以进行Lable字体和位置的相关设置。其中的Initial state为off表示在初始时刻,没有进行任何操作时,LED为熄灭状态。

双击按钮,打开其属性界面,callback function中填写按钮对应的回调函数的名称,其工作流程与单片机中的外部中断类似,当该按钮被按下后,程序会进入该按钮对应的回调函数中进行对此此事件的处理,Modifier Key和Key默认情况下为none即可,若按下图所示设置则在程序运行的时候,按ctrl+A也可以触发这个按钮对应的回调函数。

双击面板空白处,打开面板属性界面,在callback function中填写一个回调函数名,并在后续设置中将该函数设置为退出程序按钮。

 在完成设置后 点击Flie选择save unitled.prj as...对工程文件进行保存

随后按ctrl+s对创建的新控制面板进行保存(为了便于管理最好和工程文件放在同一个文件夹内)

保存完成后点击工程名,选择Add Existing File...将面板文件(.uir)和面板头文件(.h)添加到工程中

完成上诉操作后,点击Code->Generate-> All Code...生成代码框架,在弹出的页面中,将Target Files 改为Add to current project。同时在下方的 Select quituserinterface callback中选则在面板属性中设置的Exit_panel作为退出程序的开关。然后点击OK即可生成整体代码框架。

2.代码详解

 GetCtrlVal (int Panel_Handle, int Control_ID, void *Value);其作用为获取对应界面中某个控件的值

int Panel_Handle为界面句柄,在本工程中为paneHandle

int Control_ID为控件id,在.h的头文件中可以找到。

void *Value 为存放控件值的变量对应的地址。

SetCtrlVal (int Panel_Handle, int Control_ID, Value);其作用为设置对应界面中某个控件的值

Value为设置的值。

本代码实现以下功能当LED亮着的时候,按下按钮则熄灭LED;当LED熄灭的时候按下按钮则点亮LED。

  1. #include <cvirte.h>
  2. #include <userint.h>
  3. #include "led_ctrl.h"
  4. static int panelHandle;//定义面板句柄
  5. int main (int argc, char *argv[])
  6. {
  7. if (InitCVIRTE (0, argv, 0) == 0)
  8. return -1; /* out of memory */
  9. if ((panelHandle = LoadPanel (0, "led_ctrl.uir", PANEL)) < 0) //加载面板
  10. return -1;
  11. DisplayPanel (panelHandle);
  12. RunUserInterface ();
  13. DiscardPanel (panelHandle);
  14. return 0;
  15. }
  16. int CVICALLBACK Exit_panel (int panel, int event, void *callbackData,
  17. int eventData1, int eventData2) //退出程序
  18. {
  19. switch (event)
  20. {
  21. case EVENT_GOT_FOCUS:
  22. break;
  23. case EVENT_LOST_FOCUS:
  24. break;
  25. case EVENT_CLOSE:
  26. QuitUserInterface (0);
  27. break;
  28. }
  29. return 0;
  30. }
  31. int CVICALLBACK led_ctrl (int panel, int control, int event,
  32. void *callbackData, int eventData1, int eventData2)
  33. {
  34. int flag;
  35. switch (event)
  36. {
  37. case EVENT_COMMIT:
  38. GetCtrlVal (panelHandle, PANEL_LED, &flag ); //获取LED的值并把该值赋给变量flag
  39. if (flag)
  40. SetCtrlVal (panelHandle, PANEL_LED, 0 ); //如果flag为1则LED的值写为0(熄灭LED)
  41. else
  42. SetCtrlVal (panelHandle, PANEL_LED,1 ); //如果flag为0则LED的值写为1(点亮LED)
  43. break;
  44. }
  45. return 0;
  46. }

3.调试

工程文件以上传至工程压缩包

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号