用MATLAB的GUIDE工具做有GUI界面的串口通信上位機_第1頁
用MATLAB的GUIDE工具做有GUI界面的串口通信上位機_第2頁
用MATLAB的GUIDE工具做有GUI界面的串口通信上位機_第3頁
用MATLAB的GUIDE工具做有GUI界面的串口通信上位機_第4頁
用MATLAB的GUIDE工具做有GUI界面的串口通信上位機_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

這是我很久之前寫串口通信程序時編的,網(wǎng)上這寫資料很少,我是看著MATLAB的幫助文檔自己一點點寫的,雖然最后放棄了matlab上位機程序的方案,但是還是整理了一下之前的一些收獲,寫下以下的說明。編譯環(huán)境:MATLAB2009a1打開GUIDE工具,點擊紅圈中的GUIDE圖標。CurrentDirectory.E;FileEditTextGoCellTnoliCurrentDirectory.E;FileEditTextGoCellTnoliEiebutesDesktopffindovHelp^%發(fā)年按鈕回調(diào)ShortcutsFHowtoAddNWhwt'zNaw148149iiE-func-tionpbSendDataCallback(hObjactglobalo_S$rialPort;:%hObjeq-thMdletopb_SendD^ta(/2直接利用默認設(shè)置點0K即可)GUIDEQuietStartCreateKewGUIGlUIlEtinplates.ElankGUI*GidwithUicoctroi■'GUIwithAjk5andflemiModalQuestionDialog3在控件籃拖拽控件到如下圖的形式回圖[IH]兇回回舊F目

西匠]回回13回①昏蜀陣令版寺站聞哥哥漫席沔6PropertyInspecroi-y口?—s?一Igl一4”Al■ds.MIe-odi.*?L曾r*4OHsX5fc-?-■s.r匚苛Hl告言土M?91*1言-.?§#□---IIIXEHitM-bitEavFr-一!HJ*nnLx?r-.bckHu”MrMi-tL+Fnwh.:ILM-HL-l-n1.1dfHiHhl頓EH#+51£?也§varlrjn,S-Ql小T婷wTglEWTtrinnuecwmm富#r¥nLMTUUEEIUgr-.ttx^cfLT*try\L->>>L>、£>.0tlIrmL,&OH公旨!LAirIop41,0■la、a'o%=$BHml—12luffluTmEI〕dp□s功二可甘串圍口PR【OHOnukp岬invi—l@【pol-l>?■占-iv*KrJt£r.rLvrn>1tl>%tL?一般僅設(shè)置Tag選項和String選項。其中String選項在按鈕控件中就是GUI顯示時的字符。Tag屬性較為重要,在GUI編程時控件的索引主要利用Tag選項的屬性并且在GUI生成回調(diào)函數(shù)時候也是由Tag屬性的值命名的。這里將“打開串口”按鈕控件的String設(shè)置為“打開串口”,tag設(shè)置為pb_。penSerialPort。具體控件的設(shè)置和關(guān)于GUI的編程還是看下幫助(截圖部分)或找本這方面的書看一下。Eixvir-oiMTien-t甲由:^ATULB▲f妙kfMX**…虬Eixvir-oiMTien-t甲由:^ATULB▲f妙kfMX**…虬W/皿這里對我即將用的功能簡述一下,MALTAB的GUI主要由兩個文件,當設(shè)置好GUIDE時點擊保存,這時將在當前路徑自動產(chǎn)生兩個名字相同的文件,但擴展標識符不同,一個為.fig文件,一個為.m文件,.fig主要是GUI圖形文件,和GUIDE設(shè)計的圖像相同,.m文件為程序文件,所有事件響應(yīng)和計算功能都在這里實現(xiàn)。MATLAB的按鈕以及各種控件事件響應(yīng)是依靠一種叫做回調(diào)函數(shù)(CallbackFunction)來實現(xiàn)的(我理解為和VisualC++中的消息映射,C#中的異步委托事件響應(yīng)一種原理),自動生成的M文件中已經(jīng)自動做好回調(diào)函數(shù)的名稱和參數(shù)了,我們需要做的就是在其中添加你要進行的處理。

