SlideShare a Scribd company logo
1 of 84
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC VĂN HIẾN
KHOA ĐIỆN TỬ - VIỄN THÔNG
Bài Tập Lớn: Môn Truyền Số Liệu
GGIIAAOO TTIIẾẾPP MMÁÁYY TTÍÍNNHH -- VVĐĐKK
SSỬỬ DDỤỤNNGG CC## VVÀÀ VVBB
GVHD : Nguyễn Văn Khải
SVTH : Nguyễn Phước
TP.HCM, ngày 08 tháng 07 năm 2011
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 2
Mục lục
CHƯƠNG 1: MÔ PHỎNG GIAO TIẾP MÁY TÍNH SỬ DỤNG PROTEUS VÀ KEIL C.... 3
1.1 Chương trình hỗ trợ tạo cổng Com ảo ........................................................................ 3
1.2 Mạch mô phỏng vi điều khiển giao tiếp máy tính ...................................................... 3
1.3 Lập trình cho VĐK sử dụng Keil C............................................................................ 6
1.3.1 Các bước xây dựng dự án Keil C........................................................................ 6
1.3.2 Cấu trúc cơ bản một chương trình C cho VĐK trong Keil C ........................... 18
CHƯƠNG 2: SỬ DỤNG VISUAL BASIC 6.0 GIAO TIẾP VI ĐIỀU KHIỂN .................... 34
2.1 Thiết kế giao diện ..................................................................................................... 34
2.2 Viết chương trình thực thi......................................................................................... 44
CHƯƠNG 3: SỬ DỤNG VISUAL C# GIAO TIẾP VĐK..................................................... 48
CHƯƠNG 4: CÁC VÍ DỤ GIAO TIẾP MÁY TÍNH VÀ VĐK ............................................ 69
4.1 Giao tiếp máy tính điều khiển động cơ bước bằng C# ............................................. 69
4.1.1 Mô phỏng Proteus............................................................................................. 69
4.1.2 Viết chương trình Keil C cho VĐK.................................................................. 69
4.1.3 Giao diện điều khiển từ máy tính...................................................................... 71
4.2 Giao tiếp máy tính điều khiển động cơ DC bằng C#................................................ 72
4.2.1 Mô phỏng Proteus............................................................................................. 72
4.2.2 Viết chương trình Keil C cho VĐK.................................................................. 72
4.2.3 Giao diện C# điều khiển trên máy tính............................................................. 75
4.3 Giao tiếp máy tính điều khiển LCD 4 dòng bằng VB .............................................. 76
4.3.1 Mô phỏng Proteus............................................................................................. 76
4.3.2 Chương trình Keil C cho VĐK......................................................................... 76
4.3.3 Giao diện VB điều khiển trên máy tính............................................................ 79
4.4 Giao tiếp máy tính điều khiển 8 LED đơn bằng VB................................................. 79
4.4.1 Mô phỏng Proteus............................................................................................. 79
4.4.2 Viết chương trình Keil C cho VĐK.................................................................. 79
4.4.3 Giao diện VB điều khiển trên máy tính............................................................ 80
4.5 Giao tiếp máy tính điều khiển LED ma trận DC bằng C#........................................ 81
4.5.1 Mô phỏng Proteus............................................................................................. 81
4.5.2 Viết chương trình Keil C cho VĐK.................................................................. 81
4.5.3 Giao diện C# điều khiển trên máy tính............................................................. 84
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 3
CHƯƠNG 1: MÔ PHỎNG GIAO TIẾP MÁY TÍNH SỬ DỤNG
PROTEUS VÀ KEIL C
1.1 Chương trình hỗ trợ tạo cổng Com ảo
Virtual Serial Port Driver là chương trình giúp bạn tạo ra những cặp cổng com ảo,
vào nối chúng với nhau tạo một kết nối ảo để thực hiện truyền dữ liệu.
Sau khi cài đặt chương trình, bạn khởi động chương trình vào tạo một hoặc nhiều cổng
com ảo cho việc mô phỏng giao tiếp máy tính và vi điều khiển.
Chọn 2 cổng com mà bạn muốn kết nối và Click nút Add pair. Bạn sẽ có những cặp
cổng com được nối với nhau, như COM1 COM2, COM4 COM5
1.2 Mạch mô phỏng vi điều khiển giao tiếp máy tính
Khởi động chương trình mô phỏng mạch Proteus, lấy các linh kiện cần thiết và vẽ
mạch như hình dưới đây.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 4
Đây là mạch mô phỏng giao tiếp máy tính và vi điều khiển cơ bản nhất, tương
tác điều khiển led đơn, từ đây bạn có thể thay led thành các role để điều khiển động cơ
DC, động cơ bước (đảo chiều), …
Để thực hiện gửi và nhận dữ liệu giữa máy tính và vi điều khiển, bạn cần thiết
lập tần số thạch anh cho vi điều khiển, tùy chọn tên cổng com cho cổng com ảo. Các
bước thực hiện như sau.
Click đúp vào vi điều khiển bạn sẽ thấy hộp thoại Edit Component, ở dòng thông số
Clock Frequency, bạn nhập vào 11.0592MHz như hình dưới đây, và click OK
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 5
Tiếp theo, ta click đúp vào cổng com (COMPIM) để đổi tên cổng com
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 6
Tại dòng Physical port, ta chọn tên cổng com phù hợp. Việc chọn tên cổng com
tùy thuộc vào chương trình tạo cổng com ảo. Ở đây ta chọn COM2, vì trước đó ta có
kết nối đã được thiết lập giữa COM1 và COM2 bằng Virtual Serial Port Driver. Tương
ứng để gửi nhận dữ liệu giữa vi điều khiển và Máy tính, trong giao chương trình Giao
tiếp bằng C# hay VB ta phải chọn cổng com còn lại của cặp này là COM1
1.3 Lập trình cho VĐK sử dụng Keil C
1.3.1 Các bước xây dựng dự án Keil C
Sau khi khởi động Keil C, giao diện chương trình sẽ như hình sau
Để tạo dự án mới, ta vào menu Project > New Project…
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 7
Hộp thoại Create New Project hiện ra, bạn chọn thư mục để lưu dự án của mình và đặt
tên cho dự án mới. Sau đó click vào nút Save
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 8
Sau đó hộp thoại Select Device for Target hiện ra yêu cầu bạn phải chọn phần cứng –
loại IC mà bạn viết chương trình cho nó. Ở đây mình chọn IC AT89C51 của hàng
Atmel, họ MSC-51 (8051). Và click OK.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 9
Các bước khởi tạo dự án mới đã xong, bây giờ bạn bắt đầu thêm file vào dự án
của mình để có thể viết chương trình và biên dịch file hex nạp cho VĐK.
Vào menu File > New, một file mới đã được tạo. Tiếp theo bạn vào menu File > Save
để lưu file mới này.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 10
File mới có tên mặc định là Text1 được tạo ra như ta thấy trong cửa sổ làm việc ở trên.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 11
Bạn lưu ý phải lưu tên file và phần mở rộng phải là .c ví dụ như hình bên dưới
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 12
Tiếp theo sau khi lưu file mới, bạn click phải chuột vào cây thư mục của dự án, chọn
Add Files to Group ‘Source Group 1’ để thêm file mới vào dự án.
Chọn file và click vào nút Add và đóng của hộp thoại Add file lại
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 13
Sau khi hoàn tất thao tác trên bạn sẽ được như hình dưới này
Bước tiếp theo, ta sẽ tùy chọn cho dự án khi biên dịch sẽ tạo file hex nạp cho vi điều
khiển.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 14
Hộp thoại Option for Target 1 hiện ra bạn thiết lập như hình bên dưới.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 15
Bây giờ ta sẽ tiến hành biên dịch dự án của mình, sau khi thực hiện tất cả bước trên và
lưu ý là bạn đã viết chương trình vào file dự án của mình.
Kết quả biên dịch được Keil C báo cáo như hình bên dưới. File hex tương ứng đã được
tạo ra trong thư mục của dự án.
Để xem mức logic của các chân vi điều ta có thể thực hiện như hình dưới đây
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 16
Vào menu Peripherals > I/O-Ports và đánh dấu vào các port của vi điều khiển mà bạn
muốn xem mức logic khi thực thi chương trình của bạn.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 17
Click vào đoạn chương trình bất kì, Bấm phím F11 để chạy từng dòng lệnh mà ta đã
viết, xem kết quả xuất ra Port của vi điều khiển.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 18
1.3.2 Cấu trúc cơ bản một chương trình C cho VĐK trong Keil C
a. Phần đầu tiên là liệt kê các header file mà các bạn dùng bằng từ khóa
Code:
#include"tên header file"
hoặc
Code:
#include< tên header file>
Khi bạn viết theo cách thứ nhất thì trình biên dịch sẽ tìm kiếm file .h hoặc .c này trong
thư mục hiện tại chứa dự án của bạn, nếu không có thì sẽ tìm kiếm trong thư mục Inc
trong thư mục cài đặt KeilC.
Viết theo cách thứ hai thì trình biên dịch sẽ tìm luôn trong thư mục /INC luôn.
Để có thể sử dụng đúng các file .h cho các vi điều khiển của mình thì bạn nên mở thư
mục /inc trong thư mục này có các thư mục con như tên của hãng sản xuất. Ví dụ như
của Atmel thì bạn tìm trong thư mục /Atmel thì sẽ thấy được file reg51.h ,.. Bạn mở
từng file nên mà khám phá sẽ có nhiều điều hay đấy.
b. Định nghĩa các macro cho chương trình sáng sủa. Việc định nghĩa này được dùng
bằng từ khóa #define
Ví dụ: bạn định nghĩa led1 là P1_0 tức là led1 được nối với chân 0 của Port 1.
Code:
#define led1 P1_0
c. Các hàm ngắt như ngắt timer0, timer1, ngắt nối tiếp, ngắt ngoài.
Ví dụ bạn dùng ngắt nối tiếp là ngắt 4 trong bảng vector ngắt thì hàm sẽ có dạng như
sau:
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 19
Code:
void inter_4(void) interrupt 4 using 2{
// làm gì thì làm ở đây
}
Cú pháp các ngắt khác cũng tương tự chỉ thay số 4 bằng số thứ tự của ngắt trong bảng
vector ngắt.
d. Các hàm con như Delay, khởi tạo,.. như:
Code:
void delay( unsigned char time){
//code viết ở đây
}
e. Chương trình chính:
Code:
void main(void){
// viết mã ở đây
}
đối tượng của chương trình là vi điều khiển nên hàm main không có giá trị trả về và
không có tham số đưa vào. Và thực chất cũng chẳng cần biến toàn cục vì ta chỉ cần viết
1 file thôi, nên không đưa biến toàn cục vào đây.
Kết luận, chương trình của chúng ta sẽ có dạng như sau:
Code:
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 20
// liệt kê header file
#inlucde"tên header file"
....................
// các marco
#define led1 P1_0
...........
// các hàm ngắt
void inter_1 interrupt 1 using 3{
}
..........
// các hàm bình thường
void delay( unsigned char time){
///
}
..............
// chương trình chính
void main(void){
}
Hàm trễ delay()
Có lẽ việc lập trình cho vi điều khiển một hàm không thể thiếu đó là trễ: như trễ khi
nháy led chẳng hạn (ví dụ đơn giản nhất), ...
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 21
Việc gây trễ trong Keil C có thể có nhiều cách khác nhau:
Hàm delay có tham số là thời gian cần gây trễ tính theo ms
1. Dùng vòng lặp while, for
Dùng kiểu nào thì cũng đơn giản chỉ là vòng lặp mà thôi. Trong vòng lặp này ta sẽ
chẳng làm gì cả nên vi điều khiển sẽ bị mất thời gian trong các vòng lặp này.
Với tần số thạch anh 11.0582 MHz thì mỗi vòng lặp khi các bạn debug sẽ thấy là
chúng ta mất thời gian thực khoảng 8.28 us. Do đó để có thể gây trễ 1ms thì các bạn
cần dùng xấp xỉ 121 vòng lặp kiểu này.
Do đó hàm sẽ như sau:
Code:
void delay(usigned char time){
while(time--){
unsigned char temp = 121;
while(temp--); // chẳng làm gì cả
};
}
Việc chuyển đổi giữa vòng for với while trong trường hợp này rất đơn giản. Nhưng khi
đó bạn lại phải khai báo thêm một biến đếm như thế sẽ tốn bộ nhớ. Chương trình trên
là tối ưu nhất rồi.
2. Dùng timer0, timer1,..
Tiếp tục với hàm delay() theo cách dùng bộ định thời.
Các bạn đọc bài ở trên cũng thấy được là ta lập trình với các thanh ghi tương tự như
trong ASM.
TMOD là thanh ghi 8 bít dùng để thiết lập bộ định thời , các bạn xem lại thanh ghi này.
Dùng bộ định thời có 3 chế độ: chế độ 0, chế độ 1, chế độ 2. Chúng ta sẽ sử dụng chế
độ khởi động bộ định thời bằng phần mềm tức TMOD.3 và TMOD.7 = 0
Việc xác định chế độ nào phụ thuộc vào giá trị của 2 bit TM1 và TM0 của từng timer
(xem định nghĩa từng bít trong thanh ghi TMOD)
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 22
TM1=0 , TM0 =0 chế độ 0
TM1=0, TM0 =1 chế độ 1
TM1=1, TM0 =1 chế độ 2
Chế độ 1 là chế độ 16 bít không tự nạp lại, cách sử dụng bằng cách nạp giá trị cho các
thanh ghi TH1, TL1 (với Timer1), hoặc TL0, TH0 (với Timer0). Khi khởi động timer
bằng cách setb TR1 hoặc TR0 thì nó sẽ đếm từTHTL 0xFFFF khi từ 0xFFFF
0x0000 thì cờ TF1 hoặc TF0 sẽ bật lên sau đó chúng bị xóa thành 0. Chúng ta dùng cờ
này để biết khi nào chuyển qua 0x0000.
Chế độ 0 là chế độ 13 bít tương tự như chế độ 1 nhưng giá trị chỉ tăng đến 0x1FFF.
Chế độ 2, chế độ 8 bít tự nạp lại.
Tiếp theo là ta tính thời gian của mỗi lần tăng bộ định thời. Tấn số của bộ định thời
bằng 1/12 tần số của thạch anh, do đó với tần số 11,0592MHz thì chu kì máy bằng
1.085us.
Do vậy với chế độ 1 tối đa chúng ta sẽ gây trễ được là 65536*1.085 = 71106.56 us =
71.10656 ms.
Chế độ 2 max = 256 *1.085 =277.76 us
Chỉ cần gây trễ 1ms = 1000 us>277.76 nên dùng timer0( 16 bit) ở chế độ 0 thì ta tính
toán giá trị nạp cho timer0 như sau:
thời gian trễ = (65536 - giá trị nạp vào TH,TL+ 1) * 1.085.
Sau đó đổi giá trị ra số hex. Dùng Calculator của windows để đổi.
TH0 = FC, TL0 = 67
Vậy chương trình sẽ như sau:
Code:
void delay(unsigned char time){
while(time--){
TMOD = 0x01; // dùng timer0 ch ñ 1( 16 bit)
TH0 = 0xFC;// n p giá tr cho timer
TL0 = 0x67;
TR0 = 1; // kh i ñ ng b ñ nh th i
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 23
while( TF0); // ch khi nào c TF1 =1
TF0 = 0 ; // xóa c tràn
TR0 = 0; // d ng b ñ nh th i
};
}
Có lẽ người dùng Keil C lần đầu tiên gặp trở ngại khi dùng #include đó là không biết
liệt kê các header file nào cần thiết cho ứng dụng của mình.
Để có thể biết được header file nào dùng cho vi điều khiển của mình thì các bạn mở
thư mục cài Keil C ra, tìm đến thư mục C51/INC bạn sẽ thấy một loạt các thư mục của
các hãng như Atmel,Dalas,.. Tôi xin lấy ví dụ một file regx51.h trong thư mục /Atmel.
Bạn mở file đó lên sẽ thấy đầu đề của nó như sau:
Code:
*--------------------------------------------------------------------
AT89X51.H
Header file for the low voltage Flash Atmel AT89C51 and AT89LV51.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
-------------------------------------------------------------------*/
Chứng tỏ file này dùng cho con AT89C51 và AT89LV51 rồi. Khi đó bạn sẽ thêm
header file này vào chương trình của mình.
Còn làm thế nào để mình làm việc với các thành ghi, các port như trong ASM bây giờ.
Câu trả lời ở trong file này:
Code:
#ifndef __AT89X51_H__
#define __AT89X51_H__
/*------------------------------------------------
Byte Registers ; ð nh nghĩa các thành ghi các ñ a ch trong RAM
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 24
------------------------------------------------*/
sfr P0 = 0x80;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr P1 = 0x90;
sfr SCON = 0x98;
sfr SBUF = 0x99;
sfr P2 = 0xA0;
sfr IE = 0xA8;
sfr P3 = 0xB0;
sfr IP = 0xB8;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
/*------------------------------------------------
P0 Bit Registers ; ð nh nghĩa các c ng c a Port 0 vì port này là
thanh ghi 8 bít ñ nh ñư c ñ a ch tr c ti p
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 25
/*------------------------------------------------
PCON Bit Values
------------------------------------------------*/
#define IDL_ 0x01
#define STOP_ 0x02
#define PD_ 0x02 /* Alternate definition */
#define GF0_ 0x04
#define GF1_ 0x08
#define SMOD_ 0x80
/*------------------------------------------------
TCON Bit Registers
------------------------------------------------*/
sbit IT0 = 0x88;
sbit IE0 = 0x89;
sbit IT1 = 0x8A;
sbit IE1 = 0x8B;
sbit TR0 = 0x8C;
sbit TF0 = 0x8D;
sbit TR1 = 0x8E;
sbit TF1 = 0x8F;
/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/
#define T0_M0_ 0x01
#define T0_M1_ 0x02
#define T0_CT_ 0x04
#define T0_GATE_ 0x08
#define T1_M0_ 0x10
#define T1_M1_ 0x20
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 26
#define T1_CT_ 0x40
#define T1_GATE_ 0x80
#define T1_MASK_ 0xF0
#define T0_MASK_ 0x0F
/*------------------------------------------------
P1 Bit Registers
------------------------------------------------*/
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
sbit P1_2 = 0x92;
sbit P1_3 = 0x93;
sbit P1_4 = 0x94;
sbit P1_5 = 0x95;
sbit P1_6 = 0x96;
sbit P1_7 = 0x97;
/*------------------------------------------------
SCON Bit Registers
------------------------------------------------*/
sbit RI = 0x98;
sbit TI = 0x99;
sbit RB8 = 0x9A;
sbit TB8 = 0x9B;
sbit REN = 0x9C;
sbit SM2 = 0x9D;
sbit SM1 = 0x9E;
sbit SM0 = 0x9F;
/*------------------------------------------------
P2 Bit Registers
------------------------------------------------*/
sbit P2_0 = 0xA0;
sbit P2_1 = 0xA1;
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 27
sbit P2_2 = 0xA2;
sbit P2_3 = 0xA3;
sbit P2_4 = 0xA4;
sbit P2_5 = 0xA5;
sbit P2_6 = 0xA6;
sbit P2_7 = 0xA7;
/*------------------------------------------------
IE Bit Registers
------------------------------------------------*/
sbit EX0 = 0xA8; /* 1=Enable External interrupt 0 */
sbit ET0 = 0xA9; /* 1=Enable Timer 0 interrupt */
sbit EX1 = 0xAA; /* 1=Enable External interrupt 1 */
sbit ET1 = 0xAB; /* 1=Enable Timer 1 interrupt */
sbit ES = 0xAC; /* 1=Enable Serial port interrupt */
sbit ET2 = 0xAD; /* 1=Enable Timer 2 interrupt */
sbit EA = 0xAF; /* 0=Disable all interrupts */
/*------------------------------------------------
P3 Bit Registers (Mnemonics & Ports)
------------------------------------------------*/
sbit P3_0 = 0xB0;
sbit P3_1 = 0xB1;
sbit P3_2 = 0xB2;
sbit P3_3 = 0xB3;
sbit P3_4 = 0xB4;
sbit P3_5 = 0xB5;
sbit P3_6 = 0xB6;
sbit P3_7 = 0xB7;
sbit RXD = 0xB0; /* Serial data input */
sbit TXD = 0xB1; /* Serial data output */
sbit INT0 = 0xB2; /* External interrupt 0 */
sbit INT1 = 0xB3; /* External interrupt 1 */
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 28
sbit T0 = 0xB4; /* Timer 0 external input */
sbit T1 = 0xB5; /* Timer 1 external input */
sbit WR = 0xB6; /* External data memory write strobe */
sbit RD = 0xB7; /* External data memory read strobe */
/*------------------------------------------------
IP Bit Registers
------------------------------------------------*/
sbit PX0 = 0xB8;
sbit PT0 = 0xB9;
sbit PX1 = 0xBA;
sbit PT1 = 0xBB;
sbit PS = 0xBC;
sbit PT2 = 0xBD;
/*------------------------------------------------
PSW Bit Registers
------------------------------------------------*/
sbit P = 0xD0;
sbit FL = 0xD1;
sbit OV = 0xD2;
sbit RS0 = 0xD3;
sbit RS1 = 0xD4;
sbit F0 = 0xD5;
sbit AC = 0xD6;
sbit CY = 0xD7;
/*------------------------------------------------
Interrupt Vectors:
Interrupt Address = (Number * 8) + 3
------------------------------------------------*/
#define IE0_VECTOR 0 /* 0x03 External Interrupt 0 */
#define TF0_VECTOR 1 /* 0x0B Timer 0 */
#define IE1_VECTOR 2 /* 0x13 External Interrupt 1 */
#define TF1_VECTOR 3 /* 0x1B Timer 1 */
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 29
#define SIO_VECTOR 4 /* 0x23 Serial port */
#endif
Các bạn nhìn trên thấy là các thanh ghi, các port quả là giống như với ASM phải
không. Do vậy việc lập trình các bạn sẽ làm việc trực tiếp với các các địa chỉ của Ram
mà được định nghĩa ở trên
Giới thiệu các hàm ngắt.
Trong 8051 có 5 nguyên nhân sinh ra ngắt: ngắt ngoài 0, timer0, ngắt ngoài 1, timer1,
ngắt nối tiếp.
Các bạn lại mở file regx51.h ra ở phần cuối của file như sau:
Code:
/*------------------------------------------------
Interrupt Vectors:
Interrupt Address = (Number * 8) + 3
------------------------------------------------*/
#define IE0_VECTOR 0 /* 0x03 External Interrupt 0 */
#define TF0_VECTOR 1 /* 0x0B Timer 0 */
#define IE1_VECTOR 2 /* 0x13 External Interrupt 1 */
#define TF1_VECTOR 3 /* 0x1B Timer 1 */
#define SIO_VECTOR 4 /* 0x23 Serial port */
Địa chỉ của ngắt trong bảng vector ngắt = 8 * số thứ tự ngắt + 3,
số thứ tự ngắt = 0,1,2,3,4 như kí hiệu trong file đó. Như vậy địa chỉ trong RAM từ
0x03 đến 0x30 là dành cho bảng vector ngắt.
Cú pháp của hàm thực hiện ngắt như sau, hàm này không có tham số, không có kiểu trả
về nên là dạng
Code:
Void tên hàm(void)
Cú pháp chính như sau:
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 30
Code:
void inter0(void) interrupt 0 using 1{
} // ng t ngoài 0, dùng bank 1
Tương tự với các ngắt khác, ta thay số 0 bằng số thứ tự các ngắt tương ứng các ngắt
tương ứng.
Code:
void inter1(void) interrupt 1 using 1{
}
void inter2(void) interrupt 2 using 1{
}
Tiếp tục với 2 ngắt còn lại
Các bạn lưu ý là để vdk nhảy đến bảng vector ngắt thì bạn phải enable ngắt đó.
Ví dụ: bạn muốn ngắt nối tiếp thì phải cho như sau:
Các bạn xem lạ thanh ghi IE ở trong file regx51.h, thanh ghi này định được địa chỉ bit
Code:
EA = 1;// cho phép dùng ng t
ES = 1;// dùng ng t n i ti p
Hàm ngắt trong Keil C
Cách dùng hàm ngắt và một số đoạn code mẫu.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 31
Hàm ngắt là một hàm không có tham số, không có kiểu trả về. Vì thực chất các biến
mà hàm này thao tác chính là các biến toàn cục (các thanh ghi, các port).
Cấu trúc một hàm ngắt như sau:
Code:
void tenham(void) interrupt a using b{
// code
}
Trong đó: những chữ in nghiêng là bắt buộc phải có và using b có thể có hoặc không
có.
tên hàm: tùy các bạn chọn.
a : là thứ tự của ngắt trong bảng vector ngắt
a = 0 : ngắt ngoài 0
a = 1 : ngắt timer0
a = 2 : ngắt ngoài 1
a = 3 : ngắt timer1
a = 4 : ngắt nối tiếp
b: là bank được chọn dùng để thực hiện hàm ngắt. Do 8051 có 4 bank là bank 0, 1, 2, 3.
Do đó : b có thể là một trong các giá trị 0, 1, 2, 3.
Lưu ý: nếu không viết thêm using b thì mặc định là hàm ngắt thực hiện tại bank0.
Do đó, một thí dụ về hàm ngắt nối tiếp sẽ có dạng như sau:
void inter4(void) interrupt 4 using 2{
// mã th c hi n hàm
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 32
}
Sau đây là một đoạn chương trình tạo một xung ở chân P1.0 và khi nhận được dữ liệu
nối tiếp thì chuyển sang port P2. Tần số thạch anh là 11.0592 MHz. Dùng AT89C51
Code:
# include "regx51.h"
// ham gay tre
void delay(int time){
while(time--){
unsigned char j = 122;
while(j--);
};
}
// ham thiet lap ban dau
void init(){
EA = 1; // cho phep dung ngat
ES = 1; // dung ngat noi tiep
// Thiet lap tan so bus
TMOD = 0x02; // dung timer1, che do 8 bit tu nap lai
TH1 = 253; // chon tan so bus = 9600
TR1 = 1 ; // khoi dong timer1
}
// Ham ngat
void inter4(void) interrupt 4 using 2{
if (RI){ // kiem tra co tran nhan RI.
P2 = SBUF; // lay du lieu tu SBUF
RI = 0; // xoa co ngat
};
}
// ham main
void main(){
// tao xung tren chan P1.0
init();
while(1){
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 33
P1_0 = 1;
delay(500);
P1_0 = 0;
delay(500);
}
}
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 34
CHƯƠNG 2: SỬ DỤNG VISUAL BASIC 6.0 GIAO TIẾP VI
ĐIỀU KHIỂN
2.1 Thiết kế giao diện
Khởi động VISUAL BASIC 6.0 tử màn hình Desktop hoặc từ trình đơn Start
Menu. Màn hình làm việc của VB như hình dưới đây. Bao gồm thanh menu, thanh
công cụ, cửa sổ thư mục dự án, của sổ Properties, cửa sổ Form layout và Toolbox.
Để tạo một dự án VB mới, ta vào menu File > New Project (hoặc bấm tổ hợp phím Ctrl
+ N)
Hộp thoại New Project hiện ra, ta chọn loại chương trình, thường là Standard EXE (file
thực thi chuẩn). Click OK
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 35
Dự án mới của chúng ta được tạo ra ban đầu như hình dưới. Ta sẽ dử dụng Toolbox để
thêm các đối tượng vào form.
Để thay đổi thanh tiêu đề cho form, ta click vào form, quay lại của sổ Properties, tìm
đến dòng Caption để nhập dữ liệu.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 36
Lưu ý bạn nên save lại dự án trước khi thực hiện các bước tiếp theo bằng các bấm Ctrl
+ S hay Click biểu tượng Save trên thanh công cụ.
Đặt tên cho Form và Click nút Save.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 37
Tiếp tục đặt tên cho dự án, và lưu lại.
Bước tiếp theo là thêm các đối tượng tương tác trên form.
Để thêm một đối tượng vào form, bạn click vào đối tượng trên Toolbox, sau đó đưa
chuột vào form thiết kế rê chuột từ điểm đầu đến kết thúc tương ứng với kích thước
của đối tượng.
Hình trên chúng ta đã tạo một Label cho form. Bây giờ ta sẽ thay đổi các thuộc tính
của label này cho phù hợp yêu cầu.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 38
Cick vào label, tới cửa sổ Properties, tìm dòng Caption để thay đổi văn bản hiển thị của
label này.
Kết quả như hình sau:
Để thay đổi Font chữ, màu chữ, kích thước Font ta tìm đến dòng Font và ForeColor
trong cửa sổ Properties của đối tượng label này.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 39
Tiếp theo, chúng ta thêm vào làm việc với các đối tượng button, shape, textbox
Cũng như thao tác thêm label ở trên ta tiến hành click vào đối tượng và Click vào form
tại vị trí muốn đưa đối tượng vào.
Hình trên là kết quả sau khi chúng ta thêm 8 Shape tượng trung cho 8 led đơn mà ta
điều khiển.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 40
Để đổi shape vuông thành tròn bạn tìm đến dòng Shape trong cửa sổ Properties của
mỗi Shape và chọn dòng 3 – Circle
Thực hiện tương tự cho 7 shape còn lại.
Sau đó chúng ta đổi tên cho 8 shape này. Tìm đến dòng (Name) trong của sổ Properties
của Shape. Ta sẽ đổi tên 8 shape này đều là shapLed.
Tiếp theo ta thêm 8 label tương ứng 8 led đơn, để khi ta click vào label này các shape
sẽ đổi màu.
Kết quả thực hiện sẽ như hình bên dưới.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 41
Ta tiến hành đổi tên cho 8 label này thành labelLed, lưu ý ta có thể đổi tên tùy ý nhưng
các label này phải trùng tên nhau, để cho việc viết code dễ hơn, ta chỉ cần sử dụng
index của đối tượng để gọi đối tượng ra thực thi.
Sau đó chúng ta thêm vào nút nhấn, nút Gửi dữ liệu, nút Start/Stop và nút Thoát.
Để máy tính có thể gửi và nhận dữ liệu qua cổng com, chúng ta phải thêm đối tượng
cổng nối tiếp vào form. Các bước tiến hành như sau.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 42
Vào menu Project > Components… (hoặc bấm tổ hợp phím Ctrl + T)
Hộp thoại Components hiện ra, chúng ta tìm đến dòng Microsoft Comm Control 6.0 và
đánh dấu vào dòng đó, chon OK.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 43
Khi đó trên Toolbox sẽ có thêm đối tượng như hình , click vào đối tượng này và
click vào form để thêm cổng com cho form. Kết quả như hình bên dưới.
Click vào đối tượng này để thay đổi các thuộc tính như hình bên dưới.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 44
2.2 Viết chương trình thực thi
Bước tiếp theo chúng ta se viết lệnh cho các đối tượng. Để viết code, ta click phải
chuột vào form, chọn View Code.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 45
Cửa sổ Project1 – Form (code) hiện ra trong vùng làm việc. Trong trình sổ xuống
(General) sẽ chứa tất cả đối tượng mà ta đã thêm bên ngoài giao diện. Click và chọn
một đối tượng bất kỳ, ở đây chúng ta sẽ chọn đối tượng labelLED, sẽ xuất hiện 2 dòng
code như sau:
Private Sub LabelLED_Click(Index As Integer)
// l nh c n th c thi
End Sub
Hàm này sẽ thực thi những lệnh mà ta viết giữa hai dòng này khi click vào mỗi
labelLed.
Ta sẽ thêm dòng lệnh dưới đây vào giữa để hàm thực thi. Kết quả sẽ như sau:
Private Sub LabelLED_Click(Index As Integer)
ShapeLED(Index).FillStyle = 1 - ShapeLED(Index).FillStyle
End Sub
Bây giờ chúng ta sẽ nhấn phím F5 để chạy chương trình, kiểm tra lệnh mình vừa viết ở
trên.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 46
Kế đến chúng ta viết lệnh cho các button.
Lệnh thực thi cho nút Thoat
Private Sub cmdExit_Click()
Beep
End
End Sub
Lệnh thực thi cho nút Gui du lieu
Private Sub cmdSend_Click()
Dim t As Integer
Dim i As Integer
t = 0
For i = 0 To 7
t = t + (2 ^ i) * (1 - ShapeLED(i).FillStyle)
Next i
MSComm1.Output = Chr(t)
End Sub
Lệnh thực thi cho nút Stop
Private Sub cmdStop_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
cmdStop.Caption = "Start"
Else
cmdStop.Caption = "Stop"
MSComm1.PortOpen = True
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 47
End If
End Sub
Chúng ta phải thêm một hàm bên dưới để lúc form khởi động, sẽ tự động mở cổng
COM1 và cấu hình cho cổng com truyền dữ liệu.
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
End Sub
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 48
CHƯƠNG 3: SỬ DỤNG VISUAL C# GIAO TIẾP VĐK
Khởi động C#.
Tạo dự án mới: Vào menu File -> New Project … (Hoăc bấm Ctrl + Shift + N)
Hộp thoại New Project xuất hiện, chọn vào biểu tượng Window Application.
Sửa tên ứng dụng WindowsApplication1 thành tên chương trình của bạn, ví dụ như
Dkdongco, Donhietdo, .. lưu ý không nên viết có ký tự trống và tiếng việt trong tên
này!
Xong bạn Click OK
Giao diện ban đầu C# tự động tạo cho bạn như bên dưới
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 49
Các bạn có thể click chuột vào các góc của của sổ From1 và kéo cho nó thay đổi kích
thước vừa ý.
Giờ chúng ta sẽ làm việc với Form1 này.
Bạn Click vào vị trí bất kì trên form, sau đó qua cửa sổ thuộc tính, 2 thuộc tính bạn cần
quan tâm để chỉnh sửa là Name và Text
Lưu ý: Để thay đổi thuộc tính của bất cứ đối tượng nào, việc bắt buộc đầu tiên bạn
phải click chuột vào đối tượng đó.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 50
Các bạn có thể đổi sửa thuộc tính Name thành frmMain hay bất kí tên gì, có thể giữ
nguyên là Form1
Đối với thuộc tính Text, chính là dòng chữ hiển thị trên thanh tiêu đề của cửa sổ
chương trình, bạn nên đổi thành nội dung đề tài của bạn (VD: Chương trình theo dõi
nhiệt độ phòng máy, …), chương trình cho phép bạn nhập liệu tiếng việt.
Tiếp theo bạn đổi tên các file trong của sổ quản lý Project của chương trình như hình
bên dưới
Bước thứ hai là lúc bạn thêm các đối tượng lên của sổ form chính.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 51
- Đối tượng Label, để hiển thị các thông tin như là trường, lớp, tên đề tài, nhóm,
thành viên nhóm, …
Trong Cửa sổ Toolbox, bạn tìm đối tượng Label
Click chuột vào đối tượng label sau đó đưa chuột qua của sổ form, Click vào form tại
ví trí mà bạn muốn đặt label này
Bây giờ ta tiến hành thay đổi các thuộc tính của label này.
Click chuột vào label trên form, chứng ta chuyển qua của sổ Thuộc tính. Lúc này cửa
sổ thuộc tính sẽ chứa các thuộc tính của label này.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 52
Tương tự như form chính lúc nãy 2 thuộc tính bạn cần thay đổi đầu tiên là Name và
Text
Thuộc tính Name bạn thay đổi để khi viết chương trình bạn dễ nhớ khi gọi đối tượng
này ra xử lý, ở đây label này hiển thị tên trường nên mình đặt tên cho nó là
labelTruong.
Lưu ý:
+ Để hạn chế không bị nhầm lẫn giữa các đối tượng bạn nên thêm tiền tố label trước
tên của nó, để biết đối tượng này là loại label, label này để hiển thị Trường. Để dễ nhớ
thôi, chứ chương trình sẽ không cho 2 đối tượng trùng tên nhau.
+ Tên đối tượng bạn không được nhập khoảng trắng và không nên nhập tiếng
việt
Kết quả như hình dưới.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 53
Giờ bạn thay đổi Font chữ, màu chữ, kích thước chữ.
Vẫn Click chuột vào đối tượng label này.
Chuyển qua Cửa sổ Thuộc tính
Click vào nút … ở dòng Font, cửa sổ Font hiện ra, bạn chọn các thuộc tính font cho
vừa ý
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 54
Mình chọn Font Tahoma, In đậm, Size 18
Chọn màu chữ Blue. Kết quả thay đổi như sau
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 55
Tương tự để bạn thêm các label hiển thị lớp, nhóm, tên để tài, …
Bạn có thể Click chuột kéo rê các label đúng vị trí như ý muốn.
Bước tiếp theo, chúng ta tạo một Nút nhấn để khi bạn click vào nó, form điều khiển sẽ
hiện ra đồng thời form chính sẽ ẩn đi
- Đối tượng Button: sẽ thực hiện một công việc gì đó khi ta Click vào (theo code
ta viết)
Trong cửa sổ Toolbox, tìm dòng có đối tượng Button, Click vào dòng này. Sau đó
đưa chuột qua form, click vào vị trí muốn đặt button tren form.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 56
Ta đã có một nút nhấn trên giao diện chính. Bay giờ bạn tiến hành thay đổi các thuộc
tính cho nó. 2 thuộc tính cần thay đổi là Name và Text
Tương tự như đổi thuộc tính Name và Text của label bạn sẽ được kết quả như hình
dưới
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 57
Ngoài ra để nút nhấn của mình thêm phần sinh động, bạn có thể thay đổi font, màu
chữ, … hoặc thêm biểu tượng cho nó, bạn tự tìm hiểu thêm nhé, tất cả đều nằm trong
cửa sổ thuộc tính của button này.
Bây giờ chúng ta tạo một nút nhấn, để khi click vào, chương trình sẽ kết thúc.
Thực hiện tương tự như các bước tạo button ở trên, bạn thay đổi thuộc tính Name cho
nút nhấn này là buttonExit, màu chữ đỏ (tùy ý), Text là Exit hay Thoát, tùy ý bạn.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 58
Bước kế tiếp, tạo sự kiện đóng chương trình cho buttonExit này. Bạn click đúp vào
nút Thoát, cửa sổ viết code hiện ra, bạn gõ lệnh như sau:
private void buttonExit_Click(object sender, EventArgs e)
{
Application.Exit(); // Thoát ng d ng
}
Để thực hiện bước tiếp theo, chúng ta cần tạo ra một form mới có tên là
frmDieuKhien. Vì nút nhấn này khi click vào thì form điều khiển được hiển thị.
Trong cửa sổ Solution Explorer, bạn click phải vào tên chương trình và click vào
Windows From…
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 59
Hộp thoại Add New Item hiện ra, bạn đặt tên form mới này theo yêu cầu của mình
(VD là frmDieuKhien)
Click Ok để tạo form mới.
Giao diện form mới hiện ra trên cửa sổ làm việc. Bước đầu tiên bạn cũng tiến hành đổi
tên form, tiêu đề form như đã thực hiện với form chính lúc đầu.
Kết quả sau khi thực hiện mình có form điều khiển như hình dưới
Mẹo nhỏ: Để kích thước 2 form này giống nhau hoàn toàn, trong cửa sổ thuộc tính của
form chính (frmMain) bạn tìm đến dòng Size và copy 2 con số (rộng, cao). Sau đó
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 60
cũng tìm đến dòng Size của form điều khiển (frmDieuKhien) dán 2 con số này vào.
Enter
Bây giờ chúng sẽ viết lệnh tạo sự kiện để nút nhấn Bảng ĐK sẽ thực hiện khi nhấn vào
nó.
Chuyển qua form chính (frmMain), Click đúp vào Button Bảng ĐK. Cửa sổ viết code
của chương trình hiện ra, bạn viết những lệnh như dưới vào hàm sự kiện của
buttonNext, bạn không cần phải quan tâm đến các đoạn code khác.
private void buttonNext_Click(object sender, EventArgs e)
{
fromDieuKhien frmDK = new fromDieuKhien(); // Kh i t o bi n
"ñ i di n" form ñi u khi n
frmDK.Show(); // Hi n th form ñi u khi n
this.Hide(); // n form chính
}
Bây giờ bạn có thế Bấm phím F5 để chạy kiểm tra những gì mình vừa làm.
Như vậy chúng ta đã tương tác xong với form chính (frmMain) rồi giờ chúng ta sẽ
chuyển sang form điều khiển (frmDieuKhien) tạo các đối tượng, viết code cho nó.
Bước đầu tiên bạn tạo một button Thoát như ở form chính để khi click vào chương
trình sẽ thoát.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 61
Click đúp vào nút Thoát để viết code tạo sự kiện cho nó.
private void buttonExit_Click(object sender, EventArgs e)
{
Application.Exit(); // Thoát chương trình
}
Xong, giờ ta sẽ thêm các đối tượng như cổng nối tiếp, các nút nhấn, listbox chứa tên
cổng com, …
- SerialPort: đối tượng để truyền nhận dữ liệu qua công nối tiếp với VĐK
Để thêm một serial port, tương tự như đã thực hiện với các đối tượng trên.
Ta tiến hành đổi thuộc tính Name cho serialport này như hình bên dưới.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 62
Lưu ý: Mình đổi tên cổng nối tiếp này thành port. Các thuộc tín còn lại bạn hãy để như
mặc định.
- Listbox: đối tượng này sẽ chứa danh sách cổng com chúng ta sẽ kết nối
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 63
- Bây giờ chúng ta sẽ thay đổi thuộc tính Name và Item cho ListBox này.
+ Bạn đổi Name listBox1 thành listBoxComport.
+ Ở dòng Item, Bạn click vào nút … để thêm danh sách cổng Com cho listBox này
hiển thị
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 64
- Click OK, kết quả bạn sẽ thấy trên form điều khiển, một danh sách cổng com ta
vừa thêm. Lưu ý là tên cổng com không có khoảng trắng, không nhập tiếng việt. Trên
mỗi dòng chỉ nhập tên 1 cổng com
- Tiếp theo bạn tạo một button để thực hiện Ngắt kết nối cổng com khi không dùng
nữa. Button này có thuộc tính Name là buttonDisConnect và thuộc tính Text là Ngắt
kết nối, font, màu chữ tùy ý.
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 65
- Tạo một label để hiển thị tình trạng kết nối cổng com (như là báo lỗi, báo kết
nối thành công). Label này có thuộc tính Name là labelTinhTrang, thuộc tính Text
bạn để một khoảng trắng vì ban đầu chưa chạy chương trình thì chưa có thông báo gì.
- Giờ ta tiến hành thêm sự kiện cho nút buttonDisConnect và listBoxComPort
Click đúp vào nút Ngắt kết nối và viết code ngắt cổng com như sau:
if (port.IsOpen) // N u c ng com ñang m thì th c hi n l nh ti p
theo
{
port.Close(); // ðóng c ng com ñang m
labelTinhTrang.Text = "ðã ñóng c ng COM!"; // Thông báo ng t c ng com
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 66
labelTinhTrang.ForeColor = Color.Red; // ð i màu ch labelTinhTrang
thành ñ
}
Tiếp theo kết nối cổng com khi click chọn cổng com trong danh sách cổng com của
listBoxComPort
Click đúp vào danh sách cổng com (listBoxComPort) và viết code kết nối cổng
com như sau:
private void listBoxComPort_SelectedIndexChanged(object sender,
EventArgs e)
{
if (port.IsOpen) port.Close();
port.PortName = listBoxComPort.SelectedItem.ToString();
try {
port.Open();
labelTinhTrang.ForeColor = Color.Green;
labelTinhTrang.Text = "ðã m c ng " +
listBoxComPort.SelectedItem.ToString() + " thành công !";
} catch {
labelTinhTrang.ForeColor = Color.Red;
labelTinhTrang.Text = "Không th m c ng " +
listBoxComPort.SelectedItem.ToString() + " !";
}
}
- Bấm F5 để kiểm tra công việc, thử click vào dach sách cổng com xem kết quả
thông báo và Ngắt kết nối.
- Tạo các nút nhấn gửi dữ liệu xuống VĐK điều khiển Role
Các bước thực hiện như tạo nút ở trên
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 67
- Tiếp theo ta viết một hàm gửi ký tự qua cổng nối tiếp:
private void writeChar(string Char)
{
if (port.IsOpen) // N u c ng com ñã ñư c k t n i m i g i ký t
{
port.Write(Char); // G i m t ký t qua c ng Com
}
else // N u c ng com chưa k t n i thì hi n th h p tho i thông báo
{
MessageBox.Show("Vui lòng K t n i v i c ng COM!", "L i g i d li u",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
- Sau khi viết hàm gửi ký tự bạn có thể Click đúp vào các nút ROLE 1 đến ROLE
8 để tạo sự kiện gửi dữ liệu.
private void buttonRole1_Click(object sender, EventArgs e)
{
writeChar("1"); // G i ñi ký t s 1
}
…
…
private void buttonRole8_Click(object sender, EventArgs e)
{
writeChar("8"); // G i ñi ký t s 8
}
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 68
- Khi VĐK nhận được những kí tự này sẽ kiểm tra và xử lý, tùy theo chương trình
của bạn.
- Bấm F5 và chạy mô phỏng Proteus và kiểm tra. Trên giao diện bạn bạn COM5,
trong mô phỏng Proteus bạn chọn COM4, vì 2 cổng này là com ảo đã được tạo ra và
kết nối ảo với nhau nhờ chương trình Virtual Serial Port Driver.
- Để chương trình của bạn luôn hiển thị trên các cửa sổ còn lại, bạn chuyển qua
cửa sổ thuộc tính của frmMain, tìm đến dòng TopMost đổi thành True, làm tương tự
đối với frmDieuKhien
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 69
CHƯƠNG 4: CÁC VÍ DỤ GIAO TIẾP MÁY TÍNH VÀ VĐK
4.1 Giao tiếp máy tính điều khiển động cơ bước bằng C#
4.1.1 Mô phỏng Proteus
4.1.2 Viết chương trình Keil C cho VĐK
#include <REGX51.H>
sbit DC1 = P2^0;
sbit DC2 = P2^1;
sbit DC1STOP = P2^2;
sbit DC2STOP = P2^3;
char x;
sbit sw1 = P1^0;
sbit sw2 = P1^1;
sbit sw3 = P1^2;
sbit sw4 = P1^3;
sbit sw5 = P1^4;
sbit sw6 = P1^5;
void uart_init(){
SCON = 0x52;
TMOD = 0x22; // Timer 1 va Timer0 Mode 2
TH1 = TL1 = -3; // Toc do Baud la 9600
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 70
}
void sendData(char c){
TR1 = 1;
while(!TI);
TI = 0;
SBUF = c + 0x30;
}
void main(){
uart_init();
DC1STOP = 0;
DC2STOP = 0;
while(1){
if(sw1 == 0) {
DC1 = 0;
DC1STOP = 1;
sendData(1);
while(!sw1);
} else if(sw2 == 0){
DC1 = 1;
DC1STOP = 1;
sendData(2);
while(!sw2);
}
if(sw3 == 0) {
DC2 = 0;
DC2STOP = 1;
sendData(3);
while(!sw3);
} else if(sw4 == 0){
DC2 = 1;
DC2STOP = 1;
sendData(4);
while(!sw4);
}
if(sw5 == 0){
DC1STOP = 0;
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 71
sendData(5);
while(!sw5);
}
if(sw6 == 0){
DC2STOP = 0;
sendData(6);
while(!sw6);
}
TR1 = 1;
RI = 0;
x = SBUF;
switch(x){
case '1': DC1 = 0; DC1STOP = 1; break;
case '2': DC1 = 1; DC1STOP = 1; break;
case '3': DC2 = 0; DC2STOP = 1; break;
case '4': DC2 = 1; DC2STOP = 1;break;
case '5': DC1STOP = 0; break;
case '6': DC2STOP = 0; break;
}
}
}
4.1.3 Giao diện điều khiển từ máy tính
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 72
4.2 Giao tiếp máy tính điều khiển động cơ DC bằng C#
4.2.1 Mô phỏng Proteus
4.2.2 Viết chương trình Keil C cho VĐK
#include <REGX51.H>
sbit role1 = P2^0; // Dinh nghia cac chan dieu khien
sbit role2 = P2^1;
sbit role3 = P2^2;
sbit role4 = P2^3;
sbit role5 = P2^4;
sbit role6 = P2^5;
sbit role7 = P2^6;
sbit role8 = P2^7;
sbit sw1 = P1^0; // Dinh nghia cac chan phim nhan
sbit sw2 = P1^1;
sbit sw3 = P1^2;
sbit sw4 = P1^3;
sbit sw5 = P1^4;
sbit sw6 = P1^5;
sbit sw7 = P1^6;
sbit sw8 = P1^7;
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 73
char x;
void delay(int t); // Khai bao ham delay
void uart_init(); // Khai bao ham uart_init
void sendData(char c); // Khai bao ham senData
void main(){
uart_init(); // Goi ham khai bao truyen thong noi tiep
while(1){ // Vong lap chinh de thuc thi chuong
trinh mai mai
if(sw1 == 0) { // kiem tra neu phim sw1 - tuc la chan P1.0
duoc nhan
role1 = 0; role2 = 1; // Dua chan P2.0 xuong 0V va
chan P2.1 len 5V
sendData(1); // Gui len may tinh ki tu
so 1 qua cong noi tiep
while(!sw1); // kiem tra nha phim sw1 chua
}
if(sw2 == 0) {
role1 = 1; role2 = 0;
sendData(2);
while(!sw2);
}
if(sw3 == 0) {
role3 = 0; role4 = 1;
sendData(3);
while(!sw3);
}
if(sw4 == 0) {
role3 = 1; role4 = 0;
sendData(4);
while(!sw4);
}
if(sw5 == 0) {
role5 = 0; role6 = 1;
sendData(5);
while(!sw5);
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 74
}
if(sw6 == 0) {
role5 = 1; role6 = 0;
sendData(6);
while(!sw6);
}
if(sw7 == 0) {
role7 = 0; role8 = 1;
sendData(7);
while(!sw7);
}
if(sw8 == 0) {
role7 = 1; role8 = 0;
sendData(8);
while(!sw8);
}
TR1 = 1; // Cho Timer1 chay
RI = 0; // Dua co bao nhan noi tiep xuong 0V de
nhan du lieu tu cong noi tiep
x = SBUF; // Copy du lieu tu bo dem noi tiep vao bien x
switch(x){ // Cau truc chon du lieu trong bien x
case '1': role1 = 0; role2 = 1; break;// Neu bien x
= 1 (may tinh gui xuong ki tu 1) thi Set role1 = 0V va role2 = 1V;
case '2': role1 = 1; role2 = 0; break;
case '3': role3 = 0; role4 = 1; break;
case '4': role3 = 1; role4 = 0; break;
case '5': role5 = 0; role6 = 1; break;
case '6': role5 = 1; role6 = 0; break;
case '7': role7 = 0; role8 = 1; break;
case '8': role7 = 1; role8 = 0; break;
case 'a': role1 = 0; role2 = 0; break;
case 'b': role3 = 0; role4 = 0; break;
case 'c': role5 = 0; role6 = 0; break;
case 'd': role7 = 0; role8 = 0; break;
}
}
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 75
}
void uart_init(){ // Ham khoi tao gui nhan qua cong noi tiep
SCON = 0x52; //UART 8 bit; SM2/1/0=010, REN=1: cho phép thu;
TMOD = 0x22; // Timer 1 va Timer0 Mode 2
TH1 = TL1 = -3; // Toc do Baud la 9600
}
void sendData(char c){
TR1 = 1; // Cho timer chay
while(!TI); // Cho den khi co truyen len muc 1
TI = 0; // Dua co truyen xuong 0V
SBUF = c + 0x30; // Cong 0x30 vao bien x va Copy du lieu tu bien
x vao bo dem noi tiep (SBUF)
}
4.2.3 Giao diện C# điều khiển trên máy tính
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 76
4.3 Giao tiếp máy tính điều khiển LCD 4 dòng bằng VB
4.3.1 Mô phỏng Proteus
4.3.2 Chương trình Keil C cho VĐK
#include <REGX51.H>
#define LCD_PORT P0 //Dinh nghia Port da lieu cho LCD
#define LCD_RS P1_0
#define LCD_RW P1_1
#define LCD_EN P1_2
#define lcdLine1() lcd_write(0, 0x80) // Dong 1 LCD
#define lcdLine2() lcd_write(0, 0xc0) // Dong 2 LCD
#define lcdLine3() lcd_write(0, 0x94) // Dong 3 LCD
#define lcdLine4() lcd_write(0, 0xd4) // Dong 4 LCD
void uart_init();
void lcd_init();
void delay(unsigned int i){
while(i--);
}
void lcd_write(unsigned char mode, unsigned char d){
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 77
LCD_PORT = d;
LCD_RW = 0;
if(mode == 1) LCD_RS = 1;
else LCD_RS = 0;
LCD_EN = 1;
delay(4);
LCD_EN = 0;
delay(40);
}
void lcd_PutStr(char const *str){
char const *sPtr;
sPtr = str;
while(*sPtr != '0'){
lcd_write(1, *sPtr);
sPtr++;
}
}
void main(void){
unsigned char kt, pos, line, str[16];
uart_init();
lcd_init();
while(1){
TR1 = 1;
RI = 0;
kt = 0;
line = 0;
while(!RI);
str[kt++] = SBUF;
pos++;
if(str[0] == '~') line = 1;
if(str[0] == '!') line = 2;
if(str[0] == '`') line = 3;
if(str[0] == '^') line = 4;
if(line == 1) {
pos = 0;
lcdLine1();
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 78
}
if(line == 2) {
pos = 0;
lcdLine2();
}
if(line == 3) {
pos = 0;
lcdLine3();
}
if(line == 4) {
pos = 0;
lcdLine4();
}
if(pos > 0) lcd_PutStr(str);
}
}
void uart_init(){
SCON = 0x52;
TMOD = 0x22;
TH1 = TL1 = -3;
}
void lcd_init(){
lcd_write(0, 0x38); // Khoi tao LCD 4 dong, ma tran 5x7
lcd_write(0, 0x0C); // Bat LCD, Bat con tro
lcd_write(0, 0x01); // Xoa LCD
delay(500);
}
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 79
4.3.3 Giao diện VB điều khiển trên máy tính
4.4 Giao tiếp máy tính điều khiển 8 LED đơn bằng VB
4.4.1 Mô phỏng Proteus
4.4.2 Viết chương trình Keil C cho VĐK
#include <REGX51.H>
void uart_init();
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 80
void main(){
P2 = 0;
uart_init();
while(1){
TR1 = 1;
while(!RI);
RI = 0;
P2 = SBUF;
}
}
void uart_init(){
SCON = 0x52;
TMOD = 0x22;
TH1 = TL1 = -3;
}
4.4.3 Giao diện VB điều khiển trên máy tính
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 81
4.5 Giao tiếp máy tính điều khiển LED ma trận DC bằng C#
4.5.1 Mô phỏng Proteus
4.5.2 Viết chương trình Keil C cho VĐK
#include <REGX51.h>
#include <stdio.h>
unsigned char Mem[80];
unsigned char k,tg,sokt;
char j;
char n=0;
unsigned int x,d;
unsigned char code MaLed[] = { /// Quet cot
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //Dau cach
0xFF,0x07,0x03,0xB9,0x03,0x07,0xFF,0xFF, //A
0xFF,0x01,0x01,0x6D,0x01,0x93,0xFF,0xFF, //B
0xFF,0x83,0x01,0x7D,0x19,0x9B,0xFF,0xFF, //C
0xFF,0x01,0x01,0x7D,0x01,0x83,0xFF,0xFF, //D
0xFF,0x01,0x01,0x6D,0x6D,0xFF,0xFF,0xFF, //E
0xFF,0x01,0x01,0xed,0xED,0xFF,0xFF,0xFF, //F
0xFF,0x83,0x01,0x7D,0xAD,0x09,0x0B,0xFF, //G
0xFF,0x01,0x01,0xEF,0x01,0x01,0xFF,0xFF, //H
0xFF,0xFF,0x7D,0x01,0x01,0x7D,0xFF,0xFF, //I
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 82
0xFF,0xBF,0x3F,0x7D,0x01,0x81,0xFD,0xFF, //J
0xFF,0x01,0x01,0x83,0x19,0x7D,0xFF,0xFF, //K
0xFF,0xFF,0x01,0x01,0x3F,0x3F,0xFF,0xFF, //L
0x01,0x01,0xC7,0x0F,0xC7,0x01,0x01,0xFF, //M
0xFF,0x01,0x01,0xE3,0x8F,0x01,0x01,0xFF, //N
0xFF,0x83,0x01,0x7D,0x01,0x83,0xFF,0xFF, //O
0xFF,0x01,0x01,0xDD,0xC1,0xE3,0xFF,0xFF, //P
0xFF,0x83,0x01,0x7D,0x5D,0x01,0x83,0x7F, //Q
0xFF,0x01,0x01,0xCD,0x01,0x23,0xFF,0xFF, //R
0xFF,0xB3,0x21,0x6D,0x09,0x9B,0xFF,0xFF, //S
0xFF,0xF9,0xF9,0x01,0x01,0xF9,0xF9,0xFF, //T
0xFF,0x81,0x01,0x7F,0x01,0x81,0xFF,0xFF, //U
0xFF,0xE1,0x81,0x3F,0x81,0xE1,0xFF,0xFF, //V
0xE1,0x81,0x3F,0x87,0x87,0x3F,0x81,0xE1, //W
0xFF,0x39,0x11,0xC7,0xC7,0x11,0x39,0xFF, //X
0xFF,0xF9,0xE1,0x07,0x07,0xE1,0xF9,0xFF, //Y
0xFF,0x3D,0x1D,0x4D,0x65,0x71,0x79,0xFF //Z
};
void convert(unsigned char kytu) { // Ham chuyen ky tu sang ma Matrix
LED
// Va dua vao mot mang
unsigned int temp,i;
if (kytu > 64) temp = (kytu-64)*8;
else temp = 0;
for(i=temp; i<temp+8; i++)
Mem[k++] = MaLed[i];
}
void convert_str(unsigned char *str){
k=0;
//for(i=0;i<sokt*8;i++)
sokt=0;
while(*str){
convert(*str);
str++;
sokt++;
}
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 83
}
void dichtrai(void){
unsigned char temp,i;
temp = Mem[0];
for(i=0;i<(sokt*8-1);i++) Mem[i] = Mem[i+1];
Mem[sokt*8-1] = temp;
}
void main(void){
unsigned char kt=0,temp,ch,chuoi[8];
SCON = 0x52;
TMOD = 0x22; // Timer 1 va Timer0 Mode 2
TH1 = TL1 = -3; // Toc do Baud la 9600
IE = 0x82;
TH0 = TL0 = -100;
convert_str("08E1");
TR0 = 1;
TR1 = 1;
while(1){
//temp = _getkey();
//P1 = ~temp;
do {
temp = _getkey();
} while(temp != '@');
kt=0;
TR0 = 0;
do {
temp = _getkey();
ch = temp;
if (ch!='@') chuoi[kt++]=ch;
} while(ch != '@');
convert_str(chuoi);
TR0 = 1;
}
}
void NgatTimer0(void) interrupt 1 {
TR0 = TF0 = 0; // Dung Timer 0 va Xoa co tran
BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB
Trang 84
d++;
if(tg++>10) {
if(x==0x0000) x=0x0001;
P1 = 0xFF; // xoa du lieu tren cot
P0 = x%256;
P2 = x/256;
P1 = Mem[n];
x<<=1;
if(n++>=15) n=0;
tg=0;
}
if(d==2500) {
dichtrai();
d = 0;
}
TR0 = 1;
}
4.5.3 Giao diện C# điều khiển trên máy tính

More Related Content

What's hot

Bài Tập Kỹ Thuật Nhiệt (Có Đáp Án)
Bài Tập Kỹ Thuật Nhiệt (Có Đáp Án) Bài Tập Kỹ Thuật Nhiệt (Có Đáp Án)
Bài Tập Kỹ Thuật Nhiệt (Có Đáp Án) nataliej4
 
Kết cấu nhà phố - Nguyễn Văn Khánh
Kết cấu nhà phố - Nguyễn Văn KhánhKết cấu nhà phố - Nguyễn Văn Khánh
Kết cấu nhà phố - Nguyễn Văn KhánhHuytraining
 
Bài Giảng Kĩ Thuật Điện
Bài Giảng Kĩ Thuật ĐiệnBài Giảng Kĩ Thuật Điện
Bài Giảng Kĩ Thuật ĐiệnVũ Xuân Quỳnh
 
Lttt matlab chuong 4
Lttt matlab chuong 4Lttt matlab chuong 4
Lttt matlab chuong 4Hoa Cỏ May
 
Công thức Máy điện 1 - Chương 1 - Khái niệm chung máy điện
Công thức Máy điện 1 - Chương 1 - Khái niệm chung máy điệnCông thức Máy điện 1 - Chương 1 - Khái niệm chung máy điện
Công thức Máy điện 1 - Chương 1 - Khái niệm chung máy điệnMan_Ebook
 
Nghiên cứu điều khiển con lắc ngược quay.pdf
Nghiên cứu điều khiển con lắc ngược quay.pdfNghiên cứu điều khiển con lắc ngược quay.pdf
Nghiên cứu điều khiển con lắc ngược quay.pdfMan_Ebook
 
Xe hai bánh tự cân bằng.pdf
Xe hai bánh tự cân bằng.pdfXe hai bánh tự cân bằng.pdf
Xe hai bánh tự cân bằng.pdfMan_Ebook
 
Giáo Trình Khí cụ điện
Giáo Trình Khí cụ điệnGiáo Trình Khí cụ điện
Giáo Trình Khí cụ điệnTha Lam May Troi
 
Trinh bay ban ve chi tiet drawing tren creo
Trinh bay ban ve chi tiet  drawing tren creoTrinh bay ban ve chi tiet  drawing tren creo
Trinh bay ban ve chi tiet drawing tren creoCửa Hàng Vật Tư
 
Các phương pháp thiết kế bộ điều khiển PID.docx
Các phương pháp thiết kế bộ điều khiển PID.docxCác phương pháp thiết kế bộ điều khiển PID.docx
Các phương pháp thiết kế bộ điều khiển PID.docxhunhlhongthi
 

What's hot (20)

Bài Tập Kỹ Thuật Nhiệt (Có Đáp Án)
Bài Tập Kỹ Thuật Nhiệt (Có Đáp Án) Bài Tập Kỹ Thuật Nhiệt (Có Đáp Án)
Bài Tập Kỹ Thuật Nhiệt (Có Đáp Án)
 
Kết cấu nhà phố - Nguyễn Văn Khánh
Kết cấu nhà phố - Nguyễn Văn KhánhKết cấu nhà phố - Nguyễn Văn Khánh
Kết cấu nhà phố - Nguyễn Văn Khánh
 
Bài Giảng Kĩ Thuật Điện
Bài Giảng Kĩ Thuật ĐiệnBài Giảng Kĩ Thuật Điện
Bài Giảng Kĩ Thuật Điện
 
Lttt matlab chuong 4
Lttt matlab chuong 4Lttt matlab chuong 4
Lttt matlab chuong 4
 
Đề tài: Mô hình phân loại sản phẩm theo chiều cao dùng Arduino
Đề tài: Mô hình phân loại sản phẩm theo chiều cao dùng ArduinoĐề tài: Mô hình phân loại sản phẩm theo chiều cao dùng Arduino
Đề tài: Mô hình phân loại sản phẩm theo chiều cao dùng Arduino
 
Công thức Máy điện 1 - Chương 1 - Khái niệm chung máy điện
Công thức Máy điện 1 - Chương 1 - Khái niệm chung máy điệnCông thức Máy điện 1 - Chương 1 - Khái niệm chung máy điện
Công thức Máy điện 1 - Chương 1 - Khái niệm chung máy điện
 
Unit 11 cultures
Unit 11   culturesUnit 11   cultures
Unit 11 cultures
 
Nghiên cứu điều khiển con lắc ngược quay.pdf
Nghiên cứu điều khiển con lắc ngược quay.pdfNghiên cứu điều khiển con lắc ngược quay.pdf
Nghiên cứu điều khiển con lắc ngược quay.pdf
 
Đề tài: Ứng dụng xử lý ảnh trong hệ thống phân loại sản phẩm
Đề tài: Ứng dụng xử lý ảnh trong hệ thống phân loại sản phẩmĐề tài: Ứng dụng xử lý ảnh trong hệ thống phân loại sản phẩm
Đề tài: Ứng dụng xử lý ảnh trong hệ thống phân loại sản phẩm
 
Đề tài: Ứng dụng xử lý ảnh thiết kế mạch chống trộm thông minh
Đề tài: Ứng dụng xử lý ảnh thiết kế mạch chống trộm thông minhĐề tài: Ứng dụng xử lý ảnh thiết kế mạch chống trộm thông minh
Đề tài: Ứng dụng xử lý ảnh thiết kế mạch chống trộm thông minh
 
Đề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAY
Đề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAYĐề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAY
Đề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAY
 
Xe hai bánh tự cân bằng.pdf
Xe hai bánh tự cân bằng.pdfXe hai bánh tự cân bằng.pdf
Xe hai bánh tự cân bằng.pdf
 
Giáo Trình Khí cụ điện
Giáo Trình Khí cụ điệnGiáo Trình Khí cụ điện
Giáo Trình Khí cụ điện
 
Đề tài: Ứng dụng PLC S7 đo, điều khiển và cảnh báo nhiệt độ trong lò
Đề tài: Ứng dụng PLC S7 đo, điều khiển và cảnh báo nhiệt độ trong lòĐề tài: Ứng dụng PLC S7 đo, điều khiển và cảnh báo nhiệt độ trong lò
Đề tài: Ứng dụng PLC S7 đo, điều khiển và cảnh báo nhiệt độ trong lò
 
Đề tài: Robot dò line điều khiển qua điện thoại, HAY, 9đ
Đề tài: Robot dò line điều khiển qua điện thoại, HAY, 9đĐề tài: Robot dò line điều khiển qua điện thoại, HAY, 9đ
Đề tài: Robot dò line điều khiển qua điện thoại, HAY, 9đ
 
Thi công mạch điều khiển tốc độ động cơ DC sử dụng thuật toán Pid
Thi công mạch điều khiển tốc độ động cơ DC sử dụng thuật toán PidThi công mạch điều khiển tốc độ động cơ DC sử dụng thuật toán Pid
Thi công mạch điều khiển tốc độ động cơ DC sử dụng thuật toán Pid
 
Đề tài: Nghiên cứu thiết kế mô hình trạm cấp phôi tự động, HAY
Đề tài: Nghiên cứu thiết kế mô hình trạm cấp phôi tự động, HAYĐề tài: Nghiên cứu thiết kế mô hình trạm cấp phôi tự động, HAY
Đề tài: Nghiên cứu thiết kế mô hình trạm cấp phôi tự động, HAY
 
Trinh bay ban ve chi tiet drawing tren creo
Trinh bay ban ve chi tiet  drawing tren creoTrinh bay ban ve chi tiet  drawing tren creo
Trinh bay ban ve chi tiet drawing tren creo
 
Các phương pháp thiết kế bộ điều khiển PID.docx
Các phương pháp thiết kế bộ điều khiển PID.docxCác phương pháp thiết kế bộ điều khiển PID.docx
Các phương pháp thiết kế bộ điều khiển PID.docx
 
Đề tài: Mô hình đếm, phân loại sản phẩm theo cân nặng màu sắc
Đề tài: Mô hình đếm, phân loại sản phẩm theo cân nặng màu sắcĐề tài: Mô hình đếm, phân loại sản phẩm theo cân nặng màu sắc
Đề tài: Mô hình đếm, phân loại sản phẩm theo cân nặng màu sắc
 

Similar to Đề tài: Giao tiếp máy tính - VĐK sử dụng C# và VB, HAY, 9đ

Hệ thu thập dữ liệu điều khiển và truyền số liệu
Hệ thu thập dữ liệu điều khiển và truyền số liệuHệ thu thập dữ liệu điều khiển và truyền số liệu
Hệ thu thập dữ liệu điều khiển và truyền số liệuantonlethinh
 
Giáo Trình Revit Mep
Giáo Trình Revit MepGiáo Trình Revit Mep
Giáo Trình Revit MepHuytraining
 
Control builder
Control builderControl builder
Control builderquanglocbp
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.netvvpcdsptin
 
Huongdandungdoccat
HuongdandungdoccatHuongdandungdoccat
Huongdandungdoccatboy2006165
 
Phần mềm RCBc - Tính toán cốt thép dầm
Phần mềm RCBc - Tính toán cốt thép dầmPhần mềm RCBc - Tính toán cốt thép dầm
Phần mềm RCBc - Tính toán cốt thép dầmDaohathiepThiep
 
Design by contract va cong cu ho tro c#
Design by contract va cong cu ho tro c#Design by contract va cong cu ho tro c#
Design by contract va cong cu ho tro c#Vcoi Vit
 
Tim hieu-cong-nghe-design-by-contract-va-xay-dung-cong-cu-ho-tro-cho-c#
Tim hieu-cong-nghe-design-by-contract-va-xay-dung-cong-cu-ho-tro-cho-c#Tim hieu-cong-nghe-design-by-contract-va-xay-dung-cong-cu-ho-tro-cho-c#
Tim hieu-cong-nghe-design-by-contract-va-xay-dung-cong-cu-ho-tro-cho-c#Tam Thanh
 
Windows Programming Tác giả: Bộ môn Công nghệ phần mềm; Người hướng dẫn: -; ...
Windows Programming Tác giả: Bộ môn Công nghệ phần mềm;  Người hướng dẫn: -; ...Windows Programming Tác giả: Bộ môn Công nghệ phần mềm;  Người hướng dẫn: -; ...
Windows Programming Tác giả: Bộ môn Công nghệ phần mềm; Người hướng dẫn: -; ...VTrung46
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#Hihi Hung
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#LanLT2011
 
Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]
Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]
Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]leduyk11
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#LanLT2011
 

