版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計(jì) 報(bào) 告</p><p> 課程設(shè)計(jì)名稱: 電動(dòng)車仿真設(shè)計(jì) </p><p> 系 部: 三 系 </p><p> 學(xué)生姓名: </p><p> 班 級: 通信( )班 </p><
2、;p> 學(xué) 號: </p><p> 成 績: </p><p> 指導(dǎo)教師: </p><p> 開課時(shí)間: 學(xué)年 1 學(xué)期</p><p><b> 目錄</b></p><p&
3、gt;<b> 第一章 引言2</b></p><p> 1.1 課程設(shè)計(jì)目的2</p><p> 1.2 課程設(shè)計(jì)任務(wù)與要求2</p><p> 第二章 課程設(shè)計(jì)基本原理3</p><p> 2.1 MATLAB的圖形用戶界面(GUI)3</p><p> 2.3 Vir
4、tual Reality (VR) toolbox4</p><p> 2.3.1 Virtual Reality (虛擬現(xiàn)實(shí))4</p><p> 2.3.2 virtual reality toolbox的安裝及特點(diǎn)4</p><p> 第三章 課程設(shè)計(jì)過程5</p><p> 3.1 建立動(dòng)車仿真模型5</p&
5、gt;<p> 3.1.1安裝V-Realm Builder from MATLAB5</p><p> 3.1.2 利用virtual reality toolbox創(chuàng)建動(dòng)車模型5</p><p> 3.1.3 小車運(yùn)行程序7</p><p> 3.2 設(shè)計(jì)串口終端圖形用戶界面8</p><p> 3.3 P
6、WM步進(jìn)電機(jī)控制17</p><p> 3.3.1 開發(fā)環(huán)境17</p><p> 3.3.2 操作步驟17</p><p> 3.4 課程設(shè)計(jì)結(jié)果18</p><p> 第四章 總結(jié)與體會(huì)20</p><p><b> 參考文獻(xiàn)21</b></p><p
7、><b> 電動(dòng)車仿真設(shè)計(jì)</b></p><p><b> 第一章 引言</b></p><p> 1.1 課程設(shè)計(jì)目的</p><p> 本課程是為通信工程專業(yè)本科生開設(shè)的必修課,結(jié)合學(xué)生的專業(yè)方向的理論課程,充分發(fā)揮學(xué)生的主動(dòng)性,使學(xué)生掌握應(yīng)用MATLAB 等仿真軟件建立基于Linux的通信系統(tǒng),鞏固理
8、論課程內(nèi)容,規(guī)范文檔的建立,培養(yǎng)學(xué)生的創(chuàng)新能力,并能夠運(yùn)用其所學(xué)知識進(jìn)行綜合的設(shè)計(jì)。</p><p> Embedded System的課程設(shè)計(jì)是對嵌入通信與控制系統(tǒng)仿真軟件、課程學(xué)習(xí)的綜合檢驗(yàn),配合理論課的教學(xué),讓學(xué)生親自參加設(shè)計(jì)、仿真、驗(yàn)證Embedded System系統(tǒng)的一般原理、Applications等方面的知識點(diǎn)。</p><p> 1.2 課程設(shè)計(jì)任務(wù)與要求</p
9、><p> 在WINDOWS環(huán)境下,用MATLAB搭建虛擬賽車平臺,用行駛速度來控制ARM箱上面的電機(jī)的轉(zhuǎn)速或方向。</p><p> 電動(dòng)車仿真設(shè)計(jì)主要運(yùn)用MATLAB安裝V-Realm Builder,并在其中建立軌道及動(dòng)車模型。并利用Matlab GUI設(shè)計(jì)通過串口進(jìn)行數(shù)據(jù)發(fā)送和接收的界面,并利用內(nèi)置于Matlab的串口通信API實(shí)現(xiàn)串口數(shù)據(jù)發(fā)送與接收功能。通過串口來完成通信即實(shí)現(xiàn)動(dòng)
10、車速度的控制。通過輸入不同的數(shù)值來控制小車以不同的速度跑起來,同時(shí)控制ARM箱上面的電機(jī)的轉(zhuǎn)速或方向。要求:</p><p> 利用Matlab和Simulink對3D Virtual Reality Design。</p><p> Install Ubuntu Linux system</p><p> Install Virtual Reality Ki
11、t</p><p> Simulate Electronic Motors</p><p> Connect with the Motor Driver on the ARM9 board </p><p> User must be able to control the motor speed or direction.</p><p&
12、gt; 第二章 課程設(shè)計(jì)基本原理</p><p> 2.1 MATLAB的圖形用戶界面(GUI) </p><p> 圖形用戶界面GUI(Graphical User Interfaces):由各種圖形對象組成的用戶界面,在這種用戶界面下,用戶的命令和對程序的控制是通過“選擇”各種圖形對象來實(shí)現(xiàn)的?;緢D形對象分為控件對象和用戶界面菜單對象,簡稱控件和菜單。</p>
13、<p><b> 控件對象的描述:</b></p><p> ?。?) 按鈕(Push Buttons):執(zhí)行某種預(yù)定的功能或操作;(2) 開關(guān)按鈕(Toggle Button):產(chǎn)生一個(gè)動(dòng)作并指示一個(gè)二進(jìn)制狀態(tài)(開或關(guān)),當(dāng)鼠點(diǎn)擊它時(shí)按鈕將下陷,并執(zhí)行callback(回調(diào)函數(shù))中指定的內(nèi)容,再次點(diǎn)擊,按鈕復(fù)原,并再次執(zhí)行callback 中的內(nèi)容;(3) 單選框(Rad
14、io Button):單個(gè)的單選框用來在兩種狀態(tài)之間切換,多個(gè)單選框組成一個(gè)單選框組時(shí),用戶只能在一組狀態(tài)中選擇單一的狀態(tài),或稱為單選項(xiàng);(4) 復(fù)選框(Check Boxes):單個(gè)的復(fù)選框用來在兩種狀態(tài)之間切換,多個(gè)復(fù)選框組成一個(gè)復(fù)選框組時(shí),可使用戶在一組狀態(tài)中作組合式的選擇,或稱為多選項(xiàng);(5) 文本編輯器(Editable Texts):用來使用鍵盤輸入字符串的值,可以對編輯框中的內(nèi)容進(jìn)行編輯、刪除和替換等操作;(6) 靜
15、態(tài)文本框(Static Texts):僅僅用于顯示單行的說明文字;(7) 滾動(dòng)條(Slider): 可輸入指定范圍的數(shù)量值;(8) 邊框(Frames):在圖形窗口圈出一塊區(qū)域;(9) 列表框(List Boxes):在其中定義一系列可供</p><p> S3C2410X有5個(gè)16位定時(shí)器,其中定時(shí)器0、1、2、3具有脈沖寬度調(diào)制(PWM)功能,定時(shí)器4具有內(nèi)部定時(shí)左右,但是沒有輸出引腳。定時(shí)器0具有死
16、區(qū)生成器,可以控制大電流設(shè)備。定時(shí)器T0、T1共用一個(gè)8bit預(yù)分定時(shí)器T2、T3、T4共用另一個(gè)8bit預(yù)分頻器,每個(gè)定時(shí)器都有一個(gè)時(shí)鐘分頻器,信號分頻輸出有5種模式。每個(gè)定時(shí)器模塊都從時(shí)鐘分頻器接收它自己的時(shí)鐘信號,時(shí)鐘分頻器接收的時(shí)鐘信號來自于8bit預(yù)分頻器。可編程8bit預(yù)分頻器根據(jù)存儲(chǔ)在TCFG0和TCFG1中的數(shù)據(jù)對PCLK進(jìn)行分頻。</p><p> 每一個(gè)定時(shí)器都有一個(gè)自己的用定時(shí)器時(shí)鐘驅(qū)動(dòng)的
17、16位減法計(jì)數(shù)器。當(dāng)減法計(jì)數(shù)器減到0時(shí),就會(huì)產(chǎn)生一個(gè)定時(shí)器中斷來通知CPU定時(shí)器操作下次操作。當(dāng)定時(shí)器減法計(jì)數(shù)器減到0時(shí),相應(yīng)的TCNTBN的值被自動(dòng)重載到減法計(jì)數(shù)器中繼續(xù)下次操作。然而,如果定時(shí)器停止了,比如在運(yùn)行時(shí),通過清除TCON中定時(shí)器使能位來中止定時(shí)器的運(yùn)行,TCNTBN的值不會(huì)被重載到減法計(jì)數(shù)器中。</p><p> 2.3 Virtual Reality (VR) toolbox</p>
18、;<p> 2.3.1 Virtual Reality (虛擬現(xiàn)實(shí))</p><p> 虛擬現(xiàn)實(shí)具有沉浸感、交互性和思想性三個(gè)主要特點(diǎn):所謂沉浸感,是指用戶感到作為主角存在于虛擬環(huán)境中的真實(shí)程度。理想的虛擬環(huán)境應(yīng)該達(dá)到使用戶難以分辨真假的程度;所謂交互性,是指用戶對虛擬環(huán)境內(nèi)物體的可操作程度和從環(huán)境得到反饋的自然程度(包括實(shí)時(shí)性);所謂思想性,則是指虛擬現(xiàn)實(shí)不僅僅是一個(gè)媒體,一個(gè)高級用戶界面,還
19、反映了設(shè)計(jì)者的思想,是心靈的工具。正是基于虛擬現(xiàn)實(shí)的這三個(gè)特點(diǎn),雖然其產(chǎn)生至今不過短短40年的時(shí)間,但是已經(jīng)廣泛的應(yīng)用于軍事、醫(yī)學(xué)、教育、文化及藝術(shù)等諸多領(lǐng)域。</p><p> 2.3.2 virtual reality toolbox的安裝及特點(diǎn)</p><p> virtual reality toolbox的安裝??梢栽贛ATLAB以前安裝,只要在安裝MATLAB時(shí)選擇virt
20、ual reality toolbox就可以了。若在安裝MATLAB時(shí)沒有安裝virtual reality toolbox,可以在重新啟動(dòng)MATLAB時(shí)安裝,在安裝對話框適當(dāng)?shù)牡胤竭x上virtual reality toolbox選項(xiàng),就可以了。</p><p> VRML瀏覽器的安裝。當(dāng)安裝了virtual reality toolbox,virtual reality toolbox瀏覽器就作為默認(rèn)瀏覽器
21、,若要使用網(wǎng)絡(luò)瀏覽器作為VRML瀏覽器,就必須安裝blaxxun Connect 插件,這個(gè)插件能夠在Microsoft Internet Explorer或者Netscape Navigator中使用。</p><p> 第三章 課程設(shè)計(jì)過程</p><p> 3.1 建立動(dòng)車仿真模型</p><p> 3.1.1安裝V-Realm Builder fro
22、m MATLAB</p><p> 在MATLAB界面輸入vrinstall -check后回車,檢查是否安裝,若沒有安裝則輸入命令vrinstall -install后回車進(jìn)行安裝。然后再次輸入命令vrinstall -check確認(rèn)是否成功安裝。</p><p> 3.1.2 利用virtual reality toolbox創(chuàng)建動(dòng)車模型</p><p>
23、?。?)Starting V-Realm Builder,路徑為C:\Matlab\toolbox\vr\vrealm\progrom。打開vrbuild2,點(diǎn)擊File選擇New新建一個(gè)文件。</p><p> ?。?) Insert background button,單擊按鈕插入背景。 </p><p> 圖3.1 插入背景圖 </p><p> ?。?/p>
24、3)Insert 小車,先選中New World,然后單擊Libraries選擇Import From 選擇Object Library,從Category選項(xiàng)中任意選中一小車拖進(jìn)背景區(qū),修改一下對象的名字防止混淆??梢噪p擊scale對其大小做修改,雙擊translation修改其坐標(biāo)(默認(rèn)為原點(diǎn))。</p><p> 圖3.2 插入小車圖</p><p> 圖3.3 改變小車尺寸圖&
25、lt;/p><p> 圖3.4 改變小車位置圖</p><p> ?。?)Insert 車道,選中New World,單擊按鈕插入軌道,修改一下名字,同理可以修改其參數(shù)將其拉長變窄。</p><p> 圖3.5 插入車道圖</p><p> 圖3.6 改變車道大小圖</p><p> Insert視角,選中New
26、World,然后單擊Nodes選擇Insert選擇Bindable選擇Viewpoint插入視角,點(diǎn)擊position改變視角,然后點(diǎn)擊set-bind設(shè)置為True,就可以改變視角。</p><p> 選擇保存路徑,一般保存在MATLAB的work中。</p><p> 圖3.7 動(dòng)車模型圖</p><p> 3.1.3 小車運(yùn)行程序</p>
27、<p><b> 源代碼為</b></p><p> global v_x;</p><p> world=vrworld('car.wrl');</p><p> open(world);</p><p> fig=view(world,'-internal');&l
28、t;/p><p> pos_z=0.0;</p><p> pos_y=0.0;</p><p> pos_x=-9.0;</p><p> for t=0:0.000001:10</p><p> pos_x=pos_x+v_x*t;</p><p> world.car.transl
29、ation=[pos_x pos_y pos_z];</p><p> vrdrawnow;</p><p> end </p><p> 3.2 設(shè)計(jì)串口終端圖形用戶界面</p><p> 3.2.1 用MATLAB中GUI軟件設(shè)計(jì)串口接口程序</p><p> 啟動(dòng)Matl
30、ab后,運(yùn)行g(shù)uide命令即可以啟動(dòng)Matlab GUI開發(fā)工具。新建Blank GUI,在新建Blank GUI界面中,包含了一般的界面元素,如菜單、按鈕、坐標(biāo)軸、控件等。添加必要的串口通信參數(shù)設(shè)置按鈕。然后打開串口(選擇波特率為115200、1位停止位、無校驗(yàn)位、無硬件流控制)。</p><p> 3.2.2 串口通信接口界面程序</p><p><b> 源程序代碼為:
31、</b></p><p> function varargout = serial_communication2(varargin)</p><p> % ×÷ÕߣºÂÞ»ª·É</p><p> % ¹
32、66;ÄÜ£»´®¿ÚÊÕ·¢</p><p> % °æ±¾£º20101103 V2.0</p><p> gui_Singleton = 1;</p><p> gui_S
33、tate = struct('gui_Name', mfilename, ...</p><p> 'gui_Singleton', gui_Singleton, ...</p><p> 'gui_OpeningFcn', @serial_communication2_OpeningFcn, ...</p>
34、<p> 'gui_OutputFcn', @serial_communication2_OutputFcn, ...</p><p> 'gui_LayoutFcn', [] , ...</p><p> 'gui_Callback', []);</p><p> if nargin &am
35、p;& ischar(varargin{1})</p><p> gui_State.gui_Callback = str2func(varargin{1});</p><p><b> end</b></p><p> if nargout</p><p> [varargout{1:nargout}]
36、 = gui_mainfcn(gui_State, varargin{:});</p><p><b> else</b></p><p> gui_mainfcn(gui_State, varargin{:});</p><p><b> end</b></p><p> function
37、 serial_communication2_OpeningFcn(hObject, eventdata, handles, varargin)</p><p> handles.output = hObject;</p><p> warning('off');</p><p> javaFrame = get(hObject, 'J
38、avaFrame');</p><p> javaFrame.setFigureIcon(javax.swing.ImageIcon('icon.jpg'));</p><p> %% ³õʼ»¯²ÎÊý</p><p> hasDat
39、a = false; %±íÕ÷´®¿ÚÊÇ·ñ½ÓÊÕµ½Êý¾Ý</p><p> isShow = false; %±íÕ÷ÊÇ
40、;·ñÕýÔÚ½øÐÐÊý¾ÝÏÔʾ£¬¼´ÊÇ·ñÕýÔÚÖ´Ðк¯
41、02;ýdataDisp</p><p> isStopDisp = false; %±íÕ÷ÊÇ·ñ°´ÏÂÁË¡¾Í£Ö¹ÏÔʾ¡¿
42、176;´Å¥</p><p> isHexDisp = false; %±íÕ÷ÊÇ·ñ¹´Ñ¡ÁË¡¾Ê®Áù½øÖÆÏ
43、12;ʾ¡¿</p><p> isHexSend = false; %±íÕ÷ÊÇ·ñ¹´Ñ¡ÁË¡¾Ê®Áù½øÖÆ
44、3;¢ËÍ¡¿</p><p> numRec = 0; %½ÓÊÕ×Ö·û¼ÆÊý</p><p> numSend = 0; %·¢ËÍ×Ö
45、183;û¼ÆÊý</p><p> strRec = ''; %ÒѽÓÊÕµÄ×Ö·û´®</p><p> %% ½«ÉÏÊ
46、;ö²ÎÊý×÷ΪӦÓÃÊý¾Ý£¬´æÈë´°¿Ú¶ÔÏóÄÚ</p><p>
47、 setappdata(hObject, 'hasData', hasData);</p><p> setappdata(hObject, 'strRec', strRec);</p><p> setappdata(hObject, 'numRec', numRec);</p><p> setappdat
48、a(hObject, 'numSend', numSend);</p><p> setappdata(hObject, 'isShow', isShow);</p><p> setappdata(hObject, 'isStopDisp', isStopDisp);</p><p> setappdata(h
49、Object, 'isHexDisp', isHexDisp);</p><p> setappdata(hObject, 'isHexSend', isHexSend);</p><p> guidata(hObject, handles);</p><p> function varargout = serial_commu
50、nication2_OutputFcn(hObject, eventdata, handles) </p><p> varargout{1} = handles.output;</p><p> function com_Callback(hObject, ~, handles)</p><p> function com_CreateFcn(hObject
51、, eventdata, handles)</p><p> if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))</p><p> set(hObject,'BackgroundColor'
52、,'white');</p><p><b> end</b></p><p> function rate_Callback(hObject, eventdata, handles)</p><p> function rate_CreateFcn(hObject, eventdata, handles)</p&g
53、t;<p> if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))</p><p> set(hObject,'BackgroundColor','white');</p>
54、<p><b> end</b></p><p> function jiaoyan_Callback(hObject, eventdata, handles)</p><p> function jiaoyan_CreateFcn(hObject, eventdata, handles)</p><p> if ispc
55、&& isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))</p><p> set(hObject,'BackgroundColor','white');</p><p><b> en
56、d</b></p><p> function data_bits_Callback(hObject, eventdata, handles)</p><p> function data_bits_CreateFcn(hObject, eventdata, handles)</p><p> if ispc && isequal(
57、get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))</p><p> set(hObject,'BackgroundColor','white');</p><p><b> end</b></p&g
58、t;<p> function stop_bits_Callback(hObject, eventdata, handles)</p><p> function stop_bits_CreateFcn(hObject, eventdata, handles)</p><p> if ispc && isequal(get(hObject,'Ba
59、ckgroundColor'), get(0,'defaultUicontrolBackgroundColor'))</p><p> set(hObject,'BackgroundColor','white');</p><p><b> end</b></p><p> func
60、tion start_serial_Callback(hObject, eventdata, handles)</p><p> % ¡¾´ò¿ª/¹Ø±Õ´®¿Ú¡¿°´Å¥µÄ»
61、;ص÷º¯Êý</p><p> % ´ò¿ª´®¿Ú£¬²¢³õʼ»¯Ïà¹Ø²ÎÊ
62、;ý</p><p> %% Èô°´Ï¡¾´ò¿ª´®¿Ú¡¿°´Å¥£¬´ò¿ª´®¿&
63、#218;</p><p> if get(hObject, 'value')</p><p> %% »ñÈ¡´®¿ÚµÄ¶Ë¿ÚÃû</p><p> com_n = sprintf
64、('com%d', get(handles.com, 'value'));</p><p> %% »ñÈ¡²¨ÌØÂÊ</p><p> rates = [300 600 1200 2400 4800 9600 19200 38400 43000 560
65、00 57600 115200];</p><p> baud_rate = rates(get(handles.rate, 'value'));</p><p> %% »ñȡУÑéλÉèÖÃ</p><
66、p> switch get(handles.jiaoyan, 'value')</p><p><b> case 1</b></p><p> jiaoyan = 'none';</p><p><b> case 2</b></p><p> ji
67、aoyan = 'odd';</p><p><b> case 3</b></p><p> jiaoyan = 'even';</p><p><b> end</b></p><p> %% »ñÈ¡Ê&
68、#253;¾Ýλ¸öÊý</p><p> data_bits = 5 + get(handles.data_bits, 'value');</p><p> %% »ñȡֹͣλ
69、184;öÊý</p><p> stop_bits = get(handles.stop_bits, 'value');</p><p> %% ´´½¨´®¿Ú¶ÔÏó</p><p> sc
70、om = serial(com_n);</p><p> %% ÅäÖô®¿ÚÊôÐÔ£¬Ö¸¶¨Æä»Øµ÷º¯Êý</p&
71、gt;<p> set(scom, 'BaudRate', baud_rate, 'Parity', jiaoyan, 'DataBits',...</p><p> data_bits, 'StopBits', stop_bits, 'BytesAvailableFcnCount', 10,...</p>
72、;<p> 'BytesAvailableFcnMode', 'byte', 'BytesAvailableFcn', {@bytes, handles},...</p><p> 'TimerPeriod', 0.05, 'timerfcn', {@dataDisp, handles});</p>&
73、lt;p> %% ½«´®¿Ú¶ÔÏóµÄ¾ä±ú×÷ΪÓû§Êý¾Ý£¬´æÈë
74、80;°¿Ú¶ÔÏó</p><p> set(handles.figure1, 'UserData', scom);</p><p> %% ³¢ÊÔ´ò¿ª´®¿Ú</p&
75、gt;<p><b> try</b></p><p> fopen(scom); %´ò¿ª´®¿Ú</p><p> catch % Èô´®¿Ú´ò¿ª
76、02;§°Ü£¬Ìáʾ¡°´®¿Ú²»¿É»ñµÃ£¡¡±</p><p> msgbox('´®¿
77、218;²»¿É»ñµÃ£¡');</p><p> set(hObject, 'value', 0); %µ¯Æð±¾°´Å¥ </p><p><b>
78、; return;</b></p><p><b> end</b></p><p> %% ´ò¿ª´®¿Úºó£¬ÔÊÐí´®¿Ú·
79、62;ËÍÊý¾Ý£¬Çå¿Õ½ÓÊÕÏÔʾÇø£¬µãÁÁ´®¿Ú״̬&
80、#214;¸Ê¾µÆ£¬</p><p> %% ²¢¸ü¸Ä±¾°´Å¥Îı¾Îª¡°¹Ø±Õ
81、80;®¿Ú¡±</p><p> set(handles.period_send, 'Enable', 'on'); %ÆôÓá¾×Ô¶¯·¢ËÍ¡¿°
82、180;Å¥</p><p> set(handles.manual_send, 'Enable', 'on'); %ÆôÓá¾ÊÖ¶¯·¢ËÍ¡¿°´Å¥&
83、lt;/p><p> set(handles.xianshi, 'string', ''); %Çå¿Õ½ÓÊÕÏÔʾÇø</p><p> set(handles.activex1, 'value',
84、 1); %µãÁÁ´®¿Ú״ָ̬ʾµÆ</p><p> set(hObject, 'String', '¹Ø±Õ´®¿
85、8;'); %ÉèÖñ¾°´Å¥Îı¾Îª¡°¹Ø±Õ´®¿Ú¡±</p><p> else %È
86、4;¹Ø±Õ´®¿Ú</p><p> %% Í£Ö¹²¢É¾³ý¶¨Ê±Æ÷</p><p> t = timerfind;</p>
87、<p> if ~isempty(t)</p><p><b> stop(t);</b></p><p> delete(t);</p><p><b> end</b></p><p> %% Í£Ö¹²¢
88、1;¾³ý´®¿Ú¶ÔÏó</p><p> scoms = instrfind;</p><p> stopasync(scoms);</p><p> fclose(scoms);</p><p> delete(scom
89、s);</p><p> %% ½ûÓá¾×Ô¶¯·¢ËÍ¡¿ºÍ¡¾ÊÖ¶¯·¢ËÍ¡¿°´
90、;Å¥£¬Ï¨Ãð´®¿Ú״ָ̬ʾµÆ</p><p> set(handles.period_send, 'Enable', 'off', 'v
91、alue', 0); %½ûÓá¾×Ô¶¯·¢ËÍ¡¿°´Å¥</p><p> set(handles.manual_send, 'Enable', 'off'); %
92、½ûÓá¾ÊÖ¶¯·¢ËÍ¡¿°´Å¥</p><p> set(handles.activex1, 'value', 0); %ϨÃð´
93、174;¿Ú״ָ̬ʾµÆ</p><p><b> end</b></p><p> function dataDisp(obj, event, handles)</p><p> % ´®
94、;¿ÚµÄTimerFcn»Øµ÷º¯Êý</p><p> % ´®¿ÚÊý¾ÝÏÔʾ</p><p> %% »ñ
95、200;¡²ÎÊý</p><p> hasData = getappdata(handles.figure1, 'hasData'); %´®¿ÚÊÇ·ñÊÕµ½Êý¾Ý</p&g
96、t;<p> strRec = getappdata(handles.figure1, 'strRec'); %´®¿ÚÊý¾ÝµÄ×Ö·û´®ÐÎʽ£¬¶¨
97、202;±ÏÔʾ¸ÃÊý¾Ý</p><p> numRec = getappdata(handles.figure1, 'numRec'); %´®¿Ú½ÓÊÕµ½µ
98、196;Êý¾Ý¸öÊý</p><p> %% Èô´®¿ÚûÓнÓÊÕµ½Êý¾Ý£¬Ï
99、0;³¢ÊÔ½ÓÊÕ´®¿ÚÊý¾Ý</p><p> if ~hasData</p><p> bytes(obj, event, handles);</p><p><b> end<
100、;/b></p><p> %% Èô´®¿ÚÓÐÊý¾Ý£¬ÏÔʾ´®¿ÚÊý¾Ý</p><p> if hasDa
101、ta</p><p> %% ¸øÊý¾ÝÏÔʾģ¿é¼Ó»¥³âËø</p><p> %% ÔÚÖ´Ð
102、8;ÏÔʾÊý¾ÝÄ£¿éʱ£¬²»½ÓÊÜ´®¿ÚÊý¾Ý£¬¼´²»
103、214;´ÐÐBytesAvailableFcn»Øµ÷º¯Êý</p><p> setappdata(handles.figure1, 'isShow', true); </p><p> %% ÈôÒªÏ&
104、#212;ʾµÄ×Ö·û´®³¤¶È³¬¹ý10000£¬Çå¿ÕÏÔʾÇø</p><p> if leng
105、th(strRec) > 10000</p><p> strRec = '';</p><p> setappdata(handles.figure1, 'strRec', strRec);</p><p><b> end</b></p><p> %% Ï
106、212;ʾÊý¾Ý</p><p> set(handles.xianshi, 'string', strRec);</p><p> %% ¸üнÓÊÕ¼ÆÊý</p>
107、<p> set(handles.rec,'string', numRec);</p><p> %% ¸üÐÂhasData±êÖ¾£¬±íÃ÷´®¿ÚÊý¾Ý
108、210;ѾÏÔʾ</p><p> setappdata(handles.figure1, 'hasData', false);</p><p> %% ¸øÊý¾ÝÏÔʾģ
109、;¿é½âËø</p><p> setappdata(handles.figure1, 'isShow', false);</p><p><b> end</b></p><p> function bytes(obj, ~, handles)</p&g
110、t;<p> % ´®¿ÚµÄBytesAvailableFcn»Øµ÷º¯Êý</p><p> % ´®¿Ú½ÓÊÕÊý¾Ý&
111、lt;/p><p> %% »ñÈ¡²ÎÊý</p><p> strRec = getappdata(handles.figure1, 'strRec'); %»ñÈ¡´®¿ÚÒªÏ&
112、#212;ʾµÄÊý¾Ý</p><p> numRec = getappdata(handles.figure1, 'numRec'); %»ñÈ¡´®¿ÚÒѽÓÊÕ
113、02;ý¾ÝµÄ¸öÊý</p><p> isStopDisp = getappdata(handles.figure1, 'isStopDisp'); %ÊÇ·ñ°´ÏÂÁË¡¾
114、05;£Ö¹ÏÔʾ¡¿°´Å¥</p><p> isHexDisp = getappdata(handles.figure1, 'isHexDisp'); %ÊÇ·ñÊ®Áù½
115、;øÖÆÏÔʾ</p><p> isShow = getappdata(handles.figure1, 'isShow'); %ÊÇ·ñÕýÔÚÖ´ÐÐÏÔʾ
116、Êý¾Ý²Ù×÷</p><p> %% ÈôÕýÔÚÖ´ÐÐÊý¾ÝÏÔʾ²Ù×÷£¬
117、212;ݲ»½ÓÊÕ´®¿ÚÊý¾Ý</p><p><b> if isShow</b></p><p><b> return;</b></p><p><b
118、> end</b></p><p> %% »ñÈ¡´®¿Ú¿É»ñÈ¡µÄÊý¾Ý¸öÊý</p><p> n = get(
119、obj, 'BytesAvailable');</p><p> %% Èô´®¿ÚÓÐÊý¾Ý£¬½ÓÊÕËùÓÐÊý¾Ý</p&
120、gt;<p><b> if n</b></p><p> %% ¸üÐÂhasData²ÎÊý£¬±íÃ÷´®¿ÚÓÐÊý¾Ý
121、8;èÒªÏÔʾ</p><p> setappdata(handles.figure1, 'hasData', true);</p><p> %% ¶ÁÈ¡´®¿ÚÊý¾Ý&l
122、t;/p><p> a = fread(obj, n, 'uchar');</p><p> %% ÈôûÓÐÍ£Ö¹ÏÔʾ£¬½«½ÓÊÕµ
123、½µÄÊý¾Ý½âËã³öÀ´£¬×¼±¸ÏÔʾ</p><p> if ~isStopDisp </p><p> %% ¸
124、ù¾Ý½øÖÆÏÔʾµÄ״̬£¬½âÎöÊý¾ÝΪҪÏÔʾµ
125、6;×Ö·û´®</p><p> if ~isHexDisp </p><p> c = char(a');</p><p><b> else</b></p><p> strHex = dec2hex(a')';</p
126、><p> strHex2 = [strHex; blanks(size(a, 1))];</p><p> c = strHex2(:)';</p><p><b> end</b></p><p> %% ¸üÐÂÒѽÓ
127、202;ÕµÄÊý¾Ý¸öÊý</p><p> numRec = numRec + size(a, 1);</p><p> %% ¸üÐÂÒªÏÔʾµÄ
128、×Ö·û´®</p><p> strRec = [strRec c];</p><p><b> end</b></p><p> %% ¸üвÎÊý</p><p>
129、 setappdata(handles.figure1, 'numRec', numRec); %¸üÐÂÒѽÓÊÕµÄÊý¾Ý¸öÊý</p><p> setappdata(handles.f
130、igure1, 'strRec', strRec); %¸üÐÂÒªÏÔʾµÄ×Ö·û´®</p><p><b> end</b></p><p> function
131、 qingkong_Callback(hObject, eventdata, handles)</p><p> %% Çå¿ÕÒªÏÔʾµÄ×Ö·û´®</p><p> setappdata(handl
132、es.figure1, 'strRec', '');</p><p> %% Çå¿ÕÏÔʾ</p><p> set(handles.xianshi, 'String', '');</p><p> functio
133、n stop_disp_Callback(hObject, eventdata, handles)</p><p> %% ¸ù¾Ý¡¾Í£Ö¹ÏÔʾ¡¿°´Å¥µÄ×´&
134、#204;¬£¬¸üÐÂisStopDisp²ÎÊý</p><p> if get(hObject, 'Value')</p><p> isStopDisp = true;</p><p><b> else</b&
135、gt;</p><p> isStopDisp = false;</p><p><b> end</b></p><p> setappdata(handles.figure1, 'isStopDisp', isStopDisp);</p><p> function radiobutton1_
136、Callback(hObject, eventdata, handles)</p><p> function radiobutton2_Callback(hObject, eventdata, handles)</p><p> function togglebutton4_Callback(hObject, eventdata, handles)</p><p&
137、gt; function hex_disp_Callback(hObject, eventdata, handles)</p><p> %% ¸ù¾Ý¡¾Ê®Áù½øÖÆÏÔʾ¡¿¸´
138、209;¡¿òµÄ״̬£¬¸üÐÂisHexDisp²ÎÊý</p><p> if get(hObject, 'Value')</p><p> isHexDisp = tru
139、e;</p><p><b> else</b></p><p> isHexDisp = false;</p><p><b> end</b></p><p> setappdata(handles.figure1, 'isHexDisp', isHexDisp);<
140、;/p><p> function manual_send_Callback(hObject, eventdata, handles)</p><p> scom = get(handles.figure1, 'UserData');</p><p> numSend = getappdata(handles.figure1, 'numSe
141、nd');</p><p> val = get(handles.sends, 'UserData');</p><p> numSend = numSend + length(val);</p><p> set(handles.trans, 'string', num2str(numSend));</p>
142、<p> setappdata(handles.figure1, 'numSend', numSend);</p><p> %% ÈôÒª·¢Ë͵ÄÊý¾Ý²»Îª¿Õ£
143、;¬·¢ËÍÊý¾Ý</p><p> if ~isempty(val)</p><p> %% ÉèÖõ¹¼ÆÊýµÄ³õÖµ<
144、/p><p><b> n = 1000;</b></p><p><b> while n</b></p><p> %% »ñÈ¡´®¿ÚµÄ´«Êä×´
145、204;¬£¬Èô´®¿ÚûÓÐÕýÔÚдÊý¾Ý£¬Ð´ÈëÊý¾Ý</p><p&
146、gt; str = get(scom, 'TransferStatus');</p><p> if ~(strcmp(str, 'write') || strcmp(str, 'read&write'))</p><p> fwrite(scom, val, 'uint8', 'async');
147、 %Êý¾ÝдÈë´®¿Ú</p><p><b> break;</b></p><p><b> end</b></p><p> n = n - 1; %µ¹¼
148、ÆÊý</p><p><b> end</b></p><p><b> end</b></p><p> function clear_send_Callback(hObject, eventdata, handles)</p><p> %% Ç
149、å¿Õ·¢ËÍÇø</p><p> set(handles.sends, 'string', '')</p><p> %% ¸üÐÂÒª·¢Ë͵
150、96;Êý¾Ý</p><p> set(handles.sends, 'UserData', []);</p><p> function checkbox2_Callback(hObject, eventdata, handles)</p><p> function period_send_Call
151、back(hObject, eventdata, handles)</p><p> % ¡¾×Ô¶¯·¢ËÍ¡¿°´Å¥µÄCallback»Øµ÷º¯Ê
152、253;</p><p> %% Èô°´Ï¡¾×Ô¶¯·¢ËÍ¡¿°´Å¥£¬Æô¶¯¶¨Ê
153、7;Æ÷£»·ñÔò£¬Í£Ö¹²¢É¾³ý¶¨Ê±Æ÷</p><p> if get(hObject, 'value')</p&
154、gt;<p> t1 = 0.001 * str2double(get(handles.period1, 'string'));%»ñÈ¡¶¨Ê±Æ÷ÖÜÆÚ</p><p> t = timer('ExecutionMode'
155、;,'fixedrate', 'Period', t1, 'TimerFcn',...</p><p> {@manual_send_Callback, handles}); %´´½¨¶¨Ê±Æ÷</p><p> set(handles
156、.period1, 'Enable', 'off'); %½ûÓÃÉèÖö¨Ê±Æ÷ÖÜÆÚµÄEdit Text¶ÔÏó</p><p>
157、 set(handles.sends, 'Enable', 'inactive'); %½ûÓÃÊý¾Ý·¢Ëͱà¼Çø</p><p> start(t); %Æô¶
158、;¯¶¨Ê±Æ÷</p><p><b> else</b></p><p> set(handles.period1, 'Enable', 'on'); %ÆôÓÃÉèÖö
159、;¨Ê±Æ÷ÖÜÆÚµÄEdit Text¶ÔÏó</p><p> set(handles.sends, 'Enable', 'on'); %ÆôÓÃÊý¾
160、Ý·¢Ëͱà¼Çø</p><p> t = timerfind; %²éÕÒ¶¨Ê±Æ÷</p><p> stop(t); %Í£Ö
161、5;¶¨Ê±Æ÷</p><p> delete(t); %ɾ³ý¶¨Ê±Æ÷</p><p><b> end</b></p><p> function period1_Ca
162、llback(hObject, eventdata, handles)</p><p> function period1_CreateFcn(hObject, eventdata, handles)</p><p> if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaul
163、tUicontrolBackgroundColor'))</p><p> set(hObject,'BackgroundColor','white');</p><p><b> end</b></p><p> function clear_count_Callback(hObject, eve
164、ntdata, handles)</p><p> %% ¼ÆÊýÇåÁ㣬²¢¸üвÎÊýnumRecºÍnumSend</p><p> set([handl
165、es.rec, handles.trans], 'string', '0')</p><p> setappdata(handles.figure1, 'numRec', 0);</p><p> setappdata(handles.figure1, 'numSend', 0);</p><p>
166、 function copy_data_Callback(hObject, eventdata, handles)</p><p> %% ÉèÖÃÊÇ·ñÔÊÐí¸´ÖƽÓÊÕÊý
167、0;ÝÏÔʾÇøÄÚµÄÊý¾Ý</p><p> if get(hObject,'value')</p><p> set(handles.xianshi, 'enable', 'on'
168、);</p><p><b> else</b></p><p> set(handles.xianshi, 'enable', 'inactive');</p><p><b> end</b></p><p> function figure1_Close
169、RequestFcn(hObject, eventdata, handles)</p><p> % ¹Ø±Õ´°¿Úʱ£¬¼ì²é¶¨Ê±Æ÷ºÍ´
170、4;¿ÚÊÇ·ñÒѹرÕ</p><p> % ÈôûÓйرգ¬ÔòÏȹرÕ
171、;</p><p> %% ²éÕÒ¶¨Ê±Æ÷</p><p> t = timerfind;</p><p> %% Èô´æÔÚ¶¨Ê±Æ
172、7;¶ÔÏó£¬Í£Ö¹²¢¹Ø±Õ</p><p> if ~isempty(t)</p><p> stop(t); %Èô¶¨Ê±Æ÷
173、95;»ÓÐÍ£Ö¹£¬ÔòÍ£Ö¹¶¨Ê±Æ÷</p><p> delete(t);</p><p><b> end</b></p>&
174、lt;p> %% ²éÕÒ´®¿Ú¶ÔÏó</p><p> scoms = instrfind;</p><p> %% ³¢ÊÔÍ£Ö¹¡¢¹
175、216;±Õɾ³ý´®¿Ú¶ÔÏó</p><p><b> try</b></p><p> stopasync(scoms);</p><p> fclose(scoms);</p>
176、<p> delete(scoms);</p><p><b> end</b></p><p> %% ¹Ø±Õ´°¿Ú</p><p> delete(hObject);</p><p> function hex
177、_send_Callback(hObject, eventdata, handles)</p><p> %% ¸ù¾Ý¡¾Ê®Áù½øÖÆ·¢ËÍ¡¿¸´Ñ¡¿&
178、#242;µÄ״̬£¬¸üÐÂisHexSend²ÎÊý</p><p> if get(hObject,'value')</p><p> isHexSend = true;</p><
179、p><b> else</b></p><p> isHexSend = false;</p><p><b> end</b></p><p> setappdata(handles.figure1, 'isHexSend', isHexSend);</p><p>
180、 %% ¸üÐÂÒª·¢Ë͵ÄÊý¾Ý</p><p> sends_Callback(handles.sends, eventdata, handles);</p><p> function sends_Callback
181、(hObject, eventdata, handles)</p><p> % Êý¾Ý·¢Ëͱà¼ÇøµÄCallback»Øµ÷º¯Êý</p>
182、<p> % ¸üÐÂÒª·¢Ë͵ÄÊý¾Ý</p><p> %% »ñÈ¡Êý¾Ý·¢Ëͱà
183、;¼ÇøµÄ×Ö·û´®</p><p> global v_x;</p><p> str = get(hObject, 'string');</p><p><b> v_x = str</b>&l
184、t;/p><p> %% »ñÈ¡²ÎÊýisHexSendµÄÖµ</p><p> isHexSend = getappdata(handles.figure1, 'isHexSend');</p><p> if ~isHe
185、xSend %ÈôΪASCIIÖµÐÎʽ·¢ËÍ£¬Ö±½Ó½«×Ö·û´®×ª»¯Îª
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 簡易智能電動(dòng)車設(shè)計(jì)報(bào)告
- 電動(dòng)車課程設(shè)計(jì)---電動(dòng)自行車廠規(guī)劃與設(shè)計(jì)
- 自動(dòng)控制原理課程設(shè)計(jì)--電動(dòng)車控制系統(tǒng)校正
- 電動(dòng)車總體設(shè)計(jì)
- 校園電動(dòng)車的設(shè)計(jì)
- 精準(zhǔn)農(nóng)業(yè)電動(dòng)車結(jié)構(gòu)分析設(shè)計(jì)與仿真.pdf
- 可伸縮電動(dòng)車設(shè)計(jì)
- 消防智能電動(dòng)車設(shè)計(jì)
- 課程設(shè)計(jì)--電動(dòng)車速度測量顯示儀
- 校園電動(dòng)車的設(shè)計(jì)
- 電動(dòng)車動(dòng)力控制系統(tǒng)設(shè)計(jì)與仿真.pdf
- 全套設(shè)計(jì)_校園電動(dòng)車的設(shè)計(jì)
- 全套設(shè)計(jì)_校園電動(dòng)車的設(shè)計(jì)
- 簡易智能電動(dòng)車e62 設(shè)計(jì)報(bào)告
- 電動(dòng)車取電系統(tǒng)設(shè)計(jì)
- 簡易智能電動(dòng)車系統(tǒng)設(shè)計(jì)
- 校園電動(dòng)車設(shè)計(jì)正文.doc
- 校園電動(dòng)車設(shè)計(jì)正文.doc
- 簡易智能電動(dòng)車系統(tǒng)設(shè)計(jì)
- 電動(dòng)車控制系統(tǒng)設(shè)計(jì)
評論
0/150
提交評論