版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
姓名:學(xué)號:專業(yè):綜合實(shí)驗(yàn):示波器實(shí)驗(yàn)?zāi)康模?)了解并掌握虛擬儀器的設(shè)計(jì)方法,具備初步的獨(dú)立設(shè)計(jì)能力。(2)初步掌握對圖形化編程語言LabWindows的編程、調(diào)試等基本技能。(3)提高綜合運(yùn)用所學(xué)的知識獨(dú)立分析和解決問題的能力。二、實(shí)驗(yàn)內(nèi)容編寫一個(gè)如下圖所示的虛擬示波器。圖1三、實(shí)驗(yàn)儀器計(jì)算機(jī)一臺,裝有LabWindows四、實(shí)驗(yàn)原理根據(jù)labwindows實(shí)驗(yàn)指導(dǎo)書,完成對示波器的設(shè)計(jì)。五、實(shí)驗(yàn)步驟完成用戶界面的設(shè)計(jì),即儀表板。.首先在界面上加上若干Decoration的矩形來劃分面板。選擇Graph中的StripChart,設(shè)置如圖1。圖2StripChart設(shè)置在下面加一個(gè)text文件作為橫坐標(biāo)顯示,設(shè)置為圖2。圖3text控件設(shè)置接著在左上角放置時(shí)鐘控件,設(shè)置為圖3。圖4時(shí)鐘控件設(shè)置然后放置電源開關(guān)控件和LED指示燈,如圖4。圖5電源開關(guān)及指示燈再放置接收信號頻率增益和幅度增益控件,設(shè)置為圖5和圖6。圖5接收信號頻率增益圖6接收信號幅度增益用代碼生成器生成程序框架。選擇Code>>Generate>>AllCode,在如圖2面中選擇QuitCallk項(xiàng)后確定。圖7生成程序框架插入庫函數(shù)。將鼠標(biāo)放在需要插入庫函數(shù)的地方,點(diǎn)擊library菜單來插入。在Library>>AdvancedAnalysis有各種函數(shù),選中任意函數(shù)會彈出設(shè)置面板,需要設(shè)置具體的參數(shù)。設(shè)置完成后選擇Code>>InsertFunctionCall即完成函數(shù)插入。完成了程序框架的填寫后對每個(gè)函數(shù)具體按照示波器的各個(gè)按鈕的功能來寫代碼。此時(shí)要特別注意回調(diào)函數(shù)的用法,可以在函數(shù)上點(diǎn)擊右鍵,選擇BrowseIdentifier,如圖3,來查看函數(shù)的定義與用法舉例,還可以在右邊的庫中查找到其他有類似用法的函數(shù),如圖4,方便你的調(diào)用。圖8查看函數(shù)定義圖9庫函數(shù)另外,還可以直接右鍵,選擇FindUIObject來直接查看該函數(shù)對應(yīng)的用戶面板上的控件。再完成了程序的編寫后就需要進(jìn)行程序的調(diào)試了。點(diǎn)擊菜單RunDebug**.exe或點(diǎn)擊快捷欄內(nèi)綠色三角圖標(biāo)就可以運(yùn)行程序。未開啟示波器時(shí)顯示如圖5.電源開關(guān)未按下時(shí)電源指示燈為綠色,開啟電源開關(guān)后電源指示燈為紅色。圖10示波器面板此時(shí),點(diǎn)擊電源開關(guān),在選擇好輸入信號形式,輸入信號幅度和頻率以及輸入信號通道,接受信號通道,曲線滾動模式及頻率增益和幅度增益后,就可以顯示需要的波形了。六、關(guān)鍵代碼及注釋#include<analysis.h>//頭文件#include<ansi_c.h>#include<cvirte.h> /*做擴(kuò)展編譯時(shí)需要*/#include<userint.h>#include"綜合示波器.h"#definePI3.1416//宏命令定義#defineTRUE1#defineFALSE0#defineMAX_POINTS51200structCHANNELDATA{ intwaveform; doublefrequency; doublescope; intpointnum; doubledata[MAX_POINTS];//定義通道數(shù)據(jù)結(jié)構(gòu)體 }Channel1,Channel2;staticinthandle;//定義參數(shù)intchannel=0,channel_signal=0;doublechannel_scope_gain=1.0,channel_frequency_gain=1;intchartmode=1;//繼續(xù)intpower=0;//關(guān)閉//靜態(tài)整形波形staticdoubledata[MAX_POINTS*2];voidGenerateData(void);intmain(intargc,char*argv[])//主函數(shù){ if(InitCVIRTE(0,argv,0)==0) /*做擴(kuò)展編譯時(shí)需要*/ return-1; /*讀出內(nèi)存*/ if((handle=LoadPanel(0,"綜合示波器.uir",PANEL))<0) return-1; DisplayPanel(handle); Channel1.frequency=1;//通道1初始頻率 Channel1.scope=1.0;//通道1初始幅度 Channel1.pointnum=512;//通道1初始采樣點(diǎn)數(shù) Channel1.waveform=1;//正弦函數(shù) Channel2.frequency=1; Channel2.scope=1.0; Channel2.pointnum=512; Channel2.waveform=1; RunUserInterface(); return0;}//函數(shù)參數(shù)設(shè)置函數(shù)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;}//定時(shí)函數(shù)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;}//電源開關(guān)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;}//記數(shù)點(diǎn)函數(shù)voidCalculatePointNum(){ if(channel==0) Channel1.pointnum=1024/Channel1.frequency/channel_frequency_gain; elseif(channel==1) Channel2.pointnum=1024/Channel2.frequency/channel_frequency_gain; else {//設(shè)置同樣的點(diǎn) Channel1.pointnum=1024/Channel1.frequency/channel_frequency_gain; Channel2.pointnum=1024/Channel1.frequency/channel_frequency_gain; }}//參數(shù)設(shè)置函數(shù)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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療機(jī)構(gòu)人力資源管理與發(fā)展
- 企業(yè)員工管理制度佳作選集
- 上海工藝美術(shù)職業(yè)學(xué)院《生物制藥基礎(chǔ)及應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 物聯(lián)網(wǎng)模擬試題與答案
- 評估作價(jià)證明告知承諾書(模板)
- 家庭假期的安全套路
- 精-品解析:廣東省深圳紅嶺中學(xué)2024-2025學(xué)年高一上學(xué)期第一學(xué)段考(期中)英語試題(解析版)
- 旋律舞蹈課程設(shè)計(jì)
- 國學(xué)啟蒙幼兒園課程設(shè)計(jì)
- 早教音樂花園課程設(shè)計(jì)
- 節(jié)水型社會建設(shè)規(guī)劃編制導(dǎo)則
- 切割鋼絲,簾線濕拉
- 宜都市產(chǎn)業(yè)集群基本情況及產(chǎn)業(yè)鏈
- SF_T 0119-2021 聲像資料鑒定通用規(guī)范_(高清版)
- 汽車機(jī)械識圖圖期末考試卷
- 五年級科學(xué)下冊 給冷水加熱課件1 教科版
- 冪的運(yùn)算綜合專項(xiàng)練習(xí)50題(共7頁)
- 內(nèi)臟疾病康復(fù) 向云
- 農(nóng)村留守婦女創(chuàng)業(yè)就業(yè)情況調(diào)研報(bào)告
- 大型電力變壓器安裝監(jiān)理工作要點(diǎn)
- 第三次全國文物普查建檔備案工作規(guī)范
評論
0/150
提交評論