初学 Matlab 编写上位机(1)


1、运行MATLAB ,并在命令行中输入guide
在这里插入图片描述
2、输入guide后出现如下界面,
在这里插入图片描述
3、可对其进行另存为,再点击确定,出现如下界面
在这里插入图片描述
4、在组件选项板中显示组件的名称:
选择文件 > 预设 > GUIDE。
选择在组件选项板中显示名称。
点击确定。

二、
1、选择“坐标区”,画区域
在这里插入图片描述
2、再添加三个普通按钮、两个弹出式菜单、两个静态文本(根据自己所需进行添加)

在这里插入图片描述
3、 开始对每个组件进行设置
双击每一个对象,就可以弹出其检查器,修改其属性,字体大小、粗细、位置等,其中最关键的是两个,一是String,二是Tag,String是用来修改对象中的文字,Tag是所调用的代码名,这个要好的代码习惯,尽量所见即所得,比如串口按键就用portbutton等。弹出式菜单的String,根据需要输入多行。一般来说,习惯用面板将某一个模块的各个功能圈起来,如上图的控制区、发送区、接收区等

3.1 对静态文本设置
选中已添加的静态文本,双击,出现检查器界面
在这里插入图片描述
在上图中将“静态文本”修改为“端口号”
在这里插入图片描述
最后按 Enter 即可在这里插入图片描述
第二个静态文本重复上述3.1步骤将“静态文本”字样改为“波特率”即可
在这里插入图片描述
3.2 对“弹出式菜单”设置
弹出式菜单提供三个数据集供您选择:COM1 、COM2、COM3。
在布局区域中,双击弹出式菜单。在属性检查器中,点击 String 旁边的按钮。随即显示 String 对话框。将现有文本替换为三个数据集的名称:COM1、 COM2 、COM3。按 Enter 键移到下一行。
在这里插入图片描述
完成项编辑后,点击确定。
列表中的第一个项 COM1 随即显示在布局区域内的弹出式菜单中。
在这里插入图片描述

第二个t弹出式菜单重复上述3.2步骤添加相应的波特即可
RS-232-C标准规定的数据传输速率为50、75、100、150、300、600、1200、2400、4800、9600、19200、38400波特。
在这里插入图片描述
3.3 对普通按钮进行设置
同静态文本设置相同,将“普通按钮”改为“打开”、“关闭”、“发送数据”即可
在这里插入图片描述

保存布局
保存布局时,GUIDE 将会创建两个文件:一个 FIG 文件和一个代码文件。FIG 文件的扩展名为 .fig,是包含布局说明的二进制文件。代码文件的扩展名为 .m,包含用于控制 App 行为的 MATLAB 函数。

选择工具 > 运行,保存并运行您的程序。
GUIDE 会显示一个对话框,其中显示:“如果执行激活操作,将会保存对图窗文件和 MATLAB 代码所做的更改。是否要继续?”
点击 Yes。
GUIDE 会在当前文件夹中打开一个另存为对话框,并提示您输入 FIG 文件名。
浏览到您有写入权限的任意文件夹,然后输入 FIG 文件的文件名 simple_gui。GUIDE 将使用此名称保存 FIG 文件和代码文件。
如果用于保存文件的文件夹不在 MATLAB 路径上,GUIDE 将打开一个对话框,以便您能够更改当前文件夹。
GUIDE 会保存 simple_gui.fig 和 simple_gui.m 文件,然后运行程序。它还会在默认编辑器中打开代码文件。
在这里插入图片描述
App 会在新窗口中打开。请注意,该窗口没有 MATLAB 图窗窗口显示的标准菜单栏和工具栏。您可以使用 GUIDE 添加自己的菜单和工具栏按钮,但默认情况下,GUIDE App 不包含以上任何组件。
在运行 simple_gui 时,可以在弹出式菜单中选择一个数据集,然后点击普通按钮,但不会发生任何操作。这是因为代码文件没有包含任何服务于弹出式菜单和按钮的语句。
界面的拖动相对比较简单,接下来就需要实现具体的功能,右键对象→查看回调→callback,即可调到代码区。

在这里插入图片描述

