Lập trình giao tiếp máy tính bằng Visual Basic - Lập trình Visual Basic

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.

pdf47 trang | Chia sẻ: aloso | Lượt xem: 6327 | Lượt tải: 1download
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:

  • pdfUnlock-Lập trình giao tiếp máy tính bằng Visual Basic.pdf