Similar to Đề tài: Giao tiếp máy tính - VĐK sử dụng C# và VB, HAY, 9đ (20)

Hệ thu thập dữ liệu điều khiển và truyền số liệu
Hệ thu thập dữ liệu điều khiển và truyền số liệuHệ thu thập dữ liệu điều khiển và truyền số liệu
Hệ thu thập dữ liệu điều khiển và truyền số liệu
 
Bon nuoc win_cc
Bon nuoc win_ccBon nuoc win_cc
Bon nuoc win_cc
 
Giáo Trình Revit Mep
Giáo Trình Revit MepGiáo Trình Revit Mep
Giáo Trình Revit Mep
 
Control builder
Control builderControl builder
Control builder
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.net
 
Huongdandungdoccat
HuongdandungdoccatHuongdandungdoccat
Huongdandungdoccat
 
Phần mềm RCBc - Tính toán cốt thép dầm
Phần mềm RCBc - Tính toán cốt thép dầmPhần mềm RCBc - Tính toán cốt thép dầm
Phần mềm RCBc - Tính toán cốt thép dầm
 
Design by contract va cong cu ho tro c#
Design by contract va cong cu ho tro c#Design by contract va cong cu ho tro c#
Design by contract va cong cu ho tro c#
 
Tim hieu-cong-nghe-design-by-contract-va-xay-dung-cong-cu-ho-tro-cho-c#
Tim hieu-cong-nghe-design-by-contract-va-xay-dung-cong-cu-ho-tro-cho-c#Tim hieu-cong-nghe-design-by-contract-va-xay-dung-cong-cu-ho-tro-cho-c#
Tim hieu-cong-nghe-design-by-contract-va-xay-dung-cong-cu-ho-tro-cho-c#
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.net
 
