1、主函數
主函數是程序的入口
包含:初始化運行庫、裝載用戶面板、顯示用戶面板、刪除面板、關閉運行時庫等操作

#include <cvirte.h> #include <userint.h> #include "溫度2.h" static int panelHandle; //主函數 int main (int argc, char *argv[]) { // 初始化CVI運行時庫 /** * InitCVIRTE函數:初始化CVI運行時庫 * 函數原型為:int InitCVIRTE(void *HInstance,char *Argv[],void *Reserved); * *HInstance:如果采用main作為主函數,則輸入值必須為0 * *Argv[]:指向調試時生成的可執行文件的文件名 * *Reserved:保留參數,一般設置為0 * int:返回值,返回程序初始化運行時庫的狀態,該數據類型為整型; 1:運行成功 0:運行失敗,可能出現的問題是內存溢出 **/ if (InitCVIRTE (0, argv, 0) == 0) return -1; /* 若內存溢出,返回-1 */ // 裝載面板,返回面板句柄 /** * LoadPanel函數:將用戶界面文件載入內存中 * 函數原型為:int LoadPanel(int Parent_Panel_Handle,char Filename[],int Panel_Resource_ID) * Parent_Panel_Handle:父面板句柄,此參數是面板常量名所指代的父面板。如果設置為0,則說明 該面板就是處在最頂層的面板。 * Filename[]:文件名,此參數設置的是被載入的用戶界面文件的文件名 * Panel_Resource_ID:面板常量名,此參數是在用戶編輯界面文件中定義的常量名 * int:返回值為面板句柄。設置了這個參數,在以后的函數調用中使用該面板句柄可以指代該面板。 如果返回正值代表運行成功,返回負值代表運行失敗。每個負值代表產生的一個錯誤類型碼。 **/ if ((panelHandle = LoadPanel (0, "溫度2.uir", PANEL)) < 0) return -1; //在屏幕上顯示面板 函數原型為:int DisplayPanel(int Panel_Handle); DisplayPanel (panelHandle); //運行用戶界面 函數原型為:int RunUserInterface(void); RunUserInterface (); //從內存中刪除面板及其子面板,並在屏幕中清除 /** * 函數原型為:int DiscardPanel(int Panel_Handle); * Panel_Handle:面板句柄,此參數是設置所要刪除的面板句柄 **/ DiscardPanel (panelHandle); //若程序成功退出,返回0 return 0; }
2、回調函數
回調函數(1)
//回調函數,函數功能:當按下該按鈕時,退出用戶界面 int CVICALLBACK Quit (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { //控件響應的事件 case EVENT_COMMIT: //在運行用戶界面時,執行該函數會退出用戶界面 /** * 函數原型為:int QuitUserInterface(int Return_Code); * Return_Code:返回代碼,一般設置為0 **/ QuitUserInterface(0); break; } return 0; }

//回調函數,函數功能:開關控件處於ON時,使LED點亮 int CVICALLBACK Acquire (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { static double max,min; static int max_index,min_index; int i,j,value; //定義信號采樣數據點數組 double datapoints[100]; switch (event) { //控件響應的事件 case EVENT_COMMIT: /** * 獲得控件的值 GetCtrlVal * 函數原型為:int GetCtrlVal(int Panel_Handle,int Control_ID,void *Value); * Panel_Handle:面板句柄,該項是在函數LoadPanel里設置的 * Control_ID:控件ID (面板名 + 控件名) * *Value:控件的值,該數據類型與控件本身的數據類型一致 **/ //獲得開關控件的狀態 GetCtrlVal(panelHandle,PANEL_BINARYSWITCH,&value); //判斷開頭是否為"開" if(value == 1){ /** * 設置控件的屬性值 SetCtrlVal * 函數原型為:int SetCtrlVal(int Panel_Handle,int Control_ID,any type Value); * GetCtrlVal函數Value填寫的是變量的地址(需要加上取地址符"&");SetCtrlVal函數Value需要填寫的是變量 **/ //點亮LED,即為狀態1 SetCtrlVal(panelHandle,PANEL_LED,1); /** * 設置控件屬性 SetCtrlAttribute * 函數原型為:int SetCtrlAttribute(int Panel_Handle,int Control_ID,int Control_Attribute,any type Attribute); **/ //設置LED的標題變為"開" SetCtrlAttribute(panelHandle,PANEL_LED,ATTR_LABEL_TEXT,"開"); /** * 獲取控件屬性值 GetCtrlAttribute * 函數原型為:int GetCtrlAttribute(int Panel_Handle,int Control_ID,int Control_Attribute,void *Attribute_Value); **/ for(i = 0 ; i < 100 ; i++) { //編寫隨機函數 datapoints[i] = 100*rand()/32767.0; //延時0.01s Delay(0.01); //設置溫度計控件的值 SetCtrlVal(panelHandle,PANEL_NUMERICTHERM,datapoints[i]); /** * 逐點繪圖 PlotStripChartPoint * 函數原型為:int PlotStripChartPoint(int Panel_Handle,int Control_ID,double Y); * Panel_Handle:控件所在的面板句柄 * Control_ID:控件ID * double Y:Y軸上的數值 **/ //在控件 Strip Chart 中滾動顯示數據 PlotStripChartPoint(panelHandle,PANEL_STRIPCHART,datapoints[i]); } /** * 輸入數值的最大值和最小值 MaxMin1D * 函數原型為:AnalysisLibErrType MaxMin1D(const double Input_Array[],int Number_of_Elements, double *Maximum_Value,int *Maximum_Index, double *Minimum_Value,int *Minimum_Index); * Input_Array[]:輸入數組名 Number_of_Elements:輸入數組元素的個數 * *Maximum_Value:輸入數組的最大值 *Minimum_Value:輸入數組中的最小值 * *Maximum_Index:輸入數組中的最大值索引 *Minimum_Index:輸入數組中的最小值索引 **/ //找出100個隨機數中最大值和最小值 MaxMin1D(datapoints,100,&max,&max_index,&min,&min_index); //將最大值最小值設置到控件中 SetCtrlVal(panelHandle,PANEL_NUMERIC,max); SetCtrlVal(panelHandle,PANEL_NUMERIC_2,min); //當數據產生完畢后,關閉"開始采樣按鈕" SetCtrlVal(panelHandle,PANEL_BINARYSWITCH,0); //當數據產生完畢后,關閉LED SetCtrlVal(panelHandle,PANEL_LED,0); //當數據產生完畢后,溫度計控件歸零 SetCtrlVal(panelHandle,PANEL_NUMERICTHERM,0.00); //當數據產生完畢后,設置LED的標題為"關" SetCtrlAttribute(panelHandle,PANEL_LED,ATTR_LABEL_TEXT,"關"); } else{ //關閉LED,即設置其值為0 SetCtrlVal(panelHandle,PANEL_LED,0); //溫度計控件值歸零 SetCtrlVal(panelHandle,PANEL_NUMERICTHERM,0.00); //設置LED的標題為“關” SetCtrlAttribute(panelHandle,PANEL_LED,ATTR_LABEL_TEXT,"關"); } break; } return 0; }