五、
5.1 给端口号写代码
function Menu_COM_Port_Callback(hObject, eventdata, handles)
% hObject ? ?handle to commenu (see GCBO)
% eventdata ?reserved - to be defined in a future version of MATLAB
% handles ? ?structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,‘String’)) returns commenu contents as cell array
% ? ? ? ?contents{get(hObject,‘Value’)} returns selected item from commenu
str=get(hObject,‘String’);
val=get(hObject,‘value’);
switch str{val}
case ‘COM1’
handles.device_port_current=serial(‘COM1’);
case ‘COM2’
handles.device_port_current=serial(‘COM2’);
case ‘COM3’
handles.device_port_current=serial(‘COM3’);
case ‘COM4’
handles.device_port_current=serial(‘COM4’);
case ‘COM5’
handles.device_port_current=serial(‘COM5’);
case ‘COM6’
end
guidata(hObject,handles);%保存配置

function Menu_COM_Port_CreateFcn(hObject, eventdata, handles)
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,‘BackgroundColor’), get(0,‘defaultUicontrolBackgroundColor’))
set(hObject,‘BackgroundColor’,‘white’);
end

5.2 给波特率写代码
function Baud_Rate_Callback(hObject, eventdata, handles)
% hObject ? ?handle to baudmenu2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,‘String’)) returns baudmenu2 contents as cell array
% contents{get(hObject,‘Value’)} returns selected item from baudmenu2
global rate;
val2=get(hObject,‘value’);
switch val2
case 2
rate=1200;
case 3
rate=4800;
case 4
rate=9600;
case 5
rate=115200;
end
%set(handles.receivemessage,‘String’,rate);
guidata(hObject,handles);

function Baud_Rate_CreateFcn(hObject, eventdata, handles)

% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,‘BackgroundColor’), get(0,‘defaultUicontrolBackgroundColor’))
set(hObject,‘BackgroundColor’,‘white’);
end

5.3 给打开串口写代码
function pbOpenSerial_Callback(hObject, eventdata, handles)
% hObject ? ?handle to openbutton (see GCBO)
% eventdata ?reserved - to be defined in a future version of MATLAB
% handles ? ?structure with handles and user data (see GUIDATA)
% set(handles.device_port_current,‘BaudRate’,9600,‘Parity’,‘none’,‘stopbits’,1,‘databits’,8,‘FlowControl’,‘none’);
global rate;
set(handles.device_port_current,‘BaudRate’,rate);
set(handles.device_port_current,‘DataBits’,8);
set(handles.device_port_current,‘StopBits’,1);
set(handles.device_port_current,‘Parity’,‘none’);
set(handles.device_port_current,‘FlowControl’,‘none’);
handles.device_port_current.BytesAvailableFcnCount = 1;
handles.device_port_current.BytesAvailableFcnMode = ‘byte’;
handles.device_port_current.BytesAvailableFcn = {@ReceiveBytesAvailableFcn,handles};

% handles.output=hObject;
guidata(hObject,handles);

fopen(handles.device_port_current);
set(handles.openbutton,‘enable’,‘off’);%打开串口后,该按钮变灰,无法再次点击该按钮
set(handles.commenu,‘enable’,‘off’);
set(handles.closebutton,‘enable’,‘on’);
guidata(hObject,handles);

5.4 给关闭串口写代码

function pbCloseserial_Callback(hObject, eventdata, handles)
% hObject ? ?handle to closebutton (see GCBO)
% eventdata ?reserved - to be defined in a future version of MATLAB
% handles ? ?structure with handles and user data (see GUIDATA)
fclose(handles.device_port_current);
set(handles.openbutton,‘enable’,‘on’);%打开串口后,该按钮变灰,无法再次点击该按钮
set(handles.commenu,‘enable’,‘on’);
set(handles.closebutton,‘enable’,‘off’);
clear a;
guidata(hObject,handles);

5.5 给发送数据写代码
function Senddata_Callback(hObject, eventdata, handles)
% hObject ? ?handle to sendbutton (see GCBO)
% eventdata ?reserved - to be defined in a future version of MATLAB
% handles ? ?structure with handles and user data (see GUIDATA)
senddata=get(handles.sendmessage,‘String’);
fprintf(handles.device_port_current,’%s’,senddata);

5.6 给清空写代码
function Clean_button_Callback(hObject, eventdata, handles)
% hObject handle to clearbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.receivemessage,‘String’,’’);
clear a;

在这里插入图片描述
以上步骤还未验证是否正确,等开学去学校试试

发布了67 篇原创文章 · 获赞 54 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/naturly/article/details/104050008
今日推荐