目录
设计背景
1.1设计目的
2.设计方法
2.1使用软件工具
2.2设计流程
3.模块界面设计及代码分析
3.1登录
3.2注册
3.3主菜单
3.4三极管介绍
3.5进制转换
3.6单位换算
3.7绘图
4.不足和改善
5.总结
-
设计背景
1.1设计目的
本程序旨在帮助为了帮助学生了解三极管的工作原理,输入输出特性并解决其中遇到的一些问题,为此我们还提供一点工具。
2.设计方法
2.1使用软件工具
Matlab2021
2.2设计流程
3.模块界面设计及代码分析
3.1登录
3.1.1登录界面
3.1.2登录代码分析
设置背景图片
ha=axes('units','normalized','pos',[0 0 1 1]);
uistack(ha,'down');
ii=imread('background.jpg');
image(ii);
colormap gray
set(ha,'handlevisibility','off','visible','on');
登录
accnum=get(handles.edit1,'string');
root=get(handles.edit2,'string');
fid=fopen('land.txt','r'); %打开文件
line=fgetl(fid); %获取文件中的一行
while ischar(line) %如果这一行中有字符
s=regexp(line,' ','split'); %将这一行以空格为界拆分为数组
a=cell2mat(s(1));
b=cell2mat(s(2));
if strcmp(a,accnum) == 1 && strcmp(b,root)==1 %如果账号密码都对
close(spf); %关闭页面
run(main); %打开主界面
break
end
if strcmp(a,accnum)==1 && strcmp(b,root)==0%如果账号对,密码错误
msgbox('密码错误!','提示','warn');
break
end
if strcmp(a,accnum)==0 && strcmp(b,root)==1%如果账号错误
msgbox('用户名未注册!','提示','warn');
break
end
line=fgetl(fid); %获取下一行
end
清除功能
set(handles.edit1,'string',' '); %将空格输入编辑框中
set(handles.edit2,'string',' ');
关闭功能
close(spf)
3.2注册
3.2.1注册界面
3.2.2注册代码分析
accnum=get(handles.edit1,'string');
root=get(handles.edit2,'string');
fid=fopen('land.txt','a+'); %以追加的方式打开文件
fprintf(fid,'%s ',accnum); %将账号和一个空格符写入文件
fprintf(fid,'%s\n',root);%将密码写入文件
h=dialog('name','关于...','position',[500 500 200 70]);%定义提示框
uicontrol('parent',h,'style','text','string','注册成功!','position',[50 40 120 20],'fontsize',12);
uicontrol('parent',h,'style','pushbutton','position',...
[80 10 50 20],'string','确定','callback','delete(gcbf)');
close(spf_01);
run(spf);
3.3主菜单
3.3.1主菜单界面
3.3.2主菜单代码分析
工具栏按钮:返回
close(main)
按钮组:切换到下一个gui界面
close(main)
run (其他界面)
3.4三极管介绍
3.4.1介绍界面
3.4.2代码分析
进入坐标系的创造函数
imshow(imread('sjg.png')); %插入图片
3.5进制转换
3.5.1进制转换界面
3.5.2进制转换代码分析
num=get(handles.edit1,'string');
num10=bin2dec(num); %二进制转十进制
set(handles.edit2,'string',num2str(num10));
num=get(handles.edit1,'string');
num10=bin2dec(num); %二进制转十进制
num8=dec2base(num10,8); %十进制转八进制
set(handles.edit2,'string',num2str(num8));
num=get(handles.edit1,'string');
num10=bin2dec(num); %二进制转十进制
num16=dec2hex(num10); %十进制转十六进制
set(handles.edit2,'string',num2str(num16));
num=get(handles.edit1,'string');
num10=base2dec(num,16); %十六进制转十进制
num8=dec2base(num10,8); %十进制转八进制
set(handles.edit2,'string',num2str(num8));
3.6单位换算
3.6.1单位换算界面
3.6.2单位换算代码分析
长度
table=[1,1000,10000,0.53996]; %单位换算表
a=get(handles.edit1,'string');
b=str2num(a); %类型转换
c(1)=b/table(1);
for i=1:4%根据单位个数设置循环数
c(i)=c(1)*table(i); %计算
b=num2str(c(i)); %赋值
set(handles.(['edit' num2str(i)]),'string',b);
guidata(hObject,handles); %实时更新与保存
end
面积
table=[1,1e2,1e6,1e10]; %单位换算表
a=get(handles.edit1,'string');
b=str2num(a); %类型转换
c(1)=b/table(1);
for i=1:4%根据单位个数设置循环数
c(i)=c(1)*table(i); %计算
b=num2str(c(i)); %赋值
set(handles.(['edit' num2str(i)]),'string',b);
guidata(hObject,handles); %实时更新与保存
end
体积
table=[1,1e3,1e9]; %单位换算表
a=get(handles.edit1,'string');
b=str2num(a);
c(1)=b/table(1); %类型转换
for i=1:3%根据单位个数设置循环数
c(i)=c(1)*table(i); %计算
b=num2str(c(i));
set(handles.(['edit'%赋值 num2str(i)]),'string',b);
guidata(hObject,handles); %实时更新与保存
end
3.7绘图
3.7.1绘图界面
3.7.2绘图界面代码分析
初始定义
t=0:0.01:2*pi; %在列表框的创造函数中定义t
canshu1=sin(t);
canshu2=cos(t);
canshu3=sin(t)+cos(t);
CS={canshu1,canshu2,canshu3};
handles.CS=CS;
guidata(hObject,handles)%进行更新和保存
提取x轴
selected_index=get (handles.listbox1,'value');
str=get (handles. listbox1, 'string'); %将string的所有文字保存在str中
set(handles.edit1,'string',str{selected_index})
x=handles.CS{selected_index};%把x储存在handles.x
handles.x=x;
guidata(hObject,handles) %进行更新和保存
提取y轴
selected_index=get (handles.listbox1,'value');
str=get (handles. listbox1, 'string'); %将string的所有文字保存在str中
set(handles.edit2,'string',str{selected_index})
y=handles.CS{selected_index};
handles.y=y; %把y储存在handles.y
guidata(hObject,handles) %进行更新和保存
绘图
axes(handles.axes1) %将这个图表至于当前
h=plot(handles.x,handles.y);
handles.h=h;
guidata(hObject,handles) %实时更新与保存
axis equal %使其坐标系等价
4.不足和改善
在本次用matlab的gui设计界面时,还有一些不足的地方,如单位换算界面不能实现随机一个输入框都可以换算,输入的数字只会在第一个数据框中显示然后换算到其他数据框,不是非常人性化,还有在进制转换中十进制转二进制,二进制显示有问题,而且十进制两位数转二进制会分开显示,我不知道怎么更改。以上大概就是这次设计的一些问题。除此之外,此次设计还是挺顺利的。
5.总结
在本次设计过程中,我了解matlab的gui设计界面的一些基本应用,例如语句的赋值,图片的插入,界面背景的使用。这次的matlab实习设计让我得到了很大的提升。通过matlab的gui界面可以把许多复杂的程序设计简单化,可以大大节约时间和人力。接下来我也会多多练习matlab加强自身编程能力。