国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

ELEOK

標(biāo)題: 串口通信助手 MATLAB版本源程序 [打印本頁(yè)]

作者: coolice    時(shí)間: 2020-4-27 17:33
標(biāo)題: 串口通信助手 MATLAB版本源程序
matlab串口通信.rar (17.46 KB, 售價(jià): 1 E幣)

部分代碼
function start_serial_Callback(hObject, eventdata, handles)
%   【打開(kāi)/關(guān)閉串口】按鈕的回調(diào)函數(shù)
%    打開(kāi)串口,并初始化相關(guān)參數(shù)

%% 若按下【打開(kāi)串口】按鈕,打開(kāi)串口
if get(hObject, 'value')
    %% 獲取串口的端口名
    com_n = sprintf('com%d', get(handles點(diǎn)com, 'value'));
    %% 獲取波特率
    rates = [300 600 1200 2400 4800 9600 19200 38400 43000 56000 57600 115200];
    baud_rate = rates(get(handles.rate, 'value'));
    %% 獲取校驗(yàn)位設(shè)置
    switch get(handles.jiaoyan, 'value')
        case 1
            jiaoyan = 'none';
        case 2
            jiaoyan = 'odd';
        case 3
            jiaoyan = 'even';
    end
    %% 獲取數(shù)據(jù)位個(gè)數(shù)
    data_bits = 5 + get(handles.data_bits, 'value');
    %% 獲取停止位個(gè)數(shù)
    stop_bits = get(handles.stop_bits, 'value');
    %% 創(chuàng)建串口對(duì)象
    scom = serial(com_n);
    %% 配置串口屬性,指定其回調(diào)函數(shù)
    set(scom, 'BaudRate', baud_rate, 'Parity', jiaoyan, 'DataBits',...
        data_bits, 'StopBits', stop_bits, 'BytesAvailableFcnCount', 10,...
        'BytesAvailableFcnMode', 'byte', 'BytesAvailableFcn', {@bytes, handles},...
        'TimerPeriod', 0.05, 'timerfcn', {@dataDisp, handles});
    %% 將串口對(duì)象的句柄作為用戶數(shù)據(jù),存入窗口對(duì)象
    set(handles.figure1, 'UserData', scom);
    %% 嘗試打開(kāi)串口
    try
        fopen(scom);  %打開(kāi)串口
    catch   % 若串口打開(kāi)失敗,提示“串口不可獲得!”
        msgbox('串口不可獲得!');
        set(hObject, 'value', 0);  %彈起本按鈕
        return;
    end
    %% 打開(kāi)串口后,允許串口發(fā)送數(shù)據(jù),清空接收顯示區(qū),點(diǎn)亮串口狀態(tài)指示燈,
    %% 并更改本按鈕文本為“關(guān)閉串口”
    set(handles.period_send, 'Enable', 'on');  %啟用【自動(dòng)發(fā)送】按鈕
    set(handles.manual_send, 'Enable', 'on');  %啟用【手動(dòng)發(fā)送】按鈕
    set(handles.xianshi, 'string', ''); %清空接收顯示區(qū)
    set(handles.activex1, 'value', 1);  %點(diǎn)亮串口狀態(tài)指示燈
    set(hObject, 'String', '關(guān)閉串口');  %設(shè)置本按鈕文本為“關(guān)閉串口”
else  %若關(guān)閉串口
    %% 停止并刪除定時(shí)器
    t = timerfind;
    if ~isempty(t)
        stop(t);
        delete(t);
    end
    %% 停止并刪除串口對(duì)象
    scoms = instrfind;
    stopasync(scoms);
    fclose(scoms);
    delete(scoms);
    %% 禁用【自動(dòng)發(fā)送】和【手動(dòng)發(fā)送】按鈕,熄滅串口狀態(tài)指示燈
    set(handles.period_send, 'Enable', 'off', 'value', 0); %禁用【自動(dòng)發(fā)送】按鈕
    set(handles.manual_send, 'Enable', 'off');  %禁用【手動(dòng)發(fā)送】按鈕
    set(handles.activex1, 'value', 0);  %熄滅串口狀態(tài)指示燈
end

function dataDisp(obj, event, handles)
global value
%        串口的TimerFcn回調(diào)函數(shù)
%   串口數(shù)據(jù)顯示
%% 獲取參數(shù)
hasData = getappdata(handles.figure1, 'hasData'); %串口是否收到數(shù)據(jù)
strRec = getappdata(handles.figure1, 'strRec');   %串口數(shù)據(jù)的字符串形式,定時(shí)顯示該數(shù)據(jù)
numRec = getappdata(handles.figure1, 'numRec');   %串口接收到的數(shù)據(jù)個(gè)數(shù)
%% 若串口沒(méi)有接收到數(shù)據(jù),先嘗試接收串口數(shù)據(jù)
if ~hasData
    bytes(obj, event, handles);
end
%% 若串口有數(shù)據(jù),顯示串口數(shù)據(jù)
if hasData
    %% 給數(shù)據(jù)顯示模塊加互斥鎖
    %% 在執(zhí)行顯示數(shù)據(jù)模塊時(shí),不接受串口數(shù)據(jù),即不執(zhí)行BytesAvailableFcn回調(diào)函數(shù)
    setappdata(handles.figure1, 'isShow', true);
    %% 若要顯示的字符串長(zhǎng)度超過(guò)10000,清空顯示區(qū)
    if length(strRec) > 10000
        strRec = '';
        setappdata(handles.figure1, 'strRec', strRec);
    end
    %% 顯示數(shù)據(jù)
    set(handles.xianshi, 'string', strRec);

%保存成.txt文件   
% [FileName PathName]=uiputfile({'*.txt','Txt Files(*.txt)';'*.*','All Files(*.*)'},'choose a File');
% ysw= [PathName FileName];
% dlmwrite(ysw, strRec,'delimiter','\t');
% save ysw strRec
% save(char(ysw), 'strRec')







歡迎光臨 ELEOK (http://m.afoofa.cn/) Powered by Discuz! X5.0