Windows Programming Tác giả: Bộ môn Công nghệ phần mềm; Người hướng dẫn: -; ...
Windows Programming Tác giả: Bộ môn Công nghệ phần mềm;  Người hướng dẫn: -; ...Windows Programming Tác giả: Bộ môn Công nghệ phần mềm;  Người hướng dẫn: -; ...
Windows Programming Tác giả: Bộ môn Công nghệ phần mềm; Người hướng dẫn: -; ...
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#
 
C# cơ bản hay
C# cơ bản hayC# cơ bản hay
C# cơ bản hay
 
Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]
Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]
Lập trình c# 2008 cơ bản (nhất nghệ) [thủ thuật it 360]
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#
 
005. LAP TRINH C#.pdf
005. LAP TRINH C#.pdf005. LAP TRINH C#.pdf
005. LAP TRINH C#.pdf
 
005. LAP TRINH C#.pdf
005. LAP TRINH C#.pdf005. LAP TRINH C#.pdf
005. LAP TRINH C#.pdf
 
access
accessaccess
access
 

More from Dịch vụ viết bài trọn gói ZALO 0917193864

Danh sách 200 đề tài luận văn thạc sĩ tài chính ngân hàng, từ sinh viên giỏi
Danh sách 200 đề tài luận văn thạc sĩ tài chính ngân hàng, từ sinh viên giỏiDanh sách 200 đề tài luận văn thạc sĩ tài chính ngân hàng, từ sinh viên giỏi
Danh sách 200 đề tài luận văn thạc sĩ tài chính ngân hàng, từ sinh viên giỏiDịch vụ viết bài trọn gói ZALO 0917193864
 

