版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、nMATLAB的的GUI程序設(shè)計可以用兩種方式實現(xiàn),程序設(shè)計可以用兩種方式實現(xiàn),一種是借助一種是借助GUI開發(fā)工具開發(fā)工具GUIDE,一種是利用,一種是利用m文件代碼構(gòu)建界面。采用文件代碼構(gòu)建界面。采用GUIDE進(jìn)行設(shè)計的方法進(jìn)行設(shè)計的方法直觀方便,容易上手。直觀方便,容易上手。n本章主要介紹利用本章主要介紹利用GUIDE方法進(jìn)行設(shè)計的步驟。方法進(jìn)行設(shè)計的步驟。第第7章章MATLAB 圖形界面設(shè)計圖形界面設(shè)計7.1 GUI設(shè)計工具設(shè)計工具Guide簡介簡介nMATLAB提供了用戶圖形界面開發(fā)程序提供了用戶圖形界面開發(fā)程序GUIDE,支,支持可視化編輯。持可視化編輯。n它是一種基于事件或者說是事
2、件驅(qū)動的程序(它是一種基于事件或者說是事件驅(qū)動的程序(event driven),類似于方便易用的),類似于方便易用的Visual Basic。7.1.1 GUIDE的啟動的啟動n可以如下不同方式啟動可以如下不同方式啟動GUIDE:n1. 在命令窗口提示符下輸入在命令窗口提示符下輸入guide;n2. 在工具欄選打開;在工具欄選打開;n3. 在在Start菜單中選菜單中選MATLAB ;n4. MATLAB File 菜單中選菜單中選New GUI??瞻捉缑嬗锌丶哪0褰缑嬗休S對象和菜單的模板界面標(biāo)準(zhǔn)詢問窗口7.1.2 GUI界面的創(chuàng)建n用戶創(chuàng)建創(chuàng)建新的GUI,也可打開打開已有的GUI。創(chuàng)建界
3、面時還可在模板基礎(chǔ)上進(jìn)行,在選擇GUI模板時,啟動界面右側(cè)提供了預(yù)覽。以以“GUI with axes and menu”模板創(chuàng)建的模板創(chuàng)建的GUI初始界面初始界面GUIDE工具欄上的工具按鈕 u對象瀏覽器對象瀏覽器(Object Browser)用于獲得當(dāng)前Matlab圖形用戶界面程序中的全部對象信息,對象的類型,同時顯示控件的名稱和標(biāo)識,在控件上雙擊鼠標(biāo)可以打開該控件的屬性編輯器;u布局編輯器布局編輯器(Layout Edtor)在圖形窗口中創(chuàng)建及布置圖形對象。布局編輯器是可以啟動用戶界面的控制面板,上述工具都必須從布局編輯器中訪問,用用guide命令可以啟動,命令可以啟動,或在啟動平臺窗
4、口中選擇或在啟動平臺窗口中選擇GUIDE來啟動布局編輯器;來啟動布局編輯器;u幾何排列工具幾何排列工具(Alignment Tool)調(diào)整各對象相互之間的幾何關(guān)系和位置;u屬性查看器屬性查看器(Property Inspector)查詢并設(shè)置屬性值;u菜單編輯器菜單編輯器(Menu Editor)創(chuàng)建、設(shè)計、修改下拉式菜單和快捷菜單;uTab順序編輯器順序編輯器(Tab Order Editor)用于設(shè)置當(dāng)用戶按下鍵盤上的Tab鍵時,對象被選中的先后順序。 用戶控件用戶控件對象選擇按鈕,用來選取工作區(qū)的控件。單功能按鍵,按下操作代表一定功能實現(xiàn)。雙位按鍵,代表“開”“關(guān)”兩種狀態(tài)。互斥選擇按鈕
5、,多個選項互斥選擇時使用?;ト葸x擇按鈕,同時選中多個選項時使用。編輯文本框,可以自由輸入字符和字符串靜態(tài)文本框,用于顯示注釋,不可編輯。滑動塊,利用游標(biāo)滑動,可以獲取不同值??丶^(qū)域框,用于對控件區(qū)域進(jìn)行標(biāo)識。列表框,提供多個互容的可供選擇選項。彈出框,有多個選項,只能選擇其中一項。軸對象,用來顯示圖形。 按鈕按鈕(Push Buttons):執(zhí)行某種預(yù)定的功能或操作; 開關(guān)按鈕開關(guān)按鈕(Toggle Button):產(chǎn)生一個動作并指示一個二進(jìn)制狀態(tài)(開或關(guān)),當(dāng)鼠點擊它時按鈕將下陷,并執(zhí)行callback(回調(diào)函數(shù))中指定的內(nèi)容,再次點擊,按鈕復(fù)原,并再次執(zhí)行callback 中的內(nèi)容; 單
6、選框單選框(Radio Button):單個的單選框用來在兩種狀態(tài)之間切換,多個單選框組成一個單選框組時,用戶只能在一組狀態(tài)中選擇單一的狀態(tài),或稱為單選項; 復(fù)選框復(fù)選框(Check Boxes):單個的復(fù)選框用來在兩種狀態(tài)之間切換,多個復(fù)選框組成一個復(fù)選框組時,可使用戶在一組狀態(tài)中作組合式的選擇,或稱為多選項; 文本編輯器文本編輯器(Editable Texts):用來使用鍵盤輸入字符串 的值,可以對編輯框中的內(nèi)容進(jìn)行編輯、刪除和替換等操作; 靜態(tài)文本框靜態(tài)文本框(Static Texts):僅用于顯示單行的說明文字; 滾動條滾動條(Slider): 可輸入指定范圍的數(shù)量值; 邊框邊框(Fr
7、ames):在圖形窗口圈出一塊區(qū)域; 列表框列表框(List Boxes):在其中定義一系列可供選擇的字符串; 彈出式菜單彈出式菜單(Popup Menus): 讓用戶從一列菜單項中選擇一項作為參數(shù)輸入;此外還有坐標(biāo)軸(Axes), 用于顯示圖形和圖象。修改控件屬性修改控件屬性n每個控件不可能是完全符合界面設(shè)計要求的,需要對其屬性進(jìn)行設(shè)置,以獲得所需界面顯示效果??梢酝ㄟ^雙擊該控件,或利用下拉菜單View: Property Inspector打開控件屬性對話框。例如右圖是“+”按鈕的屬性列表。n下面對各控件的主要屬性進(jìn)行一下說明。n1) 雙擊設(shè)計工作區(qū)空白部分,打開整個圖形窗屬性框。nMun
8、uBar: none %圖形窗是否使用標(biāo)準(zhǔn)菜單nName: caculator %圖形窗名稱nResize: off %圖形窗不能縮放nTag: mainWnd %圖形窗的句柄handles.mainWndn2) 靜態(tài)文本編輯框的屬性設(shè)置。nFontSize: 15%字體大小nFontUnits: points%字體大小的度量單位nHorizontalAlignment: Center%對齊方式nString: Expression%待顯示的字符nTag: text1%靜態(tài)文本框句柄handles.text1nUnits: points%文本框度量單位 Units或或FontUnits可選擇:
9、可選擇:inches(英寸英寸),centimeters (厘米厘米), normalized(按比例縮放按比例縮放),points(點陣點陣), pixels (像素像素), characters(字符字符)。如果選擇。如果選擇normalized,那么當(dāng),那么當(dāng)resize設(shè)為設(shè)為on時,控件或字體大小隨著整個窗口的縮放而改時,控件或字體大小隨著整個窗口的縮放而改變。變。 水平對齊方式水平對齊方式 Horizontal Alignment可以是可以是left, center, right。 控件句柄控件句柄Tag有默認(rèn)值,建議修改為帶有具體含義的字有默認(rèn)值,建議修改為帶有具體含義的字符串,
10、以增加程序可讀性和方便回調(diào)函數(shù)調(diào)用。符串,以增加程序可讀性和方便回調(diào)函數(shù)調(diào)用。n3) 可編輯文本框的屬性設(shè)置。nString: 0%初始狀態(tài)下顯示數(shù)字0nTag: pExp%可編輯文本框的句柄n其它和靜態(tài)文本框相同n4) 單功能按鈕屬性設(shè)置。以按鈕“1” 為例nString: 1nTag: p1n其它和靜態(tài)文本框相同。n界面激活n保存靜態(tài)界面后,利用工具欄上的運(yùn)行按鈕激活該界面。激活后可以看到兩個同名文件:m和fig。nm文件在M文本編輯器中打開, fig文件顯示為操作界面,但是無法實現(xiàn)任何功能,需要編寫回調(diào)函數(shù)。n精細(xì)調(diào)整n利用對齊工具,排列控件的位置,使控件的大小、位置更加協(xié)調(diào)。n精細(xì)調(diào)整
11、n利用對齊工具,排列控件的位置,使控件的大小、位置更加協(xié)調(diào)。回調(diào)函數(shù)回調(diào)函數(shù)n在M文本編輯器中打開m文件,可以看到自動生成的回調(diào)函數(shù),該函數(shù)的命名利用對象句柄進(jìn)行區(qū)分,沒有任何執(zhí)行語句。n回調(diào)函數(shù):Tag_Callback(hObject, eventdata, handles),通過加入自己的處理語句,可以實現(xiàn)所需功能。n其中hObject是控件的句柄;eventdata是備用參數(shù),目前沒有定義;handles是用戶數(shù)據(jù),本身是一個結(jié)構(gòu)數(shù)組,存放了當(dāng)前窗口的所有對象的句柄,包括圖形窗本身、所有控件和菜單的句柄。并且可以增加一些域用來傳遞用戶數(shù)據(jù)。n利用guidata( H, handles
12、)可以更新 H 的用戶數(shù)據(jù)。7.2 GUI程序設(shè)計示例程序設(shè)計示例n本節(jié)通過示例,演示本節(jié)通過示例,演示MATLAB的的GUI程序設(shè)計。程序設(shè)計?!癏ello World”程序的設(shè)計n下面以一個類似于學(xué)習(xí)其它程序設(shè)計的第一個程序“Hello World”為例,講解GUIDE的有關(guān)知識。n程序的目標(biāo)是當(dāng)按下按鈕時,由文本控件顯示“Hello World”。 顯示控件名稱的設(shè)置界面 對界面左側(cè)的控件如果不夠熟悉的話,可以通過FilePreferences選項,選中“Show names in component palette” GUI設(shè)計界面在顯示控制圖標(biāo)的同時,還顯示控件名稱 n1. “Hel
13、lo World”程序界面設(shè)計n2. “Hello World”程序的設(shè)計n3. 程序測試運(yùn)行nGUI設(shè)計中的界面設(shè)計部分比較容易。在窗口上添加一個按鈕控件(Push Button)和一個文本控件(Static Text)??呻p擊控件調(diào)出屬性編輯器進(jìn)行其屬性設(shè)置。n設(shè)按鈕控件的“String”屬性為“問候”,“Tag”屬性為“helloBt”,見右圖按鈕屬性設(shè)置 n設(shè)置文本控件的“String”屬性為空,表示初始狀態(tài)下不顯示任何信息,“Tag”屬性為“helloStr”,為顯示清楚,設(shè)其“FontSize”屬性為“28”。見右圖文本控件屬性設(shè)置 n“Tag”屬性設(shè)置要唯一,因為“Tag”屬性是
14、唯一標(biāo)識控件的。n至此,我們的界面設(shè)計工作完成。n保存時,會生成2個文件,helloworld.fig,helloworld.m。n此外可通過ToolsMenu Editor進(jìn)行類似于Windows程序的菜單設(shè)計。編輯窗口見左圖,效果見右圖。 菜單設(shè)計的編輯窗口菜單效果圖利用菜單編輯器可創(chuàng)建、設(shè)置、修改下拉式菜單和快捷菜單。選擇 Tools 菜單的 Menu Editor.子菜單,可打開菜單編輯器。菜單編輯器菜單編輯器(Menu Editor)菜單可通過編程實現(xiàn),從GUI設(shè)計窗口的工具欄上選擇Menu Editor命令按鈕,打開菜單編輯程序。 菜單編輯器包括菜單的設(shè)計和編輯,菜單編輯器有八個快
15、捷鍵,可以利用它們?nèi)我馓砑踊騽h除菜單,可以設(shè)置菜單項的屬性,包括名稱(Label)、標(biāo)識(Tag)、選擇是否顯示分隔線(Separator above this item)、是否在菜單前加上選中標(biāo)記(Item is checked)、調(diào)用函數(shù)(Callback)。 菜單編輯器左上角的第一個按鈕用于創(chuàng)建一級菜單項。第二個按鈕用于創(chuàng)建一級菜單的子菜單。菜單編輯器左下角有兩個按鈕,選擇第一個按鈕可創(chuàng)建下拉式菜單。選擇第二個按鈕可創(chuàng)建Context Menu菜單。選擇它后,菜單編輯器左上角的第三個按鈕就會變成可用,單擊它就可以創(chuàng)建Context Menu主菜單。在選中已經(jīng)創(chuàng)建的Context Menu
16、主菜單后,可以單擊第二個按鈕創(chuàng)建選中的Context Menu主菜單的子菜單。與下拉式菜單一樣,選中創(chuàng)建的某個Context Menu菜單,菜單編輯器的右邊就會顯示該菜單的有關(guān)屬性,可以設(shè)置、修改菜單屬性。 菜單編輯器左上角的第四個與第五個按鈕用于對選中的菜單進(jìn)行左移與右移,第六與第七個按鈕用于對選中的菜單進(jìn)行上移與下移,最右邊的按鈕用于刪除選中的菜單。n按照要求,我們可以給按鈕添加動作,即給它編寫一個回調(diào)函數(shù)(Callback)。n右鍵單擊按鈕,選擇View CallbacksCallback自動打開helloworld.m文件并指向該回調(diào)函數(shù)。n根據(jù)需要為其添加語句。程序?qū)⒕浔痟andl
17、es的helloStr(即文本控件)“String”屬性設(shè)置為“Hello World”,即完成了設(shè)計要求。n下面這段程序的意思是當(dāng)點擊按鈕時,即由程序設(shè)置文本控件的“String”屬性值為“Hello World”。function helloBt_Callback(hObject, eventdata, handles)set(handles.helloStr,String,Hello World !);n注意回調(diào)函數(shù)的概念,它指的是在對象的某一個事件發(fā)生時,MATLAB內(nèi)部機(jī)制允許自動調(diào)用的函數(shù)。n其幾個參數(shù)的意思分別為 hObject表示當(dāng)前窗口的句柄; eventdata表示事件代碼
18、,為保留 handles是該窗口中的所有句柄的集合。n回調(diào)函數(shù)有的是針對窗口而言的,有的是對具體控件而言的,學(xué)會回調(diào)函數(shù)的編寫有助于高效編寫MATLAB GUI程序 n在程序編輯窗口運(yùn)行測試,或在命令窗口鍵入程序名稱“helloworld”,即可運(yùn)行。如下圖:n注意: 當(dāng)不小心將helloworld.fig關(guān)掉后,再次編輯需要重新打開。其方法可以通過FileNewGUIOpen Existing GUI來打開。 如按照一般理解選擇FileOpen項的話,只能打開其運(yùn)行窗口而不可編輯。例例10 使用Push Button按鈕與靜態(tài)文本框設(shè)計GUI,在窗口中顯示單擊按鈕次數(shù)。(1) 在界面上安裝一
19、個命令按鈕和一個靜態(tài)文本框(2) 使用對象的屬性窗口設(shè)置控件的屬性(3) 打開該GUI的 m 文件,文件中已經(jīng)自動生成代碼。找到函數(shù)function pushbutton1_Callback(hObject, eventdata, handles)在這個函數(shù)名稱下面寫入如下程序段:persistent cif isempty(c) c=0endc=c+1;str=sprintf(Total Clicks: %d,c);set(handles.text1,String,str);保存程序后,單擊Click按鈕,則在什么的文本框中顯示單擊次數(shù)。例例11 制作一個簡易的加減法計算器。(1) 在界面上
20、安裝兩個編輯文本框、一個靜態(tài)文本框與兩個命令按鈕(2) 使用對象的屬性窗口設(shè)置控件的屬性(3) 打開該GUI的 m 文件ex11.m,在函數(shù)pushbutton1_Callback 與 pushbutton2_Callback中加入代碼,如下所示:function pushbutton1_Callback(hObject, eventdata, handles)s1=str2double(get(handles.edit1,String)s2=str2double(get(handles.edit2,String)set(handles.text1,String,s1+s2);function
21、 pushbutton2_Callback(hObject, eventdata, handles)s1=str2double(get(handles.edit1,String)s2=str2double(get(handles.edit2,String)set(handles.text1,String,s1-s2);例例12 使用3個單選鈕控制靜態(tài)文本框的背景顏色。function radiobutton1_Callback(hObject, eventdata, handles)set(handles.text1,BackGroundColor,r)function radiobutton
22、2_Callback(hObject, eventdata, handles)set(handles.text1,BackGroundColor,g)function radiobutton3_Callback(hObject, eventdata, handles)set(handles.text1,BackGroundColor,b)function slider1_Callback(hObject, eventdata, handles)v=get(handles.slider1,Value);str=sprintf(%.2f,v);set(handles.text1,String,st
23、r);例例13 使用滾動條。例例14 制作一個根據(jù)密度與體積計算質(zhì)量的簡易計算器。(1) 在界面上布置控件對象。(2) 使用對象的屬性窗口設(shè)置控件的屬性。例例15 使用程序把基本控件安裝在圖形窗口上。h1=uicontrol(style,edit,TooltipString,Edit Text)h2=uicontrol(style,checkbox,Position,90,20,30,20,TooltipString,Checkbox)h3=uicontrol(style,listbox,Position,150,20,40,20,TooltipString,Listbox)h4=uicont
24、rol(style,pushbutton,Position,210,20,30,20,TooltipString,Pushbutton)h5=uicontrol(style,radiobutton,Position,260,20,30,20,TooltipString,Radiobutton)h6=uicontrol(style,slider,Position,310,20,30,20,TooltipString,Slider)h7=uicontrol(style,text,Position,370,20,30,20,TooltipString,Static Text)h8=uicontrol
25、(style,toggle,Position,430,20,30,20,TooltipString,Togglebutton) 上面程序雖然實現(xiàn)了控件的安裝,但是,還不能完成具體的功能。如果要完成特定的功能,需要加入其他語句。例例16 在圖形窗口底部安裝一個命令按鈕、一個可編輯文本框、一個靜態(tài)文本框。針對命令按鈕(pushbutton)編寫程序,使程序運(yùn)行后,點擊該命令按鈕,便隨機(jī)繪制出一些折線;同時可編輯文本框背景色變?yōu)樗{(lán)色,靜態(tài)文本框背景色變?yōu)榧t色。 h1=uicontrol(style,pushbutton,Position,280,0,50,20) set(h1,String,PUSH
26、,Callback,fun) 主程序只創(chuàng)建安裝了一個Pushbutton按鈕,然后,在set語句中使用Callback屬性調(diào)用函數(shù)fun。 主程序設(shè)計如下:function fun plot(rand(3,5) h2=uicontrol(style,edit,TooltipString,Edit Text,Position,80,0,30,20) h3=uicontrol(style,text,Position,440,0,30,20,TooltipString,Static Text) set(h2,BackGroundColor,0 0 1) set(h3,BackGroundColor,
27、1 0 0) 函數(shù)fun代碼如下:在函數(shù)fun中除了繪圖之外,還制作了一個Edit Text、一個Static Text,并且把這兩個控件的背景色設(shè)置為藍(lán)色0 0 1與紅色1 0 0。例例17 制作依附于某對象的彈出式菜單。m=uicontextmenu;subplot(1,3,1)h1=line(1,2,2,2,LineWidth,8,UIContextMenu,m)c1=subplot(1,3,2);line(1 2,1 3);c2=subplot(1,3,3);plot(rand(2);uimenu(m,Label,line,Callback,c1);uimenu(m,Label,plo
28、t,Callback,c2);編寫程序如下:程序運(yùn)行后,先繪制出右圖第一個圖所示圖形,在藍(lán)色寬條上單擊鼠標(biāo)右鍵,出現(xiàn)菜單,菜單上有兩個選項line與plot,選擇line繪制出右圖第二個圖所示線段;選擇plot繪制出右圖第三個圖所示兩條(隨機(jī))線段。 布置控件布置控件:一個坐標(biāo)系、一個文本框、一個復(fù)選框,一個按鈕; 定義文本框的屬性:定義文本框的屬性:String-簡單設(shè)計示例,F(xiàn)ontName-隸書,F(xiàn)ontSize22; 定義坐標(biāo)系定義坐標(biāo)系: Visibleoff; 定義按鈕屬性定義按鈕屬性: String開始繪圖,F(xiàn)ontName, ForegroundColor, FontSize,
29、 BackgroundColor,Callback-surf(peaks(30); 定義復(fù)選框定義復(fù)選框: String3D旋轉(zhuǎn),Callbackrotate3d。例例18 用于繪圖和圖形旋轉(zhuǎn)的GUI。布局編輯器中編輯完成的圖形用戶界面 運(yùn)行所創(chuàng)建的圖 形用戶界面程序 點擊按鈕的結(jié)果 選擇三維旋轉(zhuǎn)功能后對圖形進(jìn)行的旋轉(zhuǎn)操作 例例19 設(shè)計一個簡單信號分析儀的程序,要求根據(jù)輸入的兩個頻率和時間間隔,計算函數(shù) x=sin(2f1t)+sin(2f2t) 的值,并對函數(shù)進(jìn)行快速傅立葉變換,最后分別繪制時域和頻域的曲線。(一)設(shè)計圖形界面(一)設(shè)計圖形界面設(shè)計步驟:u在布局編輯器中布置控件:本例中使用
30、了2個坐標(biāo)系、3個文本編輯框、1個按鈕和3個靜態(tài)文本框;u使用幾何位置排列工具對控件的位置進(jìn)行調(diào)整:u設(shè)計控件的屬性:為顯示美觀,首先將文本編輯框和靜態(tài)文本框的字號分別設(shè)置為20和16,將3個靜態(tài)文本框的標(biāo)題分別改為“頻率1”、“頻率2”和“時間”,將按鈕的標(biāo)題改為“繪圖”。u設(shè)置其他繪圖屬性。如設(shè)置主窗口的標(biāo)題為“信號分析儀”。上述步驟基本完成了圖形界面的設(shè)計,如下圖所示:上述圖形界面設(shè)計運(yùn)行后顯示的圖形如下:其設(shè)置如右圖所示(二)設(shè)置控件的標(biāo)識(二)設(shè)置控件的標(biāo)識 控件的標(biāo)識(Tag)用于對各控件的識別。每個控件在創(chuàng)建時都會由開發(fā)環(huán)境自動產(chǎn)生一個標(biāo)識,在程序設(shè)計中,為了編輯、記憶和維護(hù)的方
31、便,一般為控件設(shè)置一個新的標(biāo)識。(三)編寫代碼(三)編寫代碼 GUI圖形界面的功能,還是要通過一定的設(shè)計思路和計算方法,由特定的程序來實現(xiàn)。為了實現(xiàn)程序的功能,還需要在運(yùn)行程序前編寫一些代碼,完成程序中變量的賦值、輸入輸出、計算及繪圖等工作。 本例設(shè)置第一個坐標(biāo)軸的標(biāo)識為:frequency_axes, 用于顯示頻域圖形; 第二個坐標(biāo)軸的標(biāo)識為:time_axes, 用于顯示時域圖形。三個文本編輯框的標(biāo)識為f1_input, f2_input, t_input,分別用于輸入兩個頻率和自變量時間的間隔。由于不需要返回3個靜態(tài)文本框和按鈕的值,這些控件的標(biāo)識可以使用缺省值。(1) 從從GUI獲得用
32、戶輸入的數(shù)據(jù)。獲得用戶輸入的數(shù)據(jù)。本例中輸入的3個數(shù)據(jù)分別為頻率1、頻率2和時間間隔。f1=str2double(get(handles.f1_input,String);f2=str2double(get(handles.f2_input,String);t=eval(get(handles.t_input,String);1. 設(shè)置對象的初始值設(shè)置對象的初始值分別設(shè)置三個文本編輯框的初始值為:f1_input=20f2_input=50t_input=0:0.001:0.52. 編寫代碼編寫代碼為按鈕的調(diào)用函數(shù)編寫代碼,這段代碼放在按鈕的調(diào)用函數(shù)pushbutton1_Callback()
33、中,代碼包括以下部分:(2)計算數(shù)據(jù)。)計算數(shù)據(jù)。計算函數(shù)值,按指定點進(jìn)行快速傅立葉變換,并計算頻域的幅值和頻域分辨率。x=sin(2*pi*f1*t)+sin(2*pi*f2*t);y=fft(x,512);m=y.*conj(y)/512;f=1000*(0:256)/512;(3)在第一個坐標(biāo)軸中繪制頻域曲線。)在第一個坐標(biāo)軸中繪制頻域曲線。axes(handles.frequency_axes)plot(f,m(1:257)set(handles.frequency_axes,XminorTick,on)grid on(4)在第二個坐標(biāo)軸中繪制時域曲線。)在第二個坐標(biāo)軸中繪制時域曲線。
34、axes(handles.time_axes) %選擇適當(dāng)?shù)淖鴺?biāo)軸plot(t,x)set(handles.time_axes,XminorTick,on)grid on3. 運(yùn)行程序運(yùn)行程序n本節(jié)GUI 實現(xiàn)三維圖形的繪制。預(yù)創(chuàng)建界面中應(yīng)包含一個繪圖區(qū)域;一個面板,其中包含三個繪圖按鈕,分別實現(xiàn)表面圖、網(wǎng)格圖和等值線的繪制;一個彈出菜單,用以選擇數(shù)據(jù)類型,并且用靜態(tài)文本進(jìn)行說明。其草圖如圖所示。n點擊工具欄中的 GUIDE 圖標(biāo),啟動 GUIDE,系統(tǒng)打開界面如圖所示。n選擇新建 GUI 標(biāo)簽,并選擇新建空的 GUI,選中下面的保存選項,輸入文件名,得到結(jié)果如圖所示。n該窗口中包括菜單欄、控
35、制工具欄、GUI 控件面板、GUI 編輯區(qū)域等,在 GUI 編輯區(qū)域右下腳,可以通過鼠標(biāo)拖曳的方式改變 GUI 界面的大小。向界面中添加控件 n首先向界面中添加按鈕。用鼠標(biāo)點擊 Push Button,并拖曳至 GUI 編輯區(qū),如圖。n在該按鈕上點擊右鍵,選擇 Duplicate,將該按鈕復(fù)制兩次,并移動到合適的位置,得到結(jié)果如圖。n然后將這三個按鈕添加到面板中。在編輯區(qū)的右側(cè)添加面板,并將三個按鈕移動到面板中,得到結(jié)果如圖。n下面繼續(xù)向其中添加靜態(tài)文本、彈出菜單和繪圖區(qū),得到結(jié)果如圖 。n點擊工具欄中 Property Inspector,打開屬性編輯器。設(shè)置各個控件的屬性,如設(shè)置按鈕的屬性
36、,設(shè)置第一個按鈕的顯示文字為 Surf,標(biāo)簽名為 surf_pushbutton, 如圖。n設(shè)置其他控件的屬性,得到的結(jié)果如圖。n點擊工具欄中的綠色箭頭,運(yùn)行該 GUI,結(jié)果如圖。編寫響應(yīng)函數(shù)n創(chuàng)建 GUI 時系統(tǒng)已經(jīng)為其自動生成 M 文件,該文件中包含 GUI 中控件對應(yīng)的響應(yīng)函數(shù)及系統(tǒng)函數(shù)等。n首先編寫數(shù)據(jù)生成函數(shù)。n在 GUI 向?qū)е悬c擊 M-file Editor,打開 M 文件編輯器。編輯器中為該 GUI 對應(yīng)的 M 文件。點擊函數(shù)查看工具顯示其中的函數(shù),選擇 GUIPlot_OpeningFcn 函數(shù),如圖。n該函數(shù)中已有部分內(nèi)容,現(xiàn)在其中添加數(shù)據(jù)生成函數(shù)。添加后該函數(shù)的內(nèi)容為:%
37、 - Executes just before GUIPlot is made visible.function GUIPlot_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user da
38、ta (see GUIDATA)% varargin command line arguments to GUIPlot (see VARARGIN)% Create the data to plot.handles.peaks=peaks(35);handles.membrane=membrane;x,y = meshgrid(-8:.5:8);r = sqrt(x.2+y.2) + eps;sinc = sin(r)./r;handles.sinc = sinc;% Set the current data value.handles.current_data = handles.peak
39、s;contour(handles.current_data)% Choose default command line output for GUIPlothandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes GUIPlot wait for user response (see UIRESUME)% uiwait(handles.figure1);n該函數(shù)首先生成三組數(shù)據(jù),并設(shè)置初始數(shù)據(jù)為 peaks 數(shù)據(jù),且初始圖形為等值線。修改該函數(shù)后再次運(yùn)行 GUI,得到
40、結(jié)果如圖 。n繼續(xù)修改按鈕及彈出菜單的響應(yīng)函數(shù)。用戶可以通過 M文件編輯器中的函數(shù)查看工具查找相應(yīng)函數(shù),或在GUI編輯器中右鍵點擊相應(yīng)控件,選擇View Callbacks中的Callback,系統(tǒng)自動打開M文件編輯器,并且光標(biāo)位于相應(yīng)的函數(shù)處,如圖。n彈出菜單的響應(yīng)函數(shù):% - Executes on selection change in data_pop_up.function data_pop_up_Callback(hObject, eventdata, handles)% hObject handle to data_pop_up (see GCBO)% eventdata res
41、erved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Determine the selected data set.str = get(hObject, String);val = get(hObject,Value);% Set current data to the selected data set.switch strval;case Peaks % User selects peaks handles.curre
42、nt_data = handles.peaks;case Membrane % User selects membrane handles.current_data = handles.membrane;case Sinc % User selects sinc handles.current_data = handles.sinc;end% Save the handles structure.guidata(hObject,handles)% Hints: contents = get(hObject,String) returns data_pop_up contents as cell
43、 array% contentsget(hObject,Value) returns selected item from data_pop_upn該函數(shù)首先取得彈出菜單的 String 屬性和 Value 屬性,后通過分支語句選擇數(shù)據(jù)。n三個按鈕的響應(yīng)函數(shù)分別為:% - Executes on button press in surfpushbutton.function surfpushbutton_Callback(hObject, eventdata, handles)% hObject handle to surfpushbutton (see GCBO)% eventdata re
44、served - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Display surf plot of the currently selected data.surf(handles.current_data);% - Executes on button press in meshpushbutton.function meshpushbutton_Callback(hObject, eventdata, handles)%
45、hObject handle to meshpushbutton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Display mesh plot of the currently selected data.mesh(handles.current_data);% - Executes on button press in contourpushbutton.fun
46、ction contourpushbutton_Callback(hObject, eventdata, handles)% hObject handle to contourpushbutton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Display contour plot of the currently selected data.contour(han
47、dles.current_data);n再次運(yùn)行該 GUI,得到最后的結(jié)果。控制系統(tǒng)典型環(huán)節(jié)的演示程序n1.程序功能描述n2.程序界面設(shè)計n3.程序代碼設(shè)計n4.程序測試運(yùn)行n1.程序功能描述n進(jìn)行控制系統(tǒng)典型環(huán)節(jié)的演示,包括了典型環(huán)節(jié)運(yùn)行效果的演示與代碼的展示。也可以在代碼區(qū)輸入繪制曲線語句并通過點擊定制曲線按鈕繪制曲線。n2.程序界面設(shè)計程序界面設(shè)計 根據(jù)程序功能要求,添加不同控件,并設(shè)置控件各自的屬性。n(1) Axes控件控件作用為顯示圖形,典型環(huán)節(jié)的階躍響應(yīng)曲線及定制曲線都在此處進(jìn)行顯示。“Tag”屬性設(shè)為myAxes。n(2) Panel控件控件用來盛放其它控件,這里盛放的是代碼區(qū)
48、?!癟ag”屬性設(shè)為uipanel。“Title”屬性設(shè)為空。n(3) Edit Text控件控件用于輸入和顯示文本。此處作為代碼區(qū),主要作用為展示典型環(huán)節(jié)的代碼、輸入用戶定制的曲線代碼。 “Tag”屬性設(shè)為: strCode。 “String”屬性設(shè)為: Please input command for example: x=0:0.1:4*pi; y=sin(x); 這為用戶定制曲線提供了一個例程。n(4) Static Text控件控件作為標(biāo)識,提示位于其下方的ListBox控件選項是進(jìn)行典型環(huán)節(jié)演示?!癟ag”屬性設(shè)為txtDemo,“String”屬性設(shè)為典型環(huán)節(jié)演示。n(5) Li
49、stBox控件控件類似于一組復(fù)選框,用戶可從中選擇不同選項。 “Tag”屬性設(shè)為: lstBox “String”屬性設(shè)為: 比例環(huán)節(jié) 慣性環(huán)節(jié) 比例微分環(huán)節(jié) 比例積分環(huán)節(jié)表示此列表共有4項內(nèi)容即4個典型環(huán)節(jié)可選。n(6) Push Button控件控件表現(xiàn)為一個按鈕。本例中使用了兩個此控件。一個用于定制曲線的繪制定制曲線的繪制。 用戶在代碼區(qū)輸入繪制曲線語句后,點擊此按鈕進(jìn)行曲線繪制。“Tag”屬性設(shè)為btnDraw,“String”屬性設(shè)為定制曲線,“TooltipString”屬性設(shè)為在代碼區(qū)中輸入曲線參數(shù),繪制任意曲線。這樣當(dāng)用戶將光標(biāo)置于按鈕上時,會有相應(yīng)提示信息。一個用于關(guān)閉運(yùn)行窗
50、口關(guān)閉運(yùn)行窗口?!癟ag”屬性設(shè)為btnClose,“String” 屬性設(shè)為關(guān)閉,“TooltipString”屬性設(shè)為關(guān)閉窗口。設(shè)定完成的界面草圖如圖n至此,本例所需的控件已設(shè)置完畢。在最初按照草圖添加部署了所有的控件后,往往不會排列得很整齊。此時可根據(jù)需要進(jìn)行控件的排列。n要將位于窗口右側(cè)的4個控件豎排整齊,則可在窗口選ToolAlign Objects彈出的窗口中進(jìn)行選擇。n3.程序代碼設(shè)計n根據(jù)要求,在選擇典型環(huán)節(jié)時需要設(shè)置回調(diào)函數(shù)。此外,對兩個按鈕控件也要設(shè)置回調(diào)函數(shù)。n回調(diào)函數(shù)的生成在前一個例子已講過,這里不重復(fù)。這里只給出相應(yīng)的代碼段供參考。 (1) 定制曲線按鈕的回調(diào)函數(shù)function btnDraw_Callback(hObject, ev
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 治療計劃的設(shè)計與實施過程
- 艾滋病培訓(xùn)課程
- 乳房再造課件教學(xué)課件
- 幼兒園成長檔案
- 狂犬病健康教案
- 氟哌啶醇藥物治療護(hù)理
- 脫稿蝴蝶課件教學(xué)課件
- 3.1.1 鹽類的水解 課件 高二上學(xué)期化學(xué)人教版(2019)選擇性必修1
- 醫(yī)院感染流行病學(xué)
- 致心律失常型右室心肌病
- 2024年浙江省寧波市鄞州中學(xué)強(qiáng)基招生數(shù)學(xué)試題
- 【課件】Unit+3(單元復(fù)習(xí)課件)七年級英語上冊(人教版2024)
- 2024年全國職業(yè)院校技能大賽高職組(藥學(xué)技能賽項)考試題庫(含答案)
- 2024至2030年中國羽毛球行業(yè)發(fā)展現(xiàn)狀及投資趨勢研究報告
- 儲能電池?zé)崾Э鼗馂?zāi)演化機(jī)制及防控
- 2024年公司市場化選聘經(jīng)理層考核管理辦法
- 太陽能光伏電站施工安全標(biāo)準(zhǔn)化建設(shè)考核試卷
- 防炫(AG工藝)玻璃項目可行性研究報告模板-備案拿地
- 煤炭洗選工藝數(shù)字化與智能化
- 2024年【汽車駕駛員(技師)】證模擬考試及答案
- 大學(xué)生心理健康教育智慧樹知到期末考試答案章節(jié)答案2024年魯東大學(xué)
評論
0/150
提交評論