Tải bản đầy đủ (.pdf) (84 trang)

Bài tập lớn môn truyền số liệu: Giao tiếp máy tính – vđk sử dụng c và VB

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.48 MB, 84 trang )

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

GIAO TIẾP MÁY TÍNH - VĐK
SỬ DỤNG C# VÀ VB
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

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
Trang 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

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.

Trang 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

Đâ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


Trang 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

Tiếp theo, ta click đúp vào cổng com (COMPIM) để đổi tên cổng com

Trang 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

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…

Trang 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

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

Trang 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

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.

Trang 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

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.


Trang 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

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.

Trang 10


BT Lớn Môn Tru tượng này sẽ chứa danh sách cổng com chúng ta sẽ kết nối

Trang 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

- 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ị

Trang 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

- 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 ý.

Trang 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

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

Trang 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

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

Trang 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

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
}

Trang 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

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

Trang 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

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

Trang 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

}
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;

Trang 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

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

Trang 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

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;

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;

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;

// Dinh nghia cac chan dieu khien

// Dinh nghia cac chan phim nhan

Trang 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

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);

Trang 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

}
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;
RI = 0;

// Cho Timer1 chay
// 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;
}
}

Trang 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

}
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;
while(!TI);
TI = 0;

// Cho timer chay
// Cho den khi co truyen len muc 1
// 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

Trang 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

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){

Trang 76


×