More from Dịch vụ viết bài trọn gói ZALO 0917193864 (20)

200 de tai khoa luạn tot nghiep nganh tam ly hoc
200 de tai khoa luạn tot nghiep nganh tam ly hoc200 de tai khoa luạn tot nghiep nganh tam ly hoc
200 de tai khoa luạn tot nghiep nganh tam ly hoc
 
Danh sách 200 đề tài luận văn tốt nghiệp ngành khách sạn,10 điểm
Danh sách 200 đề tài luận văn tốt nghiệp ngành khách sạn,10 điểmDanh sách 200 đề tài luận văn tốt nghiệp ngành khách sạn,10 điểm
Danh sách 200 đề tài luận văn tốt nghiệp ngành khách sạn,10 điểm
 
Danh sách 200 đề tài luận văn thạc sĩ ngân hàng, hay nhất
Danh sách 200 đề tài luận văn thạc sĩ ngân hàng, hay nhấtDanh sách 200 đề tài luận văn thạc sĩ ngân hàng, hay nhất
Danh sách 200 đề tài luận văn thạc sĩ ngân hàng, hay nhất
 
Danh sách 200 đề tài luận văn thạc sĩ ngữ văn, hay nhất
Danh sách 200 đề tài luận văn thạc sĩ ngữ văn, hay nhấtDanh sách 200 đề tài luận văn thạc sĩ ngữ văn, hay nhất
Danh sách 200 đề tài luận văn thạc sĩ ngữ văn, hay nhất
 
