📄 wave.c
字号:
static int PANEL_BGCOLOR;
static int bgcolor;
static int tracecolor;
static int PANEL_TRACECOLOR;
static int screen;
static int PANEL_SCREEN;
static int smooth;
static int PANEL_SMOOTH;
static int PANEL_SHIFT1;
static int PANEL_SHIFT2;
static int wave2form;
static int PANEL_WAVE2FORM;
static int channel;
static int PANEL_CHANNEL;
static int PANEL_SAMPLEFREQUENCY2;
static int PANEL_SAMPLEFREQUENCY1;
static double samplefrequency2;
static double samplefrequency1;
static int shift1;
static int shift2;
static int PANEL_WAVE1FORMS;
static int wave1forms;
static int wave2forms;
static int wave1points;
static int wave2points;
static int PANEL_PHASE1;
static int PANEL_PHASE2;
static int PANEL_CYCLES2;
static int PANEL_CYCLES1;
static int panelHandle;
static int PANEL_AMPLITUDE1;
static int PANEL_AMPLITUDE2;
static int panelHandle;
static double mark;
static double wave1[1000000];
static double waveout1[1000000];
static double waveout2[1000000];
static double wave2[1000000];
static double phase1;
static double phase2;
static double cycles1;
static double cycles2;
static double amplitude1;
static double amplitude2;
#include <cvirte.h>
#include <userint.h>
#include "wave.h"
#include <ansi_c.h>
#include <analysis.h>
#include <utility.h>
void plot1(void);
void plot2(void);
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0) /* Needed if linking in external compiler; harmless otherwise */
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "wave.uir", PANEL)) < 0)
return -1;
GetCtrlVal (panelHandle, PANEL_AMPLITUDE1, &litude1);
GetCtrlVal (panelHandle, PANEL_CYCLES1, &cycles1);
GetCtrlVal (panelHandle, PANEL_PHASE1, &phase1);
GetCtrlVal (panelHandle, PANEL_WAVE1FORMS, &wave1forms);
GetCtrlVal (panelHandle, PANEL_SAMPLEFREQUENCY1, &samplefrequency1);
GetCtrlVal (panelHandle, PANEL_SHIFT1, &shift1);
GetCtrlVal (panelHandle, PANEL_SHIFT2, &shift2);
GetCtrlVal (panelHandle, PANEL_AMPLITUDE2, &litude2);
GetCtrlVal (panelHandle, PANEL_CYCLES2, &cycles2);
GetCtrlVal (panelHandle, PANEL_PHASE2, &phase2);
GetCtrlVal (panelHandle, PANEL_WAVE2FORMS, &wave2forms);
GetCtrlVal (panelHandle, PANEL_SAMPLEFREQUENCY2, &samplefrequency2);
SetCtrlAttribute (panelHandle, PANEL_GRAPH, ATTR_DATA_MODE,
VAL_DISCARD);
GetCtrlVal (panelHandle, PANEL_SMOOTH, &smooth);
SetCtrlAttribute (panelHandle, PANEL_GRAPH, ATTR_SMOOTH_UPDATE, smooth);
GetCtrlVal (panelHandle, PANEL_TRACECOLOR, &tracecolor);
DisplayPanel (panelHandle);
mark=Timer();
RunUserInterface ();
return 0;
}
//退出
int CVICALLBACK quitcallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int confirm;
switch (event)
{
case EVENT_COMMIT:
confirm=ConfirmPopup("Confirm","Are you sure you want to quit system?");
if(confirm==1)
QuitUserInterface(0);
break;
case EVENT_RIGHT_CLICK:
MessagePopup ("Quit Button Help",
"This button quit the programe and close the pannel ");
break;
}
return 0;
}
//plot的回调函数
int CVICALLBACK plotcallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_CHANNEL, &channel);
switch (channel)
{
case 1:
plot1();
break;
case 2:
plot2();
break;
}
break;
case EVENT_RIGHT_CLICK:
MessagePopup ("Plot Button Help",
"This button plot the waveform in the graph");
break;
}
return 0;
}
//plot1子函数
void plot1()
{
wave1points=samplefrequency1*cycles1;
switch(wave1forms)
{
case 0:
SineWave (wave1points, amplitude1, cycles1/wave1points, &phase1, wave1);
break;
case 1:
SquareWave (wave1points, amplitude1, cycles1/wave1points, &phase1, 50.0,
wave1);
break;
case 2:
SawtoothWave (wave1points, amplitude1, cycles1/wave1points, &phase1,
wave1);
break;
case 3:
TriangleWave (wave1points, amplitude1, cycles1/wave1points, &phase1,
wave1);
break;
}
//平移
if (shift1>0)
{
Copy1D (wave1, wave1points - shift1, &waveout1[shift1]);
Copy1D (&wave1[wave1points - shift1], shift1, waveout1);
Copy1D (waveout1, wave1points, wave1);
}
/***------***/
SetCtrlAttribute (panelHandle, PANEL_SHIFT1, ATTR_MAX_VALUE,
wave1points-1);
GetCtrlVal (panelHandle, PANEL_SHIFT1, &shift1);
if (shift1>wave1points-1)
shift1=wave1points-1;
SetCtrlVal (panelHandle, PANEL_SHIFT1, shift1);
/***-------***/
DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
PlotY (panelHandle, PANEL_GRAPH, wave1, wave1points, VAL_DOUBLE,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1000, tracecolor);
}
//plot2子函数
void plot2()
{
wave2points=samplefrequency2*cycles2;
switch (wave2forms)
{
case 0:
SineWave (wave2points, amplitude2, cycles2/wave2points, &phase2, wave2);
break;
case 1:
SawtoothWave (wave2points, amplitude2, cycles2/wave2points, &phase2,
wave2);
break;
case 2:
Ramp (wave2points, 0.0, 1.0, wave2);
break;
}
//平移
if (shift2>0)
{
Copy1D (wave2, wave2points - shift2, &waveout2[shift2]);
Copy1D (&wave2[wave2points - shift2], shift2, waveout2);
Copy1D (waveout2, wave2points, wave2);
}
SetCtrlAttribute (panelHandle, PANEL_SHIFT2, ATTR_MAX_VALUE,
wave2points-1);
GetCtrlVal (panelHandle, PANEL_SHIFT2, &shift2);
if (shift2>wave2points-1)
shift2=wave2points-1;
SetCtrlVal (panelHandle, PANEL_SHIFT2, shift2);
DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
PlotY (panelHandle, PANEL_GRAPH, wave2, wave2points, VAL_DOUBLE,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1000, tracecolor);
}
/***通道1的幅值选择 ***/
int CVICALLBACK amplitude1callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_VAL_CHANGED:
GetCtrlVal (panelHandle, PANEL_AMPLITUDE1, &litude1);
SetCtrlVal (panelHandle, PANEL_AMPLITUDE1, amplitude1);
plot1();
break;
}
return 0;
}
/***取得周期数***/
int CVICALLBACK cycles1callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_VAL_CHANGED:
GetCtrlVal (panelHandle, PANEL_CYCLES1, &cycles1);
SetCtrlVal (panelHandle, PANEL_CYCLES1, cycles1);
plot1();
break;
}
return 0;
}
/***取得相位角***/
int CVICALLBACK phase1callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_VAL_CHANGED:
GetCtrlVal (panelHandle, PANEL_PHASE1, &phase1);
SetCtrlVal (panelHandle, PANEL_PHASE1, phase1);
plot1();
break;
}
return 0;
}
/***通道1的波形选择 ***/
int CVICALLBACK wave1formscallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_VAL_CHANGED:
GetCtrlVal (panelHandle, PANEL_WAVE1FORMS, &wave1forms);
plot1();
break;
}
return 0;
}
//通道1的采样频率
int CVICALLBACK samplefrequency1callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_VAL_CHANGED:
GetCtrlVal (panelHandle, PANEL_SAMPLEFREQUENCY1, &samplefrequency1);
SetCtrlVal (panelHandle, PANEL_SAMPLEFREQUENCY1, samplefrequency1);
break;
}
return 0;
}
//通道选择?
int CVICALLBACK channelcallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_CHANNEL, &channel);
break;
case EVENT_RIGHT_CLICK:
MessagePopup ("Channel Button Help",
"This button select the channel for waveform");
break;
}
return 0;
}
/***通道2的波形选择 ***/
int CVICALLBACK wave2formscallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_WAVE2FORMS, &wave2forms);
plot2();
break;
}
return 0;
}
/***得到幅值 ***/
int CVICALLBACK amplitude2callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_AMPLITUDE2, &litude2);
SetCtrlVal (panelHandle, PANEL_AMPLITUDE2, amplitude2);
plot2();
break;
}
return 0;
}
/***取得相位角***/
int CVICALLBACK phase2callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_PHASE2, &phase2);
SetCtrlVal (panelHandle, PANEL_PHASE2, phase2);
plot2();
break;
}
return 0;
}
//得到通道2的采样频率
int CVICALLBACK samplefrequency2callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_SAMPLEFREQUENCY2, &samplefrequency2);
SetCtrlVal (panelHandle, PANEL_SAMPLEFREQUENCY2, samplefrequency2);
break;
}
return 0;
}
/***获得波形的周期数***/
int CVICALLBACK cycles2callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_CYCLES2, &cycles2);
SetCtrlVal (panelHandle, PANEL_CYCLES2, cycles2);
plot2();
break;
}
return 0;
}
// 刷新功能每秒刷新一次
int CVICALLBACK updatecallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_TIMER_TICK:
GetCtrlVal (panelHandle, PANEL_CHANNEL, &channel);
switch (channel)
{
case 1:
plot1();
break;
case 2:
plot2();
break;
}
break;
}
return 0;
}
//得到通道1的偏移量shift1
int CVICALLBACK shift1callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_VAL_CHANGED:
GetCtrlVal (panelHandle, PANEL_SHIFT1, &shift1);
plot1();
break;
}
return 0;
}
//得到通道2的偏移量shift2
int CVICALLBACK shift2callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_SHIFT2, &shift2);
plot2();
break;
}
return 0;
}
//打开
int CVICALLBACK Openfilecall (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
break;
}
return 0;
}
//存盘
int CVICALLBACK SaveData(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
static char pathname[MAX_PATHNAME_LEN], dirname[MAX_PATHNAME_LEN];
int status, num,i ;
static FILE *file_handle;
switch (event)
{
case EVENT_COMMIT:
GetProjectDir (dirname);
status = FileSelectPopup (dirname, "datafile.dat",
"Datafiles (*.dat)", "DataFile Storage",
VAL_SAVE_BUTTON, 0, 1, 1, 1, pathname);
if (status != VAL_NO_FILE_SELECTED)
{
file_handle = fopen (pathname, "w+");
fprintf (file_handle, "OSCILLOSCOPE DEMO DATA FILE \n\n");
fprintf(file_handle, "Channel Acquired: CH%d\n", channel);
fprintf(file_handle, "Date %s Time: %s \n", DateStr(), TimeStr());
fprintf (file_handle, "----------------------------------\n");
for (i=0;i<samplefrequency1*cycles1;i++)
num = fprintf (file_handle, "%f\n", wave1[i]);
for (i=0;i<samplefrequency2*cycles2;i++)
num = fprintf (file_handle, "%f\n", wave2[i]);
fclose (file_handle);
}
break;
case EVENT_RIGHT_CLICK:
MessagePopup ("Save Button Help",
"This button saves the waveform to a data file");
break;
}
return(0);
}
//平滑功能
int CVICALLBACK smoothcallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_SMOOTH, &smooth);
SetCtrlAttribute (panelHandle, PANEL_GRAPH, ATTR_SMOOTH_UPDATE, smooth);
break;
}
return 0;
}
//清屏
int CVICALLBACK screencallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_SCREEN, &screen);
switch(screen)
{
case 0:
DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
SetCtrlAttribute (panelHandle, PANEL_GRAPH, ATTR_REFRESH_GRAPH, 1);
break;
case 1:
SetCtrlAttribute (panelHandle, PANEL_GRAPH, ATTR_REFRESH_GRAPH, 0);
break;
}
break;
}
return 0;
}
//线条颜色选择
int CVICALLBACK tracecolorcallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_VAL_CHANGED:
GetCtrlVal (panelHandle, PANEL_TRACECOLOR, &tracecolor);
break;
}
return 0;
}
//背景颜色设置
int CVICALLBACK bgcolorcallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_VAL_CHANGED:
GetCtrlVal (panelHandle, PANEL_BGCOLOR, &bgcolor);
if(bgcolor==VAL_BLACK)
SetCtrlAttribute (panelHandle, PANEL_GRAPH, ATTR_GRID_COLOR,
VAL_WHITE);
else
SetCtrlAttribute (panelHandle, PANEL_GRAPH, ATTR_GRID_COLOR,
VAL_BLACK);
SetCtrlAttribute (panelHandle, PANEL_GRAPH, ATTR_PLOT_BGCOLOR,
bgcolor);
break;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -