版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 課 程 設 計 報 告</p><p> 課程設計名稱: 電動車仿真設計 </p><p> 系 部: 三 系 </p><p> 學生姓名: </p><p> 班 級: 通信( )班 </p><
2、;p> 學 號: </p><p> 成 績: </p><p> 指導教師: </p><p> 開課時間: 學年 1 學期</p><p><b> 目錄</b></p><p&
3、gt;<b> 第一章 引言2</b></p><p> 1.1 課程設計目的2</p><p> 1.2 課程設計任務與要求2</p><p> 第二章 課程設計基本原理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 (虛擬現實)4</p><p> 2.3.2 virtual reality toolbox的安裝及特點4</p><p> 第三章 課程設計過程5</p><p> 3.1 建立動車仿真模型5</p&
5、gt;<p> 3.1.1安裝V-Realm Builder from MATLAB5</p><p> 3.1.2 利用virtual reality toolbox創(chuàng)建動車模型5</p><p> 3.1.3 小車運行程序7</p><p> 3.2 設計串口終端圖形用戶界面8</p><p> 3.3 P
6、WM步進電機控制17</p><p> 3.3.1 開發(fā)環(huán)境17</p><p> 3.3.2 操作步驟17</p><p> 3.4 課程設計結果18</p><p> 第四章 總結與體會20</p><p><b> 參考文獻21</b></p><p
7、><b> 電動車仿真設計</b></p><p><b> 第一章 引言</b></p><p> 1.1 課程設計目的</p><p> 本課程是為通信工程專業(yè)本科生開設的必修課,結合學生的專業(yè)方向的理論課程,充分發(fā)揮學生的主動性,使學生掌握應用MATLAB 等仿真軟件建立基于Linux的通信系統(tǒng),鞏固理
8、論課程內容,規(guī)范文檔的建立,培養(yǎng)學生的創(chuàng)新能力,并能夠運用其所學知識進行綜合的設計。</p><p> Embedded System的課程設計是對嵌入通信與控制系統(tǒng)仿真軟件、課程學習的綜合檢驗,配合理論課的教學,讓學生親自參加設計、仿真、驗證Embedded System系統(tǒng)的一般原理、Applications等方面的知識點。</p><p> 1.2 課程設計任務與要求</p
9、><p> 在WINDOWS環(huán)境下,用MATLAB搭建虛擬賽車平臺,用行駛速度來控制ARM箱上面的電機的轉速或方向。</p><p> 電動車仿真設計主要運用MATLAB安裝V-Realm Builder,并在其中建立軌道及動車模型。并利用Matlab GUI設計通過串口進行數據發(fā)送和接收的界面,并利用內置于Matlab的串口通信API實現串口數據發(fā)送與接收功能。通過串口來完成通信即實現動
10、車速度的控制。通過輸入不同的數值來控制小車以不同的速度跑起來,同時控制ARM箱上面的電機的轉速或方向。要求:</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; 第二章 課程設計基本原理</p><p> 2.1 MATLAB的圖形用戶界面(GUI) </p><p> 圖形用戶界面GUI(Graphical User Interfaces):由各種圖形對象組成的用戶界面,在這種用戶界面下,用戶的命令和對程序的控制是通過“選擇”各種圖形對象來實現的。基本圖形對象分為控件對象和用戶界面菜單對象,簡稱控件和菜單。</p>
13、<p><b> 控件對象的描述:</b></p><p> ?。?) 按鈕(Push Buttons):執(zhí)行某種預定的功能或操作;(2) 開關按鈕(Toggle Button):產生一個動作并指示一個二進制狀態(tài)(開或關),當鼠點擊它時按鈕將下陷,并執(zhí)行callback(回調函數)中指定的內容,再次點擊,按鈕復原,并再次執(zhí)行callback 中的內容;(3) 單選框(Rad
14、io Button):單個的單選框用來在兩種狀態(tài)之間切換,多個單選框組成一個單選框組時,用戶只能在一組狀態(tài)中選擇單一的狀態(tài),或稱為單選項;(4) 復選框(Check Boxes):單個的復選框用來在兩種狀態(tài)之間切換,多個復選框組成一個復選框組時,可使用戶在一組狀態(tài)中作組合式的選擇,或稱為多選項;(5) 文本編輯器(Editable Texts):用來使用鍵盤輸入字符串的值,可以對編輯框中的內容進行編輯、刪除和替換等操作;(6) 靜
15、態(tài)文本框(Static Texts):僅僅用于顯示單行的說明文字;(7) 滾動條(Slider): 可輸入指定范圍的數量值;(8) 邊框(Frames):在圖形窗口圈出一塊區(qū)域;(9) 列表框(List Boxes):在其中定義一系列可供</p><p> S3C2410X有5個16位定時器,其中定時器0、1、2、3具有脈沖寬度調制(PWM)功能,定時器4具有內部定時左右,但是沒有輸出引腳。定時器0具有死
16、區(qū)生成器,可以控制大電流設備。定時器T0、T1共用一個8bit預分定時器T2、T3、T4共用另一個8bit預分頻器,每個定時器都有一個時鐘分頻器,信號分頻輸出有5種模式。每個定時器模塊都從時鐘分頻器接收它自己的時鐘信號,時鐘分頻器接收的時鐘信號來自于8bit預分頻器??删幊?bit預分頻器根據存儲在TCFG0和TCFG1中的數據對PCLK進行分頻。</p><p> 每一個定時器都有一個自己的用定時器時鐘驅動的
17、16位減法計數器。當減法計數器減到0時,就會產生一個定時器中斷來通知CPU定時器操作下次操作。當定時器減法計數器減到0時,相應的TCNTBN的值被自動重載到減法計數器中繼續(xù)下次操作。然而,如果定時器停止了,比如在運行時,通過清除TCON中定時器使能位來中止定時器的運行,TCNTBN的值不會被重載到減法計數器中。</p><p> 2.3 Virtual Reality (VR) toolbox</p>
18、;<p> 2.3.1 Virtual Reality (虛擬現實)</p><p> 虛擬現實具有沉浸感、交互性和思想性三個主要特點:所謂沉浸感,是指用戶感到作為主角存在于虛擬環(huán)境中的真實程度。理想的虛擬環(huán)境應該達到使用戶難以分辨真假的程度;所謂交互性,是指用戶對虛擬環(huán)境內物體的可操作程度和從環(huán)境得到反饋的自然程度(包括實時性);所謂思想性,則是指虛擬現實不僅僅是一個媒體,一個高級用戶界面,還
19、反映了設計者的思想,是心靈的工具。正是基于虛擬現實的這三個特點,雖然其產生至今不過短短40年的時間,但是已經廣泛的應用于軍事、醫(yī)學、教育、文化及藝術等諸多領域。</p><p> 2.3.2 virtual reality toolbox的安裝及特點</p><p> virtual reality toolbox的安裝。可以在MATLAB以前安裝,只要在安裝MATLAB時選擇virt
20、ual reality toolbox就可以了。若在安裝MATLAB時沒有安裝virtual reality toolbox,可以在重新啟動MATLAB時安裝,在安裝對話框適當的地方選上virtual reality toolbox選項,就可以了。</p><p> VRML瀏覽器的安裝。當安裝了virtual reality toolbox,virtual reality toolbox瀏覽器就作為默認瀏覽器
21、,若要使用網絡瀏覽器作為VRML瀏覽器,就必須安裝blaxxun Connect 插件,這個插件能夠在Microsoft Internet Explorer或者Netscape Navigator中使用。</p><p> 第三章 課程設計過程</p><p> 3.1 建立動車仿真模型</p><p> 3.1.1安裝V-Realm Builder fro
22、m MATLAB</p><p> 在MATLAB界面輸入vrinstall -check后回車,檢查是否安裝,若沒有安裝則輸入命令vrinstall -install后回車進行安裝。然后再次輸入命令vrinstall -check確認是否成功安裝。</p><p> 3.1.2 利用virtual reality toolbox創(chuàng)建動車模型</p><p>
23、?。?)Starting V-Realm Builder,路徑為C:\Matlab\toolbox\vr\vrealm\progrom。打開vrbuild2,點擊File選擇New新建一個文件。</p><p> ?。?) Insert background button,單擊按鈕插入背景。 </p><p> 圖3.1 插入背景圖 </p><p> ?。?/p>
24、3)Insert 小車,先選中New World,然后單擊Libraries選擇Import From 選擇Object Library,從Category選項中任意選中一小車拖進背景區(qū),修改一下對象的名字防止混淆??梢噪p擊scale對其大小做修改,雙擊translation修改其坐標(默認為原點)。</p><p> 圖3.2 插入小車圖</p><p> 圖3.3 改變小車尺寸圖&
25、lt;/p><p> 圖3.4 改變小車位置圖</p><p> ?。?)Insert 車道,選中New World,單擊按鈕插入軌道,修改一下名字,同理可以修改其參數將其拉長變窄。</p><p> 圖3.5 插入車道圖</p><p> 圖3.6 改變車道大小圖</p><p> Insert視角,選中New
26、World,然后單擊Nodes選擇Insert選擇Bindable選擇Viewpoint插入視角,點擊position改變視角,然后點擊set-bind設置為True,就可以改變視角。</p><p> 選擇保存路徑,一般保存在MATLAB的work中。</p><p> 圖3.7 動車模型圖</p><p> 3.1.3 小車運行程序</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 設計串口終端圖形用戶界面</p><p> 3.2.1 用MATLAB中GUI軟件設計串口接口程序</p><p> 啟動Matl
30、ab后,運行guide命令即可以啟動Matlab GUI開發(fā)工具。新建Blank GUI,在新建Blank GUI界面中,包含了一般的界面元素,如菜單、按鈕、坐標軸、控件等。添加必要的串口通信參數設置按鈕。然后打開串口(選擇波特率為115200、1位停止位、無校驗位、無硬件流控制)。</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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 簡易智能電動車設計報告
- 電動車課程設計---電動自行車廠規(guī)劃與設計
- 自動控制原理課程設計--電動車控制系統(tǒng)校正
- 電動車總體設計
- 校園電動車的設計
- 精準農業(yè)電動車結構分析設計與仿真.pdf
- 可伸縮電動車設計
- 消防智能電動車設計
- 課程設計--電動車速度測量顯示儀
- 校園電動車的設計
- 電動車動力控制系統(tǒng)設計與仿真.pdf
- 全套設計_校園電動車的設計
- 全套設計_校園電動車的設計
- 簡易智能電動車e62 設計報告
- 電動車取電系統(tǒng)設計
- 簡易智能電動車系統(tǒng)設計
- 校園電動車設計正文.doc
- 校園電動車設計正文.doc
- 簡易智能電動車系統(tǒng)設計
- 電動車控制系統(tǒng)設計
評論
0/150
提交評論