基于matlab的计算器制作.docx
- 文档编号:24952504
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:24
- 大小:723.81KB
基于matlab的计算器制作.docx
《基于matlab的计算器制作.docx》由会员分享,可在线阅读,更多相关《基于matlab的计算器制作.docx(24页珍藏版)》请在冰豆网上搜索。
基于matlab的计算器制作
基于MATLAB的计算器制作从入门到高级
项目一、建立GUI框架
1,双击MATLAB图标(本实例使用的是MATLABR2014),打开软件
2,打开GUI操作界面。
有两种方式:
a、在命令行窗口输入guide,然后点击回车。
b、先点击新建图标,在选择‘图形用户界面’。
得到如下窗口:
左上方有两个按钮:
‘新建GUI’,‘打开现有GUI’。
对于‘新建GUI’:
下方的选择框内有你可以选择建立的GUI类型,对于初学者一般选择第一个。
下方是用来设置保存文件位置的。
对于‘打开现有GUI’:
初学者可能会在网上下载一些GUI源程序,使用‘打开现有GUI’,再浏览到文件所在位置便可。
3、构建GUI框架:
在选择新建GUI并且确定后,会弹出如下窗口:
在窗口的左边会有很多选项,可以一个个拖动编辑框内;
是不是发现这些选项发挥的作用刚好就是我们平常打开一个网页或者一个软件进行操作时的选择按钮。
比较常见的有:
按钮、单选按钮、拖动条、弹出式菜单等。
看到这里细心地朋友就会发现,MATLABGUI似乎可以开发出大型软件哦,只要你有足够的想象力,当你从一个小白进阶到一个高手之后,你可以做到的。
本次计算器制作只需要用到静态文本(或者是动态文本)用来做显示器,按钮(用来操作)。
也可以添加一个面板用来修饰。
在拖出的选项上双击,会得出该选项的属性栏,比如说双击一个按钮选项,你会得到:
这个属性框比较复杂,没有必要一个个说清楚(有兴趣的可以自己研究,其实理解起来也挺简单的)
本次计算器制作,我们只需要知道以下几个:
◆a、BackgroundColor取值为颜色的预定义字符或RGB数值;缺省(就是默认的意思)值为浅灰色;
◆b、ForegroundColor取值为颜色的预定义字符或RGB数值,该属性定义控件对象标题字符的颜色;缺省值为黑色;
◆c、String取值为字符串矩阵或块数组,定义控件对象标题或选项内容;
◆d、FontName取值为控件标题等字体的字库名;
◆e、FontSize取值为数值,控制字体大小;
◆f、Tag取值为字符串,定义了控件的标识值,在任何程序中都可以通过这个标识值控制该控件对象;
◆g、Style取值可以是pushbutton(缺省值),radiobutton,checkbox,edit,text,slider,frame,popupmenu或listbox;
项目二、简单加法器的制作
1、框架准备
‘加法器’:
使用静态文本,在string处将文本修改为(加法器),在fontsize可修改字体大小,在BackgroundColor处可修改背景颜色。
‘白色编辑框’:
使用可编辑文本,同样在string处把文本清除,在fontsize修改字体大小。
‘加号(+)’、‘等号(=)’按钮:
同理按上述方法修改文本和字体大小。
2、程序准备:
先点击加号右键选择——查看回调——callback。
会得到绿色字体(一般为MATLAB程序注释)包围的程序,这个+程序就编辑在此段程序的下方,代表点击该按钮后将要执行的命令。
%---Executesonbuttonpressinpushbutton1.
functionpushbutton1_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton1(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
a=get(handles.edit1,'string');
b=get(handles.edit2,'string');
c=str2num(a)+str2num(b);
set(handles.edit3,'string',c)
3、程序阅读
a=get(handles.edit1,'string');
MATLAB的一大亮点就是它包含了大量功能强大的函数,初学者在编写MATLAB命令时,只需要明确函数调用时的格式,再输入相应的数据即可。
通常可以XX搜索函数格式、功能及其用法。
或者借助MATLAB本身的help命令:
在命令行窗口中输入helpget再按回车便会得到检索结果(再点击get的参考页)。
这里有详细的函数介绍(全英文,要求有一定的英文水平哦)
回到程序段
‘a=’表示把右边的运算结果赋值给a
get是函数,()内为运用该函数时需要输入的一些相关量
handles.(注意符号哦,此处为点而不是逗号),为函数句柄,不深究。
edit1,'string':
表示获取edit1的字符串,'string'是该函数内不能缺少的一个量,string字面意思是字符串,通俗来说就是edit1中的内容为字符串。
这里又涉及到‘edit1’和‘字符串’两个概念
‘edit1’——双击‘编辑框’按钮打开属性:
找到如下两个选项
上文提到Tag取值为字符串,定义了控件的标识值,在任何程序中都可以通过这个标识值控制该控件对象;既然要对可编辑文本进行操作,那么函数中自然免不了加入文本的标识值(记住它放在get函数中的位置就行)
字符串——在MATLAB中一串数字可以有两个身份:
数字和字符串。
当它是数字的时候可以正常的运算,而当他是字符时,就类似一段文字,没有办法对它进行运算处理的(当然作为字符串处理时有它的优势)。
我们可以调用相关函数来达到字符串和数字的相互转换。
a=get(handles.edit1,'string');
通过以上分析,这条代码的意思就很明确了:
获取edit1内的字符串(string)再赋值给a
b=get(handles.edit2,'string');
意思同上
c=str2num(a)+str2num(b);
现在a和b的属性都是字符串。
函数str2num的功能是把字符转换成数字,转换之后就可以计算了。
set(handles.edit3,'string',c)
set为输出函数,格式与get类似,括号内多了一个c,意思很明显了,当然就是输出c的值了(这里数字可以不用转换可以直接作为字符串输出)。
4、代码总结:
1、a=get(handles.edit1,'string');
2、b=get(handles.edit2,'string');
3、c=str2num(a)+str2num(b);
4、set(handles.edit3,'string',c)
(1)、把edit1内的字符串赋值给a;
(2)、把edit2内的字符串赋值给b;
(3)、分别把a、b字符串转换成数字,相加后赋值给c;
(4)、在edit3内输出字符串c。
5、运行结果
在a框中输入25,b框中输入23.再点击+,结果35显示在c框
项目三、简单可编辑计算器的制作
1、框架准备
材料:
可编辑文本、静态文本,按钮。
说明:
除了项目2介绍的操作方法外,在设置可编辑文本时,在属性栏中有:
可以设定对其方式,一般选定向右对齐。
2、程序准备
:
a=get(handles.edit1,'string');
b=eval(a);
set(handles.edit1,'string',b)
:
a=get(handles.edit1,'string');
a='';
set(handles.edit1,'string',a);
3、程序阅读:
:
a=get(handles.edit1,
'string');
把edit1中的字符串赋给a
b=eval(a);
计算字符串a的表达式,并传递给b
set(handles.edit1,
'string',b)
在edit2中输出b
:
a=get(handles.edit1,
'string');
把edit1中的字符串赋给a
a='';
把a清空
set(handles.edit1,
'string',a);
在edit2中输出a
4、代码总结
eval:
串演算指令。
例:
a='12+13';(单引号表示12+13为一个字符串)
b=eval(a)
结果:
5、运行结果
1、输入12+23
2、点击计算按钮得到结果35
3、点击清空,回到初始状态
项目四、简易入门计算器的制作
1、框架准备:
材料:
面板、静态文本、按钮、辅助线
说明:
添加一个面板可以起到修饰作用,布局时一般使用辅助线对齐,从坐标处下拉即可。
2、程序准备:
:
a=get(handles.text1,'string');
b=strcat(a,'1');
set(handles.text1,'string',b)
(对应的其他数字只需修改:
b=strcat(a,'1');
处的‘1’,改成对应的数字即可)
:
a=get(handles.text1,'string');
b=strcat(a,'+');
set(handles.text1,'string',b)
(对应的其他数字只需修改:
b=strcat(a,'+');
处的‘+’,改成对应的符号即可)
:
a=get(handles.text1,'string');
b=eval(a)
set(handles.text1,'string',b)
:
a=get(handles.text1,'string');
n=length(a)
a=a(1:
n-1);
set(handles.text1,'string',a)
:
a=get(handles.text1,'string');
a='';
set(handles.text1,'string',a)
3、程序阅读
:
a=get(handles.text1,'string');%text1中字符串赋给a
b=strcat(a,'1');%在字符串a后面再添加一个1
set(handles.text1,'string',b)%在text1中输出b
:
a=get(handles.text1,'string');
b=strcat(a,'+');
set(handles.text1,'string',b)
(解释同上)
:
a=get(handles.text1,'string');%text1中字符串赋给a
n=length(a)%把a字符串的长度的值赋给n
a=a(1:
n-1);%a由n个字符变成n-1个,去掉最后一个
set(handles.text1,'string',a)%在text1中输出a
与
见项目三
4、代码总结
strcat函数:
字符串连接。
例:
Length函数:
本来是查看向量的维数,因为这里的字符串只有一行,所以可以用来查看字符串的长度。
例:
5、运行结果
点击按钮输入1+3-6*8/5:
点击=按钮
点击back按钮:
点击C按钮:
项目五、计算器的第一次改进
问题1:
当随意点击符号按钮是,静态文本中的显示结果显然不符合常理。
改进原则:
随意点击符号按钮时只出现最后一次点击的符号
问题2、当输入的数字过多时无法全部显示。
改进原则:
字体达到一定数量时自动缩放
问题3、一般的计算器待机时,显示屏上都会显示0,但是项目四制作的计算器没有任何显示。
改进原则:
待机时静态文本中显示0
问题1解决方案
1、程序设计:
a=get(handles.text1,'string');
l=length(a);
if(a(l)=='+'||a(l)=='-'||a(l)=='*'||a(l)=='/')
a=a(1:
l-1);
end
%这是一个条件语句:
当在点击本按钮前,如果字符串a的最后一个字符是‘+’或‘-’或‘*’或‘/’时,先删除此字符,再显示该按钮内的字符。
b=strcat(a,'*');
set(handles.text1,'string',b)
2、代码总结
上述代码使用了if循环,结合了或(||)判断字符
或(|)且(&)非(~)。
例:
3、运行结果:
略
问题2解决方案
程序设计(注:
此处以1键为例,其他数字键包括=、back键做同样的修改):
a=get(handles.text1,'string');
b=strcat(a,'1');
n=length(b)
if(n<=10)
size=16;
elseif(n>10&&n<=15)
size=14;
elseif(n>15&&n<=20)
size=12;
elseif(n>20&&n<=25)
size=10;
elseif(n>25&&n<=50)
size=8;
end
%此if循环是通过检测字符串b的长度来不断变换size的值,在下面的set函数中有
'fontsize',size
'fontsize':
字体大小控制标识
Size:
字体大小
set(handles.text1,'string',b,'fontsize',size)
代码总结:
set(handles.text1,'string',b,'fontsize',16)
如果我们把函数set通俗化有:
Set(句柄(handles).控制tag为text1的静态文本(text1),‘静态文本以字符串的形式存在’('string'),要输出的量(b),‘调整字体大小’('fontsize'),字体的确切大小(数字)(size))
运行结果:
数字变多时,字体自动减小:
点击=输出结果,因结果字数较少,字体有自动变大
问题3解决方案
前期准备:
先双击静态文本,弹出属性框,找到如下选项
输入数字0,这样每次启动计算器是,显示器中就有0了。
程序准备:
(其它符号键做一致修改):
a=get(handles.text1,'string');
n=length(a)
if(n<=10)
size=16;
elseif(n>10&&n<=15)
size=14;
elseif(n>15&&n<=20)
size=12;
elseif(n>20&&n<=25)
size=10;
elseif(n>25&&n<=50)
size=8;
end
if(strcmp(a,'0')==1)
%判断字符串a是否是0set(handles.text1,'string','1','fontsize',size)%如果是,在静态文本中输出1
else
a=strcat(a,'1');&如果不是,在字符串a后面再添加1
set(handles.text1,'string',a,'fontsize',size)
end
:
a=get(handles.text1,'string');
a='0';%不完全清空,最后在静态文本中输出0
set(handles.text1,'string',a)
:
a=get(handles.text1,'String');
n=length(a);
if(n<=10)
size=16;
elseif(n>10&&n<=15)
size=14;
elseif(n>15&&n<=20)
size=12;
elseif(n>20&&n<=25)
size=10;
elseif(n>25&&n<=50)
size=8;
end
if(strcmp(a,'0')==1)
%检查静态文本内的字符串是否为0set(handles.text1,'String','0','fontsize',size)%如果是,输出0
else
a=a(1:
n-1);
%如果不是,删除字符串最后一位set(handles.text1,'String',a,'fontsize',size)
if(n==1)
%如果文本中只剩下最后一位了set(handles.text1,'string','0','fontsize',size);%在文本中输出0
end
end
代码总结
以上程序为了确保计算器待机时显示0,做了很多细节工作:
比如在back键中的程序段:
if(n==1)
%如果文本中只剩下最后一位了set(handles.text1,'string','0','fontsize',size);%在文本中输出0
这样就保证了退到最后一位时,不会继续退导致静态文本被清空,而是输出0作为结束。
(其他细节处感兴趣的同学可以自己探索)
Strcmp函数:
串比较。
例:
比较a字符串‘1234’和b字符串‘abcd’是否相同
结果为0表示不相同,结果为1表示相同。
运行结果:
略
项目六、计算器的第二次改进
我要购买
前景提要:
本次改进会添加相应功能键实现更复杂多样的计算。
继续阅读请点击购买
产品预览:
欢迎您的下载,
资料仅供参考!
致力为企业和个人提供合同协议,策划案计划书,学习资料等等
打造全网一站式需求
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 matlab 计算器 制作