Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 84 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
84
Dung lượng
3,48 MB
Nội dung
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# 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 1.1 Chương trình hỗ trợ tạo cổng Com ảo 1.2 Mạch mô vi điều khiển giao tiếp máy tính 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 1.3.2 Cấu trúc chương trình C cho VĐK 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 bước C# 69 4.1.1 Mô 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 DC C# 72 4.2.1 Mô 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 máy tính 75 4.3 Giao tiếp máy tính điều khiển LCD dịng VB 76 4.3.1 Mô 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 máy tính 79 4.4 Giao tiếp máy tính điều khiển LED đơn VB 79 4.4.1 Mô 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 máy tính 80 4.5 Giao tiếp máy tính điều khiển LED ma trận DC C# 81 4.5.1 Mô 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 máy tính 84 Trang BT Lớn Mơn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# 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 chương trình giúp bạn tạo cặp cổng com ảo, vào nối chúng với tạo kết nối ảo để thực truyền liệu Sau cài đặt chương trình, bạn khởi động chương trình vào tạo nhiều cổng com ảo cho việc mơ giao tiếp máy tính vi điều khiển Chọn cổng com mà bạn muốn kết nối Click nút Add pair Bạn có cặp cổng com nối với nhau, COM1 COM2, COM4 COM5 1.2 Mạch mô vi điều khiển giao tiếp máy tính Khởi động chương trình mơ mạch Proteus, lấy linh kiện cần thiết vẽ mạch hình Trang BT Lớn Mơn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# VB Đây mạch mô giao tiếp máy tính vi điều khiển nhất, tương tác điều khiển led đơn, từ bạn thay led thành role để điều khiển động DC, động bước (đảo chiều), … Để thực gửi nhận liệu máy tính 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 sau Click đúp vào vi điều khiển bạn thấy hộp thoại Edit Component, dịng thơng số Clock Frequency, bạn nhập vào 11.0592MHz hình đây, click OK Trang BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# VB Tiếp theo, ta click đúp vào cổng com (COMPIM) để đổi tên cổng com Trang BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# 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 Ở ta chọn COM2, trước ta có kết nối thiết lập COM1 COM2 Virtual Serial Port Driver Tương ứng để gửi nhận liệu vi điều khiển Máy tính, giao chương trình Giao tiếp C# hay VB ta phải chọn cổng com lại cặp 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 khởi động Keil C, giao diện chương trình hình sau Để tạo dự án mới, ta vào menu Project > New Project… Trang BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# VB Hộp thoại Create New Project ra, bạn chọn thư mục để lưu dự án đặt tên cho dự án Sau click vào nút Save Trang BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# VB Sau hộp thoại Select Device for Target 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 Ở chọn IC AT89C51 hàng Atmel, họ MSC-51 (8051) Và click OK Trang BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# VB Các bước khởi tạo dự án xong, bạn bắt đầu thêm file vào dự án để viết chương trình biên dịch file hex nạp cho VĐK Vào menu File > New, file tạo Tiếp theo bạn vào menu File > Save để lưu file Trang BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# VB File có tên mặc định Text1 tạo ta thấy cửa sổ làm việc Trang 10 BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# 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# 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# VB 4.2 Giao tiếp máy tính điều khiển động DC C# 4.2.1 Mô Proteus 4.2.2 Viết chương trình Keil C cho VĐK #include 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# 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 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# 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 bien x case '1': role1 = 0; role2 = 1; break; // Neu bien x = (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# VB } void uart_init(){ // Ham khoi tao gui nhan qua cong noi tiep SCON = 0x52; //UART bit; SM2/1/0=010, REN=1: cho phép thu; TMOD = 0x22; // Timer va Timer0 Mode TH1 = TL1 = -3; // Toc Baud la 9600 } void sendData(char c){ TR1 = 1; while(!TI); TI = 0; // Cho timer chay // Cho den co truyen len muc // 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 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# VB 4.3 Giao tiếp máy tính điều khiển LCD dịng VB 4.3.1 Mơ Proteus 4.3.2 Chương trình Keil C cho VĐK #include #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 LCD #define lcdLine2() lcd_write(0, 0xc0) // Dong LCD #define lcdLine3() lcd_write(0, 0x94) // Dong LCD #define lcdLine4() lcd_write(0, 0xd4) // Dong 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 BT Lớn Mơn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# VB 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(); Trang 77 BT Lớn Mơn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# VB } 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 dong, ma tran 5x7 lcd_write(0, 0x0C); // Bat LCD, Bat tro lcd_write(0, 0x01); // Xoa LCD delay(500); } Trang 78 BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# VB 4.3.3 Giao diện VB điều khiển máy tính 4.4 Giao tiếp máy tính điều khiển LED đơn VB 4.4.1 Mô Proteus 4.4.2 Viết chương trình Keil C cho VĐK #include void uart_init(); Trang 79 BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# VB 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 máy tính Trang 80 BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# VB 4.5 Giao tiếp máy tính điều khiển LED ma trận DC C# 4.5.1 Mơ Proteus 4.5.2 Viết chương trình Keil C cho VĐK #include #include 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 Trang 81 BT Lớn Môn Truyền Số Liệu Giao tiếp máy tính - VĐK sử dụng C# VB 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