matlab串口通信.rar
(17.46 KB, 售价: 1 E币)
部分代码
function start_serial_Callback(hObject, eventdata, handles)
% 【打开/关闭串口】按钮的回调函数
% 打开串口,并初始化相关参数
%% 若按下【打开串口】按钮,打开串口
if get(hObject, 'value')
%% 获取串口的端口名
com_n = sprintf('com%d', get(handles点com, 'value'));
%% 获取波特率
rates = [300 600 1200 2400 4800 9600 19200 38400 43000 56000 57600 115200];
baud_rate = rates(get(handles.rate, 'value'));
%% 获取校验位设置
switch get(handles.jiaoyan, 'value')
case 1
jiaoyan = 'none';
case 2
jiaoyan = 'odd';
case 3
jiaoyan = 'even';
end
%% 获取数据位个数
data_bits = 5 + get(handles.data_bits, 'value');
%% 获取停止位个数
stop_bits = get(handles.stop_bits, 'value');
%% 创建串口对象
scom = serial(com_n);
%% 配置串口属性,指定其回调函数
set(scom, 'BaudRate', baud_rate, 'Parity', jiaoyan, 'DataBits',...
data_bits, 'StopBits', stop_bits, 'BytesAvailableFcnCount', 10,...
'BytesAvailableFcnMode', 'byte', 'BytesAvailableFcn', {@bytes, handles},...
'TimerPeriod', 0.05, 'timerfcn', {@dataDisp, handles});
%% 将串口对象的句柄作为用户数据,存入窗口对象
set(handles.figure1, 'UserData', scom);
%% 尝试打开串口
try
fopen(scom); %打开串口
catch % 若串口打开失败,提示“串口不可获得!”
msgbox('串口不可获得!');
set(hObject, 'value', 0); %弹起本按钮
return;
end
%% 打开串口后,允许串口发送数据,清空接收显示区,点亮串口状态指示灯,
%% 并更改本按钮文本为“关闭串口”
set(handles.period_send, 'Enable', 'on'); %启用【自动发送】按钮
set(handles.manual_send, 'Enable', 'on'); %启用【手动发送】按钮
set(handles.xianshi, 'string', ''); %清空接收显示区
set(handles.activex1, 'value', 1); %点亮串口状态指示灯
set(hObject, 'String', '关闭串口'); %设置本按钮文本为“关闭串口”
else %若关闭串口
%% 停止并删除定时器
t = timerfind;
if ~isempty(t)
stop(t);
delete(t);
end
%% 停止并删除串口对象
scoms = instrfind;
stopasync(scoms);
fclose(scoms);
delete(scoms);
%% 禁用【自动发送】和【手动发送】按钮,熄灭串口状态指示灯
set(handles.period_send, 'Enable', 'off', 'value', 0); %禁用【自动发送】按钮
set(handles.manual_send, 'Enable', 'off'); %禁用【手动发送】按钮
set(handles.activex1, 'value', 0); %熄灭串口状态指示灯
end
function dataDisp(obj, event, handles)
global value
% 串口的TimerFcn回调函数
% 串口数据显示
%% 获取参数
hasData = getappdata(handles.figure1, 'hasData'); %串口是否收到数据
strRec = getappdata(handles.figure1, 'strRec'); %串口数据的字符串形式,定时显示该数据
numRec = getappdata(handles.figure1, 'numRec'); %串口接收到的数据个数
%% 若串口没有接收到数据,先尝试接收串口数据
if ~hasData
bytes(obj, event, handles);
end
%% 若串口有数据,显示串口数据
if hasData
%% 给数据显示模块加互斥锁
%% 在执行显示数据模块时,不接受串口数据,即不执行BytesAvailableFcn回调函数
setappdata(handles.figure1, 'isShow', true);
%% 若要显示的字符串长度超过10000,清空显示区
if length(strRec) > 10000
strRec = '';
setappdata(handles.figure1, 'strRec', strRec);
end
%% 显示数据
set(handles.xianshi, 'string', strRec);
%保存成.txt文件
% [FileName PathName]=uiputfile({'*.txt','Txt Files(*.txt)';'*.*','All Files(*.*)'},'choose a File');
% ysw= [PathName FileName];
% dlmwrite(ysw, strRec,'delimiter','\t');
% save ysw strRec
% save(char(ysw), 'strRec')
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|
|