大家好,又见面了,我是你们的朋友全栈君。
之前学过单片机 对于串口通信比较了解
最近在学习MATLAB 发现它还可以控制串口 于是通过MATLAB 的GUI创建了一个串口通信的小软件
效果如下
如果没有单片机或者其他硬件的话 我们可以直接用软件模拟串口 本人选择了Configure Virtual Serial Port Driver 这个软件 软件网上就有 下一个使用几天就行了
选择两个没有被占用的串口 点击Add pair 会发现左边多出了一对串口 这对串口现在已经连接在了一起 我的是COM1和COM2 现在如果往 COM1发信息 那么COM2就会接收到 之后我通过MATLAB的 uicontrol 函数搭建了 UI界面 并逐步实现了 串口通信 布局代码如下
打开串口以及接收数据 以及动态显示的代码如下
function openserial(h1,h2,h3,h4,h5,h6,h7)
global s;
baud=[600,1200,2400,4800,9600,14400,19200,28800,38400,57600,115200,230400,460800];
v1=get(h1,’value’);
v2=get(h2,’value’);
m=strcat(‘com’,num2str(v1));
if strcmp(get(gco,’string’),’打开串口’)
try
s = serial(m);
fopen(s); %打开串口
set(s,’BytesAvailableFcnMode’,’Terminator’); %设置中断触发方式
set(s,’Terminator’,’H’,’BaudRate’,baud(v2),’DataBits’,7);
set(s,’BytesAvailableFcn’,{@ReceiveCallback,h3,h4,h5,h6,h7});
% s.BytesAvailableFcn =@ReceiveCallback; % 定义中断响应函数对象
set(gco,’string’,’关闭串口’);
msgbox([‘打开’,m,’成功’]);
catch err
msgbox(‘打开失败’);
end
else
try
fclose(s);
set(gco,’string’,’打开串口’);
msgbox([‘关闭’,m,’成功’]);
catch err
msgbox(‘关闭失败’);
end
delete(s);
end
end
function ReceiveCallback(obj,event,h3,h4,h5,h6,h7) %创建中断响应函数
global s;
global a;
global recnuma;
global recstr;
global x;
global y;
global ii;
a = fscanf(s); % 接收数据并显示(无分号)
a(end)=[];
if(strcmp(get(h5,’string’),’关闭接收’))
recstr=strcat(recstr,a);
recnuma=recnuma+length(a);
end
set(h3,’string’,num2str(recnuma));
set(h4,’string’,recstr);
if(get(h7,’value’)==1)
m=str2double(a);
x=[x ii];
y=[y m];
set(h6,’XData’,x,’YData’,y);
ii=ii+1;
axis([ii-100,ii+100,-100,100]);
end
end
这时就可以选择一个串口助手 发送数据 在 MATLAB中打开相应串口并使能接收 就看到数据的显示了
如果在串口中一直发送数据 同时在MATLAB中点击使能绘图 在Axes框中就会出现 每一时刻接收的 数据的图 具体效果如下
代码下载地址: https://download.csdn.net/download/qq_34020487/9992347
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131334.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...