例如:我們要在鼠標單擊按鈕“打開串口”時進行一系列的串口初始化動作,這時右鍵單擊“打開串口按鈕”如圖CutCtrLHCopyCutCtrLHCopyCtrl+CPasteCtrl+VClearDuplicateCtrli-]]BringtoFrontctri+rSemitoBackCtrl+SObjectTlrowserM_filaIdjtorJ籍則MALAB會自動轉(zhuǎn)向相應(yīng)的M文件的回調(diào)函數(shù)的位置。如圖888990919293888990919293949595膈—Executesonbuttenpre&sin;:-bOp-?nSerialFort,funciionpi?O^enSerialPortCaHback(hObject,JaW0W*WAJUWJWJL?.M.U_?.WA"J-ajJ-'.'."J.E.UAMJ.W^JUULUUUVW.hObjectev^ntdatahandleshandletcpb_3pr]iS6ric;lPDrt;&■?£reserved-tostructurevfit.globaiQ_SerLaLPort,%這里,因為該按鈕的Tag為"pb_OpenSerialPort”,則GUIDE自動生成的回調(diào)函數(shù)名即為pb_OpenSerialPort_Callback,函數(shù)有三個參數(shù),hObject是當前控件對象,即打開串口按鈕對象(面向?qū)ο蠹夹g(shù)中的概念),索引或設(shè)置當前對象(打開串口按鈕對象)時只需要引用hObject就可以了。例如:改變當前空間的可見性,只需調(diào)用set(hObject,'Visable','off‘);打開串口對象在單擊該按鈕時即會隱藏。eventdata我暫時沒有用到,所以暫且不管他handles我理解是整個GUI界面的索引句柄,所有GUI界面上的控件都可以通過他來索引,幾乎有全局作用域,例如在打開串口按鈕的回調(diào)中要將關(guān)閉串口按鈕顯示出來,可以這樣調(diào)用set(handles.pb_CloseSerialPort,'Visable,,'on,);就可以了!這里handles還有一個作用就是在不同控件間進行參數(shù)傳遞,只要對handle的成員變量進行賦值就可以了。當然后面要調(diào)用一下guidata(hObject,handles);將變量保存。例如打開串口按鈕里面有個數(shù)據(jù)10需要關(guān)閉串口按鈕調(diào)用可以這樣寫。%打開串口按鈕回調(diào)函數(shù)中handles.double_vir=10;guidata(hObject,handles);%關(guān)閉串口按鈕回調(diào)函數(shù)中a=handles.double_vir;5進行串口設(shè)置,參看如下圖中的MATLAB幫助甲申令=fK-omMJLTULBReWotesM4.■且3.KtL?BD-MJLTZLAB.王偵-日/iim號C姓ceWEH—Fill.喧w+□■"■■電H=n■虹PWK--Lx-3HJ?,"衛(wèi)SI—申■jk..WfC?JLl_ie<£NATLASSo>£■?.?:EiromC-a_nd.Fu直-t_iruxF*mtis-+Unc.iin.S-um.Jww(Z3.■答冬■■■iicMA-TT-JL*nS。蛆里VT質(zhì)ksQiCWMS-upf<±<?±-IVIATl^AV£>:?-£twu?4COWCli-ATkl^-vpporft=+M£lTL_AJHilZUHIAu.1!-<pnim_1.i.dki.it-btwr'tfWehS-v±ctsIn.tilATILJkAApi>Lic&1.1ohisIAtft'<idueLi<13V—O-v-eafviev.1oEt.li.喧SeiriLaJLZPoar*■*-■■!■&.£:St*_ir-tesdt■卜5=c-t-b-sXH/UWE"■■■■*二HR吝■.Q3■、FD-BIL4)甲申令=fK-omMJLTULBReWotesM4.■且3.KtL?BD-MJLTZLABCti-Ta-Eto±>L?-Da-vi>C4C?nf?pu-?a^iECo-imrn'wnac?ilLk-vnS?<£inn:xtWk*it.i£ii£u^.d.ng?■%.—+t.sand.Ca3.H>acl^s-Ifi.£ZuiMt.:r<iJ.Ir13住的鞏毋一Rcc4B-d.i.Eii.EXnfi.on.toZDisk串口初始化(主要在打開串口按鈕的回調(diào)函數(shù)中),包括COM端口,BaudRate,DataBits,StopBitsBytesavailable事件設(shè)置,主要觸發(fā)串口響應(yīng)Bytesavailable事件的條件。BytesAvailableFcnSpecifytheM-functiontoexecutewhenaspecifiednumberofbytesisavailableintheinputbuffer,oraterminatorisread,即指定當一個確定數(shù)量的字節(jié)數(shù)據(jù)(由BytesAvailableFcnCount屬性設(shè)置)存在輸入緩沖區(qū)時或一個結(jié)束符被讀到時執(zhí)行的m文件的回調(diào)函數(shù)。BytesAvailableFcnCountSpecifythenumberofbytesthatmustbeavailableintheinputbuffertogenerateabytes—availableevent.指定產(chǎn)生bytes-available事件串口輸入緩沖區(qū)必須存在的字節(jié)數(shù)。