Danh sách 200 đề tài luận văn thạc sĩ ô tô, 10 điểm
Danh sách 200 đề tài luận văn thạc sĩ ô tô, 10 điểmDanh sách 200 đề tài luận văn thạc sĩ ô tô, 10 điểm
Danh sách 200 đề tài luận văn thạc sĩ ô tô, 10 điểm
 
Danh sách 200 đề tài luận văn thạc sĩ quản lý giáo dục mầm non, mới nhất
Danh sách 200 đề tài luận văn thạc sĩ quản lý giáo dục mầm non, mới nhấtDanh sách 200 đề tài luận văn thạc sĩ quản lý giáo dục mầm non, mới nhất
Danh sách 200 đề tài luận văn thạc sĩ quản lý giáo dục mầm non, mới nhất
 
Danh sách 200 đề tài luận văn thạc sĩ quản trị rủi ro, hay nhất
Danh sách 200 đề tài luận văn thạc sĩ quản trị rủi ro, hay nhấtDanh sách 200 đề tài luận văn thạc sĩ quản trị rủi ro, hay nhất
Danh sách 200 đề tài luận văn thạc sĩ quản trị rủi ro, hay nhất
 
Danh sách 200 đề tài luận văn thạc sĩ tài chính ngân hàng, từ sinh viên giỏi
Danh sách 200 đề tài luận văn thạc sĩ tài chính ngân hàng, từ sinh viên giỏiDanh sách 200 đề tài luận văn thạc sĩ tài chính ngân hàng, từ sinh viên giỏi
Danh sách 200 đề tài luận văn thạc sĩ tài chính ngân hàng, từ sinh viên giỏi
 
Danh sách 200 đề tài luận văn thạc sĩ tiêm chủng mở rộng, 10 điểm
Danh sách 200 đề tài luận văn thạc sĩ tiêm chủng mở rộng, 10 điểmDanh sách 200 đề tài luận văn thạc sĩ tiêm chủng mở rộng, 10 điểm
Danh sách 200 đề tài luận văn thạc sĩ tiêm chủng mở rộng, 10 điểm
 
danh sach 200 de tai luan van thac si ve rac nhua
danh sach 200 de tai luan van thac si ve rac nhuadanh sach 200 de tai luan van thac si ve rac nhua
danh sach 200 de tai luan van thac si ve rac nhua
 
Kinh Nghiệm Chọn 200 Đề Tài Tiểu Luận Chuyên Viên Chính Trị Hay Nhất
Kinh Nghiệm Chọn 200 Đề Tài Tiểu Luận Chuyên Viên Chính Trị Hay NhấtKinh Nghiệm Chọn 200 Đề Tài Tiểu Luận Chuyên Viên Chính Trị Hay Nhất
Kinh Nghiệm Chọn 200 Đề Tài Tiểu Luận Chuyên Viên Chính Trị Hay Nhất
 
Kho 200 Đề Tài Bài Luận Văn Tốt Nghiệp Ngành Kế Toán, 9 điểm
Kho 200 Đề Tài Bài Luận Văn Tốt Nghiệp Ngành Kế Toán, 9 điểmKho 200 Đề Tài Bài Luận Văn Tốt Nghiệp Ngành Kế Toán, 9 điểm
Kho 200 Đề Tài Bài Luận Văn Tốt Nghiệp Ngành Kế Toán, 9 điểm
 
Kho 200 Đề Tài Luận Văn Ngành Thủy Sản, từ các trường đại học
Kho 200 Đề Tài Luận Văn Ngành Thủy Sản, từ các trường đại họcKho 200 Đề Tài Luận Văn Ngành Thủy Sản, từ các trường đại học
Kho 200 Đề Tài Luận Văn Ngành Thủy Sản, từ các trường đại học
 
Kho 200 đề tài luận văn ngành thương mại điện tử
Kho 200 đề tài luận văn ngành thương mại điện tửKho 200 đề tài luận văn ngành thương mại điện tử
Kho 200 đề tài luận văn ngành thương mại điện tử
 
Kho 200 đề tài luận văn tốt nghiệp ngành điện tử viễn thông, 9 điểm
Kho 200 đề tài luận văn tốt nghiệp ngành điện tử viễn thông, 9 điểmKho 200 đề tài luận văn tốt nghiệp ngành điện tử viễn thông, 9 điểm
Kho 200 đề tài luận văn tốt nghiệp ngành điện tử viễn thông, 9 điểm
 
Kho 200 Đề Tài Luận Văn Tốt Nghiệp Ngành Giáo Dục Tiểu Học
Kho 200 Đề Tài Luận Văn Tốt Nghiệp Ngành Giáo Dục Tiểu HọcKho 200 Đề Tài Luận Văn Tốt Nghiệp Ngành Giáo Dục Tiểu Học
Kho 200 Đề Tài Luận Văn Tốt Nghiệp Ngành Giáo Dục Tiểu Học
 
Kho 200 đề tài luận văn tốt nghiệp ngành luật, hay nhất
Kho 200 đề tài luận văn tốt nghiệp ngành luật, hay nhấtKho 200 đề tài luận văn tốt nghiệp ngành luật, hay nhất
Kho 200 đề tài luận văn tốt nghiệp ngành luật, hay nhất
 
Kho 200 đề tài luận văn tốt nghiệp ngành quản trị văn phòng, 9 điểm
Kho 200 đề tài luận văn tốt nghiệp ngành quản trị văn phòng, 9 điểmKho 200 đề tài luận văn tốt nghiệp ngành quản trị văn phòng, 9 điểm
Kho 200 đề tài luận văn tốt nghiệp ngành quản trị văn phòng, 9 điểm
 
Kho 200 Đề Tài Luận Văn Tốt Nghiệp Ngành Sư Phạm Tin Học
Kho 200 Đề Tài Luận Văn Tốt Nghiệp Ngành Sư Phạm Tin HọcKho 200 Đề Tài Luận Văn Tốt Nghiệp Ngành Sư Phạm Tin Học
Kho 200 Đề Tài Luận Văn Tốt Nghiệp Ngành Sư Phạm Tin Học
 
Kho 200 Đề Tài Luận Văn Tốt Nghiệp Ngành Xuất Nhập Khẩu
Kho 200 Đề Tài Luận Văn Tốt Nghiệp Ngành Xuất Nhập KhẩuKho 200 Đề Tài Luận Văn Tốt Nghiệp Ngành Xuất Nhập Khẩu
Kho 200 Đề Tài Luận Văn Tốt Nghiệp Ngành Xuất Nhập Khẩu
 

Recently uploaded

ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...Nguyen Thanh Tu Collection
 
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXHTư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXHThaoPhuong154017
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào môBryan Williams
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Nguyen Thanh Tu Collection
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...Nguyen Thanh Tu Collection
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...ThunTrn734461
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Nguyen Thanh Tu Collection
 
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...Nguyen Thanh Tu Collection
 
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...Học viện Kstudy
 
200 câu hỏi trắc nghiệm ôn tập PLDC.pdf
200 câu hỏi trắc nghiệm ôn tập  PLDC.pdf200 câu hỏi trắc nghiệm ôn tập  PLDC.pdf
200 câu hỏi trắc nghiệm ôn tập PLDC.pdfdong92356
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...Nguyen Thanh Tu Collection
 
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptxCHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx22146042
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 
cuộc cải cách của Lê Thánh Tông - Sử 11
cuộc cải cách của Lê Thánh Tông -  Sử 11cuộc cải cách của Lê Thánh Tông -  Sử 11
cuộc cải cách của Lê Thánh Tông - Sử 11zedgaming208
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...Nguyen Thanh Tu Collection
 
Bai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hocBai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hocVnPhan58
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxendkay31
 
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...Nguyen Thanh Tu Collection
 

Recently uploaded (20)

ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
 
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXHTư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
 
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
50 ĐỀ ĐỀ XUẤT THI VÀO 10 THPT SỞ GIÁO DỤC THANH HÓA MÔN TIẾNG ANH 9 CÓ TỰ LUẬ...
 
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
Slide Webinar Hướng dẫn sử dụng ChatGPT cho người mới bắt đầ...
 
200 câu hỏi trắc nghiệm ôn tập PLDC.pdf
200 câu hỏi trắc nghiệm ôn tập  PLDC.pdf200 câu hỏi trắc nghiệm ôn tập  PLDC.pdf
200 câu hỏi trắc nghiệm ôn tập PLDC.pdf
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
 
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptxCHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
CHƯƠNG VII LUẬT DÂN SỰ (2) Pháp luật đại cương.pptx
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
 
cuộc cải cách của Lê Thánh Tông - Sử 11
cuộc cải cách của Lê Thánh Tông -  Sử 11cuộc cải cách của Lê Thánh Tông -  Sử 11
cuộc cải cách của Lê Thánh Tông - Sử 11
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
 
Bai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hocBai 1 cong bo mot cong trinh nghien cuu khoa hoc
Bai 1 cong bo mot cong trinh nghien cuu khoa hoc
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
 
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
 

