Chào các bạn.
Mình xin gửi các bạn tài liệu Matlab 7 - Creating Graphical User Interfaces, là tài liệu dạng .pdf của tài liệu trong Help của Matlab. Các bạn nào có thể tự đọc hiểu được English thì tài liệu này là quá đầy đủ rồi. Các bài viết của mình dựa một phần vào tài liệu này và dựa vào kinh nghiệm khi mình lập trình.
Mình đang làm đồ án tốt nghiệp nên mỗi ngày cố gắng viết một tí cho các bạn đọc nhé. Mà đồ án của mình làm với FPGA, chỉ dùng System Generator là liên quan đến Matlab thôi :d.
Trong bài viết này, mình giới thiệu các bạn các tính chất đặc trưng của các điều khiển mà các bạn hay gặp.
Để hiện cửa sổ các tính chất Property Inspector của một điều khiển chúng ta có 3 cách sau:
- Nhấn đúp chuột vào mỗi điều khiển.
- Chọn điều khiển rồi vào menu View, chọn Property Inspector.
- Chọn điều khiển rồi nhấn vào biểu tượng Property Inspector, gần chỗ M-file editor.
Khi đó, cửa sổ Property Inspector sẽ hiện ra. Khi nhấn vào các điều khiển khác thì cửa sổ này sẽ hiện thông tin tương ứng cho điều khiển đó.
Một vài tính chất chung của các điều khiển mà các bạn nên chú ý:
| Tính chất (property) | Giá trị (value) | Miêu tả |
| Enable | on, inactive, off Mặc định là: on |
Xác định khi nào thì điều khiển hiển thị lên giao diện. Đặt = off, thì điều khiển sẽ không xuất hiện. |
| Max | Vô hướng. Mặc định là 1. |
Giá trị lớn nhất, tùy thuộc vào từng điều khiển. |
| Min | Vô hướng. Mặc định là 0 |
Giá trị nhỏ nhất, tùy thuộc vào từng điều khiển. |
| Position | Vector gồm 4 phần tử (left, bottom, width, height) | Kích thước của điều khiển và vị trí tương đối của nó với điều khiển chứa nó. |
| String | ||
| Units | Đơn vị đo lường dùng trong xác định vị trí. | |
| Value | Vô hướng hoặc vector | Giá trị của component, tùy thuộc vào từng component. |
Ngoài ra, thuộc tính cực kì quan trọng mà các bạn phải thay ngay từ đâu là: tag. Thuộc tính này giống thuộc tính Caption mà các bạn gặp trong Visual Basic, chính là tên để phân biệt giữa các điều khiển. Mỗi điều khiển chỉ có một tên duy nhất. các bạn nên qui định cho dễ nhớ nhé. Mình nghĩ là nên kết hợp giữa tên của loại điều khiển và mục đích của điều khiển đó.
Ví dụ: một ô nhập dữ liệu giá trị tiền, thuộc Edit Box nên mình đặt tag là: editMoney.
Bây giờ đi vào từng điều khiển cụ thể.
1. Push Button
Thay đổi chữ hiển thị (label) hiển thị trên điều khiển này bằng cách thay đổi thuộc tính String. Chữ hiển thị trên Button chỉ có thể là 1 dòng, nên nếu bạn gõ nhiều dòng trong thuộc tính String thì chỉ hiển thị dòng đầu tiên. Nếu số kí tự dòng đầu tiên lớn hơn bề rộng có thể hiển thị chữ được của bề mặt Button thì Matlab tự rút ngắn String đó với dấu 3 chấm (...).
Thay đổi vị trí của PushButton = thay đổi thuộc tính Position. Có thể code trong MFile (thay đổi trong quá trình thực thi) hoặc thay đổi ngay lúc thiết kế(gắp thả).
Để thêm một ảnh vào PushButton thì chúng ta gán thuộc tính CData bằng một ma trận m x n x 3 của giá trị RGB. Thực hiện trong MFile ở hàm Open của điều khiển để ngay khi chạy chương trình đã load ảnh này vào rồi.
img = rand(16,64.3);
set(handles.pushbutton1, 'CData',img);
Chú ý: Có thể tạo biểu tượng riêng của bạn cho các nut Push Button bằng cách dùng Icon Editor, sau đó dùng hàm ind2rgb để chuyển sang ảnh gán vào thuộc tính CData.
Các sự kiện xảy ra khi nhấn Push Button được viết trong các hàm ngắt như Callback,..
2. Slider (Thanh trượt)
Thay đổi khoảng giá trị của Slider bằng cách thay đổi thuộc tính Min và Max. Tất nhiên Min < Max.
Giá trị hiện tại của Slider được = giá trị của thuộc tính Value. Nên khi set hoặc get thì ta lấy giá trị này.
Khi click vào 2 cái mũi tên 2 bên thì thanh trượt sẽ trượt tương ứng về 2 phía theo một bước nào đó. Thay đổi thuộc tính SliderStep = [min_step, max_step]. min_step là giá trị bước nhảy khi click vào 2 mũi tên. Còn Max_step là giá trị khi mà click vào trong vùng trượt.
3. Radio Button
Để biết nút Radio có được đánh dấu hay là không thì chúng ta xem thuộc tính Value của nó.
Value = 1 thì check
Value = 0 thì là k check
4. Check Box
Check Box thì thuộc tính quan trọng cũng tương tự như Radio Button.
5. Edit Text
Thuộc tính quan trọng là Stri
ng, chính là xâu kí tự hiển thị trên Edit Text. Chú ý: để hiển thị như ý muốn thì các bạn cần phải xem kĩ thêm các hàm xử lý string nhé.
Để hiển thị Edit Text dạng Multi-line thì cần thay đổi thuộc tính Max, Min. Max> Min. Ví dụ: Max = 2, Min = 0 sẽ hiển thị 2 dòng đó.
6. Static Text
Thằng này tương tự như Edit Text.
7. Popup Menu
8. List Box
9. Toggle Button
Hic hic, viết dài quá mỏi tay hật. Rảnh rỗi viết cập nhật thêm vài cái, còn không thì các bạn thực hành trong các bài khác nhé ![]()
Các bài viết liên quan:
- Lập trình C cho vi điều khiển Mình tham gia các diễn đàn từ lâu lắm rồi và cũng giải đáp nhiều thắc mắc về lập trình C cho các vi điều khiển thông dụng như 8051, PIC. Mình viết bài này để giải đáp thắc mắc cho các bạn mới bước vào học lập trình cho vi điều khiển dùng ngôn [...]...
- Lập trình giao diện GUI trong Matlab (Phần 1) Mình viết bài này để tổng hợp lại các hướng dẫn về thiết kế giao diện GUI trong Matlab để các bạn dễ dàng thực hiện. Phần mềm: Matlab R2007a Bài đầu tiên mình sẽ giới thiệu các bạn giao diện GUI. 1. Mở phần mềm Matlab, gõ lệnh sau vào cửa sổ Command >> [...]...
- So sánh các bộ điều khiển tốc độ động cơ DC Trong bài này, tác giả muốn so sánh bộ điều khiển PID truyền thống và bộ điều khiển Robust Feedforward (thực tế không phải là Feedforward, mà là cải tiến của tác giả) trong quá trình tác giả và bạn của tác giả (Bá Hải) cùng nghiên cứu tại BioRobotics Lab Các bộ điều khiển [...]...
- Hướng dẫn tự học vi điều khiển 32 bit TMS320F28335 của TI Rất lâu rồi mình không viết Blog, mà chỉ thỉnh thoảng trả lời comment của các bạn, còn chủ yếu mình dùng Facebook cá nhân, cũng vì nhiều nguyên nhân. Cũng không có cảm hứng viết blog, nên giờ mới dành thời gian viết tiếp. TMS320F28335 là một loại vi điều khiển thuộc loại mạnh [...]...
- Lập trình C cho vi điều khiển: vấn đề khai báo biến Chào các bạn. Như các bạn đã biết trong các lệnh ASM của vi xử lý thì thao tác với các toán tử là các thanh ghi sẽ tốn ít thời gian nhất và do đó tối ưu được chương trình chạy rất nhanh, thời gian thực hiện từng thuật toán sẽ giảm đi nhiều. [...]...
- PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART Chào các bạn. Nay ngồi code cho con PIC16F887 để điều khiển đèn halogen, thực ra chính là điều khiển một chân rồi qua TIP122 và relay để điều khiển đèn thôi (vì dòng tải lên tới 10A). Mình thấy cách viết hay nên chia sẻ với các bạn. Dùng để lưu trữ luôn. Để [...]...



