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.
21 trang |
Chia sẻ: oanh_nt | Lượt xem: 1794 | Lượt tải: 2
Bạn đang xem trước 20 trang nội dung tài liệu Đồ án 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,
Các file đính kèm theo tài liệu này:
- led_cube_8_8_8_1922.doc