Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiể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
1
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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
2
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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
3
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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.
4
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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.
5
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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
6
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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.
7
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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.
8
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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.
9
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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).
10
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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
11
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
3: Thuật toán
4: Code lập trình
#include<reg52.h>
#include<stdlib.h>
/////////////////////////////////////
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++);
}
12
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
////////////////////////
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++)
{
13
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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++)
{
14
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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;
15
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
}
//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)
{
16
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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++)
{
17
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
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
18
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
temp1=0x00;temp2=0x00;temp3=0xf0;temp4=0x01;xuat();L1=L2=L3=L4=L5=1;de
lay(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=L
4=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;
19
Trường ĐH Công Nghiệp Hà Nội Đồ án môn Vi điều khiển
//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…
20