matlabgui设计作业.docx
- 文档编号:26131172
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:14
- 大小:74.61KB
matlabgui设计作业.docx
《matlabgui设计作业.docx》由会员分享,可在线阅读,更多相关《matlabgui设计作业.docx(14页珍藏版)》请在冰豆网上搜索。
matlabgui设计作业
MATLAB课程设计
设计名称:
基于MATLAB的FFT---信号分析仪的实现
研究生:
李文哲
指导教师:
李彩虹
学科专业:
计算机技术
完成时间:
2013年1月14日
MATLAB是一套高性能的数值计算和可视化的科技应用软件。
它集高效的数值分析、完备的信号和图形处理、功能丰富的应用工具箱为一体,构成了一个方便快捷,界面友好的用户环境,是一种适应多种硬件平台的数学计算工具,它的出现给各课程的计算机辅助教学带来了福音。
特别是他的集成图形用户界面GUIDE(GraphicalUserInterfaceDevelopmentEnvironment),包含了窗口菜单、对话框、按钮和文本等各种控件的用户界面,用户通过键盘或鼠标操作,就可以设计出具有自己独特风格的图形界面,再通过编写回调函数就可以实现GUI与用户之间的交互,为教学课件的制作提供了极大的方便,GUIDE程序设计分两步进行,一是静态图形界面制作,二是控件回调函数编程。
1静态图形界面制作
在matlab的命令窗口中键入“guide”命令,启动GUIDE的GUI编辑器,GUI控制面板包括了所有的图形界面控件uicontrol,如按钮(PushButter)、滑动条(Slider)、单选按钮(RadioButter)、复选框(Checkbox)、文本框(EditText)、文本标签(StsticText)、下拉菜单(PopupMenu)、下拉列表框(Listbox)、双位按钮(ToggleButter)、坐标轴(Axes)等,用户选中需要的控件,拖移到空白处,即可创建出相应的控件,并通过拖拉可调整其大小大小,如图1所示。
图1
每个控件都有自己的属性Style,属性Style决定控件的类型,将鼠标移至相应的控件上双击,就可以打开属性框,每个控件均有很多项属性,但主要的有:
“string”用来定义控件的显示字符;“Tag”是控件的重要属性,是对控件进行编程和访问时的标识名称,每个控件创建时都会由开发环境自动生成一个标识,在程序设计中为了编辑、记忆和维护的方便,用户要修改成自己好记忆的字符串,在编写回调函数Callback时由此标识来识别;“name”是标题属性;“BackgroundColor”是背景颜色设置,按用户风格设定其值。
图1中各控件的“string”属性和“Tag”属性分别定义如下:
三个坐标的“Tag”标识分别为:
axes10、axes1、axes2;两个按钮的“Tag”标识分别为:
按钮“冲激响应”的“Tag”标识为pushbutton1,按钮“阶跃响应”的“Tag”标识为pushbutton2;
编辑文本框的“Tag”标识为RLC,用来接收键盘输入电阻、电感及电容的值。
按照自己的构想将需要的控件位置摆放合适,属性设置好后保存GUI文件,文件名取为test,matlab将用户创建的GUI的所用信息保存在test.fig和test.m两个文件中,其中.fig为二进制文件,用来存放搭建GUI界面所需的所有图形控件的完整描述信息(包括控件属性);.m文件用来存放GUI程序响应特定事件时调用的函数,包含了运行GUI所需的所有程序代码,包括GUI控件的回调函数Callback框架,.m决定GUI的行为,他控制GUI中控件如何响应用户操作,这两个文件是互相影响的。
系统自动生成的test.m文件代码中有三个关键函数需要用户编写程,分别说明如下:
OpeningFcn函数
OpeningFcn函数是GUIDE在.m文件中自动生成的函数之一,其名字与文件名相同,如文件名为test,则OpeningFcn函数的函数名为test_OpeningFcn,OpeningFcn中的代码在运行GUI并使其可视化之前执行,因此该函数通常用来实现用户访问GUI之前所需的各种数据的初始化。
CreateFcn函数
GUIDE在为GUI自动生成.m文件中,自动为每一个控件生成CreateFcn函数,函数名由控件的“Tag”属性决定,主要用来存放相应控件的初始化函数。
Callback函数
GUIDE在为GUI自动生成.m文件中,为每一个控件生成相应的回调函数Callback定义行代码,控件对用户的响应控制,需要在回调函数中添加相应的代码来实现。
控件回调函数的函数名由控件的“Tag”属性决定。
回调函数的编写是GUIDE设计的重点,所有句柄对象都有如下三个回调函数:
ButtonDownFcn(),鼠标左键在对象上单击时执行的回调函数;
CreateFcn(),对象创建时执行的回调函数;
DeleteFcn(),对象删除时执行的回调函数。
回调都是可以在命令窗口中可执行的字符串,当属性激活时,它传给eval函数来执行。
回调编程可以采用不同的形式或不同的调用方式来执行相应的程序。
在编写回调函数时句柄图形函数,常用的几个句柄函数为:
set设置对象属性;get获取对象属性;gcf获得当前图形的句柄;gca获得当前坐标轴的句柄;gco获得当前对象的句柄;Axes创建坐标轴对象;Image创建图形对象等。
2编程控制GUI
在静态图形界面设计好后,用户可以通过鼠标或键盘激活这些图形对象,使计算机执行相应的动作,这些动作的执行通过回调函数Callback来实现,matlabguide编程主要考虑的是界面函数如何通过回调函数来实现,以及用什么样的方法比较方便快捷。
表1中test.m代码中只有各个控件、菜单的回调函数原型和注释,并没有实现功能的函数体,要实现具体的功能调用需要自己编写添加程序。
2.1初始化程序的编写
初始化图形界面是通过函数Openingfig实现的。
Openingfig函数调用与.m文件对应的.fig文件来初始化图形界面。
在这一过程中还存在隐含调用.fig的CreatFcn函数,但这一过程无法使用输入参数,也就是说要用输入参数设置图形界面元素的一些特性,还必须编写自己的初始化函数。
在本设计实例中,需要在坐标轴ases10的位置显示电路图,需要为“Tag”标识为RLC的编辑文本框设置R、L、C初始值,其初始化程序分别为:
functiontest_OpeningFcn(hObject,eventdata,handles,varargin)
I=imread('dl.bmp','bmp');%读入图形文件dl.bmp
axes(handles.axes10);%获得坐标轴axes10的句柄
image(I);axisoff%显示电路图
functionRLC_CreateFcn(hObject,eventdata,handles)
set(gcbo,'String','[111]');%为R、L、C设初始值
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
2.2回调函数Callback的编写
回调函数的编写,可以把该控件的函数代码直接写在“Callback”中,也可以把函数代码放在一个自定义的.M文件中,而在Callback”中只将其文件名写上即可。
不管采用哪种方法,回调函数编写的一个重要的技巧就是通过set、get语句对控件的属性进行获取、设置,以及完成相关数据的传递、保存、获取,这一点在下面的程序段中得到了很好的体现。
在本设计实例中,当按下“冲激响应”按钮时,要在坐标轴ases1的位置显示冲激响应曲线,当按下“阶跃响应”按钮时,要在坐标轴ases2的位置显示阶跃响应曲线,所以要分别为pushbutton1_Callback和pushbutton2_Callback编写回调函数,程序代码分别为:
functionpushbutton1_Callback(hObject,eventdata,handles)
m=str2num(get(handles.RLC,'String'))
R=m
(1);L=m
(2);C=m(3);a=[L*CR*C1];b=[1];axes(handles.axes1);
x=impulse(b,a);plot(x,'linewidth',2);gridon;holdon;
functionpushbutton2_Callback(hObject,eventdata,handles)
m=str2num(get(handles.RLC,'String'))
R=m
(1);L=m
(2);C=m(3);a=[L*CR*C1];b=[1];y=step(b,a);axes(handles.axes2)
plot(y,'linewidth',2);gridon;holdon;
把上述初始化程序及回调函数加入表1的相应位置,然后运行程序,并输入R、L、C的值(若分别键入131),按下“冲激响应”按钮,则输出冲激响应波形,按下“阶跃响应”按钮,则输出阶跃响应波形,运行结果如图2所示。
图2
3结束语
通过对matlabguide图形用户界面的设计实例,展示了人机交互式图形用户界面及其参数的可调控性。
在实际设计制作中要解决的几个关键技术问题是:
利用各控件的属性进行数据的保存、传递;通过句柄访问控件并进行数据的获取和传递;编写各控件的回调函数。
回调函数的编写不可能一蹴而就,需要反复的调试、修改和运行才能够使程序得以正确运行。
附录:
test.m文件编程语句
functionvarargout=test4(varargin)
%TEST4MATLABcodefortest4.fig
%TEST4,byitself,createsanewTEST4orraisestheexisting
%singleton*.
%
%H=TEST4returnsthehandletoanewTEST4orthehandleto
%theexistingsingleton*.
%
%TEST4('CALLBACK',hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinTEST4.Mwiththegiveninputarguments.
%
%TEST4('Property','Value',...)createsanewTEST4orraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforetest4_OpeningFcngetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.Allinputsarepassedtotest4_OpeningFcnviavarargin.
%
%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone
%instancetorun(singleton)".
%
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%RLCtheabovetexttomodifytheresponsetohelptest4
%LastModifiedbyGUIDEv2.512-Jan-201321:
05:
56
%Begininitializationcode-DONOTRLC
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@test4_OpeningFcn,...
'gui_OutputFcn',@test4_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[]);
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
});
end
%Endinitializationcode-DONOTRLC
%---Executesjustbeforetest4ismadevisible.
functiontest4_OpeningFcn(hObject,eventdata,handles,varargin)
I=imread('dl.bmp','bmp');%¶ÁÈëͼÐÎÎļþdl
axes(handles.axes10);%»ñµÃaxes10µÄ¾ä±ú
image(I);axisoff%ÏÔʾµç·
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstotest4(seeVARARGIN)
%Choosedefaultcommandlineoutputfortest4
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakestest4waitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=test4_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
%---Executesonbuttonpressinpushbutton1.
functionpushbutton1_Callback(hObject,eventdata,handles)
m=str2num(get(handles.edit5,'String'))
R=m
(1);L=m
(2);C=m(3);a=[L*CR*C1];b=[1];
axes(handles.axes1);
x=impulse(b,a);
plot(x,'linewidth',2);gridon;holdon;
%hObjecthandletopushbutton1(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%---Executesonbuttonpressinpushbutton2.
functionpushbutton2_Callback(hObject,eventdata,handles)
m=str2num(get(handles.edit5,'String'))
R=m
(1);L=m
(2);C=m(3);a=[L*CR*C1];b=[1];
y=step(b,a);
axes(handles.axes2);
plot(y,'linewidth',2);gridon;holdon;
%hObjecthandletopushbutton2(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
functionRLC_Callback(hObject,eventdata,handles)
%hObjecthandletoRLC(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Hints:
get(hObject,'String')returnscontentsofRLCastext
%str2double(get(hObject,'String'))returnscontentsofRLCasadouble
%---Executesduringobjectcreation,aftersettingallproperties.
functionRLC_CreateFcn(hObject,eventdata,handles)
set(gcbo,'String',[111]');%ΪRLCÉèÖóõʼֵ
%hObjecthandletoRLC(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled
%Hint:
RLCcontrolsusuallyhaveawhitebackgroundonWindows.
%SeeISPCandCOMPUTER.
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functionedit5_Callback(hObject,eventdata,handles)
%hObjecthandletoedit5(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Hints:
get(hObject,'String')returnscontentsofedit5astext
%str2double(get(hObject,'String'))returnscontentsofedit5asadouble
%---Executesduringobjectcreation,aftersettingallproperties.
functionedit5_CreateFcn(hObject,eventdata,handles)
%hObjecthandletoedit5(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled
%Hint:
editcontrolsusuallyhaveawhitebackgroundonWindows.
%SeeISPCandCOMPUTER.
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
%---Executesonbuttonpressinpushbutton3.
functionpushbutton3_Callback(hObject,eventdata,handles)
[filename,pathname]=uiputfile({'*.bmp';},'Save','Undefined.bmp');
if~isequal(filename,0)
str=[pathnamefilename];
px=getframe(handles.axes1);
%saveas(gcf,str,'bmp');
ta=getappdata(gcf,'Timg');
imwrit
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlabgui 设计 作业