Matlab上位机开发(三)波形显示(幅度和频率可调节)

1. 控件布局

打开Matlab,在命令行输入guide启动GUI设计工具,拖动控件开始设计:

波形显示控件(axes)

波形显示控件可以用于绘制各种波形,拖动控件到画布中即可,然后根据需要调整控件大小:

滑动条控件(slider)

滑动条可以用于滑动调节波形的频率和幅度,并拖动两个静态文件控件用于说明:

双击频率的滑动条,设置其最大值和最小值,以及默认值:

同样,设置幅度的属性值:

可编辑文本框(edit)

可编辑文本框有两个功能:

  • 用于直接设置波形的频率和幅度;
  • 用于显示滑动条设置的频率值和幅度值;

拖动两个编辑框并在属性中设置其默认值:

按钮控件

按钮控件用于启动波形显示:

保存设计

设计完成之后,点击保存按钮或者按Ctrl+S保存设计:

2. 回调函数,让界面动起来

滑动条和编辑框联动

首先编辑滑动条的回调函数,实现拖动滑动条,编辑框可以显示对应的值:

v1 = get(handles.slider1, 'Value');
s1 = sprintf("%f", v1);
set(handles.edit1, 'String', s1);

点击运行,查看效果:

同样,编写另一个滑动条的回调函数:

v2 = get(handles.slider2,'Value');
s2 = sprintf("%f", v2);
set(handles.edit2, 'String', s2);

实现的效果如下:

再来编写频率文本编辑框的回调函数,当输入一个值的时候,滑动条的值跟着变化:

s1=get(handles.edit1,'String');
v1=str2double(s1);
set(handles.slider1,'Value',v1);

同样,再来编写幅度文本框的回调函数:

s2=get(handles.edit2,'String');
v2=str2double(s2);
set(handles.slider2,'Value',v2);

编写一个绘制波形的自定义函数

点击按钮、调节滑动条,都需要重新绘制波形,所以先编写一个自定义函数,供其它函数调用:

function draw_wave(handles)
global Fs
global A
Fs = 44100;
dt=1.0/Fs;
T =2;
N=T/dt;
t=linspace(0,T,N);
s1=get(handles.edit1,'String');
F=str2double(s1);
s1=get(handles.edit2,'String');
A=str2double(s1);
x =A*sin(2*pi*F*t);
plot(handles.axes1,t,x,'b','LineWidth',1.5);
axis(handles.axes1,[0, 0.01, -2500,2500]);
grid(handles.axes1);

点击按钮,显示波形

编写按钮的回调函数,在回调函数里调用之前编写的自定义函数显示波形:

draw_wave(handles);

运行效果如下:

添加频率滑动条调节波形功能

继续编辑滑动条的回调函数,添加波形显示功能:

频率调节滑动条完整的回调函数如下:

v1 = get(handles.slider1, 'Value');
s1 = sprintf("%f", v1);
set(handles.edit1, 'String', s1);
global Fs
Fs = v1;
draw_wave(handles);

运行效果如下:

添加幅度滑动条调节波形功能

继续编辑滑动条的回调函数,添加波形显示功能:

幅度调节滑动条完整的回调函数如下:

v2 = get(handles.slider2,'Value');
s2 = sprintf("%f", v2);
set(handles.edit2, 'String', s2);
global A
A = v2;
draw_wave(handles);

运行效果如下:

添加编辑框调节频率和幅度的功能

同样,在频率编辑框的回调函数中添加代码,完整的回调函数如下:

s1=get(handles.edit1,'String');
v1=str2double(s1);
set(handles.slider1,'Value',v1);
global Fs
Fs = v1;
draw_wave(handles);

在幅度编辑框的回调函数添加同样的功能,完整的回调函数如下:

s2=get(handles.edit2,'String');
v2=str2double(s2);
set(handles.slider2,'Value',v2);
global A
A = v2;
draw_wave(handles);

运行即可看到效果,请参考下一节的完整演示效果。

3. 演示效果

整个程序的完整演示效果如下:

发布了266 篇原创文章 · 获赞 696 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/Mculover666/article/details/103289289