Thiết kế mô hình khối led 3d

THIẾT KẾ MÔ HÌNH KHỐI LED 3DBộ vi điều khiển viết tắt là Micro-controller, là mạch tích hợp trên một chíp có thể lập trình được, dùng để điều khiển hoạt động của hệ thống. Bộ vi điều khiển tiến hành đọc, lưu trữ thông tin, xử lý thông tin, đo lường thời gian và tiến hành đọc mở một cơ cấu nào đó. Người lập trình có thể sử dụng nhiều ngôn ngữ để lập trình cho vi điều khiển; Nhưng thường sử dụng hai ngôn ngữ chính để lập trình đó là : Ngôn ngữ lập trình C và ngôn ngữ lập trình Assembly (lập trình trên phần cứng của máy tính).

doc21 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 3161 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Thiết kế mô hình khối led 3d, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA : ĐIỆN TỬ ĐỒ ÁN MÔN HỌC ĐỀ TÀI: THIẾT KẾ MÔ HÌNH KHỐI LED 3D Giáo viên hướng dẫn: Vũ Thị Thu Hương Sinh viên thực hiện: 1.Lê Đức Hệ 2.Nguyễn Đình Tới 3.Mai Ngọc Khôi Mục Lục Lời nói đầu : 3 Phần một: Cơ sở lý thuyết. I: Giới thiệu về bộ vi điều khiển 8051(89S52):….………………………. .4 1: Đặc điểm của IC vi điều khiển:…………………………….……………..4 2: Cấu trúc bên trong của 8051(89S52)………………………..…………….4 3: Các Port của 89S52.......................................................................................6 a: Port 0 (P0.0-P0.7) 6 b: Port 1 (P1.0-P1.7) 6 c: Port 2 (P2.0-P2.7) 6 d: Port 3 (P3.0-P3.7) 6 4: Nghiên cứu tổng thể về vi điều khiển…………………………….……… 7 4.1: Hoạt động định thời: 8 4.2: Cổng nối tiếp: 8 4.2: Ngắt và xử lý ngắt: 8 II: Giới thiệu về 74HC595: 9 1: Cấu tạo và hoạt động của 74HC595: 9 III: Giới thiệu về khối led 3D cube 5x5x5 9 1: Cấu tạo và hoạt động: 9 Phần hai :Nội dung thiết kế sản phẩm…………………………………….10 1: Sơ đồ nguyên lý: 10 2: Nguyên lý hoạt động: 11 3: Thuật toán: 12 4: Code lập trình: 12 Phần ba: Ứng dụng và hướng phát triển…………………………………..20 1: Hướng phát triển: 20 2: Ứng dụng thực tế: 20 LỜI NÓI ĐẦU Bộ vi điều khiển viết tắt là Micro-controller, là mạch tích hợp trên một chíp có thể lập trình được, dùng để điều khiển hoạt động của hệ thống. Bộ vi điều khiển tiến hành đọc, lưu trữ thông tin, xử lý thông tin, đo lường thời gian và tiến hành đọc mở một cơ cấu nào đó. Người lập trình có thể sử dụng nhiều ngôn ngữ để lập trình cho vi điều khiển; Nhưng thường sử dụng hai ngôn ngữ chính để lập trình đó là : Ngôn ngữ lập trình C và ngôn ngữ lập trình Assembly (lập trình trên phần cứng của máy tính). Sau khi lập trình xong phần trình dịch được nạp vào IC và dùng IC này để điều khiển các hệ thống theo yêu cầu đề ra: Hiện nay vi điều khiển rất phát triển, nó được ứng dụng vào rất nhiều lĩnh vực như: Sản xuất công nghiệp, tự động hoá và rất nhiều lĩnh vực khác. So với kỹ thuật số thì vi điều khiển nhỏ gọn hơn rất nhiều do nó được tích hợp lại và được lập trình để điều khiển. Với đề tài : Thiết kế khối led 3D cube dạng 5x5x5 chúng em muốn viết lên một số ứng dụng của IC này đồng thời thể hiện những kiến thức mình đã học được. Có thể trong quá trình thiết kế và ứng dụng có nhiều vấn đề có thể chưa được như mong muốn, chúng em mong được sự nhận xét chỉ bảo của các thầy để chúng em có thể hoàn thành tốt hơn những đồ án về sau. Chúng em xin chân thành cảm ơn!!! Giáo viên hướng dẫn : Nguyễn Thu Hương Sinh viên thực hiên : Lê Đức Hệ Nguyễn Đình Tới Mai Ngọc Khôi PHẦN MỘT CƠ SỞ LÝ THUYẾT I: Giới thiệu sơ lược về bộ vi điều khiển 8051(89S52): 1: IC vi điều khiển thuộc họ MCS51 có các đặc điểm sau: 4 kbyte ROM 128 byte RAM 4 port I/O 8 bit 2 bộ định thời 1 cổng nối tiếp 6 nguồn ngắt Nhưng thực tế hiện nay ta hay sử dụng 8052 (89S52) cũng là một thành viên họ 8051 . 8052 có tất cả các đặc tính của 8051 ngoài ra còn có thêm 4 kbyte ROM, 128 byte RAM và một bộ định thời nữa. Vi điều khiển 8051 2: Cấu trúc bên trong IC8051: Phần chính của vi điều khiển 8051 là bộ vi xử lý trung tâm ( CPU: central processing unit). Đơn vị xử lý trung tâm nhận trực tiếp xung từ bộ dao động, ngoài ra còn có khả năng đưa một tín hiệu giữ nhịp từ bên ngoài. Chương trình đang chạy có thể dừng lại nhờ một khối điều khiển ngắt ở bên trong. Các nguồn ngắt có thể là : Các biến cố ở bên ngoài, sự tràn của bộ đếm định thời hoặc cũng có thể là giao diện nối tiếp. Ba bộ định thời 16bit hoạt động như một bộ đếm. Các cổng Port0, Port1, Port2, Port3. Sử dụng vào mục đích điều khiển và xuất nhập tín hiệu. Ở cổng Port3 có thêm các đường dẫn điều khiển dùng để trao đổi với bộ nhớ bên ngoài, hoặc để đầu nối giao diện nối tiếp, cũng như các đường ngắt dẫn ở bên ngoài. Sơ đồ khối 89S52. Giao diện nối tiếp có chứa một bộ truyền và một bộ nhận không đồng bộ, làm việc độc lập với nhau. Tốc độ truyền qua cổng nối tiếp có thể đặt trong dải rộng và được ấn định bằng một bộ định thời. Trong vi điều khiển 8051 có hai thành phần quan trọng khác đó là bộ nhớ và các thanh ghi: Bộ nhớ gồm có bộ nhớ RAM và bộ nhớ ROM dùng để lưư trữ dữ liệu và mã lệnh. Các thanh ghi sử dụng để lưư trữ thông tin trong quá trình xử lý. Khi CPU làm việc nó thay đổi nội dung các thanh ghi. 3: Các Port của 89S52: a :Port0 (P0.0-P0.7): Port 0 gồm 8 chân, ngoài chức năng xuất nhập, Port 0 còn là bus đa hợp dữ liệu và địa chỉ (AD0-AD7), chức năng này sẽ được sử dụng khi 8051 giao tiếp với thíêt bị ngoài có các kiến trúc bus như mạch nhớ, mạch PIO… Cấu trúc của các chân trên Port 0. b :Port1 (P1.0-P1.7): Đối với 8051, chức năng duy nhất của Port 1 là chức năng xuất nhập, cũng như các Port khác Port 1 có thể xuất nhập theo bit hoặc theo byte. Hình 4: Cấu trúc của các chân trên Port 1 và Port3. c :Port2 (P2.0-P2.7): Port 2 là một Port công dụng kép trên các chân 21-28 được dùng như các đường xuất nhập hoặc là byte cao cua Bus địa chỉ với các thiết kế dùng bộ nhớ mở rộng Hình 5 : Cấu trúc các chân trên Port 2 d :Port3 (P3.0-P3.7): Mỗi chân trên Port 3 ngoài chức năng xuất nhập còn có một chức năng riêng, cụ thể như sau : Port Tên Chức năng chuyển đổi P3.0 RXD Dữ liệu nhận cho Port nối tiếp P3.1 TXD Dữ liệu phát cho Port nối tiếp P3.2 INT0 Ngắt 0 bên ngoài P3.3 INT1 Ngắt 1 bên ngoài P3.4 T0 Ngõ vào của Timer/Counter 0 P3.5 T1 Ngõ vào của Timer/Counter 1 P3.6 WR Xung ghi bộ nhớ dữ liệu ngoài P3.7 RD Xung đọc bộ nhớ dữ liệu ngoài 4 : Nghiên cứu tổng thể về vi điều khiển : Nhìn tổng thể chúng ta có thể tìn hiểu về vi điều khiển trong 3 mảng vấn đề chính là: Các bộ định thời Timer, Port nối tiếp và Ngắt. 4.1: Hoạt động định thời : Các thanh ghi: Timer 0 và Timer 1 : Thanh ghi chế độ định thời (TMOD) Thanh ghi điều khiển Timer ( TCON) Các thanh ghi chứa giá trị của các bộ định thời. Timer 2 : Thanh ghi T2CON. Thanh ghi T2MOD Thanh ghi TH2 và TL2,RCAP2H và RCAP2L Các chế độ hoạt động của Timer: Timer 0 và Timer 1: Chế độ 0 : Timer 13 bit. Chế độ 1: Timer 16 bit. Chế độ 2 : 8 bit tự động nạp lại. Chế độ 3 : Tách Timer Timer 2 : Chế độ thu nhận (Captuer) : 16bit tự nạp lại Chế độ tự nạp lại (Auto-Reload) : 16bit thu nhận Chế độ cung cấp tốc độ Baud cho cổng nối tiếp. 4.2: Cổng nối tiếp: Các thanh ghi cổng nối tiếp: Thanh ghi điều khiển cổng nối tiếp (SCON), thanh ghi đệm truyền nhận ở cổng nối tiếp (SBUF). Các chế độ hoạt động: Chế độ 0 và chế độ 1, chế độ 2. Ứng dụng truyền nhận qua cổng nối tiếp và truyền thông đa xử lý. 4.3: Ngắt và xử lý ngắt: Thanh ghi cho phép ngắt IE ( Interrupt Enable). Thanh ghi ưu tiên ngắt IP. Các vector ngắt và số hiệu ngắt. Ngắt Cờ Địa chỉ vector Số hiệu Reset hệ thống RST 0000H Bên ngoài 0 IE0 0003H 0 Timer 0 TF0 000BH 1 Bên ngoài 1 IE1 0013H 2 Timer 1 TF1 001BH 3 Port nối tiếp TI hoặc RI 0023H 4 Timer 2 TX2 hoặc EXF2 002BH 5 89S52 có 6 nguồn ngắt:Ngăt ngoài INT0. Ngắt ngoài INT1. Ngắt do bộ Timer 0. Ngắt do bộ Timer 1. Ngắt do bộ Timer 2. Ngắt do Port nối tiêp. Các ngắt ngoài sảy ra khi có mức thấp hoặc sườn xuống trên chân INT0 hoặc INT1 của vi điều khiển. Đây là chức năng chuyển đổi của các bit Port 3 (P3.2 và P3.3). Ngắt cổng nối tiếp xảy ra khi cờ phát (TI) hoặc cờ ngắt thu (RI) được đặt lên mức1. Ngắt phát xảy ra khi một ký tự đã nhận xong và đang đợi trong SBUF để được đọc. Các ngắt cổng nối tiếp khác với các ngắt Timer. Cờ gây ra ngắt cổng nối tiếp không bị xáo bằng phấn cứng khi CPU chuyển tới ngắt, do có hai nguồn ngắt cổng nối tiếp TI và RI. Nguồn ngắt phải được xác định trong ISR và cờ tạo ngắt sẽ được xoá bằng phần mềm. Các ngắt Timer cờ ngắt được xoá bằng phần cứng khi CPU hướng tới ISR. II : Giới thiệu về IC ghi dịch 74HC595: Cấu tạo và hoạt động của 74HC595 Cấu tạo và hình dạng thực tế của 74HC595 74HC595 là IC ghi dịch được đóng dưới dạng vỏ 16 chân.Chức năng và hoạt động của từng chân: Chân 8 và chân 16 là chân GND và VCC cấp nguồn cho IC Chân 1,2,3,4,5,6,7,15 là 8 đầu ra dữ liệu song song Chân 9 là chân ra dữ liệu nối tiếp Chân 10 là chân Reset tích cực mức thấp. Khi đưa mức 0 vào chân này tất cả dữ liệu của IC bị reset về mức 0 Chân 14 là chân nhận dữ liệu nối tiếp từ bên ngoài Chân 13 cho phép xuất dữ liệu ra tích cực mức thấp. Khi hoạt động chân này thường được nối với GND Chân 11 là chân cho phép nhận xung dữ liệu ghi dịch vào chân 14 Chân 12 là chân cho phép xuất dữ liệu ra, mỗi khi chân này được đưa lên mức cao, IC lại xuất dữ liệu qua các đầu ra dữ liệu song song. III : Giới thiệu về khối led 3D cube 5x5x5 Led 3D cube 5x5x5 là khối led đơn sắc bao gồm 125 led đơn liên kết với nhau được bố trí thành một ma trận 3 chiều bao gồm 5 lớp, mỗi lớp gồm 25 led đơn như một ma trận 5x5, có thể hiểu đơn giản nó giống như một khối led được xếp lại từ 5 led ma trận 5x5. Trong đó các Katot của các led trên cùng một lớp được nối chung và các Anot trên cùng một cột được nối chung lại. Muốn một led bất kì tại vị trí mong muốn sáng ta chỉ cần cấp nguồn cho cột và lớp tương ứng Việc cấp điện thế cao cho các lớp được thực hiện bởi 5 transistor PNP. Năm Transistor này được điều khiển bởi 5 chân IO của vi điều khiển và được phân cực ở vùng bão hòa và vùng ngưng tương ứng với mức logic 0 và 1 ( ngược mức logic với chân IO của vi điều khiển). Việc cấp điện thế thấp cho các cột được thực hiện bởi 25 chân IO của vi điều khiển, do không có transistor để nhận dòng nên khi khi tính toán điện trở hạn dòng cho led phải lưu ý đến khả năng nhận dòng của chân IO vi điều khiển (thông số IOL khoảng 200mA là tối đa). PHẦN HAI NỘI DUNG THIẾT KẾ SẢN PHẨM 1: Sơ đồ nguyên lý Mạch gồm các thành phần chính: IC89S52, LM7805, khối cube 5x5x5, ULN2803, IC ghi dịch 74HC595 Sơ đồ nguyên lý 2: Nguyên lý hoạt động của mạch: Nguyên lý hoạt động của khối led giống như nguyên lý hoạt động của led ma trận thường, nghĩa là vào mỗi thời điểm chỉ có 1 lớp LED được cấp nguồn, và tương ứng với mã led tại mỗi cột sẽ cho ra led sáng tương ứng. Vi điều khiên 89S52 làm nhiệm vụ chuyển đổi dữ liệu cho khối led từ song song sang nối tiếp và ghi vào 74HC595 cấp mã cho các led sáng theo mong muốn tạo ra các hiệu ứng 3: Thuật toán 4: Code lập trình #include #include ///////////////////////////////////// sbit DATA = P2^5; sbit SCK = P2^7; sbit LACH = P2^6; sbit L1=P1^0; sbit L2=P1^1; sbit L3=P1^2; sbit L4=P1^3; sbit L5=P1^4; unsigned char temp1,temp2,temp3,temp4; unsigned char i,j; ///////////////////////////////////////// void delay(unsigned int ms) { unsigned int i,j; for(i=0;i<ms;i++) for(j=0;j<125;j++); } //////////////////////// void hienthi(unsigned char x) { unsigned int i,temp; for(i=0;i<8;i++) { temp=x; temp=temp&0x80 if(temp==0x80) DATA=1; else DATA=0 x*=2; SCK=0; SCK=1; }} void xuat() { hienthi(temp4); hienthi(temp3); hienthi(temp2); hienthi(temp1); LACH=0; LACH=1; } ///////////////////////////////////////////////////// void chaychu(unsigned int ms) { //chu D for(j=0;j<ms;j++) { temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L2=1;delay(1);L2=0; temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L3=1;delay(1);L3=0; temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x00;xuat();L5=1;delay(1);L5=0; } P2=0;delay(300); //chu T for(j=0;j<ms;j++) { temp1=0x00;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x00;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x00;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x00;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x01;xuat();L5=1;delay(1);L5=0; } P2=0;delay(300); //so 3 for(j=0;j<ms;j++) { temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x01;xuat();L1=1;delay(1);L1=0; temp1=0x00;temp2=0x00,temp3=0x00;temp4=0x01;xuat();L2=1;delay(1);L2=0; temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x01;xuat();L3=1;delay(1);L3=0; temp1=0x00;temp2=0x00,temp3=0x00;temp4=0x01;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x01;xuat();L5=1;delay(1);L5=0; } P2=0;delay(300); //CHU K for(j=0;j<ms;j++) { temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L1=1;delay(1);L1=0; temp1=0x00;temp2=0x00,temp3=0x90;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x00;temp2=0x00,temp3=0x70;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x00;temp2=0x00,temp3=0x90;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L5=1;delay(1);L5=0; } P2=0;delay(300); //so 3 for(j=0;j<ms;j++) { temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x01;xuat();L1=1;delay(1);L1=0; temp1=0x00;temp2=0x00,temp3=0x00;temp4=0x01;xuat();L2=1;delay(1);L2=0; temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x01;xuat();L3=1;delay(1);L3=0; temp1=0x00;temp2=0x00,temp3=0x00;temp4=0x01;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x01;xuat();L5=1;delay(1);L5=0; } P2=0;delay(300); //CHU H for(j=0;j<ms;j++) { temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L1=1;delay(1);L1=0; temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L2=1;delay(1);L2=0; temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x01;xuat();L3=1;delay(1);L3=0; temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L5=1;delay(1);L5=0; } P2=0;delay(300); //CHU A for(j=0;j<ms;j++) { temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L1=1;delay(1);L1=0; temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L2=1;delay(1);L2=0; temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x01;xuat();L3=1;delay(1);L3=0; temp1=0x00;temp2=0x00,temp3=0xa0;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L5=1;delay(1);L5=0; } P2=0;delay(300); //CHU U for(j=0;j<ms;j++) { temp1=0x00;temp2=0x00,temp3=0xe0;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L2=1;delay(1);L2=0; temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L3=1;delay(1);L3=0; temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x00,temp3=0x10;temp4=0x01;xuat();L5=1;delay(1);L5=0; } P2=0;delay(300); //CHU I for(j=0;j<ms;j++) { temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x01;xuat();L1=1;delay(1);L1=0; temp1=0x00;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x00;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x00;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x00,temp3=0xf0;temp4=0x01;xuat();L5=1;delay(1);L5=0; } P2=0;delay(300); } ///////////////////////////////////////////////////// void locxoay(unsigned char ms,unsigned int m) { for(i=0;i<m ;i++) { //FAMER 1 for(j=0;j<ms;j++) { temp1=0x01;temp2=0x00,temp3=0x00;temp4=0x01;xuat();L1=1;delay(1);L1=0; temp1=0x02;temp2=0x00,temp3=0x80;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x04;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x08;temp2=0x00,temp3=0x20;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x10;temp2=0x00,temp3=0x10;temp4=0x00;xuat();L5=1;delay(1);L5=0; } //FAMER 2 for(j=0;j<ms;j++) { temp1=0x02;temp2=0x00,temp3=0x80;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x04;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x08;temp2=0x00,temp3=0x20;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x10;temp2=0x00,temp3=0x10;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x82,temp3=0x00;temp4=0x00;xuat();L5=1;delay(1);L5=0; } //FAMER 3 for(j=0;j<ms;j++) { temp1=0x04;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x08;temp2=0x00,temp3=0x20;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x10;temp2=0x00,temp3=0x10;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x00;temp2=0x82,temp3=0x00;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x44,temp3=0x00;temp4=0x00;xuat();L5=1;delay(1);L5=0; } //FAMER 4 for(j=0;j<ms;j++) { temp1=0x08;temp2=0x00,temp3=0x20;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x10;temp2=0x00,temp3=0x10;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x00;temp2=0x82,temp3=0x00;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x00;temp2=0x44,temp3=0x00;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x20;temp2=0x00,temp3=0x08;temp4=0x00;xuat();L5=1;delay(1);L5=0; } //FAMER 5 for(j=0;j<ms;j++) { temp1=0x10;temp2=0x00,temp3=0x10;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x00;temp2=0x82,temp3=0x00;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x00;temp2=0x44,temp3=0x00;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x20;temp2=0x00,temp3=0x08;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x01;temp2=0x00,temp3=0x00;temp4=0x01;xuat();L5=1;delay(1);L5=0; } //FAMER 6 for(j=0;j<ms;j++) { temp1=0x00;temp2=0x82,temp3=0x00;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x00;temp2=0x44,temp3=0x00;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x20;temp2=0x00,temp3=0x08;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x01;temp2=0x00,temp3=0x00;temp4=0x01;xuat();L4=1;delay(1);L4=0; temp1=0x02;temp2=0x00,temp3=0x80;temp4=0x00;xuat();L5=1;delay(1);L5=0; } //FAMER 7 for(j=0;j<ms;j++) { temp1=0x00;temp2=0x44,temp3=0x00;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x20;temp2=0x00,temp3=0x08;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x01;temp2=0x00,temp3=0x00;temp4=0x01;xuat();L3=1;delay(1);L3=0; temp1=0x02;temp2=0x00,temp3=0x80;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x04;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L5=1;delay(1);L5=0; } //FAMER 8 for(j=0;j<ms;j++) { temp1=0x20;temp2=0x00,temp3=0x08;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x01;temp2=0x00,temp3=0x00;temp4=0x01;xuat();L2=1;delay(1);L2=0; temp1=0x02;temp2=0x00,temp3=0x80;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x04;temp2=0x00,temp3=0x40;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x08;temp2=0x00,temp3=0x20;temp4=0x00;xuat();L5=1;delay(1);L5=0; } }} /////////////////////////////////////////////////////////////////////// void songbien(unsigned char ms,unsigned int m) { for(i=0;i<m;i++) { //FAMER 1 for(j=0;j<ms;j++) { temp1=0x00;temp2=0x00,temp3=0x00;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x00;temp2=0x00,temp3=0x00;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x31;temp2=0xc6,temp3=0x18;temp4=0x01;xuat();L3=1;delay(1);L3=0; temp1=0x4a;temp2=0x29,temp3=0xa5;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x84;temp2=0x10,temp3=0x42;temp4=0x00;xuat();L5=1;delay(1);L5=0; } //FAMER 2 for(j=0;j<ms;j++) { temp1=0x00;temp2=0x00,temp3=0x00;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x21;temp2=0x84,temp3=0x10;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x42;temp2=0x08,temp3=0x21;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x94;temp2=0x52,temp3=0x4a;temp4=0x01;xuat();L4=1;delay(1);L4=0; temp1=0x08;temp2=0x21,temp3=0x84;temp4=0x00;xuat();L5=1;delay(1);L5=0; } //FAMER 3 for(j=0;j<ms;j++) { temp1=0x21;temp2=0x84,temp3=0x10;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x42;temp2=0x08,temp3=0x21;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x84;temp2=0x10,temp3=0x42;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x08;temp2=0x21,temp3=0x84;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x10;temp2=0x42,temp3=0x08;temp4=0x01;xuat();L5=1;delay(1);L5=0; } //FAMER 4 for(j=0;j<ms;j++) { temp1=0x42;temp2=0x08,temp3=0x21;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0xa5;temp2=0x94,temp3=0x52;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x08;temp2=0x21,temp3=0x84;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x10;temp2=0x42,temp3=0x08;temp4=0x01;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x00,temp3=0x00;temp4=0x00;xuat();L5=1;delay(1);L5=0; } //FAMER 5 for(j=0;j<ms;j++) { temp1=0x84;temp2=0x10,temp3=0x42;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x4a;temp2=0x29,temp3=0xa5;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x31;temp2=0xc6,temp3=0x18;temp4=0x01;xuat();L3=1;delay(1);L3=0; temp1=0x00;temp2=0x00,temp3=0x00;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x00,temp3=0x00;temp4=0x00;xuat();L5=1;delay(1);L5=0; } //FAMER 6 for(j=0;j<ms;j++) { temp1=0x08;temp2=0x21,temp3=0x84;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x94;temp2=0x52,temp3=0x4a;temp4=0x01;xuat();L2=1;delay(1);L2=0; temp1=0x42;temp2=0x08,temp3=0x21;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x21;temp2=0x84,temp3=0x10;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x00;temp2=0x00,temp3=0x00;temp4=0x00;xuat();L5=1;delay(1);L5=0; } //FAMER 7 for(j=0;j<ms;j++) { temp1=0x10;temp2=0x42,temp3=0x08;temp4=0x01;xuat();L1=1;delay(1);L1=0; temp1=0x08;temp2=0x21,temp3=0x84;temp4=0x00;xuat();L2=1;delay(1);L2=0; temp1=0x84;temp2=0x10,temp3=0x42;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0x42;temp2=0x08,temp3=0x21;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x21;temp2=0x84,temp3=0x10;temp4=0x00;xuat();L5=1;delay(1);L5=0; } //FAMER 8 for(j=0;j<ms;j++) { temp1=0x00;temp2=0x00,temp3=0x00;temp4=0x00;xuat();L1=1;delay(1);L1=0; temp1=0x10;temp2=0x42,temp3=0x08;temp4=0x01;xuat();L2=1;delay(1);L2=0; temp1=0x08;temp2=0x21,temp3=0x84;temp4=0x00;xuat();L3=1;delay(1);L3=0; temp1=0xa5;temp2=0x94,temp3=0x52;temp4=0x00;xuat();L4=1;delay(1);L4=0; temp1=0x42;temp2=0x08,temp3=0x21;temp4=0x00;xuat();L5=1;delay(1);L5=0; } }} /////////////////////////////////////////////////////////////////////// void diemsang(unsigned char ms,unsigned int m) { for(i=0;i<m;i++) { //FAMER 1 temp1=0x00;temp2=0x10;temp3=0x00;temp4=0x00;xuat();L3=1;delay(ms);L3=0; //FAMER 2 temp1=0x40;temp2=0x01;temp3=0x05;temp4=0x00;xuat();L2=L4=1;delay(ms);L2=L4=0; //FAMER 3 temp1=0x11;temp2=0x00;temp3=0x10;temp4=0x01;xuat();L1=L5=1;delay(ms);L1=L5=0; //FAMER 4 temp1=0x40;temp2=0x01;temp3=0x05;temp4=0x00;xuat();L2=L4=1;delay(ms);L2=L4=0; //FAMER 5 temp1=0x00;temp2=0x10;temp3=0x00;temp4=0x00;xuat();L3=1;delay(ms);L3=0; }} /////////////////////////////////////////////////////////////////////// void pittong(unsigned int ms,unsigned int m) { for(i=0;i<m;i++) { //FAMER 1 temp1=0x00;temp2=0x00;temp3=0xf0;temp4=0x01;xuat();L1=L2=L3=L4=L5=1;delay(ms); //FAMER 2 temp1=0x00;temp2=0x80;temp3=0x0f;temp4=0x00;xuat();delay(ms); //FAMER 3 temp1=0x00;temp2=0x7f;temp3=0x00;temp4=0x00;xuat();delay(ms); //FAMER 4 temp1=0xe0;temp2=0x03;temp3=0x00;temp4=0x00;xuat();delay(ms); //FAMER 5 temp1=0x1f;temp2=0x00;temp3=0x00;temp4=0x00;xuat();delay(ms); //FAMER 6 temp1=0xe0;temp2=0x03;temp3=0x00;temp4=0x00;xuat();delay(ms); //FAMER 7 temp1=0x00;temp2=0x7f;temp3=0x00;temp4=0x00;xuat();delay(ms); //FAMER 8 temp1=0x00;temp2=0x80;temp3=0x0f;temp4=0x00;xuat();delay(ms);L1=L2=L3=L4=L5=0; }} /////////////////////////////////////////////////////////////////////// void songbien2(unsigned int ms,unsigned int m) { L1=L2=L3=L4=L5=1; for(i=0;i<m;i++) { //FAMER 1 temp1=0x41;temp2=0x10,temp3=0x11;temp4=0x00;xuat();delay(ms); //FAMER 2 temp1=0x22;temp2=0x08,temp3=0x82;temp4=0x00;xuat();delay(ms); //FAMER 3 temp1=0x41;temp2=0x10,temp3=0x04;temp4=0x01;xuat();delay(ms); //FAMER 4 temp1=0x82;temp2=0x20,temp3=0x88;temp4=0x00;xuat();delay(ms); //FAMER 5 temp1=0x04;temp2=0x41,temp3=0x44;temp4=0x00;xuat();delay(ms); //FAMER 6 temp1=0x08;temp2=0x22,temp3=0x22;temp4=0x00;xuat();delay(ms); //FAMER 7 temp1=0x10;temp2=0x11,temp3=0x11;temp4=0x00;xuat();delay(ms); //FAMER 8 temp1=0x88;temp2=0x88,temp3=0x20;temp4=0x00;xuat();delay(ms); } L1=L2=L3=L4=L5=0;} ///////////////////////////////////////////////////////////////////////// void nuocdang(unsigned int ms,unsigned int m) { for(i=0;i<m;i++) { //FAMER 1 temp1=0xff;temp2=0xff;temp3=0xff;temp4=0x01;xuat(); L1=1;delay(ms);L1=0; //FAMER 2 L2=1;delay(ms);L2=0; //FAMER 3 L3=1;delay(ms);L3=0; //FAMER 4 L4=1;delay(ms);L4=0; //FAMER 5 L5=1;delay(ms);L5=0; //FAMER 6 L4=1;delay(ms);L4=0; //FAMER 7 L3=1;delay(ms);L3=0; //FAMER 8 L2=1;delay(ms);L2=0; } } ////////////////////////////////////////////////////////////////////// void main() { P2=0; delay(1000); chaychu(100); while(1) { locxoay(12,10); diemsang(100,4); nuocdang(80,3); pittong(80,3); songbien2(100,10); songbien(16,10); }} PHẦN BA ỨNG DỤNG VÀ HƯỚNG PHÁT TRIỂN 1: Hướng phát triển Với khối led 5x5x5 ta có thể xây dựng mạch theo 2 phương pháp khác ngoài phương pháp sử dụng IC ghi dịch 74HC595. Thứ nhất là tận dụng chân vi điều khiển 89S52 (có sẵn 32 chân), trong đó có 25 chân điều khiển cột và 5 chân điều khiển lớp nhưng phương pháp này có nhược điểm là tốn chân In/Out của vi điều khiển, không thực hiện được các công việc khác nếu cần. Thứ hai là phương pháp quét 3 bít kết hợp transistor làm khóa điện tử, phương pháp này dễ quét nhưng code lập trình lớn, không thích hợp với vi điều khiển 89S52 có bộ nhớ thấp (8kB), ta có thể mở rộng phương pháp này với các họ vi điều khiển khác có bộ nhớ lớn và phổ biến hiện nay như PIC, AVR… Việc xây dựng được khối led 5x5x5 chúng ta có thể phát triển lên với các khối led có kích thước lớn hơn như 8x8x8 hoặc 16x16x16…. 2: Ứng dụng thực tế: Rất thích hợp làm đèn nháy trong các quán bar, nhà hàng… tạo các hiệu ứng đẹp mắt…

Các file đính kèm theo tài liệu này:

  • docled_cube_8_8_8_1922.doc
Tài liệu liên quan