【课设大报告】 基于matlab gui设计的三极管学习系统

目录

设计背景

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.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加强自身编程能力。

  • 26
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值