MATLABGUI简易计算器

上传人:huo****ian 文档编号:134235358 上传时间:2022-08-12 格式:DOC 页数:25 大小:1.54MB
返回 下载 相关 举报
MATLABGUI简易计算器_第1页
第1页 / 共25页
MATLABGUI简易计算器_第2页
第2页 / 共25页
MATLABGUI简易计算器_第3页
第3页 / 共25页
点击查看更多>>
资源描述
综合设计型实验题 目: 基于MATLAB GUI的简易计算器 的设计与实现 组 长:李强 刘文斌 组 员:李平善 祁明星 张春锦 邵永鹏 指 导 教 师: 俞学兰 专 业 年 级: 09级机械设计制造及其自动化 (机械电子工程方向) 所在学院和系:机械工程学院 日 期: 2012年7月23日8月3日 目 录1 绪 论11.1 简 介11.2 设计要求11.3 设计任务12分 析22.1 题目分析22.2 设计思路23 GUI图形界面设计33.1 设计步骤33.2 用户界面设计33.2.1 用户交互界面设计的基本原则33.2.2 简易计算器界面设计规划4控件属性简介43.2.4 简易计算器界面设计44软件设计64.1 控件回调函数代码实现64.1.1 数字按键64.1.2 运算按键74.1.3 功能按键87总 结10参考文献11附录A12附录B161 绪 论1.1 简 介用户界面(或接口)是指:人与机器(或程序)之间交互作用的工具和方法。如键盘、鼠标、话筒都可成为与计算机交换信息的接口。图形用户界面(Graphical User Interfaces,GUI)则是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。在本次设计中,主要使用matlab gui来完成计算器的设计。GUI开发环境是MATLAB提供了一套可视化的创建图形窗口的工具,使用用户界面开发环境可方便的创建GUI应用程序, 它可以根据用户设计的GUI布局,自动生成M文件的框架,用户可以使用这一框架编制自己的应用程序。1.2 设计要求设计要求: 基本实现计算器的四则运算以及常见的运算等。1.3 设计任务以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现:具有良好的用户图形界面,实现十进制的加、减、乘、除、乘方、阶乘等简易计算;科学计算函数包含三角函数、指数函数、对数函数运算功能;有清除键和退格键以及基本的09数字键和小数点,以学习应用Matlab编写程序原理,加深对Matlab的学习及应用。2分 析2.1 题目分析 本题目通过MATLAB的GUI程序设计,在GUI设计中主要用到三种控件,显示框用到文本编辑框(edit text) ,数字以及运算等按钮用到命令按钮(push button),界面布局用到了Panel控件,然后在通过各个按钮的回调函数,实现简单的计算功能,并通过动态文本框将结果显示给用户。2.2 设计思路首先用MATLAB GUI功能,设置一个文本编辑框,以及命令按钮,调整好各控件的颜色、大小,并通过Panel控件来他们进行合理布局,做到整体布局合理紧凑。然后通过双击各按钮来改写其属性,使交互界面更加人性化。待人机交互界面绘制好后,生成M文件框架,并在M文件中编写其回调函数,最后再运行调试。3 GUI图形界面设计3.1 设计步骤 (1) 在布局编辑器中布置控件;(2) 使用几何位置排列工具对控件的位置进行调整;(3) 设置控件的属性;3.2 用户界面设计 用户交互界面设计的基本原则1 易用性理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作。如按钮名称应该易懂,用词准确,要与同一界面上的其他按钮易于区分。2 规范性通常界面设计按Windows界面的规范,即包含“菜单条、工具栏、状态栏、滚动条、右键快捷菜单”等的标准格式,界面遵循规范化的程度越高,则易用性相应的就越好。3 美观与协调性界面应该适合美学观点,感觉协调舒适,能在有效的范围内吸引用户的注意力。4 独特性在框架符合以上规范的情况下,设计具有自己独特风格的界面尤为重要。尤其在商业软件流通中有着很好的迁移默化的广告效用。5 快捷方式在菜单及按钮中使用快捷键可以让喜欢使用键盘的用户操作得更快一些,在Windows及其应用软件中快捷键的使用大多是一致的。6 安全性在界面上通过下列方式来控制出错几率,会大大减少系统因用户人为的错误引起的破坏。 简易计算器界面设计规划 1、显示屏采用动态文本编辑框edit_text,由于大家通常习惯于自左向右的显示方式,故水平放置文本框,采用浅蓝色的背景给人一种舒适的感觉,外加黑色背景的Panel控件,形成很好的立体感。 2、按键操作面板分两个区即数字键区和功能按键区,为了区别两者的背景色使用不同的颜色。数字按键采用线紫色的背景色,而功能按键采用黄色的背景色,这样便于用户很快很好的定位按键,给用户很好的操作性。3、对用的比较平凡的按键=号键和括号键比其他的按键要大写,这样有利于用户快速定位和方便操作。4、鉴于常用计算器的界面布局为上下布置,所以该简易计算器的界面也采用了上下布置的方式。最终完成的简易计算器的效果图见图1。3.2.3控件属性简介控件的标识(Tag)是对于各控件的识别,每个控件创建时都会由开发环境自动产生一个标识,在程序设计中,为了编辑、记忆和维护的方便,一般为控件设置一个新的标识。String是用于设置控件所显示的字符串,Fontsize是字体大小设置属性,Foregroundcolor用于设置前景色,Backgrondcolor用于设置背景色。控件的Callback属性的取值是字符串,可以是某个M文件名或一小段MATLAB语句。当用户激活控件是,应用程序就运行Callback属性定义的子程序,回调函数Callback是设计的主要部分,通过对Callback的设计可以对输入的数据进行计算处理和显示。 GUI图形界面的功能要通过一定的设计思路和计算方法由特定的程序来实现。为了实现程序的功能,还需要在运行程序前编写一些代码,完成程序中变量的赋值、输入输出、计算及绘图等工作。 简易计算器界面设计进入GUI环境中双击Blank GUI (Default)出现一个窗口界面,在上面布置控件并设Tag、string、fontsize、foregroundcolor和backgroundcolor等属性。其形成界面如下图所示。 图1 GUI环境下简易计算器用户界面4软件设计在创建 GUI 时系统已经为其自动生成了 M 文件,该文件中包含 GUI 中控件对应的响应函数,及系统函数等,然后在M文件中编写其回调函数,最后再运行调试。使用说明见附录A,完整程序代码见附录B。4.1 控件回调函数代码实现全局变量num1用于存储用户输入的第一位数值;全局变量num2用于存储用户输入的第二位数值;全局变量result用于存储运算结果;Flagnum功能标识符。4.1.1 数字按键数字键设计:09、小数点、pi都一样,只是参数不同:%flagnum为5说明当前已经按下了=键,接下来将edit_display将中的string内容清空并将当前按键值传给edit_display控件。否则将当前输入数值加于edit_display控件string内容的后面。function pb0_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0;%恢复默认值 handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,0);%将零输出set(handles.edit_display,string,handles.current_str);guidata(hObject, handles); 运算按键运算符按钮(+、-、*、/ 、sin、cos、tan、log、ln、exp、(、)范例function pb_add_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,+);set(handles.edit_display,string,handles.current_str);handles.flagnum=0;guidata(hObject, handles); 取余数按钮(%)function pb_yu_Callback(hObject, eventdata, handles)global num1;str=get(handles.edit_display,string);num1=eval(str);%计算出当前算式的结果并作为求余函数的第一个操作数set(handles.edit_display,string,);handles.flagnum=1;%标志当前进行的是求余数运算handles.current_str=;guidata(hObject, handles); 阶乘按键(X!)s=str2num(get(handles.edit_display,string);rs=num2str(factorial(s);%调用计算阶乘的函数factorial()set(handles.edit_display,string,rs);guidata(hObject, handles);等号按钮%根据flagnum运算标志用switch决策语句实现相应计算%需注意相应数据类型的转化function pb_equal_Callback(hObject, eventdata, handles)global num1;global num2;global result;switch(handles.flagnum)case 0%flagnum=0说明进行的是不是求余运算,而是进行的常规的加减乘除、三角函数、对数、幂函数等运算。 str=get(handles.edit_display,string); result=num2str(eval(str); %调用eval()函数,eval()函数的功能就是将括号内的字符串视为语句并运行 case 1 str=get(handles.edit_display,string); num2=eval(str);%调用求余数函数进行求余运算 result=num2str(rem(num1,num2);end set(handles.edit_display,string,result); handles.current_str=result; handles.flagnum=5;%标明进行了求表达式结果运算guidata(hObject, handles); 功能按键Del按钮函数%算法实现:MATLAB是用矩阵存储数据的,相应的可以取文本框的前N-1实现其功能function pb_dele_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);str=handles.current_str;handles.current_str=str(1:length(str)-1);set(handles.edit_display,string,handles.current_str);guidata(hObject, handles);C清除按钮函数%把edit_display的string属性清空function pb_clr_Callback(hObject, eventdata, handles)set(handles.edit_display,string,);handles.current_str=;guidata(hObject, handles);7总 结在这两周的综合性设计实验中,通过MATLAB中的GUI平台设计了一个简易的计算器,对MATLAN尤其是GUI可视化图形界面的设计功能有了进一步的了解,认识到其功能的强大。在MATLAB简单计算器的设计中,了解了关于MATLAB图形用户界面的部分空间的使用方法,利用MATLAB的GUI提供的很多实用控件,方便用于设计自己的图形界面。1、通过MATLAB简单计算器的设计,初步了解了关于MATLAB图形用户界面的部分控件的使用方法。2、 MATLAB的GUI提供的很多实用的控件,方便用于设计属于自己的图形界面。3、 Matlab具有强大、丰富的内置函数和工具箱,界面设计时更加简洁、快捷与直观。MATLAB作为算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。同过对其学习,这将有助于今后大家在学习和工作中使用它来解决问题,同时丰富了大家的专业知识。本次综合性设计实验是从理论到实践的升华,培养了大家的实践能力,为今后的学习和工作打下了坚实的基础。参考文献1李人厚、张平安.精通MATLAB综合辅导与指南M.西安:西安交通大学出版社.19993施晓红 周佳。精通GUI图形界面教程M.北京:北京大学出版社,2003.4陈子为。基于Matlab GUI扫雷游戏的设计与实现J.现代电子技术,2008.附录A 使用说明1、该计算器的输入表达式的方法可以是用鼠标单击按钮实现,也可以是用鼠标单击显示屏,然后通过键盘来输入表达式。2、求余数运算是先输入第一个数然后再按%an钮,再输入第二个数后按下=按钮即可。3、阶乘是输入一个数后按下X!按钮可得到结果4、其他运算跟我们列写表达式一样来输入即可,输入完后按下=按钮得到结果。5、按下Ans按钮将输入上一次运算的结果,按下按钮将输入的值,按下Del按钮删除一个字符,而按下C按钮将清空显示屏。举例:1 验证阶乘运算5!=120点击5按键得到如下图2所示图2 阶乘输入图按下X!按键得结果如图3所示,结果表明阶乘运算功能正确实现。图3 阶乘运算结果图2 验证求余数运算 17%3=2 输入17图4 第二个操作数按下%按键屏幕将会清空显示,输入第二个操作数3,再按下=键的结果如图5所示。结果与正确结果一致,该功能也实现了。图5 求余数运算结果3 混合运算15+(15*(22-53)*sin(/6)+log(10)2=53607.25输入表达式后如图6所示。图6 混合运算表达式 运算结果如图7所示,结果与正确结果相同,说明实现了混合运算功能。图7 混合运算结果附录B 完整程序代码function varargout = calcu(varargin)%CALCU M-file for calcu.figglobal num1;global num2;global result;format long;%-gui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, calcu_OpeningFcn, . gui_OutputFcn, calcu_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);end if nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% - Executes just before calcu is made visible.function calcu_OpeningFcn(hObject, eventdata, handles, varargin)handles.current_str=;handles.flagnum=0;handles.output = hObject; guidata(hObject, handles); function varargout = calcu_OutputFcn(hObject, eventdata, handles)varargout1 = handles.output; % - Executes on button press in pb9.function pb9_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0; handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,9);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb8.function pb8_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0; handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,8);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb7.function pb7_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0; handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,7);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb6.function pb6_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0; handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,6);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb4.function pb4_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0; handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,4);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb3.function pb3_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0; handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,3);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb2.function pb2_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0; handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,2);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb1.function pb1_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0; handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,1);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb0.function pb0_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0; handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,0);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb_sin.function pb_sin_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,sin();set(handles.edit_display,string,handles.current_str);handles.flagnum=0; guidata(hObject, handles); % - Executes on button press in pb_cos.function pb_cos_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,cos();set(handles.edit_display,string,handles.current_str);handles.flagnum=0; guidata(hObject, handles); % - Executes on button press in pb_tan.function pb_tan_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,tan();set(handles.edit_display,string,handles.current_str);handles.flagnum=0; guidata(hObject, handles);% - Executes on button press in pbdian.function pbdian_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0; handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,.);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb_equal.function pb_equal_Callback(hObject, eventdata, handles)global num1;global num2;global result;switch(handles.flagnum) case 0 str=get(handles.edit_display,string); result=num2str(eval(str); case 1 str=get(handles.edit_display,string); num2=eval(str); result=num2str(rem(num1,num2);end set(handles.edit_display,string,result); handles.current_str=result; handles.flagnum=5;guidata(hObject, handles);% - Executes on button press in pb5.function pb5_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0; handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,5);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb_add.function pb_add_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,+);set(handles.edit_display,string,handles.current_str);handles.flagnum=0; guidata(hObject, handles); % - Executes on button press in pb_sub.function pb_sub_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,-);set(handles.edit_display,string,handles.current_str);handles.flagnum=0; guidata(hObject, handles); % - Executes on button press in pb_mul.function pb_mul_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,*);set(handles.edit_display,string,handles.current_str);handles.flagnum=0; guidata(hObject, handles); % - Executes on button press in pb_div.function pb_div_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,/);set(handles.edit_display,string,handles.current_str);handles.flagnum=0; guidata(hObject, handles); % - Executes on button press in pb_ln.function pb_ln_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,log();set(handles.edit_display,string,handles.current_str);handles.flagnum=0; guidata(hObject, handles); % - Executes on button press in pb_log.function pb_log_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,log10();set(handles.edit_display,string,handles.current_str);handles.flagnum=0; guidata(hObject, handles); % - Executes on button press in pb_fang.function pb_fang_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,);set(handles.edit_display,string,handles.current_str);handles.flagnum=0; guidata(hObject, handles); % - Executes on button press in pb_jiechen.function pb_jiechen_Callback(hObject, eventdata, handles)s=str2num(get(handles.edit_display,string);rs=num2str(factorial(s);set(handles.edit_display,string,rs); guidata(hObject, handles); % - Executes on button press in pb_yu.function pb_yu_Callback(hObject, eventdata, handles)global num1;str=get(handles.edit_display,string);num1=eval(str);set(handles.edit_display,string,);handles.flagnum=1;handles.current_str=; guidata(hObject, handles); function edit_display_Callback(hObject, eventdata, handles)handles.flagnum=0;guidata(hObject, handles); % - Executes during object creation, after setting all properties.function edit_display_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);end % - Executes on button press in pb_e.function pb_e_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,exp();set(handles.edit_display,string,handles.current_str);handles.flagnum=0; guidata(hObject, handles); % - Executes on button press in pb_pi.function pb_pi_Callback(hObject, eventdata, handles)if handles.flagnum=5 handles.flagnum=0; handles.current_str=;elsehandles.current_str=get(handles.edit_display,string);endhandles.current_str=strcat(handles.current_str,pi);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb_ans.function pb_ans_Callback(hObject, eventdata, handles)global result;handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,result);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb_rsignal.function pb_rsignal_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb_lsignal.function pb_lsignal_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);handles.current_str=strcat(handles.current_str,();set(handles.edit_display,string,handles.current_str); guidata(hObject, handles); % - Executes on button press in pb_clr.function pb_clr_Callback(hObject, eventdata, handles)handles.flagnum=0;set(handles.edit_display,string,);handles.current_str=;guidata(hObject, handles); % - Executes on button press in pb_dele.function pb_dele_Callback(hObject, eventdata, handles)handles.current_str=get(handles.edit_display,string);str=handles.current_str;handles.current_str=str(1:length(str)-1);set(handles.edit_display,string,handles.current_str); guidata(hObject, handles);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 中学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!