综合实验示波器Word文档格式.docx
- 文档编号:18120019
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:23
- 大小:619.84KB
综合实验示波器Word文档格式.docx
《综合实验示波器Word文档格式.docx》由会员分享,可在线阅读,更多相关《综合实验示波器Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
退出
LED
电源指示
Brinary
Switch
POWER
Power
电源开关
其余控件属性修改如下:
(1)频率增益控件
①将ConstantName项改为FREQGAIN
②将CallbackFunction项改为DataFunc
③将Label项改为频率增益
(ms/1单位)
④将Defaultindex项改为3(1ms)
修改结果如图2所示。
图2
选择Label/ValuePairs,对其属性进行修改,结果如图3
图3
(2)幅度增益控件
①将ConstantName项改为SCOPEGAIN
③将Label项改为幅度增益
(V/1单位)
④将Defaultindex项改为3(1V)
修改结果如图4所示
图4
图5
(3)波形选择控件
①将ConstantName项改为WAVEFORM
③将Label项改为波形选择
④将Defaultindex项改为1(正弦)
⑤选择Label/ValuePairs,对其属性进行修改,结果如图6
图6
(4)同理,可对其余类似控件作如上设置,结果如图所示
图7通道
图8通道的Label/ValuePairs属性
图9通道选择
图10通道选择的Label/ValuePairs属性
图11曲线滚动模式
图12曲线的滚动模式的Label/ValuePairs属性
(5)幅度选择控件
①将ConstantName项改为SCOPE
③将Label项改为幅度选择(V)
④将Defaultvalua项改为1.00
⑤选择RangValuas,作图13修改,选择Show/HideParts,作图14修改。
图13图14
(6)频率选择控件
①将ConstantName项改为FREQUENCY
③将Label项改为频率选择(Khz)
⑤其余修改同(5)
(7)时钟控件设置如图14所示
图15
(8)两文本控件设置如图所示
图16
图17
(9)描述型控件
点右键,选择Classic-StyleControls>
>
Decoration,选择所需控件。
设置方式如图所示:
图18
步骤3:
用代码生成器生成程序框架
从用户图形界面窗口中选择:
Code>
Generate>
AllCode…然后会显示出如下界面:
图19
请用你的鼠标点击SelectQuituserInterfaceCallback中的Quit项,确保其前面出现一个小钩,同时将PanelVaribleName改为handle。
点击OK按扭,便会弹出源代码(Code)窗,此时,便可以进行编程,在如下图光标处即可添加程序。
图20
步骤4、运行程序完成项目文件
选择Run>
Debug示波器_dbg.exe运行。
选择:
Edit>
AddFilestoProject…>
AllFiles(*.*),按住<
Ctrl>
键,点击示波器.h,示波器.c,示波器.uir。
然后点击Add按扭把这些文件方到SelectedFiles框中。
点击OK按扭,把以上文件添加到工程文件中去。
六、关键代码及注释
#include<
analysis.h>
ansi_c.h>
cvirte.h>
userint.h>
#include"
示波器.h"
#definePI3.1416
#defineTRUE1
#defineFALSE0
#defineMAX_POINTS51200
structCHANNELDATA//定义结构体
{
intwaveform;
doublefrequency;
doublescope;
intpointnum;
doubledata[MAX_POINTS];
}Channel1,Channel2;
staticinthandle;
intchannel=0,channel_signal=0;
doublechannel_scope_gain=1.0,channel_frequency_gain=1;
intchartmode=1;
//continue
intpower=0;
//off
staticdoubledata[MAX_POINTS*2];
voidGenerateData(void);
intmain(intargc,char*argv[])
{
if(InitCVIRTE(0,argv,0)==0)
return-1;
/*outofmemory*/
if((handle=LoadPanel(0,"
示波器.uir"
PANEL))<
0)
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();
return0;
}
intCVICALLBACKDataFunc(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
doublesignal_scope,signal_frequency;
switch(control)
{
casePANEL_SCOPEGAIN:
if(event==EVENT_VAL_CHANGED)
GetCtrlVal(handle,PANEL_SCOPEGAIN,&
channel_scope_gain);
break;
casePANEL_FREQGAIN:
GetCtrlVal(handle,PANEL_FREQGAIN,&
channel_frequency_gain);
casePANEL_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;
casePANEL_FREQUENCY:
GetCtrlVal(handle,PANEL_FREQUENCY,&
signal_frequency);
Channel1.frequency=signal_frequency;
Channel2.frequency=signal_frequency;
casePANEL_WAVEFORM:
if(event==EVENT_COMMIT)
GetCtrlVal(handle,PANEL_WAVEFORM,&
waveform);
if(channel_signal==0)
Channel1.waveform=waveform;
Channel2.waveform=waveform;
}
}
return(0);
intCVICALLBACKChartMode(intpanel,intcontrol,intevent,
intMode;
switch(event)
caseEVENT_COMMIT:
GetCtrlVal(handle,PANEL_CHART_MODE,&
chartmode);
switch(chartmode)
{
case0:
Mode=VAL_SWEEP;
break;
case1:
Mode=VAL_CONTINUOUS;
case2:
Mode=VAL_BLOCK;
}
SetCtrlAttribute(handle,PANEL_CHART,ATTR_SCROLL_MODE,Mode);
break;
intCVICALLBACKQuit(intpanel,intcontrol,intevent,
QuitUserInterface(0);
intCVICALLBACKSelectChannel(intpanel,intcontrol,intevent,
GetCtrlVal(handle,PANEL_CHANNEL,&
channel);
intCVICALLBACKTimer(intpanel,intcontrol,intevent,
inti;
caseEVENT_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);
intCVICALLBACKPower(intpanel,intcontrol,intevent,
GetCtrlVal(handle,PANEL_POWER,&
power);
SetCtrlVal(handle,PANEL_LED,power);
SetCtrlAttribute(handle,PANEL_TIMER,ATTR_ENABLED,power);
if(power==0)
ClearStripChart(handle,PANEL_CHART);
intCVICALLBACKChannelSignal(intpanel,intcontrol,intevent,
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);
intCVICALLBACKChannel(intpanel,intcontrol,intevent,
SetCtrlAttribute(handle,PANEL_CHART,ATTR_NUM_TRACES,1);
SetTraceAttribute(handle,PANEL_CHART,1,ATTR_TRACE_COLOR,VAL_GREEN);
}
SetTraceAttribute(handle,PANEL_CHART,1,ATTR_TRACE_COLOR,VAL_RED);
}
SetCtrlAttribute(handle,PANEL_CHART,ATTR_NUM_TRACES,2);
SetTraceAttribute(handle,PANEL_CHART,2,ATTR_TRACE_COLOR,VAL_RED);
}
voidCalculatePointNum()
if(channel==0)
Channel1.pointnum=1024/Channel1.frequency/channel_frequency_gain;
elseif(channel==1)
Channel2.pointnum=1024/Channel2.frequency/channel_frequency_gain;
else
{//SETSAMEPOINT
Channel2.pointnum=1024/Channel1.frequency/channel_frequency_gain;
voidGenerateData()
CalculatePointNum();
switch(Channel1.waveform)
{
case0:
for(i=0;
i<
Channel1.pointnum/2;
i++)
Channel1.data[i]=Channel1.scope/channel_scope_gain;
for(i=Channel1.pointnum/2;
Channel1.pointnum;
Channel1.data[i]=-Channel1.scope/channel_scope_gain;
case1:
Channel1.data[i]=sin(i*2.0*PI/Channel1.pointnum)*Channel1.scope/channel_scope_gain;
case2:
for(i=0;
Channel1.data[i]=((rand()/23767.0)-0.5)*Channel1.scope/channel_scope_gain;
switch(Channel2.waveform)
Channel2.pointnum/2;
Channel2.data[i]=Channel2.scope/channel_scope_gain;
for(i=Channel2.pointnum/2;
Channel2.pointnum;
Channel2.data[i]=-Channel2.scope/channel_scope_gain;
Channel2.data[i]=sin(i*2.0*PI/Channel2.pointnum)*Channel2.scope/channel_scope_gain;
Channel2.data[i]=((rand()/23767.0)-0.5)*Channel2.scope/channel_scope_gain;
if(channel==2)
for(i=0;
i<
i++)
data[i*2]=Channel1.data[i];
data[1+i*2]=Channel2.data[i];
}
七、实验结果
1、打开电源开关,指示灯亮,示波器处于默认初始状态,如图所示
图21
2、将波形选择改为噪声,其他不变,结果如图所示
图22
3、再将通道改为通道2,通道选择移向通道2,其他不变,结果如图所示
图23
4、将通道1波形改为正弦,再通道选择移向通道1、2,其他不变,结果如图所示
图24
5、将通道改为通道2,波形选择改为正弦,频率增益改为0.5ms,幅度增益改为0.5V,其他不变,结果如图所示
图25
6、将被测信号中的波形选择和幅度选择的值都改为2.00,幅度增益改为2V,其他不不变,结果如图所示
图26
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 综合 实验 示波器