欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

matlab读取图像并用串口发送

  • 资源ID:146334777       资源大小:56KB        全文页数:10页
  • 资源格式: DOC        下载积分:10积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要10积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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', );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('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);function varargout = serial_communication2_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output;function com_Callback(hObject, , handles)function com_CreateFcn(hObject, eventdata, handles)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,'defaultUicontrolBackgroundColor') 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 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_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') % 获取串口的端口名 com_n = sprintf('com%d', get(, '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 = '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, '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, '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); %熄灭串口状态指示灯endfunction 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); set(handles.xianshi, 'string', strRec); % 更新接收计数 set(handles.rec,'string', numRec); % 更新hasData标志,表明串口数据已经显示 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'); %获取串口已接收数据的个数isStopDisp = 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参数,表明串口有数据需要显示 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); % 更新要显示的字符串 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', '');function 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(hObject, '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 + 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', '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(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'); %禁用设置定时器周期的Edit Text对象 set(handles.sends, 'Enable', 'inactive'); %禁用数据发送编辑区 start(t); %启动定时器else set(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,'BackgroundColor'), 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);function 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;% 若存在定时器对象,停止并关闭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)% 数据发送编辑区的Callback回调函数% 更新要发送的数据% 获取数据发送编辑区的字符串str = get(hObject, 'string');% 获取参数isHexSend的值isHexSend = getappdata(handles.figure1, 'isHexSend');if isHexSend %若为ASCII值形式发送,直接将字符串转化为对应的数值 val = double(str);else %若为十六进制发送,获取要发送的数据 n = find(str = ' '); %查找空格 n =0 n length(str)+1; %空格的索引值 % 每两个相邻空格之间的字符串为数值的十六进制形式,将其转化为数值 for i = 1 : length(n)-1 temp = str(n(i)+1 : n(i+1)-1); %获得每段数据的长度,为数据转换为十进制做准备 if rem(length(temp), 2) bi = reshape(temp, 2, )' %将每段十六进制字符串转化为单元数组 else break; end end val = hex2dec(b)' %将十六进制字符串转化为十进制数,等待写入串口end% 更新要显示的数据set(hObject, 'UserData', val); % - Executes on button press in open.function open_Callback(hObject, eventdata, handles)name,path=uigetfile('*.*','');file=path,name;axes(handles.axesl);x=imread(file);handles.img=x;guidata(hObject,handles);imshow(x);IM2=imread(file);row,col,h=size(IM2);red=IM2(:,:,1);red1=uint16(red);red2=bitshift(red1,-3);red=bitshift(red2,11);test1=dec2bin(red(1);green=IM2(:,:,2);green1=uint16(green);green2=bitshift(green1,-2);green=bitshift(green2,5);test2=dec2bin(green(1);blue=IM2(:,:,3);blue1=uint16(blue);blue2=bitshift(blue1,-3);blue=blue2;test3=dec2bin(blue(1);IM3=red+green+blue;n,m=size(IM3);im=zeros(n,2*m);fid=fopen('image.txt','w');for ii=1:n for jj=1:m temp=dec2hex(IM3(ii,jj),4); fprintf(fid,'%s %s ',temp(1:2),temp(3:4); end % fprintf(fid,'r');endfclose(fid);%以只读、文本方式打开文本文件fid=fopen('image.txt','rt');a1=fread(fid);%将文本字符ASCII值转换为字符串a2=char(a1');%把文本中图像数据显示在输入窗口set(handles.sends,'string',a2);%每次打开图像就更新要发送的数据sends_Callback(handles.sends, eventdata, handles);

注意事项

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

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!