matlab读取图像并用串口发送Word文档格式.doc
《matlab读取图像并用串口发送Word文档格式.doc》由会员分享,可在线阅读,更多相关《matlab读取图像并用串口发送Word文档格式.doc(10页珍藏版)》请在冰点文库上搜索。
icon.jpg'
));
%%初始化参数
hasData=false;
%表征串口是否接收到数据
isShow=false;
%表征是否正在进行数据显示,即是否正在执行函数dataDisp
isStopDisp=false;
%表征是否按下了【停止显示】按钮
isHexDisp=false;
%表征是否勾选了【十六进制显示】
isHexSend=false;
%表征是否勾选了【十六进制发送】
numRec=0;
%接收字符计数
numSend=0;
%发送字符计数
strRec='
'
;
%已接收的字符串
%%将上述参数作为应用数据,存入窗口对象内
setappdata(hObject,'
hasData'
hasData);
strRec'
strRec);
numRec'
numRec);
numSend'
numSend);
isShow'
isShow);
isStopDisp'
isStopDisp);
isHexDisp'
isHexDisp);
isHexSend'
isHexSend);
guidata(hObject,handles);
functionvarargout=serial_communication2_OutputFcn(hObject,eventdata,handles)
varargout{1}=handles.output;
functioncom_Callback(hObject,~,handles)
functioncom_CreateFcn(hObject,eventdata,handles)
ifispc&
isequal(get(hObject,'
BackgroundColor'
),get(0,'
defaultUicontrolBackgroundColor'
))
set(hObject,'
'
white'
functionrate_Callback(hObject,eventdata,handles)
functionrate_CreateFcn(hObject,eventdata,handles)
functionjiaoyan_Callback(hObject,eventdata,handles)
functionjiaoyan_CreateFcn(hObject,eventdata,handles)
functiondata_bits_Callback(hObject,eventdata,handles)
functiondata_bits_CreateFcn(hObject,eventdata,handles)
functionstop_bits_Callback(hObject,eventdata,handles)
functionstop_bits_CreateFcn(hObject,eventdata,handles)
functionstart_serial_Callback(hObject,eventdata,handles)
%【打开/关闭串口】按钮的回调函数
%打开串口,并初始化相关参数
%%若按下【打开串口】按钮,打开串口
ifget(hObject,'
value'
)
%%获取串口的端口名
com_n=sprintf('
com%d'
get(,'
%%获取波特率
rates=[120024004800960019200384004300056000576001152009216001036800];
baud_rate=rates(get(handles.rate,'
%%获取校验位设置
switchget(handles.jiaoyan,'
case1
jiaoyan='
none'
case2
odd'
case3
even'
end
%%获取数据位个数
data_bits=5+get(handles.data_bits,'
%%获取停止位个数
stop_bits=get(handles.stop_bits,'
%%创建串口对象
scom=serial(com_n);
%%配置串口属性,指定其回调函数
set(scom,'
BaudRate'
baud_rate,'
Parity'
jiaoyan,'
DataBits'
...
data_bits,'
StopBits'
stop_bits,'
InputBufferSize'
1638400,'
OutputBufferSize'
1638400,'
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,'
0);
%弹起本按钮
return;
%%打开串口后,允许串口发送数据,清空接收显示区,点亮串口状态指示灯,
%%并更改本按钮文本为“关闭串口”
set(handles.period_send,'
Enable'
on'
%启用【自动发送】按钮
set(handles.manual_send,'
%启用【手动发送】按钮
set(handles.xianshi,'
string'
%清空接收显示区
set(handles.activex1,'
1);
%点亮串口状态指示灯
set(hObject,'
String'
关闭串口'
%设置本按钮文本为“关闭串口”
else%若关闭串口
%%停止并删除定时器
t=timerfind;
if~isempty(t)
stop(t);
delete(t);
%%停止并删除串口对象
scoms=instrfind;
stopasync(scoms);
fclose(scoms);
delete(scoms);
%%禁用【自动发送】和【手动发送】按钮,熄灭串口状态指示灯
%禁用【自动发送】按钮
%禁用【手动发送】按钮
%熄灭串口状态指示灯
functiondataDisp(obj,event,handles)
globalvalue
% 串口的TimerFcn回调函数
%串口数据显示
%%获取参数
hasData=getappdata(handles.figure1,'
%串口是否收到数据
strRec=getappdata(handles.figure1,'
%串口数据的字符串形式,定时显示该数据
numRec=getappdata(handles.figure1,'
%串口接收到的数据个数
%%若串口没有接收到数据,先尝试接收串口数据
if~hasData
bytes(obj,event,handles);
%%若串口有数据,显示串口数据
ifhasData
%%给数据显示模块加互斥锁
%%在执行显示数据模块时,不接收串口数据,即不执行BytesAvailableFcn回调函数
setappdata(handles.figure1,'
true);
%%更新接收计数
set(handles.rec,'
%%更新hasData标志,表明串口数据已经显示
false);
%%给数据显示模块解锁
functionbytes(obj,~,handles)
%串口的BytesAvailableFcn回调函数
%串口接收数据
%获取串口要显示的数据
%获取串口已接收数据的个数
isStopDisp=getappdata(handles.figure1,'
%是否按下了【停止显示】按钮
isHexDisp=getappdata(handles.figure1,'
%是否十六进制显示
isShow=getappdata(handles.figure1,'
%是否正在执行显示数据操作
%%若正在执行数据显示操作,暂不接收串口数据
ifisShow
return;
%%获取串口可获取的数据个数
n=get(obj,'
BytesAvailable'
%%若串口有数据,接收所有数据
ifn
%%更新hasData参数,表明串口有数据需要显示
%%读取串口数据
a=fread(obj,n,'
uchar'
%%若没有停止显示,将接收到的数据解算出来,准备显示
if~isStopDisp
%%根据进制显示的状态,解析数据为要显示的字符串
if~isHexDisp
c=char(a'
else
strHex=dec2hex(a'
)'
strHex2=[strHex;
blanks(size(a,1))];
c=strHex2(:
end
%%更新已接收的数据个数
numRec=numRec+size(a,1);
%%更新要显示的字符串
strRec=[strRecc];
%%更新参数
%更新已接收的数据个数
%更新要显示的字符串
functionqingkong_Callback(hObject,eventdata,handles)
%%清空要显示的字符串
setappdata(handles.figure1,'
%%清空显示
set(handles.xianshi,'
functionstop_disp_Callback(hObject,eventdata,handles)
%%根据【停止显示】按钮的状态,更新isStopDisp参数
Value'
isStopDisp=true;
isStopDisp=false;
functionhex_disp_Callback(hObject,eventdata,handles)
%%根据【十六进制显示】复选框的状态,更新isHexDisp参数
isHexDisp=true;
isHexDisp=false;
functionmanual_send_Callback(hObject,eventdata,handles)
scom=get(handles.figure1,'
numSend=getappdata(handles.figure1,'
val=get(handles.sends,'
numSend=numSend+length(val);
set(handles.trans,'
num2str(numSend));
%%若要发送的数据不为空,发送数据
if~isempty(val)
%%设置倒计数的初值
n=2000000;
whilen
%%获取串口的传输状态,若串口没有正在写数据,写入数据
str=get(scom,'
TransferStatus'
if~(strcmp(str,'
write'
)||strcmp(str,'
read&
fwrite(scom,val,'
uint8'
async'
%数据写入串口
break;
n=n-1;
%倒计数
functionclear_send_Callback(hObject,eventdata,handles)
%%清空发送区
set(handles.sends,'
%%更新要发送的数据
[]);
functionperiod_send_Callback(hObject,eventdata,handles)
%【自动发送】按钮的Callback回调函数
%%若按下【自动发送】按钮,启动定时器;
否则,停止并删除定时器
t1=0.001*str2double(get(handles.period1,'
%获取定时器周期
t=timer('
ExecutionMode'
fixedrate'
Period'
t1,'
TimerFcn'
{@manual_send_Callback,handles});
%创建定时器
set(handles.period1,'
%禁用设置定时器周期的EditText对象
set(handles.sends,'
inactive'
%禁用数据发送编辑区
start(t);
%启动定时器
%启用设置定时器周期的EditText对象
%启用数据发送编辑区
%查找定时器
stop(t);
%停止定时器
delete(t);
%删除定时器
%functionperiod1_Callback(hObject,eventdata,handles)
functionperiod1_CreateFcn(hObject,eventdata,handles)
functionclear_count_Callback(hObject,eventdata,handles)
%%计数清零,并更新参数numRec和numSend
set([handles.rec,handles.trans],'
0'
functioncopy_data_Callback(hObject,eventdata,handles)
%%设置是否允许复制接收数据显示区内的数据
ifget(hObject,'
enable'