www.gusucode.com > 串口通信程序,带有GUI界面 串口通信程序,带有GUI界面 > serial_communication.m

    function varargout = serial_communication(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @serial_communication_OpeningFcn, ...
                   'gui_OutputFcn',  @serial_communication_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

function serial_communication_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
javaFrame = get(hObject,'JavaFrame');
javaFrame.setFigureIcon(javax.swing.ImageIcon('icon.jpg'));
guidata(hObject, handles);

function varargout = serial_communication_OutputFcn(hObject, eventdata, handles) 
varargout{1} = handles.output;

function com_Callback(hObject, eventdata, handles)

function com_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

function rate_Callback(hObject, eventdata, handles)

function rate_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

function jiaoyan_Callback(hObject, eventdata, handles)

function jiaoyan_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

function 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');
end

function 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');
end

function start_serial_Callback(hObject, eventdata, handles)
global scom
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',100,...
        'BytesAvailableFcnMode','byte','BytesAvailableFcn',{@bytes,handles},...
        'TimerPeriod',0.01,'timerfcn',{@bytes,handles})
    try
        fopen(scom);
    catch
        msgbox('串口不可获得!');
        return
    end
    set(handles.xianshi,'string','')
    set(handles.activex1,'value',1)
else
    t=timerfind;
    try
        stop(t);
        delete(t);
    end
    scoms=instrfind;
    stopasync(scom);
    fclose(scoms);
    delete(scoms);
    set(handles.period_send,'value',0)
    set(handles.activex1,'value',0)
end

function bytes(obj,eventdata,handles)
n=get(obj,'BytesAvailable');
if n
    a=fread(obj,n,'uchar');
    if ~get(handles.hex_disp,'value')
        c=char(a');
        if ~get(handles.stop_disp,'value')
            set(handles.xianshi,'string',[get(handles.xianshi,'string') c])
        end
        set(handles.rec,'string',num2str(str2num(get(handles.rec,'string'))+length(c)))
    else
        c=str2num(dec2hex(a'))';
        if ~get(handles.stop_disp,'value')
            set(handles.xianshi,'string',[get(handles.xianshi,'string') num2str(c) '  '])
        end
        set(handles.rec,'string',num2str(str2num(get(handles.rec,'string'))+length(c)))
    end
end

function qingkong_Callback(hObject, eventdata, handles)
set(handles.xianshi,'string','')

function stop_disp_Callback(hObject, eventdata, handles)

function radiobutton1_Callback(hObject, eventdata, handles)

function radiobutton2_Callback(hObject, eventdata, handles)

function togglebutton4_Callback(hObject, eventdata, handles)

function hex_disp_Callback(hObject, eventdata, handles)

function manual_send_Callback(hObject, eventdata, handles)
global scom
if ~get(handles.hex_send,'value')
    str=get(handles.sends,'string');
    val=double(str);
    set(handles.trans,'string',num2str(str2num(get(handles.trans,'string'))+length(str2num(str))))
else
    a=get(handles.sends,'string');
    n=find(a==' ');
    n=[0 n length(a)+1];
    for i=1:length(n)-1
        temp=a(n(i)+1:n(i+1)-1);
        if ~rem(length(temp),2)
            b{i}=reshape(temp,2,[])';
        else
            break;
        end
    end
    val=hex2dec(b)';
    set(handles.trans,'string',num2str(str2num(get(handles.trans,'string'))+length(val)))
end
if ~isempty(val)
    try
        str=get(scom,'TransferStatus');
    catch
        return
    end
    while 1
        if ~(strcmp(str, 'write')||strcmp(str,'read&write'))
            fwrite(scom,val,'uint8','async');
            break
        end
    end
end


function pushbutton1_Callback(hObject, eventdata, handles)
set(handles.sends,'string','')

function checkbox2_Callback(hObject, eventdata, handles)


function period_send_Callback(hObject, eventdata, handles)
if get(hObject,'value')
    t1=0.001*str2num(get(handles.period1,'string'));
    t=timer('BusyMode','queue','ExecutionMode','fixedrate',...
        'Period',t1,'TimerFcn',{@manual_send_Callback,handles});
    start(t);
else
    t=timerfind;
    stop(t);
    delete(t);
    clear 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');
end

function pushbutton2_Callback(hObject, eventdata, handles)
set([handles.rec,handles.trans],'string','0')

function copy_data_Callback(hObject, eventdata, handles)
if get(hObject,'value')
    set(handles.xianshi,'enable','on')
else
    set(handles.xianshi,'enable','inactive')

end