自制的简易Matlab GUI串口通信助手存在问题,edit无法实时显示接受的信息! 10C

1.我仿照罗飞华老师的串口通信助手自己做了个简易的串口通信助手,作为单片机的上位机来用,可是显示界面的edit控件只能显示三行字符串,其他的无法实时显示。我一直以为我模仿的有问题,可奇怪的是,我用罗老师的串口助手也只能显示这三行。以下是我用stc官方的串口通信助手的演示:

先输入半径10
图片说明
再输入目的坐标(6,8,10)
图片说明
图片说明
图片说明

可以看出程序可以很好的运行,并实时输出xyz坐标反馈给串口助手。而用matlab gui做的串口助手我实行了简化,将串口直接定成com4,波特率直接定成9600,省去了什么hex模式发送什么周期自动发送啥的,结果如下:

图片说明
实际情况是我的程序可以正常运行,即电机可以正常转动,然而,edit控件界面永远只显示这三行,不会再实时显示后面的(X,Y,Z)坐标的变化值。请问这是为什么?

而且在运行期间matlab程序还爆出了几个错误:
图片说明
这个错误是什么意思?求大神告诉我,本人刚开始接触matlab GUI部分
以下是我的matlabgui的代码:

 function varargout = jiemian(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @jiemian_OpeningFcn, ...
                   'gui_OutputFcn',  @jiemian_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 jiemian_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);

function varargout = jiemian_OutputFcn(hObject, eventdata, handles) 
varargout{1} = handles.output;
%打开串口按钮
function start_serial_Callback(hObject, eventdata, handles)
global scom
if get(hObject,'value')
   scom=serial('com4');
   set(scom,'BaudRate',9600,'Parity','none','DataBits',...
        8,'StopBits',1,'BytesAvailableFcnCount',100,...
        'BytesAvailableFcnMode','byte','BytesAvailableFcn',{@bytes,handles},...
        'TimerPeriod',0.01,'timerfcn',{@bytes,handles})
    try
        fopen(scom);
    catch
        msgbox('串口不可获得!');
        set(hObject, 'value', 0);  %弹起本按钮 
        return
    end
    set(handles.xianshi, 'string', '');             %清空接收显示区
    set(hObject, 'String', '关闭串口');         %设置本按钮文本为“关闭串口”
else
    t=timerfind;
    try
        stop(t);
        delete(t);
    end
    scoms=instrfind;
    stopasync(scom);
    fclose(scoms);
    delete(scoms);
    set(hObject, 'String', '打开串口');         %设置本按钮文本为“打开串口”    
end
%bytes函数
function bytes(obj,eventdata,handles)
n=get(obj,'BytesAvailable');
if n
    a=fread(obj,n,'uchar');
    c=char(a');
    set(handles.xianshi,'string',[get(handles.xianshi,'string') c])
    set(handles.rec,'string',num2str(str2num(get(handles.rec,'string'))+length(c)))
end
%清空接收区按钮
function qingkong_Callback(hObject, eventdata, handles)
set(handles.xianshi,'string','')
%清空发送区按钮
function pushbutton1_Callback(hObject, eventdata, handles)
set(handles.sends,'string','')
% 发送按钮
function manual_send_Callback(hObject, eventdata, handles)
global scom
    str=get(handles.sends,'string');
    val=double(str);
    set(handles.trans,'string',num2str(str2num(get(handles.trans,'string'))+length(str2num(str))))

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 sends_Callback(hObject, eventdata, handles)

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

%接收区文本显示回调函数
function xianshi_Callback(hObject, eventdata, handles)

function xianshi_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')

附带用罗老师的gui串口助手也只能显示这三行,和我的情况一样,这个是edit的问题还是编程的问题?

图片说明

1个回答

qq_36341912
野屲 这个帖子我之前看过,可还是解决不了我的这几个问题啊
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