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

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: 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 PHẦN 1: LẬP TRÌNH VISUAL BASIC: Thoả thuận: tài liệu này thuộc quyền sở hữu của tác giả, bạn có thể tự do tham khảo tài liệu nhưng không được phép sử dụng để in thành sách báo, đăng lên các diễn đàn hay website, nhưng bạn có thể dùng đường link http://www.dieukhientudong.net để hướng tới tài liệu. Liên hệ tác giả qua email: [email protected] A. CƠ SỞ LẬP TRÌNH VISUAL BASIC 1. Giới thiệu Visual Basic. Visual Basic là một ngôn ngữ lập trình cấp cao 32 bit được sử dụng để viết các chương trình chạy trong môi trường Windows. Visual Basic sử dụng kiểu lập trình Visual hay RAD( Rapid Application Development) trong đó việc tạo các cửa sổ, các Điều khiển và cách ứng xử của các cửa sổ cũng như các Điều khiển được thực hiện một cách dễ dàng nhanh chóng chỉ bằng các thao tác với mouse không cần phải khai báo, tính toán với nhiều câu lệnh phức tạp. Visual Basic là một ngôn ngữ lập trình theo kiểu hướng đối tượng. Nó khác với kiểu lập trình cũ là kiểu Top Down. Lập trình Top Down: chương trình được bố trí và thực thi từ trên xuống. Với kiểu lập trình này, việc bố trí sẽ trở nên rất khó khăn đối với các chương trình lớn. Lập trình hướng đối tượng OOP (object-oriented programming): Các thành phần được phân thành các đối tượng (Object) và viết cách ứng xử riêng cho mỗi đối tượng sau đó kết hợp chúng lại tạo thành chương trình. 2. Bắt đầu với Visual Basic (VB) 2.1 Khởi động VB: Sau khi khởi động VB, một hộp thoại (Dialog) “New Project” xuất hiện cho phép lựa chọn 1 trong các loại ứng dụng mà bạn muốn tạo. VB6 cho phép tạo 13 loại ứng dụng khác nhau ở Tab “New”, tuy nhiên ở mức độ căn bản và thông thường, Standard EXE (một loại chương trình tự chạy tiêu chuẩn) sẽ được chọn. Hình 1: Dialog lựa chọn ứng dụng ÑH Noâng Laâm TP.HCM BM: Ñieàu khieån Töï ñoäng 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 2.2 Giao diện Visual Basic Hình 2: giao diện Visual Basic Giao diện cơ bản của VB bao gồm các thành phần sau: • MenuBar: các trình đơn của VB. • Toolbar: một số chức năng cơ bản của chương trình. • Toolbox: chứa các Điều khiển (Control) thông dụng. • Project Explorer: hiển thị các thành phần của ứng dụng đang thực hiện. • Properties Window: Cửa sổ hiển thị các đặc tính (Properties) thiết kế của các Điều khiển. • Form Layout Window: xem trước hoặc thay đổi vị trí Form khi thực thi ứng dụng. • Workspace: vùng làm việc của chương trình… • Ngoài ra giao diện VB còn chứa rất nhiều các thành phần khác. Để hiển thị thành phần nào bạn chọn trình đơn “View” và click chọn thành phần bạn muốn hiển thị. Tuy nhiên, với những thành phần được giới thiệu trên đã đủ để giúp bạn xây dựng các ứng dụng của VB. Các thành phần trên sẽ được giới thiệu đầy đủ hơn trong các phần sau của tài liệu này. Chú ý: Do VB là một ngôn ngữ lập trình theo kiểu hướng đối tượng (tuy chưa thật sự đầy đủ ý nghĩa), vì vậy để có thể làm việc với VB trước hết bạn phải biết cơ bản về khái niệm “Đối tượng”-Object. 3. Lập trình hướng đối tượng trong Visual Basic. Lập trình hướng đối tượng là một khái niệm khó. Tuy nhiên với mức độ trung bình ta chỉ cần hiểu các thành phần cơ bản nhất của khái niệm này nhằm giúp ta xây dựng được các ứng dụng trong VB. ÑH Noâng Laâm TP.HCM BM: Ñieàu khieån Töï ñoäng 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 Giới thiệu đối tượng. Đối tượng (Object) là một vật thực hữu, mỗi đối tượng có 1 tên gọi riêng.Ví dụ “Cat “ là một đối tượng, nó thuộc lớp mèo ( khái niệm lớp-Class ở đây không được đề cập). Mỗi đối tượng có các thuộc tính (Properties), Các hoạt động hay Phương thức (Method) và các ứng xử hay sự kiện (Event). Ví dụ “Chân”, “mắt”, “màulông”,… là các Properties của Cat, còn khả năng chạy, nhảy…là các Method của Cat, “Khát nước” là một Event của Cat. Truy xuất các đối tượng. Truy xuất đối tượng là việc đọc (GET), và đặt (SET) các Properties của đối tượng hay gọi các Method của đối tượng. Cú pháp: Tên Đối tượng.Properties hoặc Đối tượng.Method Ví dụ bạn muốn biết màu lông của Cat, bạn dùng: Biến=Cat.màulông, nghĩa là màu lông của Cat đã được gán cho Biến, giá trị của Biến cũng chính là giá trị của màu lông. Bây giờ nếu bạn muốn Cat phải chạy, bạn gọi: Cat.chạy vì “chạy” là một Method của Cat. Như vậy có thể hiểu Method là các mệnh lệnh mà đối tượng có khả năng thực hiện khi được yêu cầu. Khác với các Properties ta chỉ có thể gọi các Method lúc chương trình đang thực thi (Runtime). Riêng Event là các sự kiện xảy ra đối với đối tượng và các đáp ứng của đối tượng đối với sự kiện đó, các đáp ứng chính là code được người lập trình viết, đó cũng chính là nội dung quan trọng nhất khi lập trình. Phần này được sẽ được trình bày cụ thể trong các ví dụ thiết kế ứng dụng. 4. Giới thiệu các Điều khiển (Control): Các Điều khiển trong VB là một dạng của Đối tượng, Đó là những công cụ có sẵn giúp cho việc tạo giao diện của ứng dụng trở nên dễ dàng và nhanh chóng hơn, đây chính là đặc trưng của kiểu lập trình VISUAL hay RAD đã được đề cập ở trên. Các Điều khiển cũng bao gồm các thành phần của Đối tượng. Vì vậy, từ bây giờ khái niệm Điều khiển có thể hiểu đồng nhất với Đối tượng. VB6 cung cấp 21 intrinsic Control (Điều khiển cơ bản). Phần giới thiệu những Control thông dụng nhất khi sử dụng VB bạn có thể tìm thấy trong Phụ Lục 1. 5. Cơ sở lập trình. Cấu trúc một chương trình trong VB: Private/Public Function/Sub TenChuongTrinh/TenEvent(Biến tham chiếu, tham trị) Dim [Biến1] as Kiểubiến1 Dim [Biến2] as Kiểubiến2 … Lệnh 1 Lệnh 2 …. Lệnh n End sub 5.1 Biến: Được dùng để lưu trữ tạm thời các giá trị trong quá trình tính toán của chương trình. Giá trị mà ta lưu trữ trong biến có thể là những số nguyên, số thực, hay con chữ cái..mà ta gọi là kiểu biến. Vì là thành phần lưu trữ tạm thời nên biến sẽ tự động mất đi khi kết thúc chương trình hay thậm chí khi kết thúc một câu lệnh. Trong VB, biến được khai báo theo cấu trúc: Dim TênBiến as KiểuBiến. • Tên Biến phải: Ø Dài không quá 255 ký tự Ø Phải bắt đầu bằng chữ cái. Ø Không có khoảng trắng hay ký hiệu +,-,*,/… trong tên biến. Ø Không được trùng với từ khoá (keywords)của VB Ø Không nên đặt tên trùng nhau. Ø Có sự phân biệt giữa chữ viết HOA và chữ viết thường. ÑH Noâng Laâm TP.HCM BM: Ñieàu khieån Töï ñoäng 3 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 Kiểu biến: Có một số kiểu biến hợp lệ được sử dụng trong VB như sau: Kiểu biến Kích thước biến Khoảng giá trị Byte 1 byte 0 to 255 Boolean 2 bytes True or False Integer 2 bytes -32,768 to 32,767 Long (long integer) 4 bytes -2,147,483,648 to 2,147,483,647 Single (single-precision floating-point) 4 bytes -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values Double (double-precision floating-point) 8 bytes -1.79769313486231E308 to -4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values Currency (scaled integer) 8 bytes -922,337,203,685,477.5808 922,337,203,685,477.5807 Decimal 14 bytes +/-79,228,162,514,264,337,593,543,950,335 with no decimal point; +/-7.9228162514264337593543950335 with 28 places to the right of the decimal; smallest non-zero number is +/-0.0000000000000000000000000001 Date 8 bytes January 1, 100 to December 31, 9999 Object 4 bytes Any Object reference String (variable-length) 10 bytes length String (fixed-length) Length of string 1 to approximately 65,400 Variant (with numbers) 16 bytes Any numeric value up to the range of a Double Variant (with characters) 22 bytes length User-defined tuỳ theo (using Type) riêng. Kiểu dữ liệu do người dùng quy định. + + quy to string 0 to approximately 2 billion string Same range as for variable-length String định Phụ thuộc vào khoảng giá trị của kiểu dữ liệu được sử dụng. Chú ý: o Biến phải đươc sử dụng đúng kiểu và đúng khoảng giá trị. VD: Dim x as integer, nếu gán x=“abc” sẽ xuất hiện lỗi vì x đã được khai báo là một số nguyên nên không thể gán cho các ký tự. ÑH Noâng Laâm TP.HCM BM: Ñieàu khieån Töï ñoäng 4 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 o Trong VB, biến có thể được khai báo như sau: Dim TenBien, tức không cần khai báo Kiểu biến, hoặc Dim TenBien as Variant khi đó kiểu biến là Variant tức tuỳ ý. VD: Dim x hay Dim x as Variant khi đó ta có thể gán x=1 hay x=“abc”…vì ở đây x không có kiểu biến nhất định nên trình dịch tự hiểu kiểu của x khi nó được sử dụng. o Trong VB, một biến có thể được sử dụng mà không cần khai báo trước, tuy nhiên để tránh gặp lỗi khi lặp trình nên khai báo đầy đủ biến trước khi sử dụng. Tốt nhất nên sử dụng từ khoá Option Explicit ở đầu chương trình.(Xem trong các ví dụ ở phần sau). Giới hạn sử dụng: nếu biến khai báo bên trong 1 đoạn chương trình với từ khoá Dim phía trước, biến đó chỉ có tác dụng bên trong đoạn chương trình đó, biến như vậy gọi là biến cục bộ(Local). Ngược lại nếu được khai báo trong phần General với từ khoá Public thay cho Dim, biến sẽ có tác dụng trong toàn khối chương trình ta gọi là biến toàn cục(Global). Nếu 1 biến toàn cục và 1 biến cục bộ trùng tên thì biến có tác dụng là biến cục bộ. 5.2 Hàm và toán tử nội là một số hàm và toán tử được hỗ trợ sẵn bởi VB: Xem Phụ Lục 2 5.3 Các cấu trúc điều khiển a. Do…Loop: là một vòng lặp vô tận. các câu lệnh bên trong Do…Loop sẽ được thực hiện lặp đi lặp lại mãi cho đến khi gặp lệnh Exit Do. Do [DoEvents] Các câu lệnh Loop Để tránh bị treo máy do rơi váo vòng lặp vô tận, có thể sử dụng Doevents b. Do While “điều kiện” …Loop: Trong khi “điều kiện” còn đúng thì còn thực hiện các câu lệnh bên trong Do và Loop Do While ” điều kiện” [Các câu lệnh] [Các câu lệnh] Loop VD: Dim Num Num=0 Do While Num<10 Msgbox “Xin Chao lan: ”+str(Num),VBOKOnly,”DoLoop” Num=Num+1 Loop Kq: Hộp thoại sẽ xuất hiện 10 lần cho đến khi nào giá trị cúa Num>=10 thì thôi. c. Do Until “điều kiện”…Loop”: Thực hiện các câu lệnh bên trong cho đến khi “điều kiện” đã thỏa thì dừng. Do Until ” điều kiện” [Các câu lệnh] [Các câu lệnh] Loop Chú ý: Ta có thể nhận thấy sự khác biệt cơ bản giữa Do While và Do Until là ở chổ: trong khi “điều kiện” trong Do While là điều kiện để thực hiện chương trình thì “điều kiện “ trong Do Until lại là điều kiện để dừng chương trình. ÑH Noâng Laâm TP.HCM BM: Ñieàu khieån Töï ñoäng 5 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 d. Các Vòng lặp Do…Loop khác: Do [các câu lệnh] [Exit Do] [Các câu lệnh] Loop [{While | Until} “điều kiện” ] Cấu trúc này cũng giống như 2 cấu trúc trên tuy nhiên sự khác biệt là ở đây các câu lệnh thực hiện trước khi kiểm tra “điều kiện”, nghĩa là luôn có ít nhất một lần các câu lệnh được thực hiện bất chấp điều kiện đúng hay sai. Chú ý: Trong các vòng lặp Do…Loop, để thoát khỏi vòng lặp ta cò thể sử dụng câu lệnh Exit Do. e. Vòng lặp For…Next: Lặp lại một quá trình nào đó theo một số lần đã được chỉ định. For counter = start To end [Step step] [các câu lệnh] Next [counter] VD: Dim i For i=1 to 10 Step 1 MsgBox “Xin Chao lan:”+str(i),VBOKOnly,”ForNext” Next i Kq: Hộp thoại sẽ xuất hiện 10 lần cho đến khi nào giá trị cúa i=10 thì thôi. Chú ý : có thể sử dụng câu lệnh Exit For để thoát khỏi vòng lặp For…Next f. Câu lệnh rẽ nhánh If…then…Else: Nếu điều kiện đúng thì thực hiện các câu lệnh theo sau Then, nếu không sẽ thực hiện các câu lệnh theo sau Else. If “điều kiện” Then [các câu lệnh] [Else các câu lệnh khác] hoặc If “điều kiện” Then [các câu lệnh] Else [các câu lệnh khác] End if VD: Dim x as Single ‘ khai báo biến x với kiểu là Single x=Rnd(1)*10 ‘ cho x một giá trị ngẫu nhiên từ 0-10, hàm Rnd(1) trả ra một ‘giá trị ngẫu nhiên từ 0 đến 1. If X>5 then MsgBox “So Lon”,VBOKOnly,”IfThen” Else MsgBox “So nho”,VBOKOnly,”IfThen” g. Sử dụng Elseif: Đây là dạng điều kiện lồng trong điều kiện. If điều kiện Then [các câu lệnh] ….. [ElseIf điều kiện-n Then [các câu lệnh elseif] ... [Else [các câu lệnh khác ]] End If h. Cấu trúc Select case: Cũng là một cấu trúc rẽ nhánh sử dụng như là một kiểu lựa chọn. Select Case tên biến [Case giá trị-n [các câu lệnh-n]] ... [Case Else [các câu lệnh khác]] End Select ÑH Noâng Laâm TP.HCM BM: Ñieàu khieån Töï ñoäng 6 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 VD: Dim i i=Rnd(1)*3 Select case i Case 0 : MsgBox “So 0”,VBOKOnly,”SelectCase” Case 1 : MsgBox “So 1”,VBOKOnly,”SelectCase” Case 2 : MsgBox “So 2”,VBOKOnly,”SelectCase” Case 3 : MsgBox “So 3”,VBOKOnly,”SelectCase” End Select i. With Đối tượng: khi muốn truy xuất cùng lúc nhiều Properties của 1 đối tượng, người ta sử dụng With đối tượng: VD: Ví dụ sau thay đổi cùng lúc các thuộc tính Border, Alignment, Font, BackColor…của một đối tượng TextBox tên là Text1. With Text1 .BorderStyle=1 .Alignment=2 .BackColor=QBColor(12) .Font=”VNI-Times” End With j. Bẫy lỗi (Error trapping): bẫy lỗi là việc đoán trước các lỗi có thể xẩy ra để hướng chương trình vào một lối khác, có thể tránh được lỗi đó. On Error Goto Line: Nếu có lỗi sẽ nhảy đến dòng Line ngay trong đoạn chương trình. VD: On Error Goto Loi Open "TESTFILE" For Output As #1 [các câu lệnh khác ] Loi: [các câu lệnh xử lí lỗi] On Error Resume Next: Nếu có lỗi thì bỏ qua, nhảy đến câu lệnh tiếp theo sau. Dùng câu lệnh này thường không giải quyết lỗi triệt để, dễ làm nảy sinh lỗi liên hoàn rất khó xử lí. Khi có lỗi xảy ra, giá trị nhận dạng lỗi sẽ được lưu tự động vào biến “Err”, như vậy để nhận dạng lỗi và tìm ra cách giải quyết thích hợp chỉ cần tham khảo biến “Err”. B. VÍ DỤ LẬP TRÌNH Ví dụ này hướng dẫn sử dụng các đối tượng cơ bản trong VB như : CommandButton, TextBox, Label. - Khởi động VB, ở hộp thoại “New Project” chọn “standard EXE”, nhấn “Open”. - Một Project mới được tạo thành có tên “Project1”, chứa một Form tên “Form1”. Trong trình đơn File, chọn “Save Project”, hộp thoại “Save File as” xuất hiện,bạn hãy chọn nơi lưu Project cho mình, sau đó đặt tên Form là FormVD1, tên Project là VD1. Project đã được lưu. - Tạo 2 Frame bằng cách chọn và kéo, trong cửa số “Properties” đặt thuộc tính name của chúng lần lượt là FraHello, FraCal và đặt Caption là: Hello, Calculate. - Các control còn lại được tạo ra theo bảng tóm tắt sau: Control Thuộc tính Giá trị CommandButton Name cmdShow Caption &Show Vị trí bên trong FraHello CommandButton Name cmdClear Caption &Clear Vị trí bên trong FraHello TextBox Name TxtHello Alignment 3-Center Font Times New Roman • Tên Font ÑH Noâng Laâm TP.HCM BM: Ñieàu khieån Töï ñoäng 7 Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: • • Frame CheckBox CheckBox CheckBox CheckBox OptionButton OptionButton OptionButton OptionButton Frame TextBox TextBox TextBox Lock Text Vị trí Name Caption Vị trí Name Caption Value Vị trí Name Caption Value Vị trí Name Caption Value Vị trí Name Caption Value Vị trí Name Caption Value Vị trí Name Caption Value Vị trí Name Caption Value Vị trí Name Caption Value Vị trí Name Caption Vị trí Name Alignment Text Vị trí Name Alignment Text Vị trí Name Style Size Hồ Thanh Tâm Lê V ăn Bạn Bold 48 True bỏ trống Bên trong FraHello FraStyle Select Style Bên trong FraHello ChkBor Border 1-Checked Bên trong FraStyle ChkLock Lock 1-Checked Bên trong FraStyle ChkEn Enable 1-Checked Bên trong FraStyle ChkVi Visible 1-Checked Bên trong FraStyle OptRed Red Flase Bên trong FraColor OptGreen Green Flase Bên trong FraColor OptNBlue Blue Flase Bên trong FraColor OptBlack Black True Bên trong FraColor FraColor Select Color Bên trong FraHello TxtNum1 3-Center 0 Bên trong FraCal TxtNum2 3-Center 0 Bên trong FraCal TxtSum ÑH Noâng Laâm TP.HCM BM: Ñieàu khieån Töï ñoäng 8 Lập trình giao tiếp máy tính bằng Visual Basic CommandButton Label Label CommandButton - - Alignment Lock Text Vị trí Name Caption Vị trí Name Caption vị trí Name Caption vị trí Name Caption Vị trí Biên soạn: Hồ Thanh Tâm Lê V ăn Bạn 3-Center true 0 Bên trong FraCal cmdCal &Calculate bên trong FraCal LblPlus + bên trong FraCal LblEqu = bên trong FraCal cmdExit E&xit bên ngoài Form Hình 3: biểu tượng các Control và giao diện VD1 Hoạt động của chương trình VD1: Bạn nhấn nút lệnh “Show”, một dòng chữ “Hello” xuất hiện trên TextBox txtHello, nút lệnh “Clear” dùng xoá các dòng chữ trên txtHello. Bạn thử click vào TextBox, đánh thử bất kỳ kí tự nào, bạn thấy không hề có tác dụng, đó là vì thuộc tính Lock của TextBox đã được đặt là True trong lúc thiết kế giao diện, thuộc tính này quy định TextBox là “ReadOnly” tc không thay đổi được nội dung của TextBox. Bỏ chọn CheckBox chkLock, thử đánh bất kỳ kí tự nào vào TextBox, lúc này đã có tác dụng. Ta thử tương tự cho các CheckBox còn lại dể xem kết quả. Click chọn lần lượt vào các OptionButton Red, Green, Blue, Black bạn sẽ thấy màu chữ ở TextBox sẽ lần lượt thay đổi từ Red->Green->Blue và cuối cùng là Black. ÑH Noâng Laâm TP.HCM BM: Ñieàu khieån Töï ñoäng 9 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 - Nhập số vào các TextBox TxtNum1, TxtNum2, nhấn nút lệnh Calculate, chương trình sẽ thực hiện cộng 2 số đó và kết quả hiển thị ở TextBox TxtSum. Nút lệnh Exit dùng để thoát khỏi chương trình. Viết lệnh cho các biến cố (Events) Double Click vào nút lệnh Exit, theo mặc định, Biến cố Click sẽ xuất hiện, bạn viết dòng lệnh sau: Private Sub cmdExit_Click() End ‘ Kết thúc chương trình End Sub - Tương tự viết lệnh cho các biến cố của các 2 nút lệnh “Show” và “Clear” như sau: Private Sub cmdShow_Click() txtHello.Text = "Hello" ‘ khi nút lệnh “Show” được Click, gán nội dung thuộc tính Text của TextBox là “ Hello” End Sub Private Sub cmdClear_Click() txtHello.Text = "" ‘ Xoá hết nội dung trên TextBox End Sub Viết lệnh cho các CheckBox chọn Style: Private Sub ChkBor_Click() txtHello.BorderStyle = ChkBor.Value ‘ khi CheckBox chkBor được Click, thuộc ‘tính BorderStyle của TextBox được gán bằng giá trị của chkBor, chkbor có 2 giá ‘trị là 0: khi không có dấu kiểm và 1:khi có dấu kiểm tương ứng với đó, TxtHello sẽ ‘có viền ngoài hay không. End Sub Private Sub ChkEn_Click() If ChkEn.Value = 0 Then txtHello.Enabled = False Else txtHello.Enabled = True End Sub Private Sub ChkLock_Click() If ChkLock.Value = 0 Then txtHello.Locked = False If ChkLock.Value = 1 Then txtHello.Locked = True End Sub Private Sub ChkVi_Click() If ChkVi = 0 Then txtHello.Visible = False Else txtHello.Visible = True End If End Sub ÑH Noâng Laâm TP.HCM 10 BM: Ñieàu khieån Töï ñoäng 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 Viết lệnh cho các CheckBox chọn màu : Private Sub OptBlack_Click() txtHello.ForeColor = vbBlack ‘Khi bạn Click chọn vào OptionButton này,bạn sẽ đặt thuộc tính màu chữ của TexbBox là màu đen, ‘ở đây vbBlack là một hằng số mặc định của VB, trình dịch sẽ tự hiểu đó là máu ‘đen. Tương tự bạn cũng có thể dùng các hằng số màu khác được hỗ trợ sẵn như: ‘vbRed, vbGreen, vbBlue, vbWhite… End Sub Private Sub OptBlue_Click() txtHello.ForeColor = vbBlue End Sub Private Sub OptGreen_Click() txtHello.ForeColor = RGB(0, 255, 0) ‘các tham số của Hàm RGB đã được giới thiệu trong phụ lục End Sub Private Sub OptRed_Click() txtHello.ForeColor = QBColor(12) ‘Hàm QBColor cũng trả ra một màu, các giá trị ‘màu có thể xem ở bảng dưới End Sub Bảng màu tương ứng của hàm QBColor Number Color Number Color 0 Black 8 Gray 1 Blue 9 Light Blue 2 Green 10 Light Green 3 Cyan 11 Light Cyan 4 Red 12 Light Red 5 Magenta 13 Light Magenta 6 Yellow 14 Light Yellow 7 White 15 Bright White Viết lệnh cho nút lệnh Calculate Private Sub cmdCal_Click() Dim x As Double, y As Double, z As Double ‘ Khai báo x, y, z là các biến tạm, kiểu biến là Double x = Val(TxtNum1.Text) ‘ hàm Val(TxtNum1.Text) Đổi nội dung của TextBox ‘TxtNum1 thành số rồi gán cho x, ta phải dùng hàm Val để đổi thành số vì bản thân ‘thuộc tính “Text” có kiểu dữ liệu là String (chuỗi), không thể thực hiện các pháp ‘toán học trên String. y = Val(TxtNum2.Text) z = x + y ‘Thực hiện phép cộng 2 số x và y, kết quả lưu váo biến z TxtSum = Str(z) ‘Đổi z ra chuỗi (String) và gán lại cho thuộc tính Text của ‘TxtSum, ở đây chúng tôi viết TxtSum=Str(z) thực chất phải là ‘TxtSum.Text=Str(z), bởi vì theo mặc định, trình dịch sẽ hiểu TxtSum là ‘txtSum.Text, những thuộc tình như vậy gọi là thuộc tính Default. End Sub ÑH Noâng Laâm TP.HCM 11 BM: Ñieàu khieån Töï ñoäng 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 PHẦN 2: CÁC PHƯƠNG PHÁP GIAO TIẾP MÁY TÍNH * Giao tiếp qua Slot Khi một máy tính được tung ra thị trường thì cả nhà sản xuất và người tiêu dùng đều ngầm hiểu là cấu hình máy tính chưa hoàn chỉnh, mà tùy vào từng mục đích sử dụng có thể ghép nối thêm vào các thiết bị khác để mở rộng khả năng đáp ứng của máy tính. Bên trong máy,tính ngoài các rãnh cắm dùng cho card vào/ra (In/Out), card màn hình, vẫn còn những rãnh cắm để trống. Các rãnh cắm này được dùng khi cần nối các bản mạch cắm thêm vào máy tính PC. Mỗi Slot đều có riêng các đường dữ liệu (data), có các đường địa chỉ, các nguồn cung cấp ± 5V, ± 12V, GND và các đường điều khiển như là CLK, IQR,… Vì vậy nếu chúng ta giao tiếp qua Slot sẽ giảm được nhiều linh kiện, như giảm được bộ nguồn bên ngoài, dễ điều khiển và do đó giảm được giá thành của mạch giao tiếp. Đây là một ưu điểm của phương pháp giao tiếp này. Ngoài ra, qua Slot ta có thể gắn thêm nhiều loại card 8 bit, 16 bit, 32 bit,… Tuy nhiên, phương pháp giao tiếp này cũng có nhiều nhược điểm là do card gắn trực tiếp trên máy nên cần phải có một kích thước tiêu chuẩn nhất định. Card giao tiếp không có quá nhiều linh kiện, nếu nhiều thì ngoài card giao tiếp ra cần có thêm một vài card bên ngoài. * Giao tiếp qua cổng COM Cách giao tiếp này được sử dụng phổ biến nhất. Giao tiếp phải theo chuẩn RS-232, các bit dữ liệu nối tiếp nhau trên một đường truyền trên một đường dẫn và thường dùng để giao tiếp giữa máy tính với modem và mouse,.v..v. Dữ liệu được truyền đi dưới dạng nối tiếp với một tốc độ cụ thể do người lập trình quy định (1200 bps, 2400 bps, 4800 bps, 9600 bps, 14.4 kbps, 28.8 kbps, 33.6 kbps, 56 kbps), chiều dài ký tự có thể là 5, 6, 7 và 8 bit kết hợp với bit start và bit stop, bit parity (chẵn lẻ) để tạo thành một frame (khung truyền). Ngoài đường truyền dữ liệu, port giao tiếp này còn có các đường điều khiển thu, phát, kiểm tra lỗi. Cách giao tiếp này cho phép truyền ở khoảng cách lớn vì khả năng chống nhiễu khá nhỏ. Mặt khác vì đường truyền là nối tiếp nên thành viên thứ ba không thể tham gia vào cuộc trao đổi thông tin. Ưu điểm lớn nhất của kiểu giao tiếp này là sử dụng ít đường truyền, ít nhiễu tín hiệu nên có thể truyền quãng đường xa…Nhưng mặc khác do bản chất là truyền thông nối tiếp nên cổng nối tiếp không được sử dụng cho những ứng dụng thời gian thực hay điều khiển song song…Có một giải pháp cho vấn đề này đó là sử dụng cổng song song. * Giao tiếp qua cổng máy in (cổng song song) Máy in được giao tiếp với máy tính nhờ vào ổ cắm 25 chân ớ phía sau máy tính. Ổ cắm này không phải chỉ dành riêng cho cổng máy in mà còn sử dụng trong các mục đích đo lường và điểu khiển. Qua ổ cắm này dữ liệu được truyền đi song song nên đôi khi nó còn được gọi là cổng ghép nối song song và vì như thế tốc độ truyền dữ liệu có thể đạt tới mức đáng kể. Bên cạnh 8 bit dữ liệu còn có những đường dẫn tín hiệu khác, tổng cộng ta có thể trao đổi một cách riêng biệt với 17 đường dẫn tín hiệu bao gồm 12 đường dẫn ra và 5 đường dẫn vào. Bởi vì 8 đường dẫn dữ liệu từ D0 đến D7 (từ chân 2 đến chân 9) không phải luôn là đường dẫn hai chiều nên chúng ta chỉ có thể chỉ sử dụng như những lối ra. Các lối ra khác như chân 1 (STORE), chân 14 (AUTOFEED), chân 16 (INT), chân 17 (SELECT). Khi trao đổi thông tin với thông tin với những máy in, các đường dẫn này có những thông tin nhất định. Nhìn chung giao tiếp qua cổng máy in tương đối dễ dàng và thuận tiện, mặc khác do theo chuẩn TTL nên rất phù hợp cho mục đích giao tiếp. ÑH Noâng Laâm TP.HCM 12 BM: Ñieàu khieån Töï ñoäng 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 A. GIỚI THIỆU VỀ SLOT 1. Sự sắp xếp chân trên rãnh cắm Ở máy tính PC/XT rãnh cắm trong máy tính chỉ có một loại với độ rộng bus là 8 bit và tuân theo tiêu chuẩn ISA (viết tắt từ Industry Standard Architechure). Từ máy tính AT trở đi việc bố trí chân trên rãnh cắm trở nên phức tạp hơn, tùy theo tiêu chuẩn được lựa chọn khi chế tạo máy tính. Các loại rãnh cắm theo những tiêu chuẩn khác nhau có thể kể ra như sau: • Rãnh cắm 16 bit theo tiêu chuẩn ISA (Industry Standard Architechure). • Rãnh cắm PS/2 với 16 bit theo tiêu chuẩn MCA (Micro Channel Architechure). • Rãnh cắm PS/2 với 32 bit theo tiêu chuẩn MCA (Micro Channel Architechure). • Rãnh cắm 32 bit theo tiêu chuẩn EISA (Extended Industry StandardArchitechure). • Rãnh cắm 32 bit theo tiêu chuẩn VESA VLB (VESA Local Bus Standard). • Rãnh cắm 32 bit theo tiêu chuẩn PCI (Peripheral Component Interconect Standard). Cho đến nay phần lớn các card ghép nối dùng trong kỹ thuật đo lường và điều khiển đều được chế tạo để đặt vào rãnh cắm theo tiêu chuẩn ISA, vì vậy sẽ giới thiệu chi tiết hơn về tiêu chuẩn này. 2. Rãnh cắm theo tiêu chuẩn ISA Thông thường rãnh cắm có 32 đường tín hiệu dùng cho mục đích thông tin với một card cắm vào. Về cơ bản các tín hiệu này được chia thành các đường dẫn tín hiệu, đường dẫn địa chỉ và đường dẫn điều khiển. Bởi vì ngay từ máy tính PC/XT đã sẵn có các rãnh cắm 62 chân này, trên đó có 8 đường dẫn dữ liệu, nên đôi khi người ta cũng gọi luôn rãnh cắm 62 chân này là rãnh cắm 8 bit. Chỉ những card 8 bit mới cắm vào rãnh này được. Bảng dưới đây chỉ ra sự sắp xếp các chân ra của rãnh cắm mở rộng 8 bit. Bảng 2.1 sự sắp xếp các chân ra cũa rãnh cắm mở rộng 8 bit. Phía mạch in Phía linh kiện GND B01 A01 /IOCHCK Reset B02 A02 D7 +5V B03 A03 D6 IRQ2 B04 A04 D5 -5V B05 A05 D4 DREQ2 B06 A06 D3 -12V B07 A07 D2 Dự trữ B08 A08 D1 +12V B09 A09 D0 GND B10 A10 /IOCHRDY /MEMW` B11 A11 AEN /MEMR B12 A12 A19 /IOW B13 A13 A18 ÑH Noâng Laâm TP.HCM 13 BM: Ñieàu khieån Töï ñoäng 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 /IOR B14 A14 A17 /DACK3 B15 A15 A16 DREQ3 B16 A16 A15 /DACK1 B17 A17 A14 DREQ1 B18 A18 A13 /DACK0 B19 A19 A12 CLK B20 A20 A11 IRQ7 B21 A21 A10 IRQ6 B22 A22 A9 IRQ5 B23 A23 A8 IRQ4 B24 A24 A7 IRQ3 B25 A25 A6 /DACK2 B26 A26 A5 TC B27 A27 A4 ALE B28 A28 A3 +5V B29 A29 A2 OSC B30 A30 A1 Từ cách sắp xếp chân ra, rõ ràng là 62 đường tín hiệu nằm ở cả mặt hàn thiếc cũng như mặt sắp dặt linh kiện. Do đó các bản mạch (card) cắm thêm vào bao giờ cũng là những card mạch in hai mặt. Bên cạnh 8 đường dẫn dữ liệu trên card còn có 20 đường địa chỉ từ A0 đến A19. Trong luận văn này chúng ta ít quan tâm đến các đường dẫn còn lại. Và không phải tất cả các các tín hiệu điều khiển dùng để tạo nên một card mở rộng đều được sử dụng, nên thông thường ta chỉ cần quan tâm đến các tín hiệu sau: Bảng 2.2 Các đường dẫn tín hiệu quan tâm. Tín hiệu Hướng Mô tả Reset Lối ra Sau khi bật máy hoặc sau khi ngắt điện, đường dẫn Reset sẽ kích hoạt trong thời gian ngắn để đưa card đã được cắm vào đến một trạng thái ban đầu xác định. Input/Output/Write /IOW Lối ra Tín hiệu này sẽ kích hoạt khi truy nhập ghi lên một card mở rộng. Mức thấp chỉ ra rằng các dữ liệu có giá trị đang chờ để đưa ra ở bus dữ liệu. Các dữ liệu được đón nhận bằng sườn trước. Input/Output/Read ÑH Noâng Laâm TP.HCM 14 BM: Ñieàu khieån Töï ñoäng 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 /IOR Lối ra Mức thấp nhất của đường dẫn địa chỉ này báo hiệu sự truy nhập đọc trên một card mở rộng. Trong thời gian này các dữ liệu có giá trị cần phải sắp xếp để rồi sau đó được đón nhận bằng sườn trước. ANE Lối ra Address Enable Đường dẫn điều khiển ANE dùng để phân biệt chu trình truy nhập DMA và chu trình truy nhập bộ xử lí. Ở mức cao (High) DMA giám sát qua bus địa chỉ và bus dữ liệu. Đường dẫn có hiệu lực ở mức thấp (Low). Đường dẫn này cần phải được sử dụng cho quá trình giải mã địa chỉ bởi card mở rộng. 3. Sự giải mã địa chỉ và nối bus dữ liêu Vùng vào ra (I/O) của máy tính PC đã chiếm 64 Kbyte của bộ nhớ tổng cộng với dung lượng từ vài ngàn Mbyte trở lên tuỳ loại máy. Vì vậy, vùng I/O của một card mở rộng không được phép bao trùm lên vùng địa chỉ I/O của máy tính. Khi đưa một card mở rộng vào sử dụng, thì việc đầu tiên là phải lưu tâm đến điểm này. Bảng dưới đây chỉ ra sự sắp xếp của vùng địa chỉ I/O của máy tính PC/AT. Bảng 2.3 Sự sắp xếp của vùng địa chỉ I/O của máy tính PC/AT. Ñòa chæ (Hex) vaøo ra Chöùc naêng 000-01F Boä ñieàu khieån DMA 1(8232) 020-03F Boä ñieàu khieån ngaét (8259) 040-04F Boä phaùt thôøi gian (8254) 060-06F Boä kieåm tra baøn phím (8242) 070-07F Ñoàng hoà thôøi gian thöïc (MC 146818) 080-09F Thanh ghi trang MDA (LS 670) 0A0-0AF Boä ñieàu khieån ngaét 2 (8259) OCH-0CF Boä ñieàu khieån MDA 2 (8237) 0E0-0EF Döï tröõ cho maûng maïch chính 0F8-0FF Boä ñoàng xöû lí 80x87 1F0-1F8 Boä ñieàu khieån ñóa cöùng 200-20F Coång duøng cho troø chôi (Game) 278-27F Coång song song 2 (LPT 2) 2B0-2DF Card EGA 2 2E8-2EF Coång noái tieáp 4 (COM 4) ÑH Noâng Laâm TP.HCM 15 BM: Ñieàu khieån Töï ñoäng 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 2F8-2FF Coång noái tieáp 2 (COM 2) 300-1F Duøng cho card môû roäng 20-32F Boä ñieàu khieån ñóa cöùng 60-36F Coång noái maïng (LAN) 78-37F Coång song song 1 (LPT 1) 80-38F Coång noái tieáp ñoàng boä 2 A0-3AF Coång noái tieáp ñoàng boä 1 B0-3B7 Maøn hình ñôn saéc C0-3CF Card EGA D0-3DF Card CGA E8-3EF Coång noái tieáp 3 (COM 3) F0-3F7 Boä ñieàu khieån ñóa meàm F8-3FF Coång noái tieáp 1 (COM 1) Từ bảng này ta thấy rõ ràng các địa chỉ 300 đến 31F (Hex) đã được dự phòng để dùng cho card mở rộng. Các đường dẫn địa chỉ được sử dụng đối với vùng này là A0 đến A9. Thông thường thì các địa chỉ, mà dưới các địa chỉ này máy tính có thể trao đổi với card mở rộng, có thể đặt ở chính trên card. Bây giờ nhiệm vụ của tấm bản mạch (card) được cài vào là so sánh các đường dẫn địa chỉ ở máy tính với các địa chỉ đã được thiết lập xem có thống nhất không và thông báo sự đánh giá ở bộ điều khiển logic. Chỉ có sự thống nhất một cách chính xác mới có thể tiến hành sự trao đổi thông tin với máy tính. 4. Thiết kế mạch giao tiếp với rãnh ISA -8255 4.1 Vi mạch 8255 Thông thường thì trên một card mở rộng có nhiều khối chức năng như: bộ biến đổi A/D, biến đổi D/A, khối xuất và nhập dữ liệu số, các khối này được trao đổi dưới những địa chỉ khác nhau từ máy tính. Dòng điện tiêu thụ tổng cộng ở trạng thái tĩnh là 120 mA. Thời gian truy nhập đọc cỡ 250 ns. Thời gian nghỉ giữa hai lần truy nhập để đọc hoặc viết ít nhất bằng 850 ns. ÑH Noâng Laâm TP.HCM 16 BM: Ñieàu khieån Töï ñoäng Lập trình giao tiếp máy tính bằng Visual Basic 34 33 32 31 30 29 28 27 5 36 9 8 35 6 Biên soạn: D0 D1 D2 D3 D4 D5 D6 D7 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 RD WR A0 A1 RESET CS PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 Hồ Thanh Tâm Lê V ăn Bạn 4 3 2 1 40 39 38 37 18 19 20 21 22 23 24 25 14 15 16 17 13 12 11 10 8255 Hình 4 Vi mạch 8255. Một số đặc tính của vi mạch 8255: * 24 chân I/O lập trình được. * Tương thích hoàn toàn TTL. * Tương thích với tất cả các bộ vi xử lí Intel. * Các chân riêng lẻ đặt và xoá được. Khối vi mạch 8255 sử dụng trên một tấm Card cắm thêm vào máy tính PC trong việc thu nhập đo lường và xuất ra dữ liệu số trong việc điều khiển quá trình biến đổi A/D. Vi mạch này có cách bố trí như trên hình vẽ, trong đó có chứa 24 đường dẫn lối vào/ra được xếp thành 3 cổng song song (cổng A, B, C). Tính linh hoạt của vi mạch này thể hiện ở khả năng lập trình. Qua thanh ghi điều khiển, người sử dụng xác định loại hoạt động và cổng nào được sử dụng như là lối vào hoặc lối ra. Các chân ra D0 – D7 tạo nên bus dữ liệu hai hướng, rộng 8 bit. Tất cả các dữ liệu khi truy nhập ghi hoặc truy nhập đọc được dẫn qua các đường dẫn này. Trạng thái logic ghi/đọc được nhận biết qua các tín hiệu điều khiển /CS, /RD, /WR. Một cuộc trao đổi thông tin với vi mạch 8255 có thể được tiến hành khi /CS = 0. khi /RD = 0, các tín hiệu của cổng được lựa chọn sẽ dẫn đến bus dữ liệu và có thể được gọi bởi các vi mach mạch khác. Khi /WR = 0, thì mọi việc xảy ra ngược lại. Các bit địa chỉ A0 và A1 cùng với các tín hiệu ghi và đọc báo hiệu cho biết sẽ truy nhập lên cổng nào. Bảng chân lí dưới đây tóm tắt những kết luận vừa trình bày ở trên. Bảng 4.1.1 Sự sắp xếp các Port của vi mạch 8255. A1 A0 /RD /WR /CS Chöùc naêng 0 0 0 1 0 Cöûa (Port) A ⇒ Bus döõ lieäu 0 1 0 1 0 Cöûa (Port) B ⇒ Bus döõ lieäu 1 0 0 1 0 Cöûa (Port) C ⇒ Bus döõ lieäu 0 0 1 0 0 Bus döõ lieäu ⇒ Cöûa (Port) A 0 1 1 0 0 Bus döõ lieäu ⇒ Cöûa (Port) B 1 0 1 0 0 Bus döõ lieäu ⇒ Cöûa (Port) C ÑH Noâng Laâm TP.HCM 17 BM: Ñieàu khieån Töï ñoäng 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 1 1 1 0 0 Söï ghi vaøo cuûa töø ñieàu khieån X X X X 1 Ñöôøng daãn döõ lieäu ôû traïng thaùi ñieän trôû cao (tristate). X X 1 1 0 Ñöôøng daãn döõ lieäu ôû traïng thaùi ñieän trôû cao (tristate). Từ bảng chân lí ta thấy được thanh ghi điều khiển đặt dưới địa chỉ bên trong A0 = 1, A1 = 1. trong một chu trình ghi lên thanh ghi điều khiển, người sử dụng khẳng định cổng vào/ra cũng như kiểu hoạt động trong một từ điều khiển. Một mức High ở đường dẫn Reset đặt trở lại thanh ghi điều khiển và định nghĩa toàn bộ 24 đường dẫn như là lối vào. Sự sắp xếp của từ điều khiển được mô tả như sau: Từ đây ta thấy rõ ràng là 24 đường dẫn của các cổng A, B và C được chia thành hai nhóm B. Tổng cộng có ba kiểu hoạt động khác nhau: kiểu (mode) 0, kiểu 1 và kiểu 2. Trong đề tài này kiểu 0 được chọn giới thiệu. Kiểu hoạt động này cho khả năng xuất nhập dữ liệu một cách đơn giản qua ba cổng A, B, C. Controlword (Từ điều khiển) Hình 5: Sự sắp xếp của từ điều khiển ở vi mạch 8255. 4.2 Vi mạch 74HC688 Bộ giải mã địa chỉ 74HC688 so sánh các đường địa chỉ từ A2 đến A9 xem có giống với địa chỉ cơ bản được thiết lập trên Card mở rộng. 74HC688 so sánh 2 trong số 8 bit xem có giống nhau không và khi xếp kề sát đồng nhất sẽ tạo ra một tín hiệu Low ở chân thứ 19. Ngoài ra nó còn quy định quyền sử dụng một lối vào được kích hoạt /G, khi nào chân ra này còn nằm ở mức cao (High) thì tín hiệu ra vẫn giữ mức logic 1 độc lập với mức logic kề sát. Bình thường thì chân này được nối với tín hiệuAEN. Chỉ khi tín hiệu này dẫn tới mức thấp thì các dữ liệu có giá trị mới nằm ở trên bus. ÑH Noâng Laâm TP.HCM 18 BM: Ñieàu khieån Töï ñoäng Lập trình giao tiếp máy tính bằng Visual Basic 1 Biên soạn: Hồ Thanh Tâm Lê V ăn Bạn COMP G1 2 4 6 8 11 13 15 17 0 P 7 1P=Q 3 5 7 9 12 14 16 18 19 0 Q 7 74HC688 Hình 6 Vi mạch 74HC688. 4.3 Vi mạch 74HC245 Bộ giải mã logic đảm nhận đồng thời sự điều khiển của bộ đệm bus hai chiều 74HC245, bộ này nối các đường dẫn dữ liệu của rãnh cắm PC với các đường dẫn dữ liệu của card mở rộng. Sự ghép nối này là rất quan trọng, nhờ đó các mức tín hiệu trên đường dẫn dữ liệu không bị ảnh hưởng quá mạnh. Nó chứa tám bộ đệm với các lối ra ba trạng thái(Tristate) để trao đổi thông tin giữa các đường dẫn bus dữ liệu theo hai hướng. Hướng được xác định từ mức logic ở lối vào DIR: DIR = 0 chuyển các dữ liệu từ B sang A. việc chuyển hướng dữ liệu cho phép quản lý một cách đơn giản nhất bằng tín hiệu /IOR. Ta có thể nối trực tiếp với chân DIR. Đương nhiên ta giả thiết rằng cổng dữ liệu A được nối với các đường dữ liệu của rãnh cắm PC và cổng dữ liệu B nối với đường dẫn dữ liệu của card mở rộng. Qua đó đảm bảo rằng bộ đệm bus 74HC245 chỉ sắp xếp những dữ liệu trên bus dữ liệu của máy tính PC, khi máy tính PC thực hiện một sự truy nhập đọc. 2 3 4 5 6 7 8 9 19 1 B1 B2 B3 B4 B5 B6 B7 B8 A1 A2 A3 A4 A5 A6 A7 A8 18 17 16 15 14 13 12 11 G DIR 74HC245 Hình 7: Vi mạch 74HC245. 4.4 Vi mạch 74LS138 1 2 3 6 4 5 A B C G1 G2A G2B Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 15 14 13 12 11 10 9 7 74LS138 Hình 8: Vi mạch 74LS138. Vi mạch 74HC138 có ba lối vào lựa chọn: A, B và C. Mã ở các lối vào này s quyết định lối ra nào trong tám lối ra (từ 0 đến 7) mà bình thường nằm ở mức High sẽ được nối xuồng mass. Hai lối vào kích hoạt ở mức Low (G2A và G2B) và một lối vào kích hoạt ở mức High (G1) sẽ quyết định lối ra tương ứng với mã nhị phân sẽ được nối xuống mass hoặc giữ nguyên ở mức High. Thông thường ta đặt chân 4 và 5 lên mức điện áp dương còn chân 6 xuống mass. Các chân xác lập trạng thái này cho phép nối tầng (cascade) một cách đơn giản nhiều vi mạch với nhau. ÑH Noâng Laâm TP.HCM 19 BM: Ñieàu khieån Töï ñoäng 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 4.5 Mạch giao tiếp 8255 Hình 6.6 chỉ ra sơ đồ mạch điện của một giao diện vào/ra dùng cho rãnh Slot của máy tính PC. Các tín hiệu ghi (/IOW) và đọc (/IOR) có thể được nối trực tiếp với các tín hiệu tương ứng ở vi mạch 8255. Địa chỉ cơ bản mà dưới địa chỉ này mạch điện được trao đổi có thể được thiết lập ở chuyển mạch DIP. Chính mạch điện đã ghi tên 4 địa chỉ cơ bản của vùng vào/ra của máy tính PC. Bảng 4.5.1 Địa chỉ của Port I\O của 8255. ÑÒA CHÆ VAØO/RA (I/O) CHÖÙC NAÊNG Ñòa chæ cô baûn (Hex) chaúng haïn 300 Cöûa (Port) A Ñòa chæ cô baûn + 1 chaúng haïn 301 Cöûa B Ñòa chæ cô baûn + 2 chaúng haïn 302 Cöûa C Ñòa chæ cô baûn + 3 chaúng haïn 303 Thanh ghi ñieàu khieån Khi có sự đồng nhất giữa địa chỉ cơ bản được thiết lập và các địa chỉ đang đứng xếp hàng ở rãnh cắm PC, vi mạch 74HC688 sinh ra ở chân 19 một tín hiệu Low, tín hiệu này kích hoạt vi mạch 8255 tương ứng qua đường dẫn CS do vi mạch 74LS138 quy định. Mạch logic của bộ giải mã chứa hai vi mạch 74HC00 và 74LS138. Ba cổng NAND của vi mạch 74HC00 làm cho bộ đệm bus 74HC245 chỉ kích hoạt (/G = 0) khi thoả mãn các điều kiện: • Card mở rộng cắm thêm vào đã trao đổi được (chân 19 của vi mạch 74HC688 ở trạng thái Low). • Một chu trình đọc (/IOR = 0) hoặc chu trình ghi (/IOW = 0) được thực hiện. Khi mà chỉ một điều kiện không thoả mãn thì chân ra /G của vi mạch 74HC245 vẫn giữ nguyên trạng thái là High và bộ đệm bus dừng lại ở trạng thái điện trở cao. U4 U3 U1 2 3 4 5 6 7 8 9 J1 GND RESDRV +5V IRQ9 -5V DREQ2 -12V -0WS +12V GND -SMEMW -SMEMR -IOW -IOR -DACK3 DREQ3 -DACK1 DREQ1 -REFSH SYSCLK IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 -DACK2 TC ALE +5V 14.3MHZ GND -IOCHCK D7 D6 D5 D4 D3 D2 D1 D0 IOCHRDY AEN A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28 A29 A30 A31 D7 D6 D5 D4 D3 D2 D1 D0 1 18 17 16 15 14 13 12 11 B1 B2 B3 B4 B5 B6 B7 B8 DIR 20 D0 D1 D2 D3 D4 D5 D6 D7 34 33 32 31 30 29 28 27 A0 A1 VCC PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 9 8 A0 A1 74HC245 AEN 5 RD 35 RESET 36 WR U6B 6 6 CS 74HC00 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 4 3 2 1 40 39 38 37 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 18 19 20 21 22 23 24 25 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 14 15 16 17 13 12 11 10 D0 D1 D2 D3 D4 D5 D6 D7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 A0 A1 14 14 34 33 32 31 30 29 28 27 D0 D1 D2 D3 D4 D5 D6 D7 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 9 8 A0 A1 5 35 36 6 8255 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 D0 D1 D2 D3 D4 D5 D6 D7 RD PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 RESET WR CS 4 3 2 1 40 39 38 37 PA01 PA11 PA21 PA31 PA41 PA51 PA61 PA71 18 19 20 21 22 23 24 25 PB01 PB11 PB21 PB31 PB41 PB51 PB61 PB71 14 15 16 17 13 12 11 10 34 33 32 31 30 29 28 27 A0 A1 U2 D0 D1 D2 D3 D4 D5 D6 D7 19 OE VCC D0 D1 D2 D3 D4 D5 D6 D7 9 8 PC01 PC11 PC21 PC31 PC41 PC51 PC61 PC71 5 35 36 6 D0 D1 D2 D3 D4 D5 D6 D7 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 A0 A1 RD RESET WR CS PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 8255 8255 7 U6A 4 1 5 3 U6C 8 2 74HC00 7 74HC0014 7 PC62 U5 10 A2 A3 GND 1 2 3 VCC 9 6 4 5 GND U7 A B C G1 G2A G2B Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 15 14 13 12 11 10 9 7 JP1 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB0 PB1 PB2 PB3 74LS138 AEN 1 A4 2 A5 4 A6 6 A7 8 A8 11 A9 13 15 17 GND 20 OE P=Q P0 Q0 P1 Q1 P2 Q2 P3 Q3 P4 Q4 P5 Q5 P6 Q6 P7 Q7 19 3 5 SW1 7 16 15 14 13 12 11 10 9 9 12 14 1 2 3 4 5 6 7 8 1 3 5 7 9 11 13 15 17 19 21 23 JP2 2 4 6 8 10 12 14 16 18 20 22 24 HEADER 12X2 PB4 PB5 PB6 PB7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 PA01 PA11 PA21 PA31 PA41 PA51 PA61 PA71 PB01 PB11 PB21 PB31 1 3 5 7 9 11 13 15 17 19 21 23 JP3 2 4 6 8 10 12 14 16 18 20 22 24 HEADER 12X2 PB41 PB51 PB61 PB71 PC01 PC11 PC21 PC31 PC41 PC51 PC61 PC71 PA02 PA12 PA22 PA32 PA42 PA52 PA62 PA72 PB02 PB12 PB22 PB32 1 3 5 7 9 11 13 15 17 19 21 23 2 4 6 8 10 12 14 16 18 20 22 24 PB42 PB52 PB62 PB72 PC02 PC12 PC22 PC32 PC42 PC52 PC62 PC72 HEADER 12X2 GND 16 18 SW DIP-8 VCC 74HC688/SO VCC GND B1 B2 VCC B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 B20 B21 B22 B23 B24 B25 B26 B27 B28 B29 B30 B31 A1 A2 A3 A4 A5 A6 A7 A8 Hình 8: Card giao tiếp 8255. ÑH Noâng Laâm TP.HCM 20 BM: Ñieàu khieån Töï ñoäng 4 3 2 1 40 39 38 37 PA02 PA12 PA22 PA32 PA42 PA52 PA62 PA72 18 19 20 21 22 23 24 25 PB02 PB12 PB22 PB32 PB42 PB52 PB62 PB72 14 15 16 17 13 12 11 10 PC02 PC12 PC22 PC32 PC42 PC52 PC62 PC72 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 B. GIAO TIẾP QUA CỔNG NỐI TIẾP (COM): Trên các máy tính thông thường có đến 2 hoặc thậm chí 3 cổng nối tiếp RS-232, ta gọi là COM1, COM2 và COM3, trong đó COM1 được sử dụng cho chuột ( không nhất thiết) do đó luôn có ít nhất một cổng COM còn trống có thể phục vụ cho các mục đích ghép nối khác. Cổng nối tiếp trên thực tế có 2 loại, loại 25 chân và loại 9 chân. Trong khi các cổng 9 chân có thể được tìm thấy trong hầu hết các máy tính sản xuất gần đây thì loại cổng 25 chân rất hiếm. Về mặt chức năng, hai loại cổng này hoàn toàn tương ứng. Hình 9: hai loại cổng nối tiếp thông dụng Dưới đây là bảng tóm tắt chức năng của các chân trên 2 loại cổng nối tiếp. Bảng B1: chức năng các chân ở cổng nối tiếp Loại 25 chân Loại 9 chân Chức năng Viết tắt Tên gọi (Pin) (Pin) Pin 2 Pin 3 TxD Transmit Data Truyền dữ liệu Pin 3 Pin 4 Pin 2 Pin 7 RxD RTS Receive Data Nhận dữ liệu Request To Send Yêu cầu gửi, bộ truyền đặt đường này lên mức hoạt động khi sẵn sàn truyền dữ liệu Pin 5 Pin 8 CTS Clear To Send Xóa để gửi , bộ nhận đặt đường này lên mức hoạt động để thông báo cho bộ truyền là nó sẵn sàn nhận dữ liệu Pin 6 Pin 6 DSR Data Set Ready Dữ liệu sẵn sàn, như CTS nhưng nó được điều khiển bởi bộ truyền Pin 7 Pin 5 SG Signal Ground Mass của tín hiệu Pin 8 Pin 1 CD Carrier Detect Phát hiện tín hiệu mang dữ liệu ÑH Noâng Laâm TP.HCM 21 BM: Ñieàu khieån Töï ñoäng Lập trình giao tiếp máy tính bằng Visual Basic Pin 20 Pin 4 DTR Biên soạn: Hồ Thanh Tâm Lê V ăn Bạn Data Terminal Ready Đầu cuối dữ liệu sẵn sàng Báo chuông, cho biết là bộ nhận đang nhận tín hiệu rung chuông. Việc trao đổi dữ liệu qua cổng nối tiếp trong các trường hợp thông thường đều qua đường dẫn truyền nối tiếp TxD và đường dẫn nhận RxD, các đường dẫn còn lại đóng vai trò phụ trợ khi thiết lập và khi điều khiển cuộc truyn, các đường dẫn này gọi là các đường dẫn bắt tay. Tuy nhiên các đường dẫn bắt tay lại có thể được điều khiển trực tiếp, điều này tạo cho ta một khả năng giao tiếp khác thông qua cổng nối tiếp. Về đặt trưng điện, với cổng nối tiếp, trạng thái LOW tương ứng với mức điện áp +12V còn trạng thái HIGH tương ứng với điện áp -12V, các đường dẫn lối ra có thể cung cấp dòng điện từ 10mA đến 20mA. Mặc khác, các mạch lối vào thông thường trong máy tính PC nhận dạng một mức điện áp dưới 1V như là mức LOW, nên cổng nối tiếp cũng được phép làm việc với mức TTL (0V/5V). 1. Giao tiếp với các đường dẫn phụ trợ: Như đã đề cập trên, các đường dẫn phụ trợ tuy chỉ đóng vai trò bắt tay trong một cuộc truyền nối tiếp nhưng lại có khả năng truy cập trực tiếp, vì vậy sử dụng các đường dẫn phụ trợ giúp ta mở rộng số đường dẫn giao tiếp với máy tính vốn rất ít. Các đường dẫn phụ trợ được “nối” với các thanh ghi trong vi mạch UART 8250 (một loại vi mạch điện tử điều khiển và kiểm soát truyền thông theo chuẩn RS-232 đã được thiết kế sẵn trong các máy tính). Để có thể truy cập các đường dẫn này trước hết cần phải biết địa chỉ của các đường này trong máy tính. Trong UART 8250, các đường dẫn CTS, DSR, RI, DCD là các đường dẫn lối vào nằm trong thanh ghi trạng thái môđem có địa chỉ bằng địa chỉ cơ sở cộng 6, còn các đường dẫn DTS, RTS là các đường dẫn lối ra nằm trong thanh ghi điều khiển môđem có địa chỉ bằng địa chỉ cơ sở cộng 4. Trong máy tính, tất cả các thanh ghi được quản lí giống như các ô nhớ trong vùng vào/ra, máy tính tìm thấy các địa chỉ thanh ghi trong một vùng được sắp xếp cho mỗi giao diện, địa chỉ đầu tiên của nó được gọi là địa chỉ cơ sớ BA(Base Address). Trong các máy tính PC, BA của các cổng nối tiếp thường được phân bổ như bảng sau: COM1 COM2 COM3 COM4 BA 3F8 2F8 3E8 2E8 Dưới đây là sự sắp xếp các đường dẫn phụ trợ trong các thanh ghi: * Thanh ghi điều khiển môđem (lối ra ): BA+4 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 RTS DTR * Thanh ghi trạng thái môđem (lối vào ): BA+6 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 DCD RI DSR CTS Các ví dụ cụ thể truy cập các đường dẫn phụ trợ sẽ được trình bày trong phần sau của tài liệu này. 2. Truyền nhận nối tiếp dị bộ: Việc truyền nhận nối tiếp dị bộ là kiểu truyền trong đó dữ liệu được đóng gói và truyền đi theo những frame truyền đã được quy định trước, cấu trúc 1 frame truyền nối tiếp chuẩn thường bao gồm 1 bit Start (S) , 8 bit dữ liệu (D), 1 bit kiểm tra chẵn lẻ (P) và 1 bit Stop, tuy nhiên do điều kiện hay thói quen, người ta có thể quy định những dạng frame truyền khác mà trong đó có thể không có đầy đủ các thành phần như một frame truyền chuẩn, việc quy định này được người truyền quy định ngay đầu quá trính truyền. Để nhận đúng dữ liệu truyền, người nhận cần phải biết cấu trúc frame truyền đã được gửi, thông thường, nếu việc truyền và nhận được thực hiện bởi cùng một người thì việc trên không phải là một trở ngại đáng kể. Khi truyền một dữ liệu lớn, dữ liệu này được chia nhỏ thành từng phần nhỏ (thường là từng Byte), đặt vào frame truyền và gửi đi, tốc độ truyền phụ thuộc vào thông số Baudrate, Baudrate là số bit dữ liệu được truyền hay nhận trong 1s. Pin 22 Pin 9 RI Ring Indicator ÑH Noâng Laâm TP.HCM 22 BM: Ñieàu khieån Töï ñoäng 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 Để có thể truyền nhận, trước hết cần kết nối 2 thiết bị đầu cuối dữ liệu DTE (Data Terminal Equipment), các DTE có thể là các máy tính PC hay các vi mạch vi xử lí có hỗ trợ truyền thông nối tiếp. Phương pháp kết nối đơn giản nhất được trình bày như sơ đồ sau: Hình 10: Kết nối trực tiếp 2 DTE Một vấn đề thường mắc phải khi truyền nhận bằng cổng nối tiếp là trong khi hầu hết các thiết bị điện tử số tương thích với mức logic TTL hay CMOS (0V/5V) thì chuẩn nối tiếp RS-232 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 ÑH Noâng Laâm TP.HCM 23 BM: Ñieàu khieån Töï ñoäng 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 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 ngoài và có thể nhận tín hiệu từ bên ngoà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. ÑH Noâng Laâm TP.HCM 24 BM: Ñieàu khieån Töï ñoäng 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 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ó. Ngoà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 toà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 toà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 toà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… hoàn toà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à mt 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. ÑH Noâng Laâm TP.HCM 25 BM: Ñieàu khieån Töï ñoäng 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 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" () ÑH Noâng Laâm TP.HCM 26 BM: Ñieàu khieån Töï ñoäng 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 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: xoá (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 ÑH Noâng Laâm TP.HCM 27 BM: Ñieàu khieån Töï ñoäng 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 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 ÑH Noâng Laâm TP.HCM 28 BM: Ñieàu khieån Töï ñoäng 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 - Đặ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 toà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 ÑH Noâng Laâm TP.HCM 29 BM: Ñieàu khieån Töï ñoäng 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ì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ụ xoá 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. ÑH Noâng Laâm TP.HCM 30 BM: Ñieàu khieån Töï ñoäng 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ỗ 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: an ...a1a0 = an * 2 + ... + a1 * 2 + a0 * 2 . 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ụ : 01010101 = 0 * 27 + 1* 26 + 0 * 25 + 1* 2 4 + 0 * 23 + 1* 22 + 0 * 21 + 1* 20 = 85 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 : an ...a1a0 = an *16 n + ... + a1 *161 + a0 *16 0 . 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ụ: FA2 = 15 * 16 2 + 10 * 161 + 2 * 16 0 = 4002 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. n 1 0 ÑH Noâng Laâm TP.HCM 31 BM: Ñieàu khieån Töï ñoäng 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 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 toá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. ÑH Noâng Laâm TP.HCM 32 BM: Ñieàu khieån Töï ñoäng 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ì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 toà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: Res=ValIn And 2 Bảng chân trị phép And B A And B 0 0 1 0 0 0 1 1 2 giá trị: Res=0 tương ứng C1=0, C1=1 khi Res=2. Nếu bạn 2 giá trị 0;1 bạn dùng dòng lệnh Res=(ValIn And 2)/2 thay A 0 0 1 1 Kết quả sau khi And chỉ có muốn kết quả nhận được chỉ mang 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. ÑH Noâng Laâm TP.HCM 33 BM: Ñieàu khieån Töï ñoäng 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 Res=Res Xor 1 Bảng chân trị phép Xor A B A Xor B 0 0 0 0 1 1 1 0 1 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. Ngoà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 0 0 1 1 1 0 1 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. ÑH Noâng Laâm TP.HCM 34 BM: Ñieàu khieån Töï ñoäng 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 Đặ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: - ÑH Noâng Laâm TP.HCM 35 BM: Ñieàu khieån Töï ñoäng 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ì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 ÑH Noâng Laâm TP.HCM 36 BM: Ñieàu khieån Töï ñoäng 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 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. ÑH Noâng Laâm TP.HCM 37 BM: Ñieàu khieån Töï ñoäng 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 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 Name: Tên đối tượng Alignment:canh lề 0:canh trái 1: canh phải 2: canh giữa Backcolor: màu nền BorderStyle: Viền 0: không viền 1: có viền nổi 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 Enable: cho phép hoặc cấm sử dụng (true, false) Height: Chiều cao Font: Font của chữ trong Text Click: Xảy ra khi Click mouse vào Text. DblClick: Xảy ra khi Click đôi mouse vào Text. GotFocus: Xảy ra khi Text nhận Focus. KeyDown: Xảy ra khi Text đang có Focus và 1 phím được nhấn xuống. Refresh: Textbox. làm tươi KeyPress: Xảy ra khi Text đang có Focus và 1 phím được nhấn . 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 Change: Xảy ra khi thay đổi nội dung Text. SetFocus: Làm cho Textbox nhận Focus, và trở thành đối tượng Lock: cho phép hoặc cấm sửa được chú ý bởi thông tin ( true hoặc false) Windows. LostFocus: Xảy ra khi mất Fucos 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. MouseDown: Xảy ra khi nhấn mouse xuống 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 ÑH Noâng Laâm TP.HCM 38 BM: Ñieàu khieån Töï ñoäng Ghi chú 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 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 Name: Tên đối tượng Move Left,Top,[Width], Caption: Phần chữ hiển thị [Height] : di chuyển trên nút nhấn. VD: Command1.Move 100, Backcolor: màu nền 200, 300,400 Là: Di chuyến Command1 Default: đến vị trí cách lề trái 100, true: Enter =nhấn Button lề trên 200, rộng 300, cao false: bỏ chức năng này. 400 Enable: cho phép hoặc cấm Chú ý: có thể bỏ các giá trị trong [ ] như Width sử dụng hay Height (true, false) Height: Chiều cao Button Font: Font của chữ Caption Refresh: làm CommandButton. GotFocus: Xảy ra khi CommandButton nhận Focus. KeyDown: Xảy ra khi CommandButton đang có Focus và 1 phím được nhấn xuống. tươi KeyPress: Xảy ra khi CommandButton đang có Focus và 1 phím được nhấn . 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 Click: Xảy ra khi Click mouse vào CommandButton. SetFocus: Làm cho CommandButton nhận Focus, và trở thành đối Picture: hình chèn vào tượng được chú ý bởi Button. Chỉ có tác dụng khi Windows. Style=1 LostFocus: Xảy ra khi mất Fucos. 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 ÑH Noâng Laâm TP.HCM 39 BM: Ñieàu khieån Töï ñoäng Ghi chú 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 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 Click: Xảy ra khi Click Circle: Vẽ đường tròn mouse vào PictureBox. AutoRedraw:cho phép tự trên PictureBox. vẽ lại VD: Picture1.Circle true:các nét vẽ trên (100,200), 50 PictureBox không mất khi vẽ hình tròn tâm thay đổi đối tượng. (100,200), bán kính 50. false: ngược lại Trên Picture1 Backcolor: màu nền BorderStyle: Viền 0: không viền 1: có viền nổi Cls: Xoá các hình vẽ trên DblClick: Xảy ra khi PictureBox, không xóa Click đôi mouse vào hình nền. PictureBox. DrawStyle: quy định loại Move Left,Top,[Width], nét vẽ [Height] : di chuyển VD: DrawWidth: độ lớn nét Picture1.Move 100, 200, vẽ 300,400 Là: Di chuyến Picture1 Enable: cho phép hoặc đến vị trí cách lề trái 100, cấm sử dụng lề trên 200, rộng 300, cao (true, false) 400 Chú ý: có thể bỏ các giá FillColor: Màu tô trị trong [ ] như Width hay Height GotFocus: Xảy ra khi Form nhận Focus. KeyDown: Xảy ra khi Form đang có Focus và 1 phím được nhấn xuống. FillStyle: Cách tô màu. Height: Chiều cao Font: Font của chữ trong Text Refresh: làm PictureBox. tươi KeyPress: Xảy ra khi PictureBox đang có Focus và 1 phím được nhấn . Forecolor: Màu vẽ Line (x1,y1)-(x2,y2), KeyUp: Xảy ra khi [color] : Vẽ đường thẳng Form đang có Focus và Index: chỉ số đối tượng trong Picture từ (x1,y1) 1 phím được thả. đến (x2,y2) (mảng đối tượng) Left: Khoảng cách lề trái Point (x,y) : lấy màu tại LostFocus: Xảy ra khi điểm (x,y) 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 ÑH Noâng Laâm TP.HCM 40 BM: Ñieàu khieån Töï ñoäng Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: Top: Khoảng cách lề trên Visible: tượng. Width: Textbox ẩn hiện Chiều Hồ Thanh Tâm Lê V ăn Bạn Pset (x,y) , color : chấm thả mouse lên Picture . điểm tại (x,y) đối SetFocus: Làm cho PictureBox nhận Focus, và trở thành đối tượng được rộng chú ý bởi Windows. 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ừ khoá “Me”: từ khoá 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 Name: Tên đối tượng Ghi chú Load: Form được load lên. Circle: Vẽ đường tròn trên Form. AutoRedraw:cho phép tự vẽ lại VD: Form1.Circle (100,200), 50 true:các nét vẽ trên Form không mất khi vẽ hình tròn tâm (100,200), bán thay đổi đối tượng. kính 50. false: ngược lại Trên Form1 Cls: Xoá các hình vẽ trên Form, Backcolor: màu nền không xóa hình nền. Move Left,Top,[Width], [Height] : di chuyển BorderStyle: Viền 0: không viền, không di chuyển, không VD: Form1.Move 100, 200, 300,400 thay đổi kích thước được. 1: có viền nổi,có thể di chuyển nhưng Là: Di chuyến Form1 đến vị trí cách lề trái 100, lề trên 200, rộng không thay đổi kích thước được. 300, cao 400 2: dạng đầy đủ nhất. ( mặc định). Chú ý: có thể bỏ các giá trị trong 3,4,5…Không quan trọng lắm. [ ] như Width hay Height Caption: Tiêu đề sẽ xuất hiện trên Form khi Form xuất hiện. Click: Xảy ra khi Click mouse vào Form. DblClick: Xảy ra khi Click đôi mouse vào Form. GotFocus: Xảy ra khi Form nhận Focus. 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) FillColor: Màu tô khi vẽ KeyDown: Xảy ra khi Form đang có Focus và 1 phím được nhấn xuống. 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ẽ KeyPress: Xảy ra khi Form đường thẳng trong Form từ (x1,y1) đang có Focus và 1 phím ÑH Noâng Laâm TP.HCM 41 BM: Ñieàu khieån Töï ñoäng Lập trình giao tiếp máy tính bằng Visual Basic Biên soạn: đến (x2,y2) Hồ Thanh Tâm Lê V ăn Bạn đượ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) Pset (x,y) , color : chấm điểm tại KeyUp: Xảy ra khi Form (x,y) đang có Focus và 1 phím được thả. Index: chỉ số đối tượng (mảng đối SetFocus: Làm cho Form nhận tượng) 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 Icon: biểu tượng của Form khi xuất hiện. 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 … … Ngoà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. ÑH Noâng Laâm TP.HCM 42 BM: Ñieàu khieån Töï ñoäng 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 PHỤ LỤC 2: MỘT SỐ HÀM VÀ TOÁN TỬ CƠ BẢN Ø Một số hàm thông dụng: Hàm, toán tử Chức năng, kết quả Ví dụ: Abs (x) Tính giá trị tuyệt đối của X=-5 x A=abs(x), khi đó A=5 Atn(x) Tính Arctang của x A=Atn(1), khi đó A= π/4 Cos(x) Tính Cosin của x A=cos(π/3); Kết quả A=1/2 Date Cho biết tháng, ngày, A=Date; KQ: A=5/16/2005 năm hiện tại. Dir(Pathname) Trả ra tên File nếu nó tồn MyFile=Dir("C:\WINDOWS\WIN.INI") tại KQ: MyFile=WIN.INI DoEvents( ) Nhường cho Event khác Xem các ví dụ có sử dụng vóng lặp được thực thi. Do..Loop Exp(x) Hàm e mũ x FileLen(pathname) Tính chiều dài dài File FormatNumber Định dạng cho số FreeFile Trả ra 1 con số dùng làm Xem các ví dụ xử lí File FileHandle Hex(number) Đổi sang số Hexa (16) Hour(time) Trả ra thành phần Giờ MyTime = #4:35:17 PM# trong hệ thống Giờ: Phút: MyHour = Hour(MyTime) KQ: MyHour=16 Giây IIf(đkiện, đúng, sai) Toán tử rẽ nhánh 3 ngôi LBound Trả ra số nhỏ nhất trong Dim MyArray(1 To 10, 5 To 15, 10 To 20) mảng Lower = Lbound(MyArray, 1); KQ: 1 Left(string, length) Trích các phần tử của 1 Dim AnyString, MyStr chuỗi từ lề trái. 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ỏ MyNumber = Int(99.9) ; KQ:99 hơn. MyNumber = Int(-99.9) ; KQ:-100 Mid Trích các phần tử của 1 X=Mid(“GiaoTrinhVB”,2,3); KQ: X=“iao” chuỗi từ vị trí chỉ định . A=Exp(2), KQ: A=e2 A = FormatNumber(1.545,1),KQ: A=1.5 x=Hex(11), KQ: x=B A=IIf(10>0,1,0); KQ: A=1 vì 10>0 ÑH Noâng Laâm TP.HCM 43 BM: Ñieàu khieån Töï ñoäng 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 Minute(time) Trả ra thành phần Phút MyTime = #4:35:17 PM# trong hệ thống Giờ: Phút: MyMinute = Minute(MyTime) Giây KQ: MyMinute=35 Month(date) Trả ra thành phần tháng Dim MyDate, MyMonth trong hệ thống tháng: MyDate = #February 12, 1969# Ngày:Năm. MyMonth = Month(MyDate); KQ: 2 MsgBox Xuất hiện hộp thoại thông MsgBox(“Xin Chao”,VBOkOnly,”Vidu”) báo. 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 Red,Green,Blue Right(string, length) Trích các phần tử của 1 Dim Chuoi, tr chuỗi từ lề phải. 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 Second(time) Trả ra thành phần Giây MyTime = #4:35:17 PM# trong hệ thống Giờ: Phút: MySecond = Second(MyTime) KQ: MySecond=17 Giây Sgn(number) Xét dấu của 1 số Shell(pathname) thực thi một chương trình RetVal = EXE Shell("C:\WINDOWS\CALC.EXE", 1) “ Chạy chương trình Calculator. Sin(x) Tính sin của x Space(number) Tạo 1 chuỗi với nhiều A=Space(5), KQ: A=“ khoảng trắng. 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, TimeSerial, TimeValue màu Picture1.BackColor=RGB(255,0,0) KQ: Picture1 có màu nền đỏ. Round(1.5216); KQ: 2 Round(1.515645,3); KQ: 1.516 Sgn(2.15), KQ: 1 Sgn(-2),KQ: -1 A=cos(π/6); Kết quả A=1/2 “ Timer, Các hàm thời gian ÑH Noâng Laâm TP.HCM 44 BM: Ñieàu khieån Töï ñoäng 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 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 Dim MyDate, MyYear trong hệ thống tháng: MyDate = #February 12, 1969# Ngày:Năm. MyYear = Month(MyDate); KQ: 1969 & (số & số) Logic And +,-,*,/ Toán tử toán học And, Or, Xor, Not Toá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 = Toán tử gán hoặc so sánh. >,>=,<,<= Toán tử so sánh End Kết thúc chương trình 15&10=10 ÑH Noâng Laâm TP.HCM 45 BM: Ñieàu khieån Töï ñoäng 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 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 ÑH Noâng Laâm TP.HCM 46 BM: Ñieàu khieån Töï ñoäng Lập trình giao tiếp máy tính bằng Visual Basic Menu Object Option Button (3d) Outline control 3d Panel Report control Shape controls Spin control Timer Vertical scroll bar Biên soạn: Hồ Thanh Tâm Lê V ăn Bạn mnu obj opt out pnl (3d) rpt shp spn tmr vsb mnuFileOpen objUserTable optRed outOrgChart pnlTitleList rptQtr1Earnings shpCircle spnPages tmrAlarm vsbRate ÑH Noâng Laâm TP.HCM 47 BM: Ñieàu khieån Töï ñoäng ...
View Full Document

{[ snackBarMessage ]}

Ask a homework question - tutors are online