⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3.c

📁 利用CVI制作虚拟示波器
💻 C
字号:
#include <analysis.h>
#include <ansi_c.h>
#include <cvirte.h>		
#include <userint.h>
#include "3.h"

static int panelHandle;
static double *wave;
int samples;
double *Mag;

int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                       LPSTR lpszCmdLine, int nCmdShow)
{
	if (InitCVIRTE (hInstance, 0, 0) == 0)
		return -1;	/* out of memory */
	if ((panelHandle = LoadPanel (0, "3.uir", PANEL)) < 0)
		return -1;
	DisplayPanel (panelHandle);
	RunUserInterface ();
	DiscardPanel (panelHandle);
	return 0;
}

int CVICALLBACK CalFFT (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
    double *Phase;
    double *Img;
    int i;
	switch (event)
		{
		case EVENT_COMMIT:
		Img=malloc(samples *sizeof(double));
		for(i=0;i<samples;i++)
		Img[i]=0;
		Mag=malloc( samples *sizeof(double));
		Phase=malloc(samples *sizeof(double));
		FFT(wave,Img,samples);
		ToPolar1D (wave, Img, samples, Mag, Phase);
		DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
		PlotY (panelHandle, PANEL_GRAPH, Mag, samples, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
			   VAL_SOLID, 1, VAL_RED);
		free(wave);
		free(Img);
		free(Phase);
			break;
		}
	return 0;
}

int CVICALLBACK GenerateWave (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
    double amp;
    int sampcyc;
    double f,p=0 ;
    double phase;
    double cycnum;
	switch (event)
		{
		case EVENT_COMMIT:
		GetCtrlVal (panelHandle, PANEL_AMP, &amp);
		GetCtrlVal (panelHandle, PANEL_SAMPCYC, &sampcyc);
		f=1.0/sampcyc;
		GetCtrlVal (panelHandle, PANEL_CYCNUM, &cycnum);  
		GetCtrlVal (panelHandle, PANEL_PHASE, &phase);  
		samples=cycnum*sampcyc;
		wave=malloc(samples *sizeof(double));
		SineWave (samples, amp, f, &phase, wave);
		DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW); 
		PlotY (panelHandle, PANEL_GRAPH, wave, samples, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
			   VAL_SOLID, 1, VAL_RED);
			break;
		}
	return 0;
}

int CVICALLBACK WatchSpm (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
    int k;
	switch (event)
		{
		case EVENT_COMMIT:
		 GetCtrlVal (panelHandle, PANEL_SELESPM, &k) ;
		 if(k<1|k>samples-2)
		 {
		 MessagePopup("Warning","the value of k is unacceptable");
		 break;
		 }
		 SetCtrlVal (panelHandle, PANEL_K_1SPM,Mag[k-1]);
		 SetCtrlVal (panelHandle, PANEL_KSPM, Mag[k]);
		 SetCtrlVal (panelHandle, PANEL_K1SPM, Mag[k+1]);
			break;
		}
	return 0;
}

int CVICALLBACK close (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		free(Mag);
			QuitUserInterface (0);
			break;
		}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -