串口通信,显示图形的代码matlab

本来的代码是在GUI的坐标轴里面进行图像的绘制,后来稍微改了代码,新建一个figure,在figure里面进行图形的实时绘图。借助matlab的figure窗口的多工具,进行数据的查看和分析。
主要的思路是,用51单片机,发送数据,然后在matlab里面接受数据。
目前的数据只是整数,在51里面,将整数用sprintf函数弄成字符样式,然后发送到MATLAB中,发送的字符后,再发送一个结束符号h,所以51发送的数据包括XXXh.
比如发送123整数,实际发送的是123h.
matlab中接受到123h,检测一下接收到的字符的长度,然后把最后面的h去掉,形成一个新的字符,然后用MATLAB的函数把字符变为数据,进行处理。最主要的是把h字符去掉。
这个程序有个bug就是,运行的时候,要把matlab关掉,再打开,才能把figure的数据刷新,图形才不见。另外,保存的电子表格,没有每次保存的时候清空数据,而是在后面追加数据。所以假如想清空数据,必须手动把电子表格的数据清空。
C51的程序见下篇文章。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
matlab的代码
function varargout = matlabGUI02(varargin)
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @matlabGUI02_OpeningFcn, …
‘gui_OutputFcn’, @matlabGUI02_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% — Executes just before matlabGUI02 is made visible.
function matlabGUI02_OpeningFcn(hObject, eventdata, handles, varargin)
clc;

global COM;
global rate;
global cn;

cn=1;
COM=‘COM1’;%打开GUI界面时默认是COM7
rate = 9600;
figure
set(handles.S001,‘value’, 1);
set(handles.S002,‘value’,1);
% set(handles.axes666,‘XLim’,[-1 100],‘YLim’,[-2 200],‘ZLim’,[0 1]);
set(gca,‘XLim’,[-1 25],‘YLim’,[-2 200],‘ZLim’,[0 1]);
handles.output = hObject;

guidata(hObject, handles);

function varargout = matlabGUI02_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;

function Open_button_Callback(hObject, eventdata, handles)
clc;
global s;
global rate;
global COM;
global out;
out=1;
s=serial(COM);
set(handles.Open_button,‘Enable’,‘off’);
set(handles.C01,‘Enable’,‘on’);
set(s,‘BaudRate’, rate,‘DataBits’,8,‘StopBits’,1,‘Parity’,‘none’,‘FlowControl’,‘none’);

%指定是由串口输入缓冲区指定数量的字节数产生bytes-available事件还是由读到结束符产生bytes-available事件。(本文选择byte)
set(s,‘InputBufferSize’,1024000);%%%设置输入缓冲区大小为1M
set(s,‘BytesAvailableFcnMode’,‘terminator’);
set(s,‘terminator’, ‘h’)
s.BytesAvailableFcn={@Rec_callback,handles};%回调函数的指定
fopen(s);%
fprintf(‘ceshi_dakaichuankou\n’)
% msgbox(‘ooiu’);

function S001_Callback(hObject, eventdata, handles)
global COM;
val=get(hObject,‘value’);
switch val
case 1
COM=‘COM1’;
fprintf(‘ceshi_COM=1\n’);
case 2
COM=‘COM2’;
case 3
COM=‘COM3’;
case 4
COM=‘COM4’;
case 5
COM=‘COM5’;
case 6
COM=‘COM6’;
case 7
COM=‘COM7’;
end

% — Executes during object creation, after setting all properties.
function S001_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,‘BackgroundColor’), get(0,‘defaultUicontrolBackgroundColor’))
set(hObject,‘BackgroundColor’,‘white’);
end

function S002_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,‘BackgroundColor’), get(0,‘defaultUicontrolBackgroundColor’))
set(hObject,‘BackgroundColor’,‘white’);
end
% — Executes on button press in C01.
function C01_Callback(hObject, eventdata, handles)
global s;
fclose(s);
delete(s);
set(handles.Open_button,‘Enable’,‘on’);
set(handles.C01,‘Enable’,‘off’);
fprintf(‘Close_COM’)

% — Executes on selection change in S002.
function S002_Callback(hObject, eventdata, handles)
global rate;
val=get(hObject,‘value’);
switch val
case 1
rate=9600;
case 2
rate=4800;
case 3
rate=115200;
end
function Rec_callback( t,event,handles)
global s;
global out1;
global t00;
global cn;
global arrx;
global tttx;
global buffercount;
% hp =animatedline;
global NowTime1 NowTime2;
NowTime1 = datetime(‘now’);%当前时间

if cn==1
tttx(1,1)=0;
NowTime2 = NowTime1;%当前时间
else
tttx(1,cn)=seconds(NowTime1-NowTime2);%间隔的时间
% NowTime2=NowTime1;%把这次时间存储,下次计算使用
end

out1=fscanf(s);
t00=size(out1);%获得数据长度
set(handles.T02,‘string’,t00(1,2));%将数据长度显示出来
out1((t00(1,2)))=[];%将接收到的最后那个数据h删除
set(handles.T01,‘string’,out1);%将接收的数据显示出来
arrx(1,cn) =str2double(out1);
% handles.axes666.YGrid = ‘on’;
% handles.axes666.XGrid = ‘on’;
% set(handles.axes666,‘XLim’,[-1 100],‘YLim’,[-2 200],‘ZLim’,[0 1]);
set(gca,‘xtick’,-1:1:25,‘ytick’,-2:1:200);
set(gca,‘XLim’,[-1 25],‘YLim’,[-2 200],‘ZLim’,[0 1]);

hold on;
plot(gca,tttx,arrx,’-r*’);
hold on;
set(gca,‘XLim’,[-1 25],‘YLim’,[-2 200],‘ZLim’,[0 1]);
set(gca,‘xtick’,-1:1:25,‘ytick’,-2:5:200);

% set(handles.axes666,‘xtick’,-1:1:100,‘ytick’,-2:1:200);
% hold on;
% plot(handles.axes666,tttx,arrx,’-r*’);
% hold on;
% set(handles.axes666,‘XLim’,[-1 100],‘YLim’,[-2 200],‘ZLim’,[0 1]);
% set(handles.axes666,‘xtick’,-1:2:100,‘ytick’,-2:5:200);
% handles.axes666.YGrid = ‘on’;
% handles.axes666.XGrid = ‘on’;
cn=cn+1;
buffercount=cn;

function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global arrx;
global tttx;
% xlswrite(‘Temperature_Data.xlsx’,arrx,1,strcat(‘A’,num2str(buffercount)));
xlswrite(‘D:\Temp01.xlsx’,arrx’,1,‘A1’);
xlswrite(‘D:\Temp01.xlsx’,tttx’,1,‘B1’);
cla(gca,‘reset’);
% axes(handles.axes666) ;
% cla reset
clear;
clc;

猜你喜欢

转载自blog.csdn.net/lmf666/article/details/87957613
今日推荐