{ 35 comments… read them below or add one }
Bạn admin ơi,bạn post bài nói về cách tạo hộp thoại mở file đi.Chẳng hạn như ấn vào nút open thì sẽ cho ra hộp thoại chọn file để mở ấy.
chào anh. hiện nay em đang làm phần GUI cho đồ án môn học.
em đang muốn mở 1 cửa sổ khác trong GUI. giống nhu là khi install sòt đó anh, nhung em 0 biết viết code cho phần đó thế nào
anh giúp em nhé
cám ơn anh
Nếu bạn muốn mở cái GUI khác thì gọi tên của fig mới ra thôi, còn ẩn GUI cũ đi thì bạn xem cái nút OK và Cancel nó viết thế nào thì viết tượng tự vậy.
Chúc bạn thành công.
cám ơn anh. h em đã làm được.
h em có khó khăn khác. em muốn truyền dữ liệu giữa các GUI với nhau. vd cụ thể là GUI1 em nhập tần số sóng mang và dạng điều chế rùi bấm Next. em dựa vào thông số chọn lựa của dạng điều chế mà mở ra GUI2 điều chế theo dạng cho trước. ở GUI2 nhập thông số tín hiệu và dạng đồ thi muốn vẽ, rùi bấm Next. GUI3 sẽ vẽ theo chọn lựa dạng đồ thị của GUI2 và sóng mang của GUI1. em làm thế nào đây ạ
Chào em.
Cái này thì dễ mà, bởi vì trước khi em nhấn nút thì dữ liệu đã được nhập rồi, nên sẽ lấy làm tham số đầu vào cho cái GUI thứ 2 thôi.
Em chú ý cái biến varargin nhé
.
Chúc em thành công.
anh ơi giải giùm em bài chạy chữ trong guide matlab với e đã làm mấy tuần nay rồi mà không được bài này ngày 29/12 là em phải nộp cho thầy rồi mong anh giúp e .
đây la mail của e invisibleman.nguyen@gmail.com
Mong anh giup cho cảm ơn anh trước nha
em đọc help của varargin rồi nhưg 0 hiểu lắm. em đang tính dùng inputdlg, anh hướng dẫn em 1 tí nhá
Chào em.
varargin là tất cả các đầu vào khi một form khác hay là khi gọi từ dòng lệnh thôi. Cái này rất đơn giản. Em xem ví dụ, gọi cái form OK, Cancel đó, nó cũng gọi form này và thêm các thông số như tiêu đề, … cho nó mà.
Chúc em thành công.
em làm được rồi. cám ơn anh nhìu.
trong bài báo cáo em tính làm thêm 1 tí về định nghĩa handles, vì nó khá là quan trọng trong GUI và cả Matlab, nhưng em vẫn chưa rõ lắm.
em hình dung nó như 1 pointer để chỉ đến các biến, giúp cho việc gọi hàm nhanh hơn. đúng 0 ạ?
giá trị của các handles trong các lần test em thấy cũng thay đổi hết luôn, vậy làm sao xác định được giá trị handles đây anh
vd như em đặt
x= varargin
handles.open = varargin{2} (em hỉu là lấy thành phần thứ 2 trong varargin đưa vào handles.open)
thì trong Matlab xuất ra:
x =
‘OpenNewGUI’ [183.0023]
handles =
figure1: 189.0022
biendo2: 15.0039
tanso2: 14.0039
text2: 13.0039
text1: 12.0045
ok: 190.0022
open: 183.0023
anh giải thích giúp em nhé. cám ơn anh
Chào em.
Gần đúng rồi đó em. Khá giỏi đó. Như anh đã nói ở rất nhiều bài viết về cấu trúc handles rồi.
handles là một structures, không phải là một con trỏ (pointer) em nhé. Em có thể search handles trong Help Matlab để có cái nhìn rõ hơn về vấn đề này.
Chúc em thành công.
Chao anh!
em doc kha nhieu bai viet cua anh,e thay no that bo ich.
gio day e dang lam mot de tai nghien cuu ve GUI_matlab nhung em dang ket mot chut la em khong biet truyen du lieu tu mot edittext vao cho listbox the nao?em muon sau moi lan nhap du lieu tu edittext thi gia tri do nhay xuong o listbox.o trong visualbasic thi e da lam dc con trong matlab thi em k mo duoc.Anh giup em voi.Cam on anh nhieu!
MÌNH DANG LÀM 1 MÁY TÍNH CÁ NHÂN VỚI CÁC NÚT TỪ 1 TỚI 9 VÀ NÚT CONG TRỪ NHÂN CHIA. MINH KHÔNG BIẾT LÀM SAO ĐỂ EDITTEXT HIỆN SỐ CÓ HAI CHỮ SỐ KHI MÌNH NHẬP TỪ CÁC NÚT TRÊN VÍ DỤ 11,12, 11119. CÓ BẠN NÀO BIẾT CHỈ GIÙM MÌNH VÓI CÁM ON NHIÊU!!!!
admin chỉ giáo với!
làm sao gọi ẩn từ hàm này , roỳ dùng sang hàm khác .
làm sao nhận biết bao nhiu lần nhấn button đc !!!!
plzzz !
Em lưu biến vào trong cấu trúc handles, cái này a nói nhiều lần rồi, em đọc lại các bài viết mà anh viết đi nhé. Số lần nhấn nút thì cũng ghi vào 1 trường trong cấu trúc Handles là được mà.
Chúc em thành công.
Anh ngohaibac ơi , anh giúp em hiện 2 chữ số khi nhấn button được không anh , em làm hoài ko ra . hic
Chào em.
Cái này đơn giản mà em, em viết mã trong hàm callback của button đó và dùng cấu trúc set(handles.edit_text,’String’,’23′); kiểu đó là được mà.
Chúc em thành công.
Anh Hải Bắc giúp Em với.Hiện Em đang tìm bài tập lớn về FFT nhưng khó quá.Anh có thể gíp em được không?Nếu có một chương trình ứng dụng của thuật toán này thì càng tốt.Hay Anh có trang web nào có thể tham khảo thì chỉ dùm Em mới.Cảm ơn Anh nhiều nhiều!
Chào em.
Em search Google với từ khóa: FFT example và thêm từ khóa của ứng dụng muốn lấy example như Matlab hoặc C++ chẳng hạn.
Một ví dụ
Chúc em thành công.
Em Cảm ơn Anh nhiều nha!Đã chỉ dẫn cho Em.Có gì khó khăn Em sẽ hỏi Anh tiếp được không ạ?Hihi.Ah mà cái ví dụ Anh gửi cho Em bị gãy liên kết nên Em không xem được .Nếu được mong Anh gửi lại dùm Em nhé.Chào Anh
anh ơi cho em hỏi chút xíu đc ko ạ???
em đang làm bài tập lớn dktd mà bị bí phần lập trình guide?
phần đó là sử dụng guide xây dựng giao diện cho bài toán khi nhập hệ số k và Ti của bộ điều khiển PI hiển thị dạng sóng đồ thị đầu ra?
mong anh chỉ dẫn cho đc ko ạ?
Em xem tại liên kết này nhé.
chết!! em đã dùng thử nhưng khi bấm vào bộ PIDsystem.fig nó lại bị mất mấy nút ấy!!
không bít là matlab của em bị lỗi hay sao ấy;
thế cho em hỏi bộ đk PI thì cũng làm tương tự đúng không anh???
bộ điều khiển này chỉ có 2 thông số la Kp và Ti thôi!!
em cũng không bít thế nào nữa
mong anh giúp em
em cảm ơn nhiều
anh bắc ơi cho em hỏi thêm chút nữa ko ạ??
phần nhập Kp;Ti vào hiển thị dạng sóng tín hiệu ra ấy
sao em set xong chưa tắt đi bấm vào chạy thì vẽ đc mà khi em tắt hết đi nó cứ báo lỗi
ko bít bị làm sao ấy
mong anh chỉ giùm đc ko ạ??
lỗi cứ như thế này ấy ạ
“”Error in ==> giaodienbaitoan>cmdplot_Callback at 90
Kp=str2double(get(handles.Kp,’String’));
Error in ==> gui_mainfcn at 75
feval(varargin{:});
Error in ==> giaodienbaitoan at 44
gui_mainfcn(gui_State, varargin{:});
??? Error while evaluating uicontrol Callback.”"
Em cho hết đoạn code lên a xem nào.
hì.em bít rùi anh ạ??ko phải bị lỗi mà em ko bít cách mở chương trình guide ý!!phải mở file .m chư ko phải file .fig đúng ko ạ??
em cảm ơn anh nhiều ạ???
chao anh !
em thay anh tra loi nhung cau hoi rat hay, em nghi anh la nguoi rat hay jup do moi nguoi, em co bai nay viet code mai ma ko ra anh jup em voi.
vd: trong hop 1 co 3 qua cam, hai qua chuoi, 4 qua quyt
trong hop thu 2 co 5 qua cam, 3 qua chuoi,7 qua buoi
em dung guide trong matlap de thiet lap mot form de khi em chon hop 1 thi no hien len tat ca cac qua hoac la khi em chon hop thu 2 thi no lai hien len. em lam mai nhung ko ra anh jup em dc ko. em cam on anh nhieu!
em chao anh Hai Bac!
em co mot cau ve matlab nhung ma kho qua em tim nhieu tai lieu roi ma gio dang roi day.anh chi gium em voi nhe.em dang roi trong cach viet chuong trinh cho nut radio button trong guide ay,em tim nhieu tai lieu ma thay ho it noi ve cai nay qua.anh noi ro cho em biet duoc khong.va neu co the anh chi ro vi du cho em la lap trinh 1 giao dien matlab ma co nhieu nut radio button de chon,nhu la nhap vao 2 so a va b,1 nut radio de tinh tich cua 2 so do.1 nut khac la de tinh tong.bai tap cua em tuong tu nhu vay thoi.anh giup em voi nhe.
em cam on anh nhieu.
mail cua em la nvm08d6@gmail.com .sdt 0935039234.anh giup em voi anh nhe!
cho em xin mấy cái lệnh vẽ đồ thị 3d với ?em có mấy cái nhưng xấu quá.cám ơn nhiều
anh admin oi!em dg lam viet giao dien matlab tinh he pt Ax=b,A la ma tran,b la vecto cot,nhung em hok bit ham de nhap ma tran va vecto vao,anh jup em voi!huhu
co ai biet ngat timer su dung nhu the nao khong? tai do minh mu tit tieng anh nen doc HELP TIMER ma khong hieu
Các bạn ơi giúp mình 1 vấn đề với: bài toán của mình gồm có các giai đoạn khác nhau, nhập dữ liệu đầu vào cho giai đoạn đầu tiên,kết quả của giai đoạn đầu sẽ là thông số của giai đoạn sau,cứ tiếp tục cho đến hết. Mình đã làm được cái đó rồi,nhưng điều quan trọng la bjo mình ko biết vẽ đồ thị,tức là cái đồ thị này được dựng lên nhờ kết quả lấy được từ các giai đoạn trên.Ví dụ như cái đồ thị thời gian và tốc độ qua từng giai đoạn làm sao khi nó hiển thị ra phải là 1 đường cong trơn. Bạn nào có mẹo nào giúp mình chỗ đó với.làm ơn pm qua yah:cuongnguyentb0489@yahoo.com cho mình nhé,cảm ơn các bạn nhiều.
Chào bạn.
Mình đang bận làm đồ án nên vấn đề này mình giải quyết sau nhé. Chắc chắn là làm được mà.
Chúc bạn thành công.
sao em khong save duoc cac bai trong trang web cua anh huhuhu. lan nao cung den 99% roi bao loi
Anh cũng không biết nữa vì anh cũng không save vào bao giờ cả
.
Em thử print ra file .pdf xem có được không.
Chúc em thành công.