Ngoài ra cònrất nhiều Control khác thường đượcsửdụng khi thiếtkế các ứngdụngvới
VB như
· Image:cũng đượcsửdụng hiển thị hình ảnh như Form nhưng không thểvẽ
được lên đốitượng này. Đặc biệt kích thước hình ảnh chèn vào có thể thay đổi
theo kích thước của đốitượngImage nếu thuộc tính Stretch=true.
· Label: thường được sửdụng làm các nhãn, các đềtựa
· Check box: mang hai giátrị true hoặc false khicontrol này được đánhdấu chọn
hoặc khôngchọn.
· OptionButton:Nútlựa chọn
· ComboBox:danh sách các lựa chọndạng xổxuống.
· ListBox:cũng chứa danh sáchcáclựa chọn nhưng dạng khung
· Frame:khung bao chomột nhóm controlcó đặc điểm chungnào đó.
· HScrollbar: thanh trượt ngang.
· VScrollbar:thanhtrượt đứng.
· Nhóm DriveListBox, DirListBox, FileListBox:sửdụng truy xuất đến các
đườngdẫn trên đĩa.
· Timer: là bộ định thì, thời gian định thì chứa trongProperties Interval
·
Các Properties, Method, Eventcủa các Control trênsẽ được giớithiệu trongtừng các ví dụ
có liên quan.
47 trang |
Chia sẻ: aloso | Lượt xem: 6571 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Lập trình giao tiếp máy tính bằng Visual Basic - Lập trình Visual Basic, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
32 lại cĩ
mức logic khác hẳn (-10V/10V hay -12V/12V), vì vậy việc trước tiên phải làm khi kết nối các thiết
bị này với các cổng RS-232 là phải chuyển đổi mức tín hiệu RS-232 trở về TTL hay CMOS, may
mắn là điều này cũng được thực hiện khá dễ dàng bằng vi mạch MAX232. Ví dụ muốn giao tiếp
giữa 1 máy tính PC với một vi điều khiển họ 89C51 bằng cổng nối tiếp thì phải sử dụng vi mạch
chuyển đổi MAX232 ghép nối 2 đối tượng này. Phương pháp ghép nối bằng MAX232 được trình
bày trong hình dưới.
Hình 11: Tín hiệu nối tiếp TLL/CMOS và RS-232
Hình 12: Sơ đồ ghép nối MAX232
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
24
C. GIAO TIẾP QUA CỔNG MÁY IN- CỔNG SONG SONG (LPT)
Cổng máy in hay cịn gọi là cổng LPT, cổng song song hoặc giao diện Centronic cĩ mặt ở
hầu hết các máy tính PC. Cấu trúc của cổng song song rất đơn giản với tám đường dẫn dữ liệu, một
đường dẫn mass chung, bốn đường dẫn điều khiển để chuyển các dữ liệu tới máy in và năm đường
dẫn trạng thái để truyền các thơng tin về trạng thái của máy in ngược trở lại máy tính. Tất cả các
đường dẫn của cổng này đều tương thích TLL. Trên các máy tính PC thơng thường các cổng máy
in cĩ địa chỉ cơ sở(Base Address: BA) là :3BCH, 378H,278H,2BCH…trong đĩ địa chỉ 378H là địa
chỉ thường gặp nhất ở các máy.
Hình 13 Sơ đồ chân và các thanh ghi trên cổng máy in
Các đường dẫn của cổng máy in được nối với ba thanh ghi 8 bit khác nhau: thanh ghi Dữ
liệu(Data), thanh ghi trạng thái(Status) và thanh ghi điều khiển(Control).
- Thanh ghi dữ liệu: cĩ địa chỉ bằng địa chỉ cơ sở, thanh ghi này cĩ 8 đường dẫn với
giao diện hai hướng khơng đảo, nghĩa là cĩ thể xuất dữ liệu từ máy tính ra bên
ngồi và cĩ thể nhận tín hiệu từ bên ngồi vào thơng qua thanh ghi này, thanh ghi
Data được nối với các chân từ 2 – 9 trên cổng máy in, tuy nhiên khi ứng dụng
trong điều khiển và đo lường cần chú ý một đặc điểm là khơng phải bất kỳ thanh
ghi Data trên các cổng máy nào cũng là giao diện hai hướng, thực tế cho thấy đa
số trên các cổng máy in thanh ghi này chỉ cĩ thể được sử dụng để xuất dữ liệu, tức
là chỉ cĩ một hướng.
- Thanh ghi trạng thái: cĩ địa chỉ bằng địa chỉ cơ sở +1, là một thanh ghi 8 bit
nhưng thực tế chỉ cĩ 5 bit (5 bit cao) được nối với các chân của cổng bao gồm các
chân 10,11,12,13,15; sơ đồ sắp xếp các chân cĩ thể xem trên hình trên. Thanh ghi
trạng thái chỉ cĩ thể được truy xuất theo một hướng. Trong các đường dẫn của
thanh ghi này, đường dẫn S7, tức chân 11 là đường dẫn đảo.
- Thanh ghi Điều khiển: địa chỉ bằng địa chỉ cơ sở +2, cũng là một thanh ghi giao
diện hai hướng, cĩ 4 bit thấp được nối với các chân 1, 14,16, 17 trong đĩ đa số là
các đường dẫn đảo ( chỉ trừ bit C2, chân 16).
Tĩm lại, với một cổng LPT kém lý tưởng nhất, ta cũng cĩ ít nhất 12 đường tín hiệu về và 9
đường xuất tín hiệu. Con số này là đủ cho những ứng dụng giao tiếp nhỏ và vừa. Trong giáo trình
này sẽ trình bày chủ yếu các giao tiếp bằng cổng LPT.
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
25
PHẦN 3: LẬP TRÌNH GIAO TIẾP
A. Các thư viện liên kết động-Dynamic Link Library(DLL)
1. Khái niệm thư viện liên kết động
DLL là các thư viện liên kết động chứa các hàm và thủ tục mà ta cĩ thể sử dụng để bổ sung
cho những hàm cịn thiếu của một ngơn ngữ lập trình.
Cĩ hai loại DLL là Windows API DLL và Third-Party DLL
- Windows API DLL là những tập tin DLL đã được cài sẵn theo cáchệ điều hành
Windows. Các tập tin Windows API DLL cĩ những hàm, thủ tục được bổ sung
một số chức năng mà VB chưa cĩ.
- Ngồi các Windows API DLL, các chương trình trên Windows cĩ thể phải sử
dụng các DLL khác ( do các cơng ty hay cá nhân khác Microsoft phát triển) gọi là
cácThird-Party DLL. Khơng như cácWindows API DLL , các Third-Party DLL
cần được cài lên đĩa cứng trước khi sử dụng lần đầu. các Third-Party DLL thường
được tạo ra bằng ngơn ngữ C.
Việc sử dụng cácDLL cĩ nhiều ưu điểm so với các thư viện tĩnh (thường gọi là Package):
· DLL tiết kiệm chỗ trống trên đĩa.
· DLL tiết kiệm bộ nhớ bằng cách sử dụng kỹ thuật chia sẻ hay cịn gọi là ánh xạ bộ nhớ.
· Việc gỡ rối ( Debug) trở nên dễ dàng hơn bởi các lỗi đượccơ lập trong DLL duy nhất.
· DLL luơn tỏ ra hiệu quả khi độ an tồn của nĩ được đảm bảo.
Khai báo DLL
Để cĩ thể sử dụng các hàm, thủ tục trong một DLL, trước hết phải khai báo các hàm, thủ
tục đĩ. Cơng thức khai báo chung trong VB là:
[Public| Private] Declare Sub|Function name Lib “Libname” [Alias “aliasname”]
vd: Public Declare Function PortIn Lib "io.dll" (ByVal Port As Integer) As Byte
Trong đĩ
· Public : sử dụng tồn cục
· PortIn: tên hàm
· Io.dll: tên DLL
2. Port.dll và IO.dll
Một vấn đề đặc biệt khĩ khăn khi làm việc trong mơi trường Windows là tiếp cận đến
cácgiao diện của máy tính PC. thực tế cho thấy cĩ một biện pháp hiệu quả là tạo ra một tập tin
DLL cĩ khả năng sử dụng trong nhiều ứng dụng.
Trong DOS, mỗi ngơn ngữ lập trình đều cĩ các lệnh dùng cho cổng, thường đượcgọi tắt là
lệnh cổng ( trong GWBASIC là INP và OUT, với Turbo Pascal là PORT[]…) nên cĩ thể sử dụng
các lệnh này để trao đổi trực tiếp lên tồn bộ phần cứng của PC. Trong Windows 3.1, sự hạn chế ở
mức độ tương đối, vẫn cĩ thể vượt qua.
Trong mơi trường Windows95,98 vấn đề truy nhập trực tiếp tới các cổng trở nên khĩ khăn
hơn. Với các phiên bản VB5, VB6 hầu như khơng cịn khả năng truy nhập trực tiếp tới các cổng.
Windows NT, 2000, XP… hồn tồn quay lưng lại với người viết chương trình nghiệp dư.
hệ thống được thiết kế sao cho cĩ thể hoạt động trong chế độ bảo vệ và khơng cĩ cách nào để tuỳ
tiện truy nhập tới phần cứng. chỉ cĩ một khả năng cịn bỏ ngỏ là sử dụng các tập tin DLL.
Tệp PORT.DLL là một DLL được viết phục vụ cho việc truy nhập cổng trong các mơi
trường Windows. Tệp này bao gồm những chức năng sau:
· Mở ra các giao diện
· Truyền dữ liệu nối tiếp
· Tiếp cận đến các đường dẫn ở giao diện
· Nhập vào và xuất ra các cổng.
· Đo và định thời đến ms, us
· Truy nhập đến card âm thanh
· Truy nhập đến cổng trị chơi.
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
26
Tệp PORT.DLL cĩ thể được sử dụng trong nhiều ngơn ngữ lập trình khác nhau trong nhiều
phiên bản khác nhau của hệ điều hành Windows. Tuy nhiên trong nội dung giáo trình này chỉ đề
cập đến việc sử dụng PORT.DLL trong VB.
Đối với các phiên bản Windows NT, 2000, XP…các hàm nhập vào và xuất ra các cổng của
tệp PORT.DLL khơng sử dụng được. Vì vậy chúng tơi thường sử dụng thêm một tệp DLL khác cĩ
khả năng khắc phục vấn đề trên là IO.DLL.
Các khai báo của các hàm và thủ tục trong các DLL trên đã được chúng tơi trình bày trong
một tập tin cĩ tên “io_port.dll”, người sử dụng cĩ thể “add “ tập tin này vào các ứng dụng của
mình để sử dụng hoặc chép lại các khai báo dưới đây vào một “Module” mới. Nhưng trước hết để
sử dụng các DLL này, như đã được đề cập, người dùng phải cài đặt, hay chép 2 tập tin PORT.DLL
, IO.DLL vào thư mục hệ thống (…\WINDOWS\System đối với Windows 98 , và
…\WINDOWS\System32 đối với Windows XP hay \WINNT\System32 đối với Windows
2000…).
Option Explicit
Declare Function OPENCOM Lib "PORT.DLL" (ByVal a$) As Integer
Declare Sub CLOSECOM Lib "PORT.DLL" ()
Declare Sub SENDBYTE Lib "PORT.DLL" (ByVal b%)
Declare Function READBYTE Lib "PORT.DLL" () As Integer
Declare Sub DTR Lib "PORT.DLL" (ByVal b%)
Declare Sub RTS Lib "PORT.DLL" (ByVal b%)
Declare Sub TXD Lib "PORT.DLL" (ByVal b%)
Declare Function CTS Lib "PORT.DLL" () As Integer
Declare Function DSR Lib "PORT.DLL" () As Integer
Declare Function RI Lib "PORT.DLL" () As Integer
Declare Function DCD Lib "PORT.DLL" () As Integer
Declare Sub DELAY Lib "PORT.DLL" (ByVal b%)
Declare Sub TIMEINIT Lib "PORT.DLL" ()
Declare Sub TIMEINITUS Lib "PORT.DLL" ()
Declare Function TIMEREAD Lib "PORT.DLL" () As Long
Declare Function TIMEREADUS Lib "PORT.DLL" () As Long
Declare Sub DELAYUS Lib "PORT.DLL" (ByVal L As Long)
Declare Sub REALTIME Lib "PORT.DLL" (ByVal i As Boolean)
Declare Sub OUTPORT Lib "PORT.DLL" (ByVal a%, ByVal b%)
Declare Function INPORT Lib "PORT.DLL" (ByVal p%) As Integer
Declare Function JOYX Lib "PORT.DLL" () As Long
Declare Function JOYY Lib "PORT.DLL" () As Long
Declare Function JOYZ Lib "PORT.DLL" () As Long
Declare Function JOYW Lib "PORT.DLL" () As Long
Declare Function JOYBUTTON Lib "PORT.DLL" () As Integer
Declare Function SOUNDSETRATE Lib "PORT.DLL" (ByVal Rate%) As Integer
Declare Function SOUNDGETRATE Lib "PORT.DLL" () As Integer
Declare Function SOUNDBUSY Lib "PORT.DLL" () As Boolean
Declare Function SOUNDIS Lib "PORT.DLL" () As Boolean
Declare Sub SOUNDIN Lib "PORT.DLL" (ByVal Puffer$, ByVal Size%)
Declare Sub SOUNDOUT Lib "PORT.DLL" (ByVal Puffer$, ByVal Size%)
Declare Function SOUNDGETBYTES Lib "PORT.DLL" () As Integer
Declare Function SOUNDSETBYTES Lib "PORT.DLL" (ByVal b%) As Integer
Declare Sub SOUNDCAPIN Lib "PORT.DLL" ()
Declare Sub SOUNCAPDOUT Lib "PORT.DLL" ()
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
27
Public Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Value As Byte)
Public Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte
Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Integer)
Declare Sub PortDWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Long)
Declare Function PortWordIn Lib "IO.DLL" (ByVal Port As Integer) As Integer
Declare Function PortDWordIn Lib "IO.DLL" (ByVal Port As Integer) As Long
Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) As
Boolean
Declare Function RightPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean)
As Boolean
Declare Function LeftPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As
Boolean
Declare Function IsDriverInstalled Lib "IO.DLL" () As Boolean
2.1. Một số hàm, thủ tục đáng lưu ý trong Port.dll:
Ø OPENCOM : mở cổng Com, các cổng Com phải được mở trước khi sư dụng.
Ø CLOSECOM: đĩng cổng Com
Ø SENDBYTE: xuất 1 byte dữ liệu ra cổng Com
Ø READBYTE: nhận 1 byte dữ liệu từ cổng Com
Ø DTR:Set, Reset chân DTR của Cổng Com
Ø RTS:Set, Reset chân RTS của Cổng Com
Ø TXD:Set, Reset chân TXD của Cổng Com
Ø CTS:Set, Reset chân CTS của Cổng Com
Ø DSR:Set, Reset chân DSR của Cổng Com
Ø RI: Set, Reset chân RI của Cổng Com
Ø DCD: Set, Reset chân DCD của Cổng Com
Ø DELAY: tạm dừng trong 1 khoảng thời gian tính bằng mili giây
Ø DELAYUS:tạm dừng trong 1 khoảng thời gian tính bằng micro giây
Ø TIMEINIT: bắt đầu đếm thời gian (mili giây)
Ø TIMEREAD: đọc khoảng thời gian đã đếm (mili giây)
Ø TIMEINITUS:bắt đầu đếm thời gian (micro giây)
Ø TIMEREADUS:đọc khoảng thời gian đã đếm (micro giây)
2.2. Một số hàm, thủ tục đáng lưu ý trong IO.dll
Ø PortOut : xuất 1 byte dữ liệu ra cổng
Ø PortIn: nhập 1 byte dữ liệu từ cổng
Ø PortWordOut: xuất 2 byte dữ liệu ra cổng
Ø PortWordIn: nhập 2 byte dữ liệu từ cổng
Ø PortDWordOut: xuất 4 byte dữ liệu ra cổng, với cổng LPT, lệnh này cho phép xuất dữ
liệu ra đồng thời tất cả các thanh ghi.
Ø PortDWordIn: nhập 4 byte dữ liệu từ cổng,với cổng LPT, lệnh này cho phép nhập dữ
liệu vào đồng thời từ tất cả các thanh ghi.
Ø SetPortBit : set (mức 1) 1 chân của các cổng
Ø ClrPortBit: xố (mức 0) 1 chân của cổng
Ø NotPortBit: lấy bù 1 chân của cổng
Ø GetPortBit: nhập về trạng thái của 1 chân nào đấy.
Việc sử dụng cụ thế các hàm trên sẽ được trình bày trong các ví dụ giao tiếp ở các phần sau
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
28
B. Các ví dụ lập trình giao tiếp máy tính.
1. Giao tiếp qua cổng LPT:
Kiểm tra tính 2 hướng của thanh ghi Data:
Ví dụ này nhằm kiểm tra xem các đường Data trên cổng LPT ở máy tính của bạn cĩ hỗ trợ
giao diện hai hướng khơng, điều này thật sự cần thiết cho việc xây dựng các ứng dụng giao tiếp
qua cổng LPT sau này.
- Khởi động VB, tạo một project standard EXE mới.
- Trong cửa sồ Properties, đổi tên Form thành frmTestData, đổi Caption Form thành
DIRECTION TEST. đặt thuộc tính BorderStyle là 1-Fixed Single.
- Đặt một điều khiển “Frame” lên Form, tên Frame1, đổi Caption thành DATA LPT.
- Đặt một “Shape” lên Frame1, tên Shape1, đổi thuộc tính Fillstyle thành 0-Solid, thuộc
tính Shape thành 3-Circle, thuộc tính Index=0, Width=375, Height=375
- Đặt một “Label” lên Shape1, tên lblBit, bạn chú ý phải đặt Label này khít lên Shape1,
đổi thuộc tính BackStyle thành 0-Stranparent, Alignment=3-Center, bỏ trống Caption,
đặt Index=0, chọn Font là “Times New Roman” với size=16.
- Click chọn Shape1 và lblBit cùng lúc (giữ Phím Ctrl), Copy và Paste 7 lần lên Frame1,
ta cĩ 7 Shape1 và 7 lblBit trên Frame với các chỉ số Index từ 0 đến 7, bố trí các Shape1
và Label thành hang ngang sao cho mỗi Label nằm trên mỗi Shape. Lần lượt đổi
Caption từng lblBit thành chỉ số của chúng.
- Đặt 1 “Label” lên Frame1, đổi tên thành lblValue, Caption bỏ trống.
- Đặt lên Form một CheckBox, đổi tên thành chkDirection, Caption thành OUT/IN.
- Đặt lên Form một CommandButton, đổi tên thành cmdExit, Caption thành &Exit.
- Cuối cùng, đặt lên Form một Timer, đổi thuộc tính interval=10.
Hình 14:Giao diện chương trình vừa thiết kế
* Như vậy ta vừa thiết kế xong phần giao diện, chọn file/save project để lưu project lại.
Lưu Form với tên frmTestData, project tên TestDirection. tiếp theo ta đặt code vào chương trình.
- Chọn Project/Add Module, chọn Tab existing để chèn Module “io_port.bas” vào
project, đây là Module chứa các khai báo cho các lệnh cĩ trong thư viện port.dll và
IO.dll.
- Đặt Option Explicit vào khai báo chung (General - Declarations)
- DoubleClick vào CommandButton cmdExit để xuất hiện cửa số View code, viết code
sau:
Private Sub cmdExit_Click()
End
End Sub
- Đặt code sau vào Event Form_Load()
Private Sub Form_Load()
Dim ValIn As Byte
Dim Chk As Byte
ValIn = PortIn(&H378)
Chk = (ValIn And 32) / 32
Me.chkDirection.Value = Chk
End Sub
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
29
- Đặt vào Timer1_Timer() code sau:
Private Sub Timer1_Timer()
Dim BitVal As Byte
Dim ValIn As Byte
Dim Mask As Byte
Dim i As Byte
ValIn = PortIn(&H378)
For i = 0 To 7
Mask = 2 ^ i
BitVal = (ValIn And Mask) \ Mask
Me.Shape1(i).FillColor = QBColor(BitVal * 2 + 10)
Next i
Me.lblValue.Caption = ValIn
End Sub
- Viết code cho CheckBox
Private Sub chkDirection_Click()
If Me.chkDirection.Value Then
SetPortBit &H37A, 5
Else
ClrPortBit &H37A, 5
End If
End Sub
- Viết code cho các Lebel lblBit
Private Sub lblBit_Click(Index As Integer)
Dim Mask As Byte
Dim BitVal As Byte
Mask = 2 ^ Index
BitVal = (PortIn(&H378) And Mask) / Mask
If Me.chkDirection.Value = 0 Then
If BitVal Then
ClrPortBit &H378, Index
Me.Shape1(Index).FillColor = QBColor(10)
Else
SetPortBit &H378, Index
Me.Shape1(Index).FillColor = QBColor(12)
End If
End If
End Sub
* Thực thi chương trình:
- Nhấn F5 hoặc Run/Strart để thực thi chương trình.
- Khi chương trình được thực thi, 8 hình trịn tượng trưng cho 8 Bit của Port Data, màu
đỏ là Bit đang ở mức cao, ngược lại màu xanh tức Bit đang ở mức thấp. Con số hiển thị
bên phải là giá trị thập phân của Port Data.
- Bạn quan sát CheckBox OUT/IN, nếu khơng được chọn tức Port Data đang ở chế độ
xuất khi đĩ bạn Click vào Hình trịn nào, nĩ sẽ đổi màu, khi đĩ Bit tương ứng sẽ đổi
trạng thái, bạn cĩ thể kiểm tra điều này trực tiếp trên cổng LPT. Sau đĩ bạn đấu một Bit
nào bất kỳ đang ở trạng thái cao xuống mass ( mass là các chân từ 18 ->25 trên cổng
LPT), bạn sẽ thấy màu trên hình trịn tương ứng khơng hề thay đổi, điều đĩ chứng tỏ
cổng LPT đang ở chế độ chỉ xuất (Read Only).
- Click chọn vào CheckBox, bạn thấy tồn bộ các hình trịn chuyển sang màu đỏ tức cả
Port đang ở mức cao. thực hiện đấu mass một chân bất kỳ (như cách trên), nếu màu trên
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
30
hình trịn tương ứng chuyển sang màu xanh tức cổng LPT của bạn cĩ tồn tại giao diện 2
hướng, đĩ là điều rất đáng quan tâm, ngược lại nếu màu của hình trịn tương ứng khơng
đổi thì thật đáng tiết là Board mạch chủ máy tính của bạn khơng hỗ trợ chế độ nhập cho
Port Data.
* Giải thích chương trình:
- Nhìn chung trong chương trình này chúng tơi khơng sử dụng các kỹ thuật lập trình quá
xa lạ, vì vậy ở đây chúng tơi chỉ tập trung giải thích các vấn đề liên quan đến kỹ thuật
giao tiếp.
- Trong sự kiện Form_Load():
Dịng lệnh ValIn=PortIn(&H378) : nhận giá trị (thập phân) từ Port Data (&H378 là
địa chỉ dạng số Hex của Port Data) và gán cho biến ValIn.
Bạn chú ý dịng lệnh sau:
Chk = (ValIn And 32) / 32
Dịng lệnh trên sử dụng kỹ thuật mặt nạ (Masking) để che các Bit khơng cần thiết,
kỹ thuật Masking sẽ được chúng tơi giới thiệu rõ trong phần Hỗ trợ thêm ngay sau ví
dụ này.
Sau câu lệnh trên biến Chk sẽ chứa trạng thái của Bit D5 trong thanh ghi Control (0
hoặc 1), trạng thái này sau đĩ sẽ được gán cho CheckBox chkDirection qua dịng lệnh
tiếp theo Me.chkDirection.Value = Chk.
- Trong sự kiện Timer1_Timer():
Kỹ thuật chủ yếu được sử dụng trong sự kiện này vẫn là kỹ thuật Masking, một
điểm khác ở đây là “mặt nạ” (Mask) khơng phải là một con số cố định, một biến i được
cho chạy từ 0 đến 7 tương ứng với việc xử lí từng Bit trong Port Data. Ứng với từng Bit
cần xử lí sẽ cĩ một Mask khác nhau.
Dịng lệnh Me.Shape1(i).FillColor = QBColor(BitVal * 2 + 10) đặt màu thích hơp
(xanh lá (10) hay đỏ (12)) cho các hình trịn tương ứng trạng thái các Bit.
- Sự kiện chkDirection_Click():
Khi người dùng Click vào CheckBox chkDirection, trạng thái của nĩ sẽ thay đổi,
tương ứng với đĩ, Bit D5 của thanh ghi Control sẽ được Set hay Clear. Như đã thảo
luận ở trên, Bit D5 sẽ quyết định hướng xuất hay nhập của Port Data.
- Sự kiện lblBit_Click(Index As Integer):
Sự kiện này xảy ra khi người dùng Click vào các Label lblBit ( hay Click vào các
Shape1), nhưng tại sao phải Click vào các Label mà khơng là các Shape1, câu trả lời là
các Shape nĩi chung khơng tồn tại một Event nào, vì vậy việc Click vào các Label thực
chất là một “chiến thuật” của ta. Khi các Label được Click, thơng số Index sẽ cho biết
đĩ là Label thứ mấy trong mảng các Label lblBit.
Các dịng lệnh “ClrPortBit &H378, Index” hay "SetPortBit &H378, Index”, cĩ
nhiệm vụ xố hay đặt các Bit tương ứng trong Port Data .
- Cuối cùng trong sự kiện cmdExit_Click(), lệnh End để kết thúc chương trình.
Trên đây là ví dụ đầu tiên giúp bạn làm quen với kỹ thuật lập trình giao tiếp thơng qua cổng
LPT của máy tính PC đồng thời đĩ cũng là chương trình hữu ích giúp bạn kiểm tra cổng LPT của
bạn, việc hiểu các câu lệnh sử dụng trong chương trình này là thật sự cần thiết nếu bạn cĩ ý định
xây dụng các ứng dụng giao tiếp lớn, tuy nhiên cũng cĩ một số vấn đề cĩ thể gây cho bạn chút ít
khĩ khăn trong ví dụ này, nhất là các vấn đề về liên quan đến “kỹ thuật số”, vì vậy chúng tơi sẽ
trình bày dưới đây một số hiểu biết cơ bản nhất về những vấn đề này. Bạn hãy đọc thật kỹ và đối
chiếu lại với chương trình vừa thực hiện.
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
31
Hỗ trợ thêm:
- Số nhị phân(Binary), số Thập Lục phân(Hexadecimal), số Thập phân(Decimal):
Ví dụ bạn mắc các Led vào Port Data của cổng LPT như sau:
Hình 15: Mắc 7 Led vào Port Data
Bây giờ bạn muốn cho các Led sáng xen kẻ, nghĩa là các Led 0,2,4,6 sáng và các Led cịn
lại sẽ khơng sang, như vậy bạn phải xuất ra Port Data một số cĩ giá trị bao nhiêu ?
Trạng thái các Bit của Port Data phải là:
0 1 0 1 0 1 0 1
Giá trị cần xuất ra Port Data là 01010101, đĩ là một số nhị phân. Số nhị phân là số được
biểu diễn chỉ bởi 2 ký tự 0 và 1 (số Bin hay số hệ 2). Đây là một cách biểu diễn rất phù hợp trong
lĩnh vực kỹ thuật số Một số nhị phân mang một giá trị được tính theo quy tắc
sau: 00
1
101 2*2*...2*... aaaaaa
n
nn +++= . Nếu ta cĩ một số nhị phân mang n chữ số thì giá trị
của số đĩ sẽ nằm trong khoảng từ 0 đến 2n-1, ví dụ một Port 8 Bit chỉ cĩ thể mang giá trị từ 0 đến
28
ví dụ : 852*12*02*12*02*12*02*12*001010101 01234567 =+++++++=
Như vậy, theo yêu cầu điều khiển như trên, ta sẽ sử dụng lệnh PortOut của thư viện IO.dll
với các tham số như sau: PortOut &H378, 85
Trong đĩ 85 là giá trị thập phân được xuất ra, tương ứng với giá trị nhị phân 01010101, cịn
&H378 là địa chi của cổng cần xuất ra, ở đây là địa chỉ của Port Data. &H là gì ? đĩ là một kí hiệu
dùng trong VB chỉ ra rằng con số đi theo sau đĩ là một con số Thập Lục phân (Hexadecimal hay
Hex hay hệ 16). Số Thập Lục phân là số được biểu biễn bởi 16 ký tự 0…9,A,B,C,D,E,F đại diện
cho các giá trị từ 0 đến 15. Việc quy đổi từ một số hex sang một số thập phân được thực hiện theo
quy tắc sau : 00
1
101 16*16*...16*... aaaaaa
n
nn +++= . Nếu ta cĩ một số hex mang n chữ số thì
giá trị của số đĩ sẽ nằm trong khoảng từ 0 đến 16n-1
Ví dụ: 400216*216*1016*152 012 =++=FA
Bạn để ý 16=24, vì vậy 1 chữ số (digit) hex cĩ thể được sử dụng thay thế cho một số Nhị
phân cĩ 4 digit, đồng thời việc quy đổi giữa số hex và số nhị phân rất dễ dàng, chỉ cần quy đổi
từng 4 digit của số nhị phân, đây chính là ưu điểm lớn nhất của số hex. Ví dụ:
10110100 (Bin)=B4 (Hex) vì 4 digit đầu 1011(Bin)=11(Dec)=B (Hex). Tương tự 4 digit sau
0100=4=4.
Quay lại ví dụ xuất Port trên, bạn hãy nghĩ xem ta cần xuất ra một số hex bao nhiêu thay
cho số 85 đã dùng trên.
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
32
Sau đây chúng tơi sẽ tĩm tắc cách biểu diễn của 16 số đầu tiên dưới dạng số thập phân, nhị
phân và thập lục phân để bạn cĩ thể tham khảo và áp dụng quy đổi các số bất kỳ khác. Bạn cũng
cĩ thể sử dụng cơng cụ Calculator (calc.exe) cĩ sẵn trong Windows để thực hiện các phép
quy đổi.
Số thập phân (dec) Số Nhị phân (bin) Số Thập lục phân (hex)
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
- Kỹ thuật mặt nạ - Masking:
Kỹ thuật Masking là kỹ thuật “che” hoặc “hiện” một số Bit mơng muốn nào đĩ trong một
hoặc nhiều thanh ghi. Cơng cụ để thực hiện kỹ thuật Masking là các phép tốn Logic như: And,
Or, Xor…
Ví dụ bạn đang dùng cổng LPT của máy tính để điều khiển việc ổn định mức chất lỏng
cần thiết trong một bồn chứa, giả sử bạn chỉ dùng thanh ghi điều khiển: cảm biến mức dưới S1 nối
với chân 14, cảm biến mức trên S2 được nối với chân 1, chân 16 dùng điều khiển động cơ Bơm, và
chân 17 điều khiển động cơ đĩng mở van. Yêu cầu điều khiển đối với bạn như sau, bạn chỉ cần
điều khiển động cơ M để mở hoặc tắt Bơm, khi cảm biến S1 báo “cạn” (S1=0) bạn cho Bơm chạy
(M=1), khi cảm biến S2 báo “đầy” (S2=1) bạn cho bơm tắt (M=0). Như vậy sơ đồ kết nối thanh
ghi điều khiển sẽ như hình sau:
Vấn đề đặt ra bây giờ là làm sao đọc được trạng thái của từng Bit để biết trạng thái của
từng cảm biến. Ta sẽ dùng kỹ thuật mặt nạ để “che” các Bit khơng cần thiết và “hiện” Bit cần thiết.
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
33
Hình 16: Sơ đồ kết nối hệ thống ổn định mực chất lỏng.
Để đọc trạng thái S1, ta dùng lệnh ValIn=PortIn &H37A ở đây ValIn là một biến tạm,
lệnh trên sẽ đọc tồn bộ thanh ghi điều khiển vào biến ValIn, tuy nhiên nếu chỉ dựa vào ValIn ta sẽ
khơng biết được trạng thái của Bit C1, tức trạng thái của cảm biến S1 bởi vì ValIn cịn chứa trạng
thái của các Bit khác nữa. Ở đây ta chỉ quan tâm đến Bit C1 vì vậy ta sẽ dùng phép Logic And để
Masking. Để biết trạng thái của C1 ta sẽ And ValIn với “mặt nạ” Mask= 2 (00000010), kết quả
phép And được giải thích như sau:
Bảng chân trị phép And
A B A And B
0
0
1
1
0
1
0
1
0
0
0
1
Kết quả sau khi And chỉ cĩ 2 giá trị: Res=0 tương ứng C1=0, C1=1 khi Res=2. Nếu bạn
muốn kết quả nhận được chỉ mang 2 giá trị 0;1 bạn dùng dịng lệnh Res=(ValIn And 2)/2 thay
cho dịng lệnh trên.
Cơ bản ta đã đọc được trạng thái của Bit C1 (chứa trong biến Res), tuy nhiên cần chú ý Bit
C1 là 1 Bit đảo, trạng thái của C1 trái ngược với trạng thái của cảm biến S1 đặt vào nĩ, để đảo
trạng thái của biến Res (chứa trạng thái của C1) cho phù hợp với trạng thái của cảm biến S1 (điều
này thật sự rất cần thiết trong một số trường hợp) ta dùng Phép Xor để Masking.
Res=ValIn And 2
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
34
Bảng chân trị phép Xor
A B A Xor B
0
0
1
1
0
1
0
1
0
1
1
0
Từ bảng chân trị của phép Xor ta nhận thấy khi Xor một Bit với 1, trạng thái của Bit đĩ sẽ
đổi, nĩi cách khác phép Xor một Bit với 1 chính là phép “Not” của Bit đĩ. Vì vậy sau dịng lệnh
Res=Res Xor 1 trạng thái của Res sẽ đảo.
Ngồi ra trong một số trường hợp Masking ta cịn sử dụng phép Or
Bảng chân trị phép Or
A B A Or B
0
0
1
1
0
1
0
1
0
1
1
1
2. Giao tiếp qua cổng COM
Như đã trình bày ở phần trên, bạn cĩ thể giao tiếp với các cổng COM qua các đường giao
tiếp chính thức theo chuẩn RS-232 như TxD hay RxD hoặc qua các đường phụ trợ. Thư viện
Port.dll cĩ đủ các hàm hỗ trợ để bạn thực hiện việc giao tiếp theo cả 2 cách trên. Tuy nhiên bản
thân VB cũng cĩ hỗ trợ một phương thức giao tiếp với các cổng COM dưới dạng các đối tượng.
Theo kinh nghiệm cho thấy khi cần sử dụng các đường phụ trợ bạn hãy sử dụng thư viện Port.dll,
ngược lại nếu cần truyền nhận theo chuẩn RS-232 (mục đích chính là đây) bạn nên sử dụng
phương thức được hỗ trợ sẵn trong VB.
* Để sử dụng các hàm hỗ trợ giao tiếp qua cổng COM trong thư viện Port.dll bạn phải “mở
cổng” bằng hàm OPENCOM, ví dụ:
i=OPENCOM(“COM1,9600,N,8,1”)
Trong đĩ COM1 là cổng COM thứ 1, 9600 là tốc độ baud, N: khơng kiểm tra chẵn lẻ, 8: số
Bit trong 1 Frame truyền, 1: số Bit Stop.
Dịng lệnh trên bạn cĩ thể đặt ở bất cứ vị trí nào trong chương trình nhưng phải thực hiện
trước khi sử dụng các hàm khác trong Port.dll (bạn nên đặt trong Event Form_Load()).
Sau khi mở cổng bạn cĩ thể truy cập trực tiếp các đường dẫn thơng qua các hàm trực tiếp
như: DTR, RTS,TXD (Xuất trực tiếp ra các đường dẫn), CTS, DSR,RI,DCD (Đọc các đường dẫn).
Vd: DTR 1 ‘ xuất ra chân DTR giá trị 1 ( chân này lên mức cao)
X=CTS ‘đọc trạng thái chân CTS vào biến X
…
* Trong phần sau đây chúng ta sẽ khảo sát một ví dụ giao tiếp theo chuẩn RS-232 bằng
phương thức của VB. Như bạn đã biết muốn thực hiện việc giao tiếp theo chuẩn RS-232 thì ta phải
cĩ ít nhất 2 thiết bị đầu cuối DTE cĩ hỗ trợ RS-232, máy tính chúng ta là một. Để đơn giản ta sử
dụng 2 máy tính PC làm 2 DTE. Bạn chỉ cần đấu nối chéo 2 máy tính này (TxD1(chân 3 máy 1)
nối với RxD2 (chân 2 máy 2), RxD1 nối TxD2, và nối 2 chân Ground (chân số 5) lại với nhau )
sau đĩ chúng ta sẽ tiến hành thực hiện ví dụ giao tiếp.
- Tạo 1 Project (exe) mới, đổi tên là CHAT232, đối tên Form là FRMMAIN, Caption:
CHAT232 , lưu Project với tên CHAT232
- Với Form FRMMAIN: đặt thuộc tính BorderStyle là 1-Fixed Single, thuộc tính
StartUpPosition là 2-CenterScreen.
- Đặt vào Form 2 đối tượng Frame, lần lượt đổi tên chúng thành FraDisplay và FraSend,
đổi Caption thành TEMP và SEND.
Res=Res Xor 1
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
35
- Đặt trong FraDisplay một TextBox, đối tên thành TXTDISPLAY, đặt thuộc tính
Lock=True, Multiline=true, ScrollBar=2-Vertical.
- Đặt trong FraSend một TextBox, đối tên thành txtSend, đặt thuộc Multiline=true,
ScrollBar=2-Vertical.
- Đặt trong FraSend một nút lệnh tên cmdSend, Caption=”&SEND”
- Bạn vào trình đơn “Project” chọn “Components” để chèn vào đối tượng giao tiếp qua
cổng COM mà ta sẽ sử dụng trong ví dụ này. Khi hộp thoại “Components” xuất hiện,
bạn hãy kéo thanh trượt tìm đối tượng tên là “Microsoft Comm control 6.0”, đánh dấu
chọn và nhấn “OK”
Hình 17: Hộp thoại Componenets
- Trong ToolBox của bạn bây giờ xuất hiện một đối tượng hình chiếc điện thoại, kéo và
đặt đối tượng này lên Form của bạn, theo mặc nĩ sẽ cĩ tên là MSComm1.
Form sau khi thiết kế cĩ hình dáng như sau:
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
36
Hình 17: Giao diện sau khi thiết kế
Bây giờ ta sẽ viết code cho ví dụ này:
- Trong sự kiện Form_Load():
Private Sub Form_Load()
MSComm1.CommPort = 1 ‘ Chọn cổng để giao tiếp là cổng 1.
MSComm1.Settings = "9600,N,8,1" ‘Khai báo các thơng số mở cổng .
MSComm1.PortOpen = True ‘ Bắt đầu mở cổng.
Me.MSComm1.RThreshold = 1 ‘Khai báo sẽ sử dụng sự kiện OnComm
End Sub
Ba dịng lệnh đầu là bắt buộc nếu bạn muốn giao tiếp với cổng COM qua đối tượng
MSComm, nhiệm vụ của 3 dịng này là “mở cổng” để phục vụ cho mục đích giao tiếp của bạn sau
này.
- Double Click vào nút lệnh cmdSend, trong sự kiện cmdSend_Click():
Private Sub cmdSend_Click()
Dim txt As String ‘Khai báo 1 biến tạm dạng chuỗi
txt = Me.txtSend.Text ‘ Gán biến tạm là nội dung của TextBox txtSend
Me.MSComm1.Output = txt ‘Gởi giá trị của biến tạm ra cổng nối tiếp
Me.TXTDISPLAY.Text = Me.TXTDISPLAY.Text + Chr(13) + Chr(10)
Me.TXTDISPLAY.Text = Me.TXTDISPLAY.Text + txt
Me.txtSend = ""
Me.txtSend.SetFocus
End Sub
- Double Click vào MSComm1, trong sự kiện MSComm1_OnComm():
Private Sub MSComm1_OnComm()
If Me.MSComm1.CommEvent = comEvReceive Then ‘ Nếu dữ liệu đã được gởi tới
Me.MSComm1.InputLen = 0 ‘Chuẩn bị bộ đệm
Me.TXTDISPLAY.Text = Me.TXTDISPLAY.Text + Chr(13) + Chr(10)
Me.TXTDISPLAY.Text = Me.TXTDISPLAY.Text + Me.MSComm1.Input ‘Phương
thức Me.MSComm1.Input dùng để nhận giá trị gới đến từ cổng COM
End If
End Sub
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
37
- Trong sự kiện KeyPress của txtSend:
Private Sub txtSend_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then Call cmdSend_Click
End Sub
- Trong sự kiện Form_Unload()
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False ‘ Đĩng cổng
End Sub
Để chạy thử chương trình, bạn dịch chương trình thành file EXE sau đĩ chép file này qua
máy tính thứ 2 (DTE thứ 2) đã được kết nối với máy tính của bạn. Trên 2 máy tính bạn cho cùng
chạy chương trình. Trên bất kỳ máy nào bạn thử đánh vào TextBox txtSend rồi nhấn “Send” hoặc
Enter, lập tức bạn sẽ thấy dịng thơng điệp của bạn sẽ xuất hiện trên TextBox TXTDISPLAY của
chương trình đang chạy trên máy kia. Như vậy là ta đã thành cơng trong việc lập trình kết nối 2
máy tính qua cổng COM. Với cách tương tự bạn cĩ thể tự mình mở rộng chương trình để phục vụ
cho mục đích của chính bạn.
Trong tài liệu này chúng tơi chỉ đưa ra một vài ví dụ cơ bản giúp bạn kiểm tra lý
thuyết đã được học, nhiều ví dụ và bài tập khác sẽ được trình bày trong chương trình học.
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
38
PHỤ LỤC 1: CÁC CONTROL TIÊU CHUẨN
1- Textbox: hay cịn gọi là edit field or edit control, hiển thị thơng tin trong thời gian thiết
kế hay lúc chương trình đang thực thi. Việc truy xuất thơng tin của Textbox được thực
hiện thơng qua Properties “Text”
Biểu
tượng
Hình ảnh Properties Method Event Ghi
chú
Name: Tên đối tượng
Move
Left,Top,[Width],
[Height] : di chuyển
VD:
Text1.Move 100, 200,
300,400
Là: Di chuyến Text1
đến vị trí cách lề trái
100, lề trên 200, rộng
300, cao 400
Chú ý: cĩ thể bỏ các
giá trị trong [ ] như
Width hay Height
Change: Xảy ra khi thay đổi
nội dung Text.
Alignment:canh lề
0:canh trái
1: canh phải
2: canh giữa
Click: Xảy ra khi Click
mouse vào Text.
Backcolor: màu nền DblClick: Xảy ra khi Click
đơi mouse vào Text.
BorderStyle: Viền
0: khơng viền
1: cĩ viền nổi
GotFocus: Xảy ra khi Text
nhận Focus.
Enable: cho phép hoặc cấm sử
dụng
(true, false)
KeyDown: Xảy ra khi Text
đang cĩ Focus và 1 phím
được nhấn xuống.
Height: Chiều cao Refresh: làm tươi
Textbox.
KeyPress: Xảy ra khi Text
đang cĩ Focus và 1 phím
được nhấn .
Font: Font của chữ trong Text
Forecolor: Màu của chữ KeyUp: Xảy ra khi Text
đang cĩ Focus và 1 phím
được thả.
Index: chỉ số đối tượng (mảng
đối tượng)
Left: Khoảng cách lề trái SetFocus: Làm cho
Textbox nhận Focus, và
trở thành đối tượng
được chú ý bởi
Windows.
LostFocus: Xảy ra khi mất
Fucos
Lock: cho phép hoặc cấm sửa
thơng tin ( true hoặc false)
MouseDown: Xảy ra khi
nhấn mouse xuống Text.
MultiLine:
True: cho phép xuống dịng
Flase: khơng xuống dịng
MouseMove: Xảy ra khi cĩ
sự di chuyển mouse trên
Text.
ScrollBar: Các thanh trượt
0: khơng sử dụng
1: Thanh trượt ngang
2: Thanh trượt dọc
3: Cả 2 thanh trượt
MouseUp: Xảy ra khi thả
mouse lên Text.
Text: Nội dung của Textbox
Top: Khoảng cách lề trên
Visible: ẩn hiện đối tượng.
Width: Chiều rộng Textbox
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
39
2- CommandButton: Là các nút nhấn được sử dụng để bắt đầu, ngắt hoặc dừng một quá
trình nào đĩ.
Biểu
tượng
Hình ảnh Properties Method Event Ghi
chú
Name: Tên đối tượng
Move Left,Top,[Width],
[Height] : di chuyển
VD:
Command1.Move 100,
200, 300,400
Là: Di chuyến Command1
đến vị trí cách lề trái 100,
lề trên 200, rộng 300, cao
400
Chú ý: cĩ thể bỏ các giá
trị trong [ ] như Width
hay Height
Click: Xảy ra khi Click
mouse vào
CommandButton.
Caption: Phần chữ hiển thị
trên nút nhấn.
Backcolor: màu nền GotFocus: Xảy ra khi
CommandButton nhận
Focus.
Default:
true: Enter =nhấn Button
false: bỏ chức năng này.
Enable: cho phép hoặc cấm
sử dụng
(true, false)
KeyDown: Xảy ra khi
CommandButton đang
cĩ Focus và 1 phím
được nhấn xuống.
Height: Chiều cao Button Refresh: làm tươi
CommandButton.
KeyPress: Xảy ra khi
CommandButton đang
cĩ Focus và 1 phím
được nhấn .
Font: Font của chữ Caption
Forecolor: Màu của chữ KeyUp: Xảy ra khi
CommandButton đang
cĩ Focus và 1 phím
được thả.
Index: chỉ số đối tượng
(mảng đối tượng)
Left: Khoảng cách lề trái SetFocus: Làm cho
CommandButton nhận
Focus, và trở thành đối
tượng được chú ý bởi
Windows.
LostFocus: Xảy ra khi
mất Fucos.
Picture: hình chèn vào
Button. Chỉ cĩ tác dụng khi
Style=1
MouseDown: Xảy ra
khi nhấn mouse xuống
CommandButton.
Style:
0-Standard : mặc định.
1-Graphic: cho phép chèn
hình
MouseMove: Xảy ra
khi cĩ sự di chuyển
mouse trên
CommandButton.
Top: Khoảng cách lề trên
MouseUp: Xảy ra khi
thả mouse lên
CommandButton.
Visible: ẩn hiện đối tượng.
Width: Chiều rộng Textbox
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
40
3- PictureBox: là một điều khiển được sử dụng chứa các loại file hình tiêu chuẩn. Đặc biệt
ta cịn cĩ thể vẽ lên các Form
Biểu
tượng
Hình ảnh Properties Method Event Ghi
chú
Name: Tên đối tượng
Circle: Vẽ đường trịn
trên PictureBox.
VD: Picture1.Circle
(100,200), 50
vẽ hình trịn tâm
(100,200), bán kính 50.
Trên Picture1
Click: Xảy ra khi Click
mouse vào PictureBox.
AutoRedraw:cho phép tự
vẽ lại
true:các nét vẽ trên
PictureBox khơng mất khi
thay đổi đối tượng.
false: ngược lại
Backcolor: màu nền Cls: Xố các hình vẽ trên
PictureBox, khơng xĩa
hình nền.
DblClick: Xảy ra khi
Click đơi mouse vào
PictureBox.
BorderStyle: Viền
0: khơng viền
1: cĩ viền nổi
DrawStyle: quy định loại
nét vẽ
Move Left,Top,[Width],
[Height] : di chuyển
VD:
Picture1.Move 100, 200,
300,400
Là: Di chuyến Picture1
đến vị trí cách lề trái 100,
lề trên 200, rộng 300, cao
400
Chú ý: cĩ thể bỏ các giá
trị trong [ ] như Width
hay Height
GotFocus: Xảy ra khi
Form nhận Focus.
DrawWidth: độ lớn nét
vẽ
KeyDown: Xảy ra khi
Form đang cĩ Focus và
1 phím được nhấn
xuống.
Enable: cho phép hoặc
cấm sử dụng
(true, false)
FillColor: Màu tơ
FillStyle: Cách tơ màu.
Height: Chiều cao Refresh: làm tươi
PictureBox.
KeyPress: Xảy ra khi
PictureBox đang cĩ
Focus và 1 phím được
nhấn .
Font: Font của chữ trong
Text
Forecolor: Màu vẽ Line (x1,y1)-(x2,y2),
[color] : Vẽ đường thẳng
trong Picture từ (x1,y1)
đến (x2,y2)
KeyUp: Xảy ra khi
Form đang cĩ Focus và
1 phím được thả.
Index: chỉ số đối tượng
(mảng đối tượng)
Left: Khoảng cách lề trái Point (x,y) : lấy màu tại
điểm (x,y)
LostFocus: Xảy ra khi
mất Fucos
Picture: hình hiển thị
trong Form
MouseDown: Xảy ra
khi nhấn mouse xuống
Picture
ScaleMode: đơn vị đo MouseMove: Xảy ra
khi cĩ sự di chuyển
mouse trên Picture.
MouseUp: Xảy ra khi
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
41
Pset (x,y) , color : chấm
điểm tại (x,y)
thả mouse lên Picture .
Top: Khoảng cách lề trên
Visible: ẩn hiện đối
tượng.
SetFocus: Làm cho
PictureBox nhận Focus, và
trở thành đối tượng được
chú ý bởi Windows. Width: Chiều rộng
Textbox
4- Form: hay biểu mẫu, là đối tượng quan trọng khi viết các ứng dụng. Form được xem là
nền của giao diện, một ứng dụng phải cĩ ít nhất một Form. Cũng giống như các Đối
tượng khác, Form cũng cĩ các Properties, Method và Event riêng, tuy nhiên Form cĩ
cịn cĩ 1 đặc điểm quan trọng khác là tất cả các Đối tượng nằm trên Form được coi
là 1 thành phần của Form đĩ, như vậy cĩ thể dung dấu “.”để truy xuất các đối tượng
trên Form. Vd: trên Form1 cĩ 1 nút lệnh Command1, để đặt giá trị Left của Command1
là 100 ta sử dụng lệnh: Command1.Left=100 hay Form1.Command1.Left=100.
*Từ khố “Me”: từ khố Me được sử dụng thay cho tên 1 Form nào đĩ trong 1 câu lệnh
nếu câu lệnh được viết ngay trong Form đĩ. Ví dụ trên cĩ thể viết lại:
Me.Command1.Left=100.
Properties Method Event Ghi
chú
Name: Tên đối tượng
Circle: Vẽ đường trịn trên Form.
VD: Form1.Circle (100,200), 50
vẽ hình trịn tâm (100,200), bán
kính 50.
Trên Form1
Cls: Xố các hình vẽ trên Form,
khơng xĩa hình nền.
Move Left,Top,[Width], [Height]
: di chuyển
VD:
Form1.Move 100, 200, 300,400
Là: Di chuyến Form1 đến vị trí
cách lề trái 100, lề trên 200, rộng
300, cao 400
Chú ý: cĩ thể bỏ các giá trị trong
[ ] như Width hay Height
Load: Form được load lên.
AutoRedraw:cho phép tự vẽ lại
true:các nét vẽ trên Form khơng mất khi
thay đổi đối tượng.
false: ngược lại
Click: Xảy ra khi Click
mouse vào Form.
Backcolor: màu nền DblClick: Xảy ra khi Click
đơi mouse vào Form.
BorderStyle: Viền
0: khơng viền, khơng di chuyển, khơng
thay đổi kích thước được.
1: cĩ viền nổi,cĩ thể di chuyển nhưng
khơng thay đổi kích thước được.
2: dạng đầy đủ nhất. ( mặc định).
3,4,5…Khơng quan trọng lắm.
GotFocus: Xảy ra khi Form
nhận Focus.
Caption: Tiêu đề sẽ xuất hiện trên Form
khi Form xuất hiện.
DrawStyle: quy định loại nét vẽ
DrawStyle: quy định loại nét vẽ
Enable: cho phép hoặc cấm sử dụng
(true, false)
KeyDown: Xảy ra khi Form
đang cĩ Focus và 1 phím
được nhấn xuống.
FillColor: Màu tơ khi vẽ
FillStyle: Cách tơ màu.
Font: Font của chữ trong Text
Forecolor: Màu nét vẽ Line (x1,y1)-(x2,y2), [color] : Vẽ
đường thẳng trong Form từ (x1,y1)
KeyPress: Xảy ra khi Form
đang cĩ Focus và 1 phím
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
42
đến (x2,y2)
được nhấn .
Refresh: làm tươi Form.
Height: Chiều cao Point (x,y) : lấy màu tại điểm (x,y)
Icon: biểu tượng của Form khi xuất hiện. Pset (x,y) , color : chấm điểm tại
(x,y)
KeyUp: Xảy ra khi Form
đang cĩ Focus và 1 phím
được thả.
Index: chỉ số đối tượng (mảng đối
tượng)
SetFocus: Làm cho Form nhận
Focus, và trở thành đối tượng được
chú ý bởi Windows.
Left: Khoảng cách lề trái LostFocus: Xảy ra khi mất
Fucos
MaxButton: cho phép hoặc cấm nút
lệnh phĩng to Form
MouseDown: Xảy ra khi
nhấn mouse xuống Form.
MiDiChild:
True: Form là một Form con
Flase: Form là một Form độc lập.
MouseMove: Xảy ra khi cĩ
sự di chuyển mouse trên
Form.
MouseUp: Xảy ra khi thả
mouse lên Form.
Picture: hình nền trên Form Unload: Khi Form được tắt.
Top: Khoảng cách lề trên
Visible: ẩn hiện đối tượng.
Width: Chiều rộng Textbox
…
…
Ngồi ra cịn rất nhiều Control khác thường được sử dụng khi thiết kế các ứng dụng với
VB như
· Image: cũng được sử dụng hiển thị hình ảnh như Form nhưng khơng thể vẽ
được lên đối tượng này. Đặc biệt kích thước hình ảnh chèn vào cĩ thể thay đổi
theo kích thước của đối tượng Image nếu thuộc tính Stretch=true.
· Label: thường được sử dụng làm các nhãn, các đề tựa
· Check box: mang hai giá trị true hoặc false khi control này được đánh dấu chọn
hoặc khơng chọn.
· OptionButton: Nút lựa chọn
· ComboBox: danh sách các lựa chọn dạng xổ xuống.
· ListBox: cũng chứa danh sách các lựa chọn nhưng dạng khung
· Frame: khung bao cho một nhĩm control cĩ đặc điểm chung nào đĩ.
· HScrollbar: thanh trượt ngang.
· VScrollbar: thanh trượt đứng.
· Nhĩm DriveListBox, DirListBox, FileListBox: sử dụng truy xuất đến các
đườngdẫn trên đĩa.
· Timer: là bộ định thì, thời gian định thì chứa trong Properties Interval
· …
Các Properties, Method, Event của các Control trên sẽ được giới thiệu trong từng các ví dụ
cĩ liên quan.
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
43
PHỤ LỤC 2: MỘT SỐ HÀM VÀ TỐN TỬ CƠ BẢN
Ø Một số hàm thơng dụng:
Hàm, tốn tử Chức năng, kết quả Ví dụ:
Abs (x) Tính giá trị tuyệt đối của
x
X=-5
A=abs(x), khi đĩ A=5
Atn(x) Tính Arctang của x A=Atn(1), khi đĩ A= p/4
Cos(x) Tính Cosin của x A=cos(p/3); Kết quả A=1/2
Date Cho biết tháng, ngày,
năm hiện tại.
A=Date; KQ: A=5/16/2005
Dir(Pathname) Trả ra tên File nếu nĩ tồn
tại
MyFile=Dir("C:\WINDOWS\WIN.INI")
KQ: MyFile=WIN.INI
DoEvents( ) Nhường cho Event khác
được thực thi.
Xem các ví dụ cĩ sử dụng vĩng lặp
Do..Loop
Exp(x) Hàm e mũ x A=Exp(2), KQ: A=e2
FileLen(pathname) Tính chiều dài dài File
FormatNumber Định dạng cho số A = FormatNumber(1.545,1),KQ: A=1.5
FreeFile Trả ra 1 con số dùng làm
FileHandle
Xem các ví dụ xử lí File
Hex(number) Đổi sang số Hexa (16) x=Hex(11), KQ: x=B
Hour(time) Trả ra thành phần Giờ
trong hệ thống Giờ: Phút:
Giây
MyTime = #4:35:17 PM#
MyHour = Hour(MyTime)
KQ: MyHour=16
IIf(đkiện, đúng, sai) Tốn tử rẽ nhánh 3 ngơi A=IIf(10>0,1,0); KQ: A=1 vì 10>0
LBound Trả ra số nhỏ nhất trong
mảng
Dim MyArray(1 To 10, 5 To 15, 10 To 20)
Lower = Lbound(MyArray, 1); KQ: 1
Left(string, length) Trích các phần tử của 1
chuỗi từ lề trái.
Dim AnyString, MyStr
AnyString = "Hello World" .
MyStr = Left(AnyString, 2);KQ: "He".
Len Tính chiều dài chuỗi X=Len(“GiaoTrinhVB”); KQ:X=11
Fix(number) Làm trịn hướng về 0 MyNumber = Fix(99.9) ; KQ:99
MyNumber = Fix(-99.9) ; KQ:-99
Int(number) Làm trịn thành số nhỏ
hơn.
MyNumber = Int(99.9) ; KQ:99
MyNumber = Int(-99.9) ; KQ:-100
Mid Trích các phần tử của 1
chuỗi từ vị trí chỉ định .
X=Mid(“GiaoTrinhVB”,2,3); KQ: X=“iao”
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
44
Minute(time) Trả ra thành phần Phút
trong hệ thống Giờ: Phút:
Giây
MyTime = #4:35:17 PM#
MyMinute = Minute(MyTime)
KQ: MyMinute=35
Month(date) Trả ra thành phần tháng
trong hệ thống tháng:
Ngày:Năm.
Dim MyDate, MyMonth
MyDate = #February 12, 1969#
MyMonth = Month(MyDate); KQ: 2
MsgBox Xuất hiện hộp thoại thơng
báo.
MsgBox(“Xin Chao”,VBOkOnly,”Vidu”)
Now Ngày giờ hệ thống
Oct(number) Đổi sang số Octan (8) x=Oct(9), KQ: x=11
QBColor(Number)
Number:0-15
16 màu cơ bản Picture1.BackColor=QBColor(12)
KQ: Picture1 cĩ màu nền đỏ.
RGB(r,g,b)
r,g,b:0-255
Hệ thống màu
Red,Green,Blue
Picture1.BackColor=RGB(255,0,0)
KQ: Picture1 cĩ màu nền đỏ.
Right(string, length) Trích các phần tử của 1
chuỗi từ lề phải.
Dim Chuoi, tr
Chuoi = "Hello World" .
tr = Right(Chuoi, 2);KQ: "ld".
Rnd[(Number)] Cho số ngẫu nhiên: 0-1
Round(Num,[Aux]) Làm trịn tự nhiên Round(1.5216); KQ: 2
Round(1.515645,3); KQ: 1.516
Second(time) Trả ra thành phần Giây
trong hệ thống Giờ: Phút:
Giây
MyTime = #4:35:17 PM#
MySecond = Second(MyTime)
KQ: MySecond=17
Sgn(number) Xét dấu của 1 số Sgn(2.15), KQ: 1
Sgn(-2),KQ: -1
Shell(pathname) thực thi một chương trình
EXE
RetVal =
Shell("C:\WINDOWS\CALC.EXE", 1) “
Chạy chương trình Calculator.
Sin(x) Tính sin của x A=cos(p/6); Kết quả A=1/2
Space(number) Tạo 1 chuỗi với nhiều
khoảng trắng.
A=Space(5), KQ: A=“ “
Sqr(Number) Tính căn bậc 2 A=Sqr(4); KQ: A=2
Str(Number) Đổi số ra chuỗi A=Str(122); KQ: A=“122”
Tan(Angle) Tính tang 1 gĩc
Time, Timer,
TimeSerial,
TimeValue
Các hàm thời gian
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
45
UBound(Array) Tính kích thước Mảng Dim Mang(1 to 10), A
A=UBound(Mang), KQ : A=10
Ucase(String) Đổi sang chữ in Hoa X=Ucase(“abc”); KQ: X=“ABC”
Val(String) Đổi chuỗi sang số X=Val(“123”); KQ: X=123
Weekday(Date) Tìm ngày trong tuần Dim MyDate, MyWeekDay
MyDate = #February 12, 1969# “
MyWeekDay = Weekday(MyDate) “ KQ:
4 vì ngày đĩ là thứ tư.
Year(date) Trả ra thành phần năm
trong hệ thống tháng:
Ngày:Năm.
Dim MyDate, MyYear
MyDate = #February 12, 1969#
MyYear = Month(MyDate); KQ: 1969
& (số & số) Logic And 15&10=10
+,-,*,/ Tốn tử tốn học
And, Or, Xor, Not Tốn tử Logic điều kiện (10>1) and (1<0) : KQ: False
True and False
\ Chia lấy phần nguyên 12\5=2
Mod Chia lấy phần dư 12 Mod 5 =2
= Tốn tử gán hoặc so sánh.
>,>=,<,<= Tốn tử so sánh
End Kết thúc chương trình
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
46
PHỤ LỤC 3: SỬ DỤNG TIỀN TỐ KHI ĐẶT TÊN ĐỐI TƯỢNG
Đối tượng (Object) Tiền tố (Prefix) Ví dụ (Example)
--------------------------------------------------------------------------
Form frm frmFileOpen
Check box chk ReadOnly
Combo box cbo cboEnglish
Data-bound combo box dbc dbcEnglish
Command button cmd cmdCancel
Data dat datBiblio
Directory list box dir dirSource
Drive list box drv drvTarget
File list box fil filSource
Frame fra fraLanguage
Grid grd grdPrices
Data-bound grid dbg dbgPrices
Horizontal scroll bar hsb hsbVolume
Image img imgIcon
Label lbl lblHelpMessage
Line lin linVertical
List box lst lstPolicyCodes
Data-bound list box dbl dblPolicyCode
Menu mnu mnuFileOpen
OLE container ole oleObject1
Option button opt optFrench
Picture box pic picDiskSpace
Shape shp shpCircle
Text box txt txtGetText
Timer tmr tmrAlarm
Đối tượng (Object) Tiền tố (Prefix) Ví dụ (Example)
------------------------------------------------------------------------
Vertical scroll bar vsb vsbRate
Animation button ani aniMailBox
bed Pen Bedit bedFirstName
Checkbox chk chkReadOnly
Picture clip clp clpToolbar
Communications com comFax
Control ctl ctrCurrent
Data control dat datBiblioDirectory
Directory list box dir dirSource
Common dialog ctrl dlg dlgFileOpen
Drive list box drv drvTarget
File list box fil filSource
Form frm frmEntry
Frame (3d) fra fraStyle
Gauge gau gauStatus
Group push button gpb gpbChannel
Graph gra graRevenue
Grid grd grdPrices
Pen Hedit hed hedSignature
Horizontalscrollbar hsb hsbVolume
Image img imgIcon
Pen Ink ink inkMap
Keyboard key status key keyCaps
Label lbl lblHelpMessage
Line lin linVertical
MDI child form mdi mdiNote
MAPI message mpm mpmSentMessage
MAPI session mps mpsSession
MCI mci mciVideo
Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Hồ Thanh Tâm
Lê Văn Bạn
ĐH Nông Lâm TP.HCM
BM: Điều khiển Tự động
47
Menu mnu mnuFileOpen
Object obj objUserTable
Option Button (3d) opt optRed
Outline control out outOrgChart
3d Panel pnl (3d) pnlTitleList
Report control rpt rptQtr1Earnings
Shape controls shp shpCircle
Spin control spn spnPages
Timer tmr tmrAlarm
Vertical scroll bar vsb vsbRate
Các file đính kèm theo tài liệu này:
- Unlock-Lập trình giao tiếp máy tính bằng Visual Basic.pdf