MATLAB 计算器的设计.docx
《MATLAB 计算器的设计.docx》由会员分享,可在线阅读,更多相关《MATLAB 计算器的设计.docx(33页珍藏版)》请在冰豆网上搜索。
MATLAB计算器的设计
华东交通大学
课程设计报告
课程:
《MATLAB》
年级:
2014级
专业:
通信工程
班级:
卓越班
学号:
**************
******
******
2.1设计思路...............................................2
2.2设计功能模块...........................................3
3.1运行结果.........................................9
3.2结果分析...............................................10
附录(源程序代码)..........................................12
第1章课程设计概要
1.1设计介绍
本课程设计是利用MATLAB的GUI用户界面所设计的普通计算器。
该计算器具有以下功能:
1、具有友好的用户图形界面,实现十进制数的加、减、乘、除等简单计算。
2、实现部分科学计算函数功能,如求正弦、余弦、平方根等。
3、能实现小数运算。
4、有清除键,能进行清除操作。
1.2基本功能要求
利用matlab强大的数值计算功能,便捷的GUI设计功能,实现一个图形用户界面的计算器程序。
第2章课题设计内容与步骤
2.1设计内容
该课程设计的计算器界面如图所示
利用MATLABGUI设计实现一个图形用户界面的计算器程序,可以实现:
A.具有友好的用户图形界面。
实现十进制数的加、减、乘、除、乘方、取模等简单计算。
B.科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行。
C.能够保存上次历史计算的答案,先是答案存储器中得内容。
D.有清除键,能清除操作,并对不正确的表达式能指出其错误原因。
E.进行二进制数转十进制数及十进制数转二进制数。
F.直接退出。
2.2设计步骤
2.2.1打开GUI界面
输入Guide 回车或者在工具栏上点击图标
打开Guide 窗口:
2.2.2添加按钮
2.2.3根据按钮的作用及视觉效果做一定的修改
双击按钮(Puch Button)进入按键属性修改显示字符串大小、字体和颜色,然后对按钮的位置进行排布,尽量使按钮集中在静态文本框下面。
2.2.4保存、对按钮添加算法
各模块算法如下:
A.数字键设计:
按键“0”:
通过get函数获得输入的字符,函数strcat获得字符'0',并用set函数进行显示输出
textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)
set(handles.edit1,'String','0')
else
textString=strcat(textString,'0');
set(handles.edit1,'String',textString)
end
其他数字按键同上.
B.四则运算函数:
按键“+”:
通过get函数获得输入的字符,函数strcat获得字符'+',并用set函数进行显示输出
textString=get(handles.edit1,'String');
ss=char(textString);
l=length(textString);
if(ss(l)=='+'||ss(l)=='-'||ss(l)=='*'||ss(l)=='/'||ss(l)=='.') textString=ss(1:
l-1);
end
textString=strcat(textString,'+');
set(handles.edit1,'String',textString)
按键“-”:
通过get函数获得输入的字符,函数strcat获得字符'-',并用set函数进行显示输出
textString=get(handles.edit1,'String');
ss=char(textString); l=length(textString);
if(ss(l)=='+'||ss(l)=='-'||ss(l)=='*'||ss(l)=='/'||ss(l)=='.') textString=ss(1:
l-1);
end
textString=strcat(textString,'-');
set(handles.edit1,'String',textString)
按键“*”:
通过get函数获得输入的字符,函数strcat获得字符'*',并用set函数进行显示输出
textString=get(handles.edit1,'String');
ss=char(textString);
l=length(textString);
if(ss(l)=='+'||ss(l)=='-'||ss(l)=='*'||ss(l)=='/'||ss(l)=='.') textString=ss(1:
l-1);
end
textString=strcat(textString,'*');
set(handles.edit1,'String',textString)
按键“/”:
通过get函数获得输入的字符,函数strcat获得字符'/',并用set函数进行显示输出
textString=get(handles.edit1,'String');
ss=char(textString); l=length(textString);
if(ss(l)=='+'||ss(l)=='-'||ss(l)=='*'||ss(l)=='/'||ss(l)=='.') textString=ss(1:
l-1);
end
textString=strcat(textString,'/');
set(handles.edit1,'String',textString)
按键“.”:
通过get函数获得输入的字符,函数strcat获得字符'.',并用set函数进行显示输出
textString=get(handles.edit1,'String');
ss=char(textString); l=length(textString);
if(ss(l)=='+'||ss(l)=='-'||ss(l)=='*'||ss(l)=='/'||ss(l)=='.') textString=ss(1:
l-1);
end
textString=strcat(textString,'.');
set(handles.edit1,'String',textString)
按键“+/-”:
通过get函数获得输入的字符,函数strcat获得字符'+/-',并用set函数进行显示输出
if(strcmp(textString,'0')==1)
set(handles.edit1,'String','0')
else
a=strread(textString,'%f');
a=0-a;
set(handles.edit1,'String',a)
end
C.科学计算函数:
按键“sin”:
通过get函数获得输入的字符,函数strread获得输入字符,并用sin函数计算结果,set函数进行显示输出textString=get(handles.edit1,'String');
a=strread(textString,'%f');
a=sin(a);
set(handles.edit1,'String',a)
按键“cos”:
通过get函数获得输入的字符,函数strread获得输入字符,并用cos函数计算结果,set函数进行显示输出textString=get(handles.edit1,'String');
a=strread(textString,'%f');
a=cos(a);
set(handles.edit1,'String',a)
按键“tan”:
通过get函数获得输入的字符,函数strread获得输入字符,并用tan函数计算结果,set函数进行显示输出textString=get(handles.edit1,'String');
if((strcmp(textString,'1.57')==1)||(strcmp(textString,'-1.57')==1)) set(handles.edit1,'String','inf'); else
a=strread(textString,'%f');
a=tan(a);
set(handles.edit1,'String',a)
end
按键“cot” :
通过get函数获得输入的字符,函数strread获得输入字符,并用cot函数计算结果,set函数进行显示输出textString=get(handles.edit1,'String');
if((strcmp(textString,'3.14')==1)||(strcmp(textString,'0')==1)
||(strcmp(textString,'-3.14')==1));
set(handles.edit1,'String','inf');
else
a=strread(textString,'%f');
a=cot(a);
set(handles.edit1,'String',a)
end
按键“arcsin”:
通过get函数获得输入的字符,函数strread获得输入字符,并用arcsin函数计算结果,set函数进行显示输出textString=get(handles.edit1,'String');
a=strread(textString,'%f');
a=arcsin(a);
set(handles.edit1,'String',a)
按键“arccos”:
通过get函数获得输入的字符,函数strread获得输入字符,并用arccos函数计算结果,set函数进行显示输出textString=get(handles.edit1,'String');
a=strread(textString,'%f');
a=arccos(a);
set(handles.edit1,'String',a)
按键“arctan”:
通过get函数获得输入的字符,函数strread获得输入字符,并用arctan函数计算结果,set函数进行显示输出textString=get(handles.edit1,'String');
a=strread(textString,'%f');
a=arctan(a);
set(handles.edit1,'String',a)
按键“arccot”:
通过get函数获得输入的字符,函数strread获得输入字符,并用arccot函数计算结果,set函数进行显示输出textString=get(handles.edit1,'String');
a=strread(textString,'%f');
a=arccot(a);
set(handles.edit1,'String',a)
按键“log2”:
通过get函数获得输入的字符,函数strread获得输入字符,并用log2函数计算结果,set函数进行显示输出textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)
set(handles.edit1,'String','error')
else
a=strread(textString,'%f');
a=log2(a);
set(handles.edit1,'String',a)
end
按键“log10”:
通过get函数获得输入的字符,函数strread获得输入字符,并用log10函数计算结果,set函数进行显示输出textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)
set(handles.edit1,'String','error')
else
a=strread(textString,'%f');
a=sin(a);
set(handles.edit1,'String',a)
end
按键“x^2”:
通过get函数获得输入的字符,函数strread获得输入字符,并用语句a=a*a计算结果,set函数进行显示输出textString=get(handles.edit1,'String');
a=strread(textString,'%f');
a=a*a;
set(handles.edit1,'String',a)
按键“sqrt”:
通过get函数获得输入的字符,函数strread获得输入字符,并用sqrt函数计算结果,set函数进行显示输出textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)
set(handles.edit1,'String','0')
else
a=strread(textString,'%f');
a=sqrt(a);
set(handles.edit1,'String',a)
end
D.”DEL”键:
通过取屏幕值,计算出其字符长度,然后取其前N-1项的值来实
现退格:
textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)&(jj==0)
set(handles.edit1,'String','0')
else
ss=char(textString);
l=length(textString);
textString=ss(1:
l-1);
set(handles.edit1,'String',textString)
E.清屏“C”键函数:
将所有的字符置为'0'
set(handles.edit1,'String','0')
F.“=”的实现:
通过get函数获得输入的字符,并用eval函数计算结果,set
函数进行显示输出
a=get(handles.edit1,'string')
b=eval(a)
set(handles.edit1,'string',num2str(b))
第3章运行结果及分析
3.1运行结果
A. 数字键:
B.四则运算函数:
C. 科学计算函数:
Sin1的计算结果=
3.2结果分析
计算(1+9)/5
计算结果=2
arcsin1的计算结果
log2的报错:
通过输入的数据与‘0’字符比较,若两者相等,则显示“error”进行报错,结果如下:
经过计算,这些结果均与实际结果相吻合,计算器的功能实现的较为完好。
第4章心得体会
本次课程设计用MATLAB的GUI接口设计一个简单的计算器,主要对数字及运算“0-9、+、-、×、÷、.、= 、x^2 、sqrt、sin、arcsin、log2”等的代码程序的了解,在设计的过程中也遇到不少的问题,通过和同学的讨论,和老师的交流,让我知道了自己的错误和不足,最终顺利地解决了这些问题。
这次课程设计,使我进一步加深了对课本知识的了解和掌握,巩固了所学的基本知识,更加体会到了MATLAB功能的丰富,更加深刻的认识了MATLAB,熟练了编程设计。
其中对计算器按键的颜色、大小和排版,使我的思维更加的缜密,让我在以后的工作生活中,得到了思维的锻炼。
在以后学习中,我会更加刻苦,以锻炼自己的能力。
参考文献
【1】刘卫国.MATLAB程序设计与应用[M].北京:
高等教育出版
【2】郑阿奇.MATLAB实用教程[M].北京:
电子工业出版社
【3】罗华飞.MATLAB GUI设计学习手记[M].北京:
北京航空航天大学出版社
【4】张威.MATLAB基础与编程入门[M].西安:
西安电子科技大学出版社
【5】孙屹.MATLAB通信仿真开发手册[M].北京:
国防工业出版社
附录
functionvarargout=untitled1(varargin)
%UNTITLED1MATLABcodeforuntitled1.fig
%UNTITLED1,byitself,createsanewUNTITLED1orraisestheexisting
%singleton*.
%
%H=UNTITLED1returnsthehandletoanewUNTITLED1orthehandleto
%theexistingsingleton*.
%
%UNTITLED1('CALLBACK',hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinUNTITLED1.Mwiththegiveninputarguments.
%
%UNTITLED1('Property','Value',...)createsanewUNTITLED1orraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforeuntitled1_OpeningFcngetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.Allinputsarepassedtountitled1_OpeningFcnviavarargin.
%
%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone
%instancetorun(singleton)".
%
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%Edittheabovetexttomodifytheresponsetohelpuntitled1
%LastModifiedbyGUIDEv2.528-Dec-201515:
21:
34
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@untitled1_OpeningFcn,...
'gui_OutputFcn',@untitled1_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-DONOTEDIT
%---Executesjustbeforeuntitled1ismadevisible.
functionuntitled1_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstountitled1(seeVARARGIN)
%Choosedefaultcommandlineoutputforuntitled1
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakesuntitled1waitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=untitled1_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
functionedit1_Callback(hObject,eventdata,handles)
%hObjecthandletoedit1(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesand