ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:20.91KB ,
资源ID:12899679      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-12899679.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(matlab读取图像并用串口发送.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

matlab读取图像并用串口发送.docx

1、matlab读取图像并用串口发送function varargout = serial_communication2(varargin)gui_Singleton = 1;gui_State = struct(gui_Name, mfilename, 。.。 gui_Singleton, gui_Singleton, .。 gui_OpeningFcn, serial_communication2_OpeningFcn, 。 gui_OutputFcn, serial_communication2_OutputFcn, .。. gui_LayoutFcn, , 。. gui_Callback,

2、 );if nargin ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);endfunction serial_communication2_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;warning(

3、off);javaFrame = get(hObject, JavaFrame);javaFrame.setFigureIcon(javax。swing.ImageIcon(icon。jpg);% 初始化参数hasData = false; %表征串口是否接收到数据isShow = false; 表征是否正在进行数据显示,即是否正在执行函数dataDispisStopDisp = false; %表征是否按下了【停止显示】按钮isHexDisp = false; %表征是否勾选了【十六进制显示】isHexSend = false; %表征是否勾选了【十六进制发送】numRec = 0; %接收

4、字符计数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);setappdat

5、a(hObject, isHexDisp, isHexDisp);setappdata(hObject, isHexSend, isHexSend);guidata(hObject, handles);function varargout = serial_communication2_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output;function com_Callback(hObject, , handles)function com_CreateFcn(hObject, eventdata, handl

6、es)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor)) set(hObject,BackgroundColor,white);endfunction rate_Callback(hObject, eventdata, handles)function rate_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontr

7、olBackgroundColor) set(hObject,BackgroundColor,white);endfunction jiaoyan_Callback(hObject, eventdata, handles)function jiaoyan_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor)) set(hObject,BackgroundColor,white);endfunction

8、 data_bits_Callback(hObject, eventdata, handles)function data_bits_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor)) set(hObject,BackgroundColor,white);endfunction stop_bits_Callback(hObject, eventdata, handles)function stop

9、_bits_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor)) set(hObject,BackgroundColor,white);endfunction start_serial_Callback(hObject, eventdata, handles) 【打开/关闭串口】按钮的回调函数% 打开串口,并初始化相关参数% 若按下【打开串口】按钮,打开串口if get(hObject, value

10、) % 获取串口的端口名 com_n = sprintf(comd, get(handles。com, value)); % 获取波特率 rates = 1200 2400 4800 9600 19200 38400 43000 56000 57600 115200 921600 1036800; baud_rate = rates(get(handles.rate, value)); % 获取校验位设置 switch get(handles.jiaoyan, value) case 1 jiaoyan = none; case 2 jiaoyan = odd; case 3 jiaoyan

11、= 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,InputBufferSize,1638400, OutputBufferSi

12、ze,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,

13、 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, 关闭串口); %设置本按钮文本为“

14、关闭串口”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); %禁用【手动发送】按钮 s

15、et(handles。activex1, value, 0); %熄灭串口状态指示灯endfunction dataDisp(obj, event, handles)global value 串口的TimerFcn回调函数% 串口数据显示% 获取参数hasData = getappdata(handles.figure1, hasData); 串口是否收到数据strRec = getappdata(handles。figure1, strRec); %串口数据的字符串形式,定时显示该数据numRec = getappdata(handles.figure1, numRec); %串口接收到的数

16、据个数% 若串口没有接收到数据,先尝试接收串口数据if hasData bytes(obj, event, handles);end% 若串口有数据,显示串口数据if hasData % 给数据显示模块加互斥锁 % 在执行显示数据模块时,不接收串口数据,即不执行BytesAvailableFcn回调函数 setappdata(handles。figure1, isShow, true); set(handles。xianshi, string, strRec); % 更新接收计数 set(handles.rec,string, numRec); % 更新hasData标志,表明串口数据已经显示

17、 setappdata(handles。figure1, hasData, false); % 给数据显示模块解锁 setappdata(handles.figure1, isShow, false);end function bytes(obj, , handles)% 串口的BytesAvailableFcn回调函数% 串口接收数据% 获取参数strRec = getappdata(handles。figure1, strRec); %获取串口要显示的数据numRec = getappdata(handles。figure1, numRec); %获取串口已接收数据的个数isStopDis

