?? sample4_8.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 + -