BytesAvai1ableFcnModeSpecifyifthebytes-availableeventisgeneratedafteraspecifiednumberofbytesisavailableintheinputbuffer,orafteraterminatorisread。指定是由串口輸入緩沖區(qū)指定數(shù)量的字節(jié)數(shù)產(chǎn)生bytes-available事件還是由讀到結(jié)束符產(chǎn)生bytes-available事件。(本文選擇byte)串口初始化代碼:%%%COM端口初始化o_SerialPort=serial(string_Select_COM);set(o_Seria1Port,'BaudRate',double_Baud);%%%Baud初始化set(o_SerialPort,'DataBits',double_DataBit);%%%設(shè)置數(shù)據(jù)長度set(o_SerialPort,'StopBits',double_StopBits);%%%設(shè)置停止位長度set(o_SerialPort,'InputBufferSize',1024000);%%%設(shè)置輸入緩沖區(qū)大小為1M%%%串口事件回調(diào)設(shè)置o_Seria1Port.BytesAvailableFcnMode=,byte';ao_SeriaIPort.BytesAvailableFcnCount=l0;%輸入緩沖區(qū)存在10個字節(jié)觸發(fā)回調(diào)函數(shù)劣o_SerialPort.BytesAvailableFcn=(@EveBytesAvailableFcn,handles);%回調(diào)函數(shù)的指定fopen(o_SerialPort);%打開串口

%這時在M文件中添加回調(diào)函數(shù)functionEveBytesAvai1ableFcn(t,event,handles)fread(o_SerialPort,10)%在串口輸入緩沖區(qū)中讀取十個字節(jié)%其他數(shù)據(jù)處理及文字顯示end6最終實現(xiàn)界面及測試響應(yīng)我用兩臺計算機,將串口交叉相連,一臺收一臺發(fā),最終得出下面測試結(jié)果,用一臺機器的話只能將串口的2、3腳短接就可以了!雄SerialPaflCion七竺岫I直通i寄"激避畦例sm-心盅矛■■'■■誼1(M11&tlB1121(M11&tlB1125&474X1191191194^99109T1W1?11021184&5竭口號,C^*1B寸波特率g胃敗據(jù)位貌&—r.停止&L7,關(guān)閉率口NONE校驗位推收軒向立件十方法制昱示智停搔收顯示定用文件數(shù)據(jù)源.呂動岌/陽加位發(fā)送完目動活至按十六進制發(fā)送數(shù)據(jù)轆

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論