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

📄 sample4_8.c

📁 CVI教程,用于信号采集系统的多任务开发软件.学习简单,功能实用.
💻 C
字号:
#include <analysis.h>#include <ansi_c.h>#include <cvirte.h>		/* Needed if linking in external compiler; harmless otherwise */#include <userint.h>#include "sample4_8.h"#define PI 3.1416#define TRUE 1#define FALSE 0#define MAX_POINTS 51200struct CHANNELDATA{	int waveform;	double frequency;		double scope;	int pointnum;	double data[MAX_POINTS];	}Channel1,Channel2;	static int handle;int channel=0,channel_signal=0;double channel_scope_gain=1.0,channel_frequency_gain=1;int chartmode=1;//continueint power=0;//off //static int waveform=1;//sinestatic double data[MAX_POINTS*2];void GenerateData(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 ((handle = LoadPanel (0, "sample4_8.uir", PANEL)) < 0)		return -1;	DisplayPanel (handle);	Channel1.frequency=1.0;	Channel1.scope=1.0;	Channel1.pointnum=512;	Channel1.waveform=1;//sin	Channel2.frequency=1.0;	Channel2.scope=1.0;	Channel2.pointnum=512;	Channel2.waveform=1;//sin   	RunUserInterface ();	return 0;}int CVICALLBACK DataFunc (int panel, int control, int event,		void *callbackData, int eventData1, int eventData2){   	double signal_scope,signal_frequency;   	int waveform;    switch (control)    {        case PANEL_SCOPEGAIN:            if (event == EVENT_VAL_CHANGED)                 GetCtrlVal (handle, PANEL_SCOPEGAIN, &channel_scope_gain);            break;        case PANEL_FREQGAIN:            if (event == EVENT_VAL_CHANGED)                 GetCtrlVal (handle, PANEL_FREQGAIN, &channel_frequency_gain);            break;        case PANEL_SCOPE:        	if (event == EVENT_COMMIT)            	{				GetCtrlVal (handle, PANEL_SCOPE, &signal_scope);				if(channel_signal==0)					Channel1.scope=signal_scope;				else					Channel2.scope=signal_scope;        	}        	break;        case PANEL_FREQUENCY:        	if (event == EVENT_COMMIT)            	{				GetCtrlVal (handle, PANEL_FREQUENCY, &signal_frequency);				if(channel_signal==0)					Channel1.frequency=signal_frequency;				else					Channel2.frequency=signal_frequency;          	}        	break;        case PANEL_WAVEFORM:            if (event == EVENT_COMMIT)            {            	GetCtrlVal (handle, PANEL_WAVEFORM, &waveform);             	if(channel_signal==0)					Channel1.waveform=waveform;				else					Channel2.waveform=waveform;              }               break;    }    return (0);}int CVICALLBACK ChartMode (int panel, int control, int event,		void *callbackData, int eventData1, int eventData2){	int Mode;	switch (event)	{		case EVENT_COMMIT:			GetCtrlVal (handle, PANEL_CHART_MODE, &chartmode);			switch(chartmode)			{				case 0: Mode=VAL_SWEEP;					break;				case 1: Mode= VAL_CONTINUOUS;					break;				case 2: Mode= VAL_BLOCK;					break;			}			SetCtrlAttribute (handle, PANEL_CHART, ATTR_SCROLL_MODE, Mode);			break;	}	return 0;}int CVICALLBACK Quit (int panel, int control, int event,		void *callbackData, int eventData1, int eventData2){	switch (event)	{		case EVENT_COMMIT:			QuitUserInterface (0);			break;	}	return 0;}int CVICALLBACK SelectChannel (int panel, int control, int event,		void *callbackData, int eventData1, int eventData2){	switch (event)	{		case EVENT_COMMIT:			GetCtrlVal (handle, PANEL_CHANNEL, &channel);			break;	}	return 0;}int CVICALLBACK Timer (int panel, int control, int event,		void *callbackData, int eventData1, int eventData2){	int i;	switch (event)	{		case EVENT_TIMER_TICK:			GenerateData();			if(channel==0)				PlotStripChart (handle, PANEL_CHART, Channel1.data, Channel1.pointnum, 0, 0, VAL_DOUBLE); 			if(channel==1)				PlotStripChart (handle, PANEL_CHART, Channel2.data, Channel2.pointnum, 0, 0, VAL_DOUBLE); 			if(channel==2)				PlotStripChart (handle, PANEL_CHART, data, Channel1.pointnum*2, 0, 0, VAL_DOUBLE); 			break;	}	return 0;}int CVICALLBACK Power (int panel, int control, int event,		void *callbackData, int eventData1, int eventData2){   	switch (event)	{		case EVENT_COMMIT:			GetCtrlVal (handle, PANEL_POWER, &power);			SetCtrlVal (handle, PANEL_LED, power);			SetCtrlAttribute (handle, PANEL_TIMER, ATTR_ENABLED, power); 			if(power==0)				ClearStripChart (handle, PANEL_CHART);	  			break;	}	return 0;}int CVICALLBACK ChannelSignal (int panel, int control, int event,		void *callbackData, int eventData1, int eventData2){	switch (event)	{		case EVENT_COMMIT:			GetCtrlVal (handle, PANEL_CHANNELSIGNAL, &channel_signal);			if(channel_signal==0)			{				SetCtrlVal (handle, PANEL_FREQUENCY, Channel1.frequency); 				SetCtrlVal (handle, PANEL_SCOPE, Channel1.scope); 				SetCtrlVal(handle,PANEL_WAVEFORM,Channel1.waveform) ;			}			else			{				SetCtrlVal (handle, PANEL_FREQUENCY, Channel2.frequency); 				SetCtrlVal (handle, PANEL_SCOPE, Channel2.scope); 				SetCtrlVal(handle,PANEL_WAVEFORM,Channel2.waveform);    			}						break;	}	return 0;}int CVICALLBACK Channel (int panel, int control, int event,		void *callbackData, int eventData1, int eventData2){	switch (event)	{		case EVENT_COMMIT:			GetCtrlVal (handle, PANEL_CHANNEL, &channel);			if(channel==0)			{				SetCtrlAttribute (handle, PANEL_CHART, ATTR_NUM_TRACES, 1);				SetTraceAttribute (handle,PANEL_CHART,1 ,ATTR_TRACE_COLOR, VAL_GREEN);      			}			  			if(channel==1)			{				SetCtrlAttribute (handle, PANEL_CHART, ATTR_NUM_TRACES, 1);				SetTraceAttribute (handle, PANEL_CHART,1, ATTR_TRACE_COLOR, VAL_RED);      			}							  			if(channel==2)			{				SetCtrlAttribute (handle, PANEL_CHART, ATTR_NUM_TRACES, 2);				SetTraceAttribute (handle, PANEL_CHART,1,ATTR_TRACE_COLOR, VAL_GREEN);      				SetTraceAttribute (handle, PANEL_CHART,2,ATTR_TRACE_COLOR, VAL_RED);      			}				break;	}	return 0;}void CalculatePointNum(){  	if(channel==0)		Channel1.pointnum=1024/Channel1.frequency/channel_frequency_gain ;	else if(channel==1)		Channel2.pointnum=1024/Channel2.frequency/channel_frequency_gain ;    	else	{   //SET SAME POINT		Channel1.pointnum=1024/Channel1.frequency/channel_frequency_gain ;  		Channel2.pointnum=1024/Channel1.frequency/channel_frequency_gain ;	}  }void GenerateData(){		int i;	CalculatePointNum();		switch (Channel1.waveform)                                                                           {                                                                                           case 0:         	for (i=0; i<Channel1.pointnum/2; i++)                                                                                                                                          	     Channel1.data[i] =Channel1.scope/channel_scope_gain ;         	for (i=Channel1.pointnum/2; i<Channel1.pointnum; i++)                                                                                                                                          	     Channel1.data[i] =-Channel1.scope/channel_scope_gain ;             break;                                                                              case 1:          	for (i=0; i<Channel1.pointnum; i++)                                                                                                                                          	     Channel1.data[i] = sin (i*2.0*PI/Channel1.pointnum) * Channel1.scope/channel_scope_gain ;             break;        case 2:                                                                                     for (i=0; i<Channel1.pointnum; i++)                                                                Channel1.data[i] = ((rand()/23767.0) - 0.5) * Channel1.scope/channel_scope_gain ;                                      break;                                                                          } 	switch (Channel2.waveform)                                                                           {                                                                                           case 0:         	for (i=0; i<Channel2.pointnum/2; i++)                                                                                                                                          	     Channel2.data[i] =Channel2.scope/channel_scope_gain ;         	for (i=Channel2.pointnum/2; i<Channel2.pointnum; i++)                                                                                                                                          	     Channel2.data[i] =-Channel2.scope/channel_scope_gain ;             break;                                                                              case 1:              for (i=0; i<Channel2.pointnum; i++)                                                                               Channel2.data[i] = sin (i*2.0*PI/Channel2.pointnum) * Channel2.scope/channel_scope_gain ;                break;        case 2:                                                                                     for (i=0; i<Channel2.pointnum; i++)                                                                Channel2.data[i] = ((rand()/23767.0) - 0.5) * Channel2.scope/channel_scope_gain ;                                                  break;                                                                          }     if(channel==2)    	for(i=0;i<Channel1.pointnum;i++)    	{    		data[i*2]=Channel1.data[i];    		data[1+i*2]=Channel2.data[i];       	}	 }

⌨️ 快捷键说明

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