matlab串口程序内容_第1页
matlab串口程序内容_第2页
matlab串口程序内容_第3页
matlab串口程序内容_第4页
matlab串口程序内容_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

functionserial_communication2_OpeningFcn(hObject,eventdata,handles,varargin)handles.output=hObject;warning('off');javaFrame=get(hObject,'JavaFrame');javaFrame.setFigureIcon(javax.swing.ImageIcon('icon.jpg'));%%初始化参数hasData=false;%表征串口是否接收到数据isShow=false;%表征是否正在进行数据显示,即是否正在执行函数dataDispisStopDisp=false;%表征是否按下了【停止显示】按钮isHexDisp=false;%表征是否勾选了【十六进制显示】isHexSend=false;%表征是否勾选了【十六进制发送】numRec=0;%接收字符计数numSend=0;%发送字符计数strRec='';%已接收的字符串%%将上述参数作为应用数据,存入窗口对象内setappdata(hObject,'hasData',hasData);setappdata(hObject,'strRec',strRec);setappdata(hObject,'numRec',numRec);setappdata(hObject,'numSend',numSend);setappdata(hObject,'isShow',isShow);setappdata(hObject,'isStopDisp',isStopDisp);setappdata(hObject,'isHexDisp',isHexDisp);setappdata(hObject,'isHexSend',isHexSend);guidata(hObject,handles);functionstart_serial_Callback(hObject,eventdata,handles)%【打开/关闭串口】按钮的回调函数%打开串口,并初始化相关参数%%若按下【打开串口】按钮,打开串口ifget(hObject,'value')%%获取串口的端口名com_n=sprintf('com%d',get(,'value'));%%获取波特率rates=[30060012002400480096001920038400430005600057600115200];baud_rate=rates(get(handles.rate,'value'));%%获取校验位设置switchget(handles.jiaoyan,'value')case1jiaoyan='none';case2jiaoyan='odd';case3jiaoyan='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);%%尝试打开串口tryfopen(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');%禁用【手动发送】按钮setappdata(handles.figure1,'strRec','');%%清空显示set(handles.xianshi,'String','');functionstop_disp_Callback(hObject,eventdata,handles)%%根据【停止显示】按钮的状态,更新isStopDisp参数ifget(hObject,'Value')isStopDisp=true;elseisStopDisp=false;endsetappdata(handles.figure1,'isStopDisp',isStopDisp);functionhex_disp_Callback(hObject,eventdata,handles)%%根据【十六进制显示】复选框的状态,更新isHexDisp参数ifget(hObject,'Value')isHexDisp=true;elseisHexDisp=false;endsetappdata(handles.figure1,'isHexDisp',isHexDisp);functionmanual_send_Callback(hObject,eventdata,handles)scom=get(handles.figure1,'UserData');numSend=getappdata(handles.figure1,'numSend');val=get(handles.sends,'UserData');numSend=numSend+length(val);set(handles.trans,'string',num2str(numSend));setappdata(handles.figure1,'numSend',numSend);%%若要发送的数据不为空,发送数据if~isempty(val)%%设置倒计数的初值n=1000;whilen%%获取串口的传输状态,若串口没有正在写数据,写入数据str=get(scom,'TransferStatus');if~(strcmp(str,'write')||strcmp(str,'read&write'))fwrite(scom,val,'uint8','async');%数据写入串口break;endn=n-1;%倒计数endendfunctionclear_send_Callback(hObject,eventdata,handles)%%清空发送区set(handles.sends,'string','')%%更新要发送的数据set(handles.sends,'UserData',[]);functioncheckbox2_Callback(hObject,eventdata,handles)functionperiod_send_Callback(hObject,eventdata,handles)%【自动发送】按钮的Callback回调函数%%若按下【自动发送】按钮,启动定时器;否则,停止并删除定时器ifget(hObject,'value')t1=0.001*str2double(get(handles.period1,'string'));%获取定时器周期t=timer('ExecutionMode','fixedrate','Period',t1,'TimerFcn',...{@manual_send_Callback,handles});%创建定时器set(handles.period1,'Enable','off');%禁用设置定时器周期的EditText对象set(handles.sends,'Enable','inactive');%禁用数据发送编辑区start(t);%启动定时器elseset(handles.period1,'Enable','on');%启用设置定时器周期的EditText对象set(handles.sends,'Enable','on');%启用数据发送编辑区t=timerfind;%查找定时器stop(t);%停止定时器delete(t);%删除定时器endfunctionperiod1_Callback(hObject,eventdata,handles)functionperiod1_CreateFcn(hObject,eventdata,handles)ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunctionclear_count_Callback(hObject,eventdata,handles)%%计数清零,并更新参数numRec和numSendset([handles.rec,handles.trans],'string','0')setappdata(handles.figure1,'numRec',0);setappdata(handles.figure1,'numSend',0);functioncopy_data_Callback(hObject,eventdata,handles)%%设置是否允许复制接收数据显示区内的数据ifget(hObject,'value')set(handles.xianshi,'enable','on');elseset(handles.xianshi,'enable','inactive');endfunctionfigure1_CloseRequestFcn(hObject,eventdata,handles)%关闭窗口时,检查定时器和串口是否已关闭%若没有关闭,则先关闭%%查找定时器t=timerfind;%%若存在定时器对象,停止并关闭if~isempty(t)stop(t);%若定时器没有停止,则停止定时器delete(t);end%%查找串口对象scoms=instrfind;%%尝试停止、关闭删除串口对象trystopasync(scoms);fclose(scoms);delete(scoms);end%%关闭窗口delete(hObject);functionhex_send_Callback(hObject,eventdata,handles)%%根据【十六进制发送】复选框的状态,更新isHexSend参数ifget(hObject,'value')isHexSend=true;elseisHexSend=false;endsetappdata(handles.figure1,'isHexSend',isHexSend);%%更新要发送的数据sends_Callback(handles.sends,eventdata,handles);functionsends_Callback(hObject,eventdata,handles)%数据发送编辑区的Callback回调函数%更新要发送的数据%%获取数据发送编辑区的字符串str=get(hObject,'string');%%获取参数isHexSend的值isHexSend=getappdata(handles.figure1,'isHexSend');if~isHexSend%若为ASCII值形式发送,直接将字符串转化为对应的数值val=double(str);else%若为十六进制发送,获取要发送的数据n=find(str=='');%查找空格n=[0nlength(str)+1];%空格的索引值%%每两个相邻空格之间的字符串为数值的十六进制形式,将其转化为数值fori=1:length(n)-1temp=str(n(i)+1:n(i+1)-1);%获得每段数据的长度,为数据转换为十进制做准备if~rem(length(temp),2)b{i}=reshape(temp,2,[])';%将每段十六进制字符串转化为单元数组else

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论