版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
姓名:学号:专业:综合实验:示波器实验目的(1)了解并掌握虚拟仪器的设计方法,具备初步的独立设计能力。(2)初步掌握对图形化编程语言LabWindows的编程、调试等基本技能。(3)提高综合运用所学的知识独立分析和解决问题的能力。二、实验内容编写一个如下图所示的虚拟示波器。图1三、实验仪器计算机一台,装有LabWindows四、实验原理根据labwindows实验指导书,完成对示波器的设计。五、实验步骤完成用户界面的设计,即仪表板。.首先在界面上加上若干Decoration的矩形来划分面板。选择Graph中的StripChart,设置如图1。图2StripChart设置在下面加一个text文件作为横坐标显示,设置为图2。图3text控件设置接着在左上角放置时钟控件,设置为图3。图4时钟控件设置然后放置电源开关控件和LED指示灯,如图4。图5电源开关及指示灯再放置接收信号频率增益和幅度增益控件,设置为图5和图6。图5接收信号频率增益图6接收信号幅度增益用代码生成器生成程序框架。选择Code>>Generate>>AllCode,在如图2面中选择QuitCallk项后确定。图7生成程序框架插入库函数。将鼠标放在需要插入库函数的地方,点击library菜单来插入。在Library>>AdvancedAnalysis有各种函数,选中任意函数会弹出设置面板,需要设置具体的参数。设置完成后选择Code>>InsertFunctionCall即完成函数插入。完成了程序框架的填写后对每个函数具体按照示波器的各个按钮的功能来写代码。此时要特别注意回调函数的用法,可以在函数上点击右键,选择BrowseIdentifier,如图3,来查看函数的定义与用法举例,还可以在右边的库中查找到其他有类似用法的函数,如图4,方便你的调用。图8查看函数定义图9库函数另外,还可以直接右键,选择FindUIObject来直接查看该函数对应的用户面板上的控件。再完成了程序的编写后就需要进行程序的调试了。点击菜单RunDebug**.exe或点击快捷栏内绿色三角图标就可以运行程序。未开启示波器时显示如图5.电源开关未按下时电源指示灯为绿色,开启电源开关后电源指示灯为红色。图10示波器面板此时,点击电源开关,在选择好输入信号形式,输入信号幅度和频率以及输入信号通道,接受信号通道,曲线滚动模式及频率增益和幅度增益后,就可以显示需要的波形了。六、关键代码及注释#include<analysis.h>//头文件#include<ansi_c.h>#include<cvirte.h> /*做扩展编译时需要*/#include<userint.h>#include"综合示波器.h"#definePI3.1416//宏命令定义#defineTRUE1#defineFALSE0#defineMAX_POINTS51200structCHANNELDATA{ 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;//继续intpower=0;//关闭//静态整形波形staticdoubledata[MAX_POINTS*2];voidGenerateData(void);intmain(intargc,char*argv[])//主函数{ if(InitCVIRTE(0,argv,0)==0) /*做扩展编译时需要*/ return-1; /*读出内存*/ if((handle=LoadPanel(0,"综合示波器.uir",PANEL))<0) return-1; DisplayPanel(handle); Channel1.frequency=1;//通道1初始频率 Channel1.scope=1.0;//通道1初始幅度 Channel1.pointnum=512;//通道1初始采样点数 Channel1.waveform=1;//正弦函数 Channel2.frequency=1; Channel2.scope=1.0; Channel2.pointnum=512; Channel2.waveform=1; RunUserInterface(); return0;}//函数参数设置函数intCVICALLBACKDataFunc(intpanel,intcontrol,intevent, void*callbackData,inteventData1,inteventData2){ doublesignal_scope,signal_frequency; intwaveform;switch(control){casePANEL_SCOPEGAIN:if(event==EVENT_VAL_CHANGED)GetCtrlVal(handle,PANEL_SCOPEGAIN,&channel_scope_gain);break;casePANEL_FREQGAIN:if(event==EVENT_VAL_CHANGED)GetCtrlVal(handle,PANEL_FREQGAIN,&channel_frequency_gain);break;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: if(event==EVENT_COMMIT) { GetCtrlVal(handle,PANEL_FREQUENCY,&signal_frequency); if(channel_signal==0) Channel1.frequency=signal_frequency; else Channel2.frequency=signal_frequency; } break;casePANEL_WAVEFORM:if(event==EVENT_COMMIT){ GetCtrlVal(handle,PANEL_WAVEFORM,&waveform); if(channel_signal==0) Channel1.waveform=waveform; else Channel2.waveform=waveform;}break;}return(0);}//曲线滚动模式选择intCVICALLBACKChartMode(intpanel,intcontrol,intevent, void*callbackData,inteventData1,inteventData2){ intMode; switch(event) { caseEVENT_COMMIT: GetCtrlVal(handle,PANEL_CHART_MODE,&chartmode); switch(chartmode) { case0:Mode=VAL_SWEEP; break; case1:Mode=VAL_CONTINUOUS; break; case2:Mode=VAL_BLOCK; break; } SetCtrlAttribute(handle,PANEL_CHART,ATTR_SCROLL_MODE,Mode); break; } return0;}//退出示波器intCVICALLBACKQuit(intpanel,intcontrol,intevent, void*callbackData,inteventData1,inteventData2){ switch(event) { caseEVENT_COMMIT: QuitUserInterface(0); break; } return0;}//通道选择intCVICALLBACKSelectChannel(intpanel,intcontrol,intevent, void*callbackData,inteventData1,inteventData2){ switch(event) { caseEVENT_COMMIT: GetCtrlVal(handle,PANEL_CHANNEL,&channel); break; } return0;}//定时函数intCVICALLBACKTimer(intpanel,intcontrol,intevent, void*callbackData,inteventData1,inteventData2){ inti; switch(event) { 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); break; } return0;}//电源开关intCVICALLBACKPower(intpanel,intcontrol,intevent, void*callbackData,inteventData1,inteventData2){ switch(event) { caseEVENT_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; } return0;}//输入信号通道选择intCVICALLBACKChannelSignal(intpanel,intcontrol,intevent, void*callbackData,inteventData1,inteventData2){ switch(event) { caseEVENT_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; } return0;}//显示波形通道选择intCVICALLBACKChannel(intpanel,intcontrol,intevent, void*callbackData,inteventData1,inteventData2){ switch(event) { caseEVENT_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; } return0;}//记数点函数voidCalculatePointNum(){ if(channel==0) Channel1.pointnum=1024/Channel1.frequency/channel_frequency_gain; elseif(channel==1) Channel2.pointnum=1024/Channel2.frequency/channel_frequency_gain; else {//设置同样的点 Channel1.pointnum=1024/Channel1.frequency/channel_frequency_gain; Channel2.pointnum=1024/Channel1.frequency/channel_frequency_gain; }}//参数设置函数voidGenerateData(){ inti; 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;i<Channel1.pointnum;i++) Channel1.data[i]=-Channel1.scope/channel_scope_gain;break;case1: for(i=0;i<Channel1.pointnum;i++) Channel1.data[i]=sin(i*2.0*PI/Channel1.pointnum)*Channel1.scope/channel_scope_gain;break;case2:for(i=0;i<Channel1.pointnum;i++)Channel1.data[i]=((rand()/23767.0)-0.5)*Channel1.scope/channel_scope_gain;break;} switch(Channel2.waveform){case0: 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;case1:for(i=0;i<Channel2.pointnum;i++)Channel2.data[i]=sin(i*2.0*PI/Channel2.pointnum)*Channel2.scope/channel_scope_gain;break;case2:for(i=0;i<Channel2.pointnum;i++)Channel2.data[i]=((rand()/23767.0)-0.5)*Channel2.scope/channel_scope_gain;break;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度品牌授权书图片合作使用协议3篇
- 2024年度智能物流设备采购与安装合同2篇
- 2024年平板车租赁与建筑行业运输服务合同2篇
- 2024年小吃店厨师聘请协议3篇
- 2024年度原材料卸车作业质量保证合同2篇
- 2024年度猪肉原料供应及收购合同3篇
- 2024年度脱硫石膏环保处理设备维护合同3篇
- 2024年度委托创作合同明确了创作的任务、要求和报酬等细节3篇
- 2024年度环保型垃圾处理设备购销合同2篇
- 2024宠物狗繁殖权转让合同
- (完整版)马来西亚建筑规范
- 三年级安全教案
- SOLO分类评价理论及应用解析(课堂PPT)
- 常熟农商银行笔试真题(附答案)
- 项目管理人员安全生产责任制确认书
- 路基排水沟边沟水力计算书
- 勘察项目服务计划方案
- 梁祝小提琴谱
- 法士特变速箱常用配件目录明细
- 膝痹病(膝关节骨性关节炎)中医临床路径
- 电力电子技术课程设计
评论
0/150
提交评论