Đề tài: Giao tiếp máy tính - VĐK sử dụng C# và VB, HAY, 9đ

  • 1. BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC VĂN HIẾN KHOA ĐIỆN TỬ - VIỄN THÔNG Bài Tập Lớn: Môn Truyền Số Liệu GGIIAAOO TTIIẾẾPP MMÁÁYY TTÍÍNNHH -- VVĐĐKK SSỬỬ DDỤỤNNGG CC## VVÀÀ VVBB GVHD : Nguyễn Văn Khải SVTH : Nguyễn Phước TP.HCM, ngày 08 tháng 07 năm 2011
  • 2. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 2 Mục lục CHƯƠNG 1: MÔ PHỎNG GIAO TIẾP MÁY TÍNH SỬ DỤNG PROTEUS VÀ KEIL C.... 3 1.1 Chương trình hỗ trợ tạo cổng Com ảo ........................................................................ 3 1.2 Mạch mô phỏng vi điều khiển giao tiếp máy tính ...................................................... 3 1.3 Lập trình cho VĐK sử dụng Keil C............................................................................ 6 1.3.1 Các bước xây dựng dự án Keil C........................................................................ 6 1.3.2 Cấu trúc cơ bản một chương trình C cho VĐK trong Keil C ........................... 18 CHƯƠNG 2: SỬ DỤNG VISUAL BASIC 6.0 GIAO TIẾP VI ĐIỀU KHIỂN .................... 34 2.1 Thiết kế giao diện ..................................................................................................... 34 2.2 Viết chương trình thực thi......................................................................................... 44 CHƯƠNG 3: SỬ DỤNG VISUAL C# GIAO TIẾP VĐK..................................................... 48 CHƯƠNG 4: CÁC VÍ DỤ GIAO TIẾP MÁY TÍNH VÀ VĐK ............................................ 69 4.1 Giao tiếp máy tính điều khiển động cơ bước bằng C# ............................................. 69 4.1.1 Mô phỏng Proteus............................................................................................. 69 4.1.2 Viết chương trình Keil C cho VĐK.................................................................. 69 4.1.3 Giao diện điều khiển từ máy tính...................................................................... 71 4.2 Giao tiếp máy tính điều khiển động cơ DC bằng C#................................................ 72 4.2.1 Mô phỏng Proteus............................................................................................. 72 4.2.2 Viết chương trình Keil C cho VĐK.................................................................. 72 4.2.3 Giao diện C# điều khiển trên máy tính............................................................. 75 4.3 Giao tiếp máy tính điều khiển LCD 4 dòng bằng VB .............................................. 76 4.3.1 Mô phỏng Proteus............................................................................................. 76 4.3.2 Chương trình Keil C cho VĐK......................................................................... 76 4.3.3 Giao diện VB điều khiển trên máy tính............................................................ 79 4.4 Giao tiếp máy tính điều khiển 8 LED đơn bằng VB................................................. 79 4.4.1 Mô phỏng Proteus............................................................................................. 79 4.4.2 Viết chương trình Keil C cho VĐK.................................................................. 79 4.4.3 Giao diện VB điều khiển trên máy tính............................................................ 80 4.5 Giao tiếp máy tính điều khiển LED ma trận DC bằng C#........................................ 81 4.5.1 Mô phỏng Proteus............................................................................................. 81 4.5.2 Viết chương trình Keil C cho VĐK.................................................................. 81 4.5.3 Giao diện C# điều khiển trên máy tính............................................................. 84
  • 3. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 3 CHƯƠNG 1: MÔ PHỎNG GIAO TIẾP MÁY TÍNH SỬ DỤNG PROTEUS VÀ KEIL C 1.1 Chương trình hỗ trợ tạo cổng Com ảo Virtual Serial Port Driver là chương trình giúp bạn tạo ra những cặp cổng com ảo, vào nối chúng với nhau tạo một kết nối ảo để thực hiện truyền dữ liệu. Sau khi cài đặt chương trình, bạn khởi động chương trình vào tạo một hoặc nhiều cổng com ảo cho việc mô phỏng giao tiếp máy tính và vi điều khiển. Chọn 2 cổng com mà bạn muốn kết nối và Click nút Add pair. Bạn sẽ có những cặp cổng com được nối với nhau, như COM1 COM2, COM4 COM5 1.2 Mạch mô phỏng vi điều khiển giao tiếp máy tính Khởi động chương trình mô phỏng mạch Proteus, lấy các linh kiện cần thiết và vẽ mạch như hình dưới đây.
  • 4. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 4 Đây là mạch mô phỏng giao tiếp máy tính và vi điều khiển cơ bản nhất, tương tác điều khiển led đơn, từ đây bạn có thể thay led thành các role để điều khiển động cơ DC, động cơ bước (đảo chiều), … Để thực hiện gửi và nhận dữ liệu giữa máy tính và vi điều khiển, bạn cần thiết lập tần số thạch anh cho vi điều khiển, tùy chọn tên cổng com cho cổng com ảo. Các bước thực hiện như sau. Click đúp vào vi điều khiển bạn sẽ thấy hộp thoại Edit Component, ở dòng thông số Clock Frequency, bạn nhập vào 11.0592MHz như hình dưới đây, và click OK
  • 5. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 5 Tiếp theo, ta click đúp vào cổng com (COMPIM) để đổi tên cổng com
  • 6. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 6 Tại dòng Physical port, ta chọn tên cổng com phù hợp. Việc chọn tên cổng com tùy thuộc vào chương trình tạo cổng com ảo. Ở đây ta chọn COM2, vì trước đó ta có kết nối đã được thiết lập giữa COM1 và COM2 bằng Virtual Serial Port Driver. Tương ứng để gửi nhận dữ liệu giữa vi điều khiển và Máy tính, trong giao chương trình Giao tiếp bằng C# hay VB ta phải chọn cổng com còn lại của cặp này là COM1 1.3 Lập trình cho VĐK sử dụng Keil C 1.3.1 Các bước xây dựng dự án Keil C Sau khi khởi động Keil C, giao diện chương trình sẽ như hình sau Để tạo dự án mới, ta vào menu Project > New Project…
  • 7. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 7 Hộp thoại Create New Project hiện ra, bạn chọn thư mục để lưu dự án của mình và đặt tên cho dự án mới. Sau đó click vào nút Save
  • 8. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 8 Sau đó hộp thoại Select Device for Target hiện ra yêu cầu bạn phải chọn phần cứng – loại IC mà bạn viết chương trình cho nó. Ở đây mình chọn IC AT89C51 của hàng Atmel, họ MSC-51 (8051). Và click OK.
  • 9. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 9 Các bước khởi tạo dự án mới đã xong, bây giờ bạn bắt đầu thêm file vào dự án của mình để có thể viết chương trình và biên dịch file hex nạp cho VĐK. Vào menu File > New, một file mới đã được tạo. Tiếp theo bạn vào menu File > Save để lưu file mới này.
  • 10. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 10 File mới có tên mặc định là Text1 được tạo ra như ta thấy trong cửa sổ làm việc ở trên.
  • 11. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 11 Bạn lưu ý phải lưu tên file và phần mở rộng phải là .c ví dụ như hình bên dưới
  • 12. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 12 Tiếp theo sau khi lưu file mới, bạn click phải chuột vào cây thư mục của dự án, chọn Add Files to Group ‘Source Group 1’ để thêm file mới vào dự án. Chọn file và click vào nút Add và đóng của hộp thoại Add file lại
  • 13. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 13 Sau khi hoàn tất thao tác trên bạn sẽ được như hình dưới này Bước tiếp theo, ta sẽ tùy chọn cho dự án khi biên dịch sẽ tạo file hex nạp cho vi điều khiển.
  • 14. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 14 Hộp thoại Option for Target 1 hiện ra bạn thiết lập như hình bên dưới.
  • 15. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 15 Bây giờ ta sẽ tiến hành biên dịch dự án của mình, sau khi thực hiện tất cả bước trên và lưu ý là bạn đã viết chương trình vào file dự án của mình. Kết quả biên dịch được Keil C báo cáo như hình bên dưới. File hex tương ứng đã được tạo ra trong thư mục của dự án. Để xem mức logic của các chân vi điều ta có thể thực hiện như hình dưới đây
  • 16. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 16 Vào menu Peripherals > I/O-Ports và đánh dấu vào các port của vi điều khiển mà bạn muốn xem mức logic khi thực thi chương trình của bạn.
  • 17. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 17 Click vào đoạn chương trình bất kì, Bấm phím F11 để chạy từng dòng lệnh mà ta đã viết, xem kết quả xuất ra Port của vi điều khiển.
  • 18. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 18 1.3.2 Cấu trúc cơ bản một chương trình C cho VĐK trong Keil C a. Phần đầu tiên là liệt kê các header file mà các bạn dùng bằng từ khóa Code: #include"tên header file" hoặc Code: #include< tên header file> Khi bạn viết theo cách thứ nhất thì trình biên dịch sẽ tìm kiếm file .h hoặc .c này trong thư mục hiện tại chứa dự án của bạn, nếu không có thì sẽ tìm kiếm trong thư mục Inc trong thư mục cài đặt KeilC. Viết theo cách thứ hai thì trình biên dịch sẽ tìm luôn trong thư mục /INC luôn. Để có thể sử dụng đúng các file .h cho các vi điều khiển của mình thì bạn nên mở thư mục /inc trong thư mục này có các thư mục con như tên của hãng sản xuất. Ví dụ như của Atmel thì bạn tìm trong thư mục /Atmel thì sẽ thấy được file reg51.h ,.. Bạn mở từng file nên mà khám phá sẽ có nhiều điều hay đấy. b. Định nghĩa các macro cho chương trình sáng sủa. Việc định nghĩa này được dùng bằng từ khóa #define Ví dụ: bạn định nghĩa led1 là P1_0 tức là led1 được nối với chân 0 của Port 1. Code: #define led1 P1_0 c. Các hàm ngắt như ngắt timer0, timer1, ngắt nối tiếp, ngắt ngoài. Ví dụ bạn dùng ngắt nối tiếp là ngắt 4 trong bảng vector ngắt thì hàm sẽ có dạng như sau:
  • 19. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 19 Code: void inter_4(void) interrupt 4 using 2{ // làm gì thì làm ở đây } Cú pháp các ngắt khác cũng tương tự chỉ thay số 4 bằng số thứ tự của ngắt trong bảng vector ngắt. d. Các hàm con như Delay, khởi tạo,.. như: Code: void delay( unsigned char time){ //code viết ở đây } e. Chương trình chính: Code: void main(void){ // viết mã ở đây } đối tượng của chương trình là vi điều khiển nên hàm main không có giá trị trả về và không có tham số đưa vào. Và thực chất cũng chẳng cần biến toàn cục vì ta chỉ cần viết 1 file thôi, nên không đưa biến toàn cục vào đây. Kết luận, chương trình của chúng ta sẽ có dạng như sau: Code:
  • 20. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 20 // liệt kê header file #inlucde"tên header file" .................... // các marco #define led1 P1_0 ........... // các hàm ngắt void inter_1 interrupt 1 using 3{ } .......... // các hàm bình thường void delay( unsigned char time){ /// } .............. // chương trình chính void main(void){ } Hàm trễ delay() Có lẽ việc lập trình cho vi điều khiển một hàm không thể thiếu đó là trễ: như trễ khi nháy led chẳng hạn (ví dụ đơn giản nhất), ...
  • 21. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 21 Việc gây trễ trong Keil C có thể có nhiều cách khác nhau: Hàm delay có tham số là thời gian cần gây trễ tính theo ms 1. Dùng vòng lặp while, for Dùng kiểu nào thì cũng đơn giản chỉ là vòng lặp mà thôi. Trong vòng lặp này ta sẽ chẳng làm gì cả nên vi điều khiển sẽ bị mất thời gian trong các vòng lặp này. Với tần số thạch anh 11.0582 MHz thì mỗi vòng lặp khi các bạn debug sẽ thấy là chúng ta mất thời gian thực khoảng 8.28 us. Do đó để có thể gây trễ 1ms thì các bạn cần dùng xấp xỉ 121 vòng lặp kiểu này. Do đó hàm sẽ như sau: Code: void delay(usigned char time){ while(time--){ unsigned char temp = 121; while(temp--); // chẳng làm gì cả }; } Việc chuyển đổi giữa vòng for với while trong trường hợp này rất đơn giản. Nhưng khi đó bạn lại phải khai báo thêm một biến đếm như thế sẽ tốn bộ nhớ. Chương trình trên là tối ưu nhất rồi. 2. Dùng timer0, timer1,.. Tiếp tục với hàm delay() theo cách dùng bộ định thời. Các bạn đọc bài ở trên cũng thấy được là ta lập trình với các thanh ghi tương tự như trong ASM. TMOD là thanh ghi 8 bít dùng để thiết lập bộ định thời , các bạn xem lại thanh ghi này. Dùng bộ định thời có 3 chế độ: chế độ 0, chế độ 1, chế độ 2. Chúng ta sẽ sử dụng chế độ khởi động bộ định thời bằng phần mềm tức TMOD.3 và TMOD.7 = 0 Việc xác định chế độ nào phụ thuộc vào giá trị của 2 bit TM1 và TM0 của từng timer (xem định nghĩa từng bít trong thanh ghi TMOD)
  • 22. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 22 TM1=0 , TM0 =0 chế độ 0 TM1=0, TM0 =1 chế độ 1 TM1=1, TM0 =1 chế độ 2 Chế độ 1 là chế độ 16 bít không tự nạp lại, cách sử dụng bằng cách nạp giá trị cho các thanh ghi TH1, TL1 (với Timer1), hoặc TL0, TH0 (với Timer0). Khi khởi động timer bằng cách setb TR1 hoặc TR0 thì nó sẽ đếm từTHTL 0xFFFF khi từ 0xFFFF 0x0000 thì cờ TF1 hoặc TF0 sẽ bật lên sau đó chúng bị xóa thành 0. Chúng ta dùng cờ này để biết khi nào chuyển qua 0x0000. Chế độ 0 là chế độ 13 bít tương tự như chế độ 1 nhưng giá trị chỉ tăng đến 0x1FFF. Chế độ 2, chế độ 8 bít tự nạp lại. Tiếp theo là ta tính thời gian của mỗi lần tăng bộ định thời. Tấn số của bộ định thời bằng 1/12 tần số của thạch anh, do đó với tần số 11,0592MHz thì chu kì máy bằng 1.085us. Do vậy với chế độ 1 tối đa chúng ta sẽ gây trễ được là 65536*1.085 = 71106.56 us = 71.10656 ms. Chế độ 2 max = 256 *1.085 =277.76 us Chỉ cần gây trễ 1ms = 1000 us>277.76 nên dùng timer0( 16 bit) ở chế độ 0 thì ta tính toán giá trị nạp cho timer0 như sau: thời gian trễ = (65536 - giá trị nạp vào TH,TL+ 1) * 1.085. Sau đó đổi giá trị ra số hex. Dùng Calculator của windows để đổi. TH0 = FC, TL0 = 67 Vậy chương trình sẽ như sau: Code: void delay(unsigned char time){ while(time--){ TMOD = 0x01; // dùng timer0 ch ñ 1( 16 bit) TH0 = 0xFC;// n p giá tr cho timer TL0 = 0x67; TR0 = 1; // kh i ñ ng b ñ nh th i
  • 23. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 23 while( TF0); // ch khi nào c TF1 =1 TF0 = 0 ; // xóa c tràn TR0 = 0; // d ng b ñ nh th i }; } Có lẽ người dùng Keil C lần đầu tiên gặp trở ngại khi dùng #include đó là không biết liệt kê các header file nào cần thiết cho ứng dụng của mình. Để có thể biết được header file nào dùng cho vi điều khiển của mình thì các bạn mở thư mục cài Keil C ra, tìm đến thư mục C51/INC bạn sẽ thấy một loạt các thư mục của các hãng như Atmel,Dalas,.. Tôi xin lấy ví dụ một file regx51.h trong thư mục /Atmel. Bạn mở file đó lên sẽ thấy đầu đề của nó như sau: Code: *-------------------------------------------------------------------- AT89X51.H Header file for the low voltage Flash Atmel AT89C51 and AT89LV51. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. -------------------------------------------------------------------*/ Chứng tỏ file này dùng cho con AT89C51 và AT89LV51 rồi. Khi đó bạn sẽ thêm header file này vào chương trình của mình. Còn làm thế nào để mình làm việc với các thành ghi, các port như trong ASM bây giờ. Câu trả lời ở trong file này: Code: #ifndef __AT89X51_H__ #define __AT89X51_H__ /*------------------------------------------------ Byte Registers ; ð nh nghĩa các thành ghi các ñ a ch trong RAM
  • 24. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 24 ------------------------------------------------*/ sfr P0 = 0x80; sfr SP = 0x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr P1 = 0x90; sfr SCON = 0x98; sfr SBUF = 0x99; sfr P2 = 0xA0; sfr IE = 0xA8; sfr P3 = 0xB0; sfr IP = 0xB8; sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0; /*------------------------------------------------ P0 Bit Registers ; ð nh nghĩa các c ng c a Port 0 vì port này là thanh ghi 8 bít ñ nh ñư c ñ a ch tr c ti p ------------------------------------------------*/ sbit P0_0 = 0x80; sbit P0_1 = 0x81; sbit P0_2 = 0x82; sbit P0_3 = 0x83; sbit P0_4 = 0x84; sbit P0_5 = 0x85; sbit P0_6 = 0x86; sbit P0_7 = 0x87;
  • 25. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 25 /*------------------------------------------------ PCON Bit Values ------------------------------------------------*/ #define IDL_ 0x01 #define STOP_ 0x02 #define PD_ 0x02 /* Alternate definition */ #define GF0_ 0x04 #define GF1_ 0x08 #define SMOD_ 0x80 /*------------------------------------------------ TCON Bit Registers ------------------------------------------------*/ sbit IT0 = 0x88; sbit IE0 = 0x89; sbit IT1 = 0x8A; sbit IE1 = 0x8B; sbit TR0 = 0x8C; sbit TF0 = 0x8D; sbit TR1 = 0x8E; sbit TF1 = 0x8F; /*------------------------------------------------ TMOD Bit Values ------------------------------------------------*/ #define T0_M0_ 0x01 #define T0_M1_ 0x02 #define T0_CT_ 0x04 #define T0_GATE_ 0x08 #define T1_M0_ 0x10 #define T1_M1_ 0x20
  • 26. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 26 #define T1_CT_ 0x40 #define T1_GATE_ 0x80 #define T1_MASK_ 0xF0 #define T0_MASK_ 0x0F /*------------------------------------------------ P1 Bit Registers ------------------------------------------------*/ sbit P1_0 = 0x90; sbit P1_1 = 0x91; sbit P1_2 = 0x92; sbit P1_3 = 0x93; sbit P1_4 = 0x94; sbit P1_5 = 0x95; sbit P1_6 = 0x96; sbit P1_7 = 0x97; /*------------------------------------------------ SCON Bit Registers ------------------------------------------------*/ sbit RI = 0x98; sbit TI = 0x99; sbit RB8 = 0x9A; sbit TB8 = 0x9B; sbit REN = 0x9C; sbit SM2 = 0x9D; sbit SM1 = 0x9E; sbit SM0 = 0x9F; /*------------------------------------------------ P2 Bit Registers ------------------------------------------------*/ sbit P2_0 = 0xA0; sbit P2_1 = 0xA1;
  • 27. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 27 sbit P2_2 = 0xA2; sbit P2_3 = 0xA3; sbit P2_4 = 0xA4; sbit P2_5 = 0xA5; sbit P2_6 = 0xA6; sbit P2_7 = 0xA7; /*------------------------------------------------ IE Bit Registers ------------------------------------------------*/ sbit EX0 = 0xA8; /* 1=Enable External interrupt 0 */ sbit ET0 = 0xA9; /* 1=Enable Timer 0 interrupt */ sbit EX1 = 0xAA; /* 1=Enable External interrupt 1 */ sbit ET1 = 0xAB; /* 1=Enable Timer 1 interrupt */ sbit ES = 0xAC; /* 1=Enable Serial port interrupt */ sbit ET2 = 0xAD; /* 1=Enable Timer 2 interrupt */ sbit EA = 0xAF; /* 0=Disable all interrupts */ /*------------------------------------------------ P3 Bit Registers (Mnemonics & Ports) ------------------------------------------------*/ sbit P3_0 = 0xB0; sbit P3_1 = 0xB1; sbit P3_2 = 0xB2; sbit P3_3 = 0xB3; sbit P3_4 = 0xB4; sbit P3_5 = 0xB5; sbit P3_6 = 0xB6; sbit P3_7 = 0xB7; sbit RXD = 0xB0; /* Serial data input */ sbit TXD = 0xB1; /* Serial data output */ sbit INT0 = 0xB2; /* External interrupt 0 */ sbit INT1 = 0xB3; /* External interrupt 1 */
  • 28. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 28 sbit T0 = 0xB4; /* Timer 0 external input */ sbit T1 = 0xB5; /* Timer 1 external input */ sbit WR = 0xB6; /* External data memory write strobe */ sbit RD = 0xB7; /* External data memory read strobe */ /*------------------------------------------------ IP Bit Registers ------------------------------------------------*/ sbit PX0 = 0xB8; sbit PT0 = 0xB9; sbit PX1 = 0xBA; sbit PT1 = 0xBB; sbit PS = 0xBC; sbit PT2 = 0xBD; /*------------------------------------------------ PSW Bit Registers ------------------------------------------------*/ sbit P = 0xD0; sbit FL = 0xD1; sbit OV = 0xD2; sbit RS0 = 0xD3; sbit RS1 = 0xD4; sbit F0 = 0xD5; sbit AC = 0xD6; sbit CY = 0xD7; /*------------------------------------------------ Interrupt Vectors: Interrupt Address = (Number * 8) + 3 ------------------------------------------------*/ #define IE0_VECTOR 0 /* 0x03 External Interrupt 0 */ #define TF0_VECTOR 1 /* 0x0B Timer 0 */ #define IE1_VECTOR 2 /* 0x13 External Interrupt 1 */ #define TF1_VECTOR 3 /* 0x1B Timer 1 */
  • 29. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 29 #define SIO_VECTOR 4 /* 0x23 Serial port */ #endif Các bạn nhìn trên thấy là các thanh ghi, các port quả là giống như với ASM phải không. Do vậy việc lập trình các bạn sẽ làm việc trực tiếp với các các địa chỉ của Ram mà được định nghĩa ở trên Giới thiệu các hàm ngắt. Trong 8051 có 5 nguyên nhân sinh ra ngắt: ngắt ngoài 0, timer0, ngắt ngoài 1, timer1, ngắt nối tiếp. Các bạn lại mở file regx51.h ra ở phần cuối của file như sau: Code: /*------------------------------------------------ Interrupt Vectors: Interrupt Address = (Number * 8) + 3 ------------------------------------------------*/ #define IE0_VECTOR 0 /* 0x03 External Interrupt 0 */ #define TF0_VECTOR 1 /* 0x0B Timer 0 */ #define IE1_VECTOR 2 /* 0x13 External Interrupt 1 */ #define TF1_VECTOR 3 /* 0x1B Timer 1 */ #define SIO_VECTOR 4 /* 0x23 Serial port */ Địa chỉ của ngắt trong bảng vector ngắt = 8 * số thứ tự ngắt + 3, số thứ tự ngắt = 0,1,2,3,4 như kí hiệu trong file đó. Như vậy địa chỉ trong RAM từ 0x03 đến 0x30 là dành cho bảng vector ngắt. Cú pháp của hàm thực hiện ngắt như sau, hàm này không có tham số, không có kiểu trả về nên là dạng Code: Void tên hàm(void) Cú pháp chính như sau:
  • 30. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 30 Code: void inter0(void) interrupt 0 using 1{ } // ng t ngoài 0, dùng bank 1 Tương tự với các ngắt khác, ta thay số 0 bằng số thứ tự các ngắt tương ứng các ngắt tương ứng. Code: void inter1(void) interrupt 1 using 1{ } void inter2(void) interrupt 2 using 1{ } Tiếp tục với 2 ngắt còn lại Các bạn lưu ý là để vdk nhảy đến bảng vector ngắt thì bạn phải enable ngắt đó. Ví dụ: bạn muốn ngắt nối tiếp thì phải cho như sau: Các bạn xem lạ thanh ghi IE ở trong file regx51.h, thanh ghi này định được địa chỉ bit Code: EA = 1;// cho phép dùng ng t ES = 1;// dùng ng t n i ti p Hàm ngắt trong Keil C Cách dùng hàm ngắt và một số đoạn code mẫu.
  • 31. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 31 Hàm ngắt là một hàm không có tham số, không có kiểu trả về. Vì thực chất các biến mà hàm này thao tác chính là các biến toàn cục (các thanh ghi, các port). Cấu trúc một hàm ngắt như sau: Code: void tenham(void) interrupt a using b{ // code } Trong đó: những chữ in nghiêng là bắt buộc phải có và using b có thể có hoặc không có. tên hàm: tùy các bạn chọn. a : là thứ tự của ngắt trong bảng vector ngắt a = 0 : ngắt ngoài 0 a = 1 : ngắt timer0 a = 2 : ngắt ngoài 1 a = 3 : ngắt timer1 a = 4 : ngắt nối tiếp b: là bank được chọn dùng để thực hiện hàm ngắt. Do 8051 có 4 bank là bank 0, 1, 2, 3. Do đó : b có thể là một trong các giá trị 0, 1, 2, 3. Lưu ý: nếu không viết thêm using b thì mặc định là hàm ngắt thực hiện tại bank0. Do đó, một thí dụ về hàm ngắt nối tiếp sẽ có dạng như sau: void inter4(void) interrupt 4 using 2{ // mã th c hi n hàm
  • 32. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 32 } Sau đây là một đoạn chương trình tạo một xung ở chân P1.0 và khi nhận được dữ liệu nối tiếp thì chuyển sang port P2. Tần số thạch anh là 11.0592 MHz. Dùng AT89C51 Code: # include "regx51.h" // ham gay tre void delay(int time){ while(time--){ unsigned char j = 122; while(j--); }; } // ham thiet lap ban dau void init(){ EA = 1; // cho phep dung ngat ES = 1; // dung ngat noi tiep // Thiet lap tan so bus TMOD = 0x02; // dung timer1, che do 8 bit tu nap lai TH1 = 253; // chon tan so bus = 9600 TR1 = 1 ; // khoi dong timer1 } // Ham ngat void inter4(void) interrupt 4 using 2{ if (RI){ // kiem tra co tran nhan RI. P2 = SBUF; // lay du lieu tu SBUF RI = 0; // xoa co ngat }; } // ham main void main(){ // tao xung tren chan P1.0 init(); while(1){
  • 33. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 33 P1_0 = 1; delay(500); P1_0 = 0; delay(500); } }
  • 34. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 34 CHƯƠNG 2: SỬ DỤNG VISUAL BASIC 6.0 GIAO TIẾP VI ĐIỀU KHIỂN 2.1 Thiết kế giao diện Khởi động VISUAL BASIC 6.0 tử màn hình Desktop hoặc từ trình đơn Start Menu. Màn hình làm việc của VB như hình dưới đây. Bao gồm thanh menu, thanh công cụ, cửa sổ thư mục dự án, của sổ Properties, cửa sổ Form layout và Toolbox. Để tạo một dự án VB mới, ta vào menu File > New Project (hoặc bấm tổ hợp phím Ctrl + N) Hộp thoại New Project hiện ra, ta chọn loại chương trình, thường là Standard EXE (file thực thi chuẩn). Click OK
  • 35. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 35 Dự án mới của chúng ta được tạo ra ban đầu như hình dưới. Ta sẽ dử dụng Toolbox để thêm các đối tượng vào form. Để thay đổi thanh tiêu đề cho form, ta click vào form, quay lại của sổ Properties, tìm đến dòng Caption để nhập dữ liệu.
  • 36. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 36 Lưu ý bạn nên save lại dự án trước khi thực hiện các bước tiếp theo bằng các bấm Ctrl + S hay Click biểu tượng Save trên thanh công cụ. Đặt tên cho Form và Click nút Save.
  • 37. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 37 Tiếp tục đặt tên cho dự án, và lưu lại. Bước tiếp theo là thêm các đối tượng tương tác trên form. Để thêm một đối tượng vào form, bạn click vào đối tượng trên Toolbox, sau đó đưa chuột vào form thiết kế rê chuột từ điểm đầu đến kết thúc tương ứng với kích thước của đối tượng. Hình trên chúng ta đã tạo một Label cho form. Bây giờ ta sẽ thay đổi các thuộc tính của label này cho phù hợp yêu cầu.
  • 38. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 38 Cick vào label, tới cửa sổ Properties, tìm dòng Caption để thay đổi văn bản hiển thị của label này. Kết quả như hình sau: Để thay đổi Font chữ, màu chữ, kích thước Font ta tìm đến dòng Font và ForeColor trong cửa sổ Properties của đối tượng label này.
  • 39. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 39 Tiếp theo, chúng ta thêm vào làm việc với các đối tượng button, shape, textbox Cũng như thao tác thêm label ở trên ta tiến hành click vào đối tượng và Click vào form tại vị trí muốn đưa đối tượng vào. Hình trên là kết quả sau khi chúng ta thêm 8 Shape tượng trung cho 8 led đơn mà ta điều khiển.
  • 40. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 40 Để đổi shape vuông thành tròn bạn tìm đến dòng Shape trong cửa sổ Properties của mỗi Shape và chọn dòng 3 – Circle Thực hiện tương tự cho 7 shape còn lại. Sau đó chúng ta đổi tên cho 8 shape này. Tìm đến dòng (Name) trong của sổ Properties của Shape. Ta sẽ đổi tên 8 shape này đều là shapLed. Tiếp theo ta thêm 8 label tương ứng 8 led đơn, để khi ta click vào label này các shape sẽ đổi màu. Kết quả thực hiện sẽ như hình bên dưới.
  • 41. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 41 Ta tiến hành đổi tên cho 8 label này thành labelLed, lưu ý ta có thể đổi tên tùy ý nhưng các label này phải trùng tên nhau, để cho việc viết code dễ hơn, ta chỉ cần sử dụng index của đối tượng để gọi đối tượng ra thực thi. Sau đó chúng ta thêm vào nút nhấn, nút Gửi dữ liệu, nút Start/Stop và nút Thoát. Để máy tính có thể gửi và nhận dữ liệu qua cổng com, chúng ta phải thêm đối tượng cổng nối tiếp vào form. Các bước tiến hành như sau.
  • 42. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 42 Vào menu Project > Components… (hoặc bấm tổ hợp phím Ctrl + T) Hộp thoại Components hiện ra, chúng ta tìm đến dòng Microsoft Comm Control 6.0 và đánh dấu vào dòng đó, chon OK.
  • 43. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 43 Khi đó trên Toolbox sẽ có thêm đối tượng như hình , click vào đối tượng này và click vào form để thêm cổng com cho form. Kết quả như hình bên dưới. Click vào đối tượng này để thay đổi các thuộc tính như hình bên dưới.
  • 44. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 44 2.2 Viết chương trình thực thi Bước tiếp theo chúng ta se viết lệnh cho các đối tượng. Để viết code, ta click phải chuột vào form, chọn View Code.
  • 45. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 45 Cửa sổ Project1 – Form (code) hiện ra trong vùng làm việc. Trong trình sổ xuống (General) sẽ chứa tất cả đối tượng mà ta đã thêm bên ngoài giao diện. Click và chọn một đối tượng bất kỳ, ở đây chúng ta sẽ chọn đối tượng labelLED, sẽ xuất hiện 2 dòng code như sau: Private Sub LabelLED_Click(Index As Integer) // l nh c n th c thi End Sub Hàm này sẽ thực thi những lệnh mà ta viết giữa hai dòng này khi click vào mỗi labelLed. Ta sẽ thêm dòng lệnh dưới đây vào giữa để hàm thực thi. Kết quả sẽ như sau: Private Sub LabelLED_Click(Index As Integer) ShapeLED(Index).FillStyle = 1 - ShapeLED(Index).FillStyle End Sub Bây giờ chúng ta sẽ nhấn phím F5 để chạy chương trình, kiểm tra lệnh mình vừa viết ở trên.
  • 46. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 46 Kế đến chúng ta viết lệnh cho các button. Lệnh thực thi cho nút Thoat Private Sub cmdExit_Click() Beep End End Sub Lệnh thực thi cho nút Gui du lieu Private Sub cmdSend_Click() Dim t As Integer Dim i As Integer t = 0 For i = 0 To 7 t = t + (2 ^ i) * (1 - ShapeLED(i).FillStyle) Next i MSComm1.Output = Chr(t) End Sub Lệnh thực thi cho nút Stop Private Sub cmdStop_Click() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False cmdStop.Caption = "Start" Else cmdStop.Caption = "Stop" MSComm1.PortOpen = True
  • 47. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 47 End If End Sub Chúng ta phải thêm một hàm bên dưới để lúc form khởi động, sẽ tự động mở cổng COM1 và cấu hình cho cổng com truyền dữ liệu. Private Sub Form_Load() MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.PortOpen = True End Sub
  • 48. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 48 CHƯƠNG 3: SỬ DỤNG VISUAL C# GIAO TIẾP VĐK Khởi động C#. Tạo dự án mới: Vào menu File -> New Project … (Hoăc bấm Ctrl + Shift + N) Hộp thoại New Project xuất hiện, chọn vào biểu tượng Window Application. Sửa tên ứng dụng WindowsApplication1 thành tên chương trình của bạn, ví dụ như Dkdongco, Donhietdo, .. lưu ý không nên viết có ký tự trống và tiếng việt trong tên này! Xong bạn Click OK Giao diện ban đầu C# tự động tạo cho bạn như bên dưới
  • 49. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 49 Các bạn có thể click chuột vào các góc của của sổ From1 và kéo cho nó thay đổi kích thước vừa ý. Giờ chúng ta sẽ làm việc với Form1 này. Bạn Click vào vị trí bất kì trên form, sau đó qua cửa sổ thuộc tính, 2 thuộc tính bạn cần quan tâm để chỉnh sửa là Name và Text Lưu ý: Để thay đổi thuộc tính của bất cứ đối tượng nào, việc bắt buộc đầu tiên bạn phải click chuột vào đối tượng đó.
  • 50. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 50 Các bạn có thể đổi sửa thuộc tính Name thành frmMain hay bất kí tên gì, có thể giữ nguyên là Form1 Đối với thuộc tính Text, chính là dòng chữ hiển thị trên thanh tiêu đề của cửa sổ chương trình, bạn nên đổi thành nội dung đề tài của bạn (VD: Chương trình theo dõi nhiệt độ phòng máy, …), chương trình cho phép bạn nhập liệu tiếng việt. Tiếp theo bạn đổi tên các file trong của sổ quản lý Project của chương trình như hình bên dưới Bước thứ hai là lúc bạn thêm các đối tượng lên của sổ form chính.
  • 51. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 51 - Đối tượng Label, để hiển thị các thông tin như là trường, lớp, tên đề tài, nhóm, thành viên nhóm, … Trong Cửa sổ Toolbox, bạn tìm đối tượng Label Click chuột vào đối tượng label sau đó đưa chuột qua của sổ form, Click vào form tại ví trí mà bạn muốn đặt label này Bây giờ ta tiến hành thay đổi các thuộc tính của label này. Click chuột vào label trên form, chứng ta chuyển qua của sổ Thuộc tính. Lúc này cửa sổ thuộc tính sẽ chứa các thuộc tính của label này.
  • 52. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 52 Tương tự như form chính lúc nãy 2 thuộc tính bạn cần thay đổi đầu tiên là Name và Text Thuộc tính Name bạn thay đổi để khi viết chương trình bạn dễ nhớ khi gọi đối tượng này ra xử lý, ở đây label này hiển thị tên trường nên mình đặt tên cho nó là labelTruong. Lưu ý: + Để hạn chế không bị nhầm lẫn giữa các đối tượng bạn nên thêm tiền tố label trước tên của nó, để biết đối tượng này là loại label, label này để hiển thị Trường. Để dễ nhớ thôi, chứ chương trình sẽ không cho 2 đối tượng trùng tên nhau. + Tên đối tượng bạn không được nhập khoảng trắng và không nên nhập tiếng việt Kết quả như hình dưới.
  • 53. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 53 Giờ bạn thay đổi Font chữ, màu chữ, kích thước chữ. Vẫn Click chuột vào đối tượng label này. Chuyển qua Cửa sổ Thuộc tính Click vào nút … ở dòng Font, cửa sổ Font hiện ra, bạn chọn các thuộc tính font cho vừa ý
  • 54. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 54 Mình chọn Font Tahoma, In đậm, Size 18 Chọn màu chữ Blue. Kết quả thay đổi như sau
  • 55. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 55 Tương tự để bạn thêm các label hiển thị lớp, nhóm, tên để tài, … Bạn có thể Click chuột kéo rê các label đúng vị trí như ý muốn. Bước tiếp theo, chúng ta tạo một Nút nhấn để khi bạn click vào nó, form điều khiển sẽ hiện ra đồng thời form chính sẽ ẩn đi - Đối tượng Button: sẽ thực hiện một công việc gì đó khi ta Click vào (theo code ta viết) Trong cửa sổ Toolbox, tìm dòng có đối tượng Button, Click vào dòng này. Sau đó đưa chuột qua form, click vào vị trí muốn đặt button tren form.
  • 56. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 56 Ta đã có một nút nhấn trên giao diện chính. Bay giờ bạn tiến hành thay đổi các thuộc tính cho nó. 2 thuộc tính cần thay đổi là Name và Text Tương tự như đổi thuộc tính Name và Text của label bạn sẽ được kết quả như hình dưới
  • 57. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 57 Ngoài ra để nút nhấn của mình thêm phần sinh động, bạn có thể thay đổi font, màu chữ, … hoặc thêm biểu tượng cho nó, bạn tự tìm hiểu thêm nhé, tất cả đều nằm trong cửa sổ thuộc tính của button này. Bây giờ chúng ta tạo một nút nhấn, để khi click vào, chương trình sẽ kết thúc. Thực hiện tương tự như các bước tạo button ở trên, bạn thay đổi thuộc tính Name cho nút nhấn này là buttonExit, màu chữ đỏ (tùy ý), Text là Exit hay Thoát, tùy ý bạn.
  • 58. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 58 Bước kế tiếp, tạo sự kiện đóng chương trình cho buttonExit này. Bạn click đúp vào nút Thoát, cửa sổ viết code hiện ra, bạn gõ lệnh như sau: private void buttonExit_Click(object sender, EventArgs e) { Application.Exit(); // Thoát ng d ng } Để thực hiện bước tiếp theo, chúng ta cần tạo ra một form mới có tên là frmDieuKhien. Vì nút nhấn này khi click vào thì form điều khiển được hiển thị. Trong cửa sổ Solution Explorer, bạn click phải vào tên chương trình và click vào Windows From…
  • 59. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 59 Hộp thoại Add New Item hiện ra, bạn đặt tên form mới này theo yêu cầu của mình (VD là frmDieuKhien) Click Ok để tạo form mới. Giao diện form mới hiện ra trên cửa sổ làm việc. Bước đầu tiên bạn cũng tiến hành đổi tên form, tiêu đề form như đã thực hiện với form chính lúc đầu. Kết quả sau khi thực hiện mình có form điều khiển như hình dưới Mẹo nhỏ: Để kích thước 2 form này giống nhau hoàn toàn, trong cửa sổ thuộc tính của form chính (frmMain) bạn tìm đến dòng Size và copy 2 con số (rộng, cao). Sau đó
  • 60. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 60 cũng tìm đến dòng Size của form điều khiển (frmDieuKhien) dán 2 con số này vào. Enter Bây giờ chúng sẽ viết lệnh tạo sự kiện để nút nhấn Bảng ĐK sẽ thực hiện khi nhấn vào nó. Chuyển qua form chính (frmMain), Click đúp vào Button Bảng ĐK. Cửa sổ viết code của chương trình hiện ra, bạn viết những lệnh như dưới vào hàm sự kiện của buttonNext, bạn không cần phải quan tâm đến các đoạn code khác. private void buttonNext_Click(object sender, EventArgs e) { fromDieuKhien frmDK = new fromDieuKhien(); // Kh i t o bi n "ñ i di n" form ñi u khi n frmDK.Show(); // Hi n th form ñi u khi n this.Hide(); // n form chính } Bây giờ bạn có thế Bấm phím F5 để chạy kiểm tra những gì mình vừa làm. Như vậy chúng ta đã tương tác xong với form chính (frmMain) rồi giờ chúng ta sẽ chuyển sang form điều khiển (frmDieuKhien) tạo các đối tượng, viết code cho nó. Bước đầu tiên bạn tạo một button Thoát như ở form chính để khi click vào chương trình sẽ thoát.
  • 61. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 61 Click đúp vào nút Thoát để viết code tạo sự kiện cho nó. private void buttonExit_Click(object sender, EventArgs e) { Application.Exit(); // Thoát chương trình } Xong, giờ ta sẽ thêm các đối tượng như cổng nối tiếp, các nút nhấn, listbox chứa tên cổng com, … - SerialPort: đối tượng để truyền nhận dữ liệu qua công nối tiếp với VĐK Để thêm một serial port, tương tự như đã thực hiện với các đối tượng trên. Ta tiến hành đổi thuộc tính Name cho serialport này như hình bên dưới.
  • 62. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 62 Lưu ý: Mình đổi tên cổng nối tiếp này thành port. Các thuộc tín còn lại bạn hãy để như mặc định. - Listbox: đối tượng này sẽ chứa danh sách cổng com chúng ta sẽ kết nối
  • 63. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 63 - Bây giờ chúng ta sẽ thay đổi thuộc tính Name và Item cho ListBox này. + Bạn đổi Name listBox1 thành listBoxComport. + Ở dòng Item, Bạn click vào nút … để thêm danh sách cổng Com cho listBox này hiển thị
  • 64. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 64 - Click OK, kết quả bạn sẽ thấy trên form điều khiển, một danh sách cổng com ta vừa thêm. Lưu ý là tên cổng com không có khoảng trắng, không nhập tiếng việt. Trên mỗi dòng chỉ nhập tên 1 cổng com - Tiếp theo bạn tạo một button để thực hiện Ngắt kết nối cổng com khi không dùng nữa. Button này có thuộc tính Name là buttonDisConnect và thuộc tính Text là Ngắt kết nối, font, màu chữ tùy ý.
  • 65. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 65 - Tạo một label để hiển thị tình trạng kết nối cổng com (như là báo lỗi, báo kết nối thành công). Label này có thuộc tính Name là labelTinhTrang, thuộc tính Text bạn để một khoảng trắng vì ban đầu chưa chạy chương trình thì chưa có thông báo gì. - Giờ ta tiến hành thêm sự kiện cho nút buttonDisConnect và listBoxComPort Click đúp vào nút Ngắt kết nối và viết code ngắt cổng com như sau: if (port.IsOpen) // N u c ng com ñang m thì th c hi n l nh ti p theo { port.Close(); // ðóng c ng com ñang m labelTinhTrang.Text = "ðã ñóng c ng COM!"; // Thông báo ng t c ng com
  • 66. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 66 labelTinhTrang.ForeColor = Color.Red; // ð i màu ch labelTinhTrang thành ñ } Tiếp theo kết nối cổng com khi click chọn cổng com trong danh sách cổng com của listBoxComPort Click đúp vào danh sách cổng com (listBoxComPort) và viết code kết nối cổng com như sau: private void listBoxComPort_SelectedIndexChanged(object sender, EventArgs e) { if (port.IsOpen) port.Close(); port.PortName = listBoxComPort.SelectedItem.ToString(); try { port.Open(); labelTinhTrang.ForeColor = Color.Green; labelTinhTrang.Text = "ðã m c ng " + listBoxComPort.SelectedItem.ToString() + " thành công !"; } catch { labelTinhTrang.ForeColor = Color.Red; labelTinhTrang.Text = "Không th m c ng " + listBoxComPort.SelectedItem.ToString() + " !"; } } - Bấm F5 để kiểm tra công việc, thử click vào dach sách cổng com xem kết quả thông báo và Ngắt kết nối. - Tạo các nút nhấn gửi dữ liệu xuống VĐK điều khiển Role Các bước thực hiện như tạo nút ở trên
  • 67. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 67 - Tiếp theo ta viết một hàm gửi ký tự qua cổng nối tiếp: private void writeChar(string Char) { if (port.IsOpen) // N u c ng com ñã ñư c k t n i m i g i ký t { port.Write(Char); // G i m t ký t qua c ng Com } else // N u c ng com chưa k t n i thì hi n th h p tho i thông báo { MessageBox.Show("Vui lòng K t n i v i c ng COM!", "L i g i d li u", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } - Sau khi viết hàm gửi ký tự bạn có thể Click đúp vào các nút ROLE 1 đến ROLE 8 để tạo sự kiện gửi dữ liệu. private void buttonRole1_Click(object sender, EventArgs e) { writeChar("1"); // G i ñi ký t s 1 } … … private void buttonRole8_Click(object sender, EventArgs e) { writeChar("8"); // G i ñi ký t s 8 }
  • 68. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 68 - Khi VĐK nhận được những kí tự này sẽ kiểm tra và xử lý, tùy theo chương trình của bạn. - Bấm F5 và chạy mô phỏng Proteus và kiểm tra. Trên giao diện bạn bạn COM5, trong mô phỏng Proteus bạn chọn COM4, vì 2 cổng này là com ảo đã được tạo ra và kết nối ảo với nhau nhờ chương trình Virtual Serial Port Driver. - Để chương trình của bạn luôn hiển thị trên các cửa sổ còn lại, bạn chuyển qua cửa sổ thuộc tính của frmMain, tìm đến dòng TopMost đổi thành True, làm tương tự đối với frmDieuKhien
  • 69. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 69 CHƯƠNG 4: CÁC VÍ DỤ GIAO TIẾP MÁY TÍNH VÀ VĐK 4.1 Giao tiếp máy tính điều khiển động cơ bước bằng C# 4.1.1 Mô phỏng Proteus 4.1.2 Viết chương trình Keil C cho VĐK #include <REGX51.H> sbit DC1 = P2^0; sbit DC2 = P2^1; sbit DC1STOP = P2^2; sbit DC2STOP = P2^3; char x; sbit sw1 = P1^0; sbit sw2 = P1^1; sbit sw3 = P1^2; sbit sw4 = P1^3; sbit sw5 = P1^4; sbit sw6 = P1^5; void uart_init(){ SCON = 0x52; TMOD = 0x22; // Timer 1 va Timer0 Mode 2 TH1 = TL1 = -3; // Toc do Baud la 9600
  • 70. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 70 } void sendData(char c){ TR1 = 1; while(!TI); TI = 0; SBUF = c + 0x30; } void main(){ uart_init(); DC1STOP = 0; DC2STOP = 0; while(1){ if(sw1 == 0) { DC1 = 0; DC1STOP = 1; sendData(1); while(!sw1); } else if(sw2 == 0){ DC1 = 1; DC1STOP = 1; sendData(2); while(!sw2); } if(sw3 == 0) { DC2 = 0; DC2STOP = 1; sendData(3); while(!sw3); } else if(sw4 == 0){ DC2 = 1; DC2STOP = 1; sendData(4); while(!sw4); } if(sw5 == 0){ DC1STOP = 0;
  • 71. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 71 sendData(5); while(!sw5); } if(sw6 == 0){ DC2STOP = 0; sendData(6); while(!sw6); } TR1 = 1; RI = 0; x = SBUF; switch(x){ case '1': DC1 = 0; DC1STOP = 1; break; case '2': DC1 = 1; DC1STOP = 1; break; case '3': DC2 = 0; DC2STOP = 1; break; case '4': DC2 = 1; DC2STOP = 1;break; case '5': DC1STOP = 0; break; case '6': DC2STOP = 0; break; } } } 4.1.3 Giao diện điều khiển từ máy tính
  • 72. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 72 4.2 Giao tiếp máy tính điều khiển động cơ DC bằng C# 4.2.1 Mô phỏng Proteus 4.2.2 Viết chương trình Keil C cho VĐK #include <REGX51.H> sbit role1 = P2^0; // Dinh nghia cac chan dieu khien sbit role2 = P2^1; sbit role3 = P2^2; sbit role4 = P2^3; sbit role5 = P2^4; sbit role6 = P2^5; sbit role7 = P2^6; sbit role8 = P2^7; sbit sw1 = P1^0; // Dinh nghia cac chan phim nhan sbit sw2 = P1^1; sbit sw3 = P1^2; sbit sw4 = P1^3; sbit sw5 = P1^4; sbit sw6 = P1^5; sbit sw7 = P1^6; sbit sw8 = P1^7;
  • 73. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 73 char x; void delay(int t); // Khai bao ham delay void uart_init(); // Khai bao ham uart_init void sendData(char c); // Khai bao ham senData void main(){ uart_init(); // Goi ham khai bao truyen thong noi tiep while(1){ // Vong lap chinh de thuc thi chuong trinh mai mai if(sw1 == 0) { // kiem tra neu phim sw1 - tuc la chan P1.0 duoc nhan role1 = 0; role2 = 1; // Dua chan P2.0 xuong 0V va chan P2.1 len 5V sendData(1); // Gui len may tinh ki tu so 1 qua cong noi tiep while(!sw1); // kiem tra nha phim sw1 chua } if(sw2 == 0) { role1 = 1; role2 = 0; sendData(2); while(!sw2); } if(sw3 == 0) { role3 = 0; role4 = 1; sendData(3); while(!sw3); } if(sw4 == 0) { role3 = 1; role4 = 0; sendData(4); while(!sw4); } if(sw5 == 0) { role5 = 0; role6 = 1; sendData(5); while(!sw5);
  • 74. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 74 } if(sw6 == 0) { role5 = 1; role6 = 0; sendData(6); while(!sw6); } if(sw7 == 0) { role7 = 0; role8 = 1; sendData(7); while(!sw7); } if(sw8 == 0) { role7 = 1; role8 = 0; sendData(8); while(!sw8); } TR1 = 1; // Cho Timer1 chay RI = 0; // Dua co bao nhan noi tiep xuong 0V de nhan du lieu tu cong noi tiep x = SBUF; // Copy du lieu tu bo dem noi tiep vao bien x switch(x){ // Cau truc chon du lieu trong bien x case '1': role1 = 0; role2 = 1; break;// Neu bien x = 1 (may tinh gui xuong ki tu 1) thi Set role1 = 0V va role2 = 1V; case '2': role1 = 1; role2 = 0; break; case '3': role3 = 0; role4 = 1; break; case '4': role3 = 1; role4 = 0; break; case '5': role5 = 0; role6 = 1; break; case '6': role5 = 1; role6 = 0; break; case '7': role7 = 0; role8 = 1; break; case '8': role7 = 1; role8 = 0; break; case 'a': role1 = 0; role2 = 0; break; case 'b': role3 = 0; role4 = 0; break; case 'c': role5 = 0; role6 = 0; break; case 'd': role7 = 0; role8 = 0; break; } }
  • 75. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 75 } void uart_init(){ // Ham khoi tao gui nhan qua cong noi tiep SCON = 0x52; //UART 8 bit; SM2/1/0=010, REN=1: cho phép thu; TMOD = 0x22; // Timer 1 va Timer0 Mode 2 TH1 = TL1 = -3; // Toc do Baud la 9600 } void sendData(char c){ TR1 = 1; // Cho timer chay while(!TI); // Cho den khi co truyen len muc 1 TI = 0; // Dua co truyen xuong 0V SBUF = c + 0x30; // Cong 0x30 vao bien x va Copy du lieu tu bien x vao bo dem noi tiep (SBUF) } 4.2.3 Giao diện C# điều khiển trên máy tính
  • 76. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 76 4.3 Giao tiếp máy tính điều khiển LCD 4 dòng bằng VB 4.3.1 Mô phỏng Proteus 4.3.2 Chương trình Keil C cho VĐK #include <REGX51.H> #define LCD_PORT P0 //Dinh nghia Port da lieu cho LCD #define LCD_RS P1_0 #define LCD_RW P1_1 #define LCD_EN P1_2 #define lcdLine1() lcd_write(0, 0x80) // Dong 1 LCD #define lcdLine2() lcd_write(0, 0xc0) // Dong 2 LCD #define lcdLine3() lcd_write(0, 0x94) // Dong 3 LCD #define lcdLine4() lcd_write(0, 0xd4) // Dong 4 LCD void uart_init(); void lcd_init(); void delay(unsigned int i){ while(i--); } void lcd_write(unsigned char mode, unsigned char d){
  • 77. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 77 LCD_PORT = d; LCD_RW = 0; if(mode == 1) LCD_RS = 1; else LCD_RS = 0; LCD_EN = 1; delay(4); LCD_EN = 0; delay(40); } void lcd_PutStr(char const *str){ char const *sPtr; sPtr = str; while(*sPtr != '0'){ lcd_write(1, *sPtr); sPtr++; } } void main(void){ unsigned char kt, pos, line, str[16]; uart_init(); lcd_init(); while(1){ TR1 = 1; RI = 0; kt = 0; line = 0; while(!RI); str[kt++] = SBUF; pos++; if(str[0] == '~') line = 1; if(str[0] == '!') line = 2; if(str[0] == '`') line = 3; if(str[0] == '^') line = 4; if(line == 1) { pos = 0; lcdLine1();
  • 78. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 78 } if(line == 2) { pos = 0; lcdLine2(); } if(line == 3) { pos = 0; lcdLine3(); } if(line == 4) { pos = 0; lcdLine4(); } if(pos > 0) lcd_PutStr(str); } } void uart_init(){ SCON = 0x52; TMOD = 0x22; TH1 = TL1 = -3; } void lcd_init(){ lcd_write(0, 0x38); // Khoi tao LCD 4 dong, ma tran 5x7 lcd_write(0, 0x0C); // Bat LCD, Bat con tro lcd_write(0, 0x01); // Xoa LCD delay(500); }
  • 79. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 79 4.3.3 Giao diện VB điều khiển trên máy tính 4.4 Giao tiếp máy tính điều khiển 8 LED đơn bằng VB 4.4.1 Mô phỏng Proteus 4.4.2 Viết chương trình Keil C cho VĐK #include <REGX51.H> void uart_init();
  • 80. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 80 void main(){ P2 = 0; uart_init(); while(1){ TR1 = 1; while(!RI); RI = 0; P2 = SBUF; } } void uart_init(){ SCON = 0x52; TMOD = 0x22; TH1 = TL1 = -3; } 4.4.3 Giao diện VB điều khiển trên máy tính
  • 81. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 81 4.5 Giao tiếp máy tính điều khiển LED ma trận DC bằng C# 4.5.1 Mô phỏng Proteus 4.5.2 Viết chương trình Keil C cho VĐK #include <REGX51.h> #include <stdio.h> unsigned char Mem[80]; unsigned char k,tg,sokt; char j; char n=0; unsigned int x,d; unsigned char code MaLed[] = { /// Quet cot 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //Dau cach 0xFF,0x07,0x03,0xB9,0x03,0x07,0xFF,0xFF, //A 0xFF,0x01,0x01,0x6D,0x01,0x93,0xFF,0xFF, //B 0xFF,0x83,0x01,0x7D,0x19,0x9B,0xFF,0xFF, //C 0xFF,0x01,0x01,0x7D,0x01,0x83,0xFF,0xFF, //D 0xFF,0x01,0x01,0x6D,0x6D,0xFF,0xFF,0xFF, //E 0xFF,0x01,0x01,0xed,0xED,0xFF,0xFF,0xFF, //F 0xFF,0x83,0x01,0x7D,0xAD,0x09,0x0B,0xFF, //G 0xFF,0x01,0x01,0xEF,0x01,0x01,0xFF,0xFF, //H 0xFF,0xFF,0x7D,0x01,0x01,0x7D,0xFF,0xFF, //I
  • 82. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 82 0xFF,0xBF,0x3F,0x7D,0x01,0x81,0xFD,0xFF, //J 0xFF,0x01,0x01,0x83,0x19,0x7D,0xFF,0xFF, //K 0xFF,0xFF,0x01,0x01,0x3F,0x3F,0xFF,0xFF, //L 0x01,0x01,0xC7,0x0F,0xC7,0x01,0x01,0xFF, //M 0xFF,0x01,0x01,0xE3,0x8F,0x01,0x01,0xFF, //N 0xFF,0x83,0x01,0x7D,0x01,0x83,0xFF,0xFF, //O 0xFF,0x01,0x01,0xDD,0xC1,0xE3,0xFF,0xFF, //P 0xFF,0x83,0x01,0x7D,0x5D,0x01,0x83,0x7F, //Q 0xFF,0x01,0x01,0xCD,0x01,0x23,0xFF,0xFF, //R 0xFF,0xB3,0x21,0x6D,0x09,0x9B,0xFF,0xFF, //S 0xFF,0xF9,0xF9,0x01,0x01,0xF9,0xF9,0xFF, //T 0xFF,0x81,0x01,0x7F,0x01,0x81,0xFF,0xFF, //U 0xFF,0xE1,0x81,0x3F,0x81,0xE1,0xFF,0xFF, //V 0xE1,0x81,0x3F,0x87,0x87,0x3F,0x81,0xE1, //W 0xFF,0x39,0x11,0xC7,0xC7,0x11,0x39,0xFF, //X 0xFF,0xF9,0xE1,0x07,0x07,0xE1,0xF9,0xFF, //Y 0xFF,0x3D,0x1D,0x4D,0x65,0x71,0x79,0xFF //Z }; void convert(unsigned char kytu) { // Ham chuyen ky tu sang ma Matrix LED // Va dua vao mot mang unsigned int temp,i; if (kytu > 64) temp = (kytu-64)*8; else temp = 0; for(i=temp; i<temp+8; i++) Mem[k++] = MaLed[i]; } void convert_str(unsigned char *str){ k=0; //for(i=0;i<sokt*8;i++) sokt=0; while(*str){ convert(*str); str++; sokt++; }
  • 83. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 83 } void dichtrai(void){ unsigned char temp,i; temp = Mem[0]; for(i=0;i<(sokt*8-1);i++) Mem[i] = Mem[i+1]; Mem[sokt*8-1] = temp; } void main(void){ unsigned char kt=0,temp,ch,chuoi[8]; SCON = 0x52; TMOD = 0x22; // Timer 1 va Timer0 Mode 2 TH1 = TL1 = -3; // Toc do Baud la 9600 IE = 0x82; TH0 = TL0 = -100; convert_str("08E1"); TR0 = 1; TR1 = 1; while(1){ //temp = _getkey(); //P1 = ~temp; do { temp = _getkey(); } while(temp != '@'); kt=0; TR0 = 0; do { temp = _getkey(); ch = temp; if (ch!='@') chuoi[kt++]=ch; } while(ch != '@'); convert_str(chuoi); TR0 = 1; } } void NgatTimer0(void) interrupt 1 { TR0 = TF0 = 0; // Dung Timer 0 va Xoa co tran
  • 84. BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# và VB Trang 84 d++; if(tg++>10) { if(x==0x0000) x=0x0001; P1 = 0xFF; // xoa du lieu tren cot P0 = x%256; P2 = x/256; P1 = Mem[n]; x<<=1; if(n++>=15) n=0; tg=0; } if(d==2500) { dichtrai(); d = 0; } TR0 = 1; } 4.5.3 Giao diện C# điều khiển trên máy tính