18、p = getappdata(handles。figure1, isStopDisp); %是否按下了【停止显示】按钮isHexDisp = getappdata(handles。figure1, isHexDisp); 是否十六进制显示isShow = getappdata(handles.figure1, isShow); 是否正在执行显示数据操作% 若正在执行数据显示操作,暂不接收串口数据if isShow return;end% 获取串口可获取的数据个数n = get(obj, BytesAvailable); 若串口有数据,接收所有数据if n % 更新hasData参数,表明串口有

19、数据需要显示 setappdata(handles.figure1, hasData, true); 读取串口数据 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); %

20、 更新要显示的字符串 strRec = strRec c; end % 更新参数 setappdata(handles。figure1, numRec, numRec); %更新已接收的数据个数 setappdata(handles.figure1, strRec, strRec); 更新要显示的字符串endfunction qingkong_Callback(hObject, eventdata, handles)% 清空要显示的字符串setappdata(handles。figure1, strRec, ); 清空显示set(handles.xianshi, String, );funct

21、ion stop_disp_Callback(hObject, eventdata, handles)% 根据【停止显示】按钮的状态,更新isStopDisp参数if get(hObject, Value) isStopDisp = true;else isStopDisp = false;endsetappdata(handles.figure1, isStopDisp, isStopDisp);function hex_disp_Callback(hObject, eventdata, handles)% 根据【十六进制显示】复选框的状态,更新isHexDisp参数if get(hObje

22、ct, Value) isHexDisp = true;else isHexDisp = false;endsetappdata(handles。figure1, isHexDisp, isHexDisp);function manual_send_Callback(hObject, eventdata, handles)scom = get(handles.figure1, UserData);numSend = getappdata(handles.figure1, numSend);val = get(handles。sends, UserData);numSend = numSend

23、+ length(val);set(handles。trans, string, num2str(numSend));setappdata(handles。figure1, numSend, numSend); 若要发送的数据不为空,发送数据if isempty(val) % 设置倒计数的初值 n = 2000000; while n 获取串口的传输状态,若串口没有正在写数据,写入数据 str = get(scom, TransferStatus); if (strcmp(str, write) strcmp(str, read&write) fwrite(scom, val, uint8,

24、async); 数据写入串口 break; end n = n 1; 倒计数 endendfunction clear_send_Callback(hObject, eventdata, handles)% 清空发送区set(handles。sends, string, ) 更新要发送的数据set(handles.sends, UserData, );function period_send_Callback(hObject, eventdata, handles)% 【自动发送】按钮的Callback回调函数% 若按下【自动发送】按钮,启动定时器;否则,停止并删除定时器if get(hObj

25、ect, 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); %禁用设置定时器周期的Edit Text对象 set(handles.sends, Enable, inactive); %禁用数据发送编辑区 start(t); 启动定时器else set

26、(handles.period1, Enable, on); %启用设置定时器周期的Edit Text对象 set(handles.sends, Enable, on); 启用数据发送编辑区 t = timerfind; 查找定时器 stop(t); %停止定时器 delete(t); 删除定时器end%function period1_Callback(hObject, eventdata, handles)function period1_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,Backgrou

27、ndColor), get(0,defaultUicontrolBackgroundColor)) set(hObject,BackgroundColor,white);endfunction clear_count_Callback(hObject, eventdata, handles)% 计数清零,并更新参数numRec和numSendset(handles。rec, handles.trans, string, 0)setappdata(handles。figure1, numRec, 0);setappdata(handles。figure1, numSend, 0);functio

28、n copy_data_Callback(hObject, eventdata, handles)% 设置是否允许复制接收数据显示区内的数据if get(hObject,value) set(handles.xianshi, enable, on);else set(handles.xianshi, enable, inactive);endfunction figure1_CloseRequestFcn(hObject, eventdata, handles)% 关闭窗口时,检查定时器和串口是否已关闭 若没有关闭,则先关闭% 查找定时器t = timerfind;% 若存在定时器对象,停止并

29、关闭if isempty(t) stop(t); %若定时器没有停止,则停止定时器 delete(t);end% 查找串口对象scoms = instrfind;% 尝试停止、关闭删除串口对象try stopasync(scoms); fclose(scoms); delete(scoms);end% 关闭窗口delete(hObject);function hex_send_Callback(hObject,eventdata, handles)% 根据【十六进制发送】复选框的状态,更新isHexSend参数if get(hObject,value) isHexSend = true;else isHexSend = false;endsetappdata(handles。figure1, isHexSend, isHexSend);% 更新要发送的数据sends_Callback(handles。sends, eventdata, handles);function sends_Callback(hObject,eventdata, handles)% 数据发送编辑区的Ca

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2