89C51 LED Matrix Studio by Thuonglh

Sẵn sàng
Mã nguồn
> Khởi tạo hệ thống thành công...
> Động cơ mô phỏng Full-Instruction Set sẵn sàng.

Mạch hiển thị LED

LED Matrix 32 - 4 Ports
AT89C51
Full-Instruction MCU

Mã máy (Intel HEX)

File HEX này chứa mã máy của chương trình bạn vừa biên dịch, có thể dùng để nạp trực tiếp vào IC thật (AT89C51/52) thông qua phần mềm nạp chuyên dụng.

Ngân hàng Bài tập Lập trình LED

Hãy đọc yêu cầu và quan sát hình ảnh demo động bên dưới để viết chương trình tương ứng vào phần Mã nguồn.

Cấp độ 1 Lập trình 8 LED (Port 0)

1.1. Chớp nháy 8 LED

Lập trình chớp tắt đồng thời toàn bộ 8 LED ở Port 0 với chu kỳ nhấp nháy đều đặn.

1.2. Sáng dần (Fill)

Bật sáng dần từng LED một từ phải sang trái (P0.0 đến P0.7), sau đó tắt hết và lặp lại.

1.3. Sáng đuổi 1 điểm

Chỉ 1 điểm sáng duy nhất chạy liên tục từ P0.0 đến P0.7 (Chaser hiệu ứng cơ bản).

1.4. Sáng so le

Sáng xen kẽ các LED chẵn và lẻ (01010101), sau đó đảo ngược trạng thái liên tục.

1.5. Chạy khứ hồi

Một điểm sáng chạy qua lại (Ping-pong) giữa hai biên P0.0 và P0.7 không ngừng.

Cấp độ 2 Lập trình 16 LED (Port 0 & Port 1)

2.1. Nháy luân phiên

Cụm 8 LED Port 0 và cụm 8 LED Port 1 thay phiên nhau chớp sáng/tắt.

2.2. Sáng đuổi 16 LED

Điểm sáng chạy xuyên suốt từ P0.0 băng qua P1.7 tạo thành một dải dài.

2.3. Sáng lan tỏa

Điểm sáng bắt đầu từ tâm (giữa P0.7 và P1.0) và chạy ngược ra 2 biên.

2.4. Sáng dồn (Stack)

Sáng dần vào mảng 16 LED (tương tự lấp đầy thanh Loading tiến độ).

2.5. Hai điểm va chạm

Hai điểm sáng chạy từ 2 biên P0.0 và P1.7, gặp nhau ở giữa rồi dội ngược lại.

Cấp độ 3 Lập trình 32 LED (Port 0 -> 3)

3.1. Sáng đuổi 32 LED

Duy trì 1 điểm sáng chạy nối tiếp liên tục qua toàn bộ 32 LED của hệ thống.

3.2. Cụm 4 xen kẽ

Mỗi 4 LED tạo thành 1 cụm. Sáng tắt xen kẽ (11110000 11110000...) trên cả 4 Port.

3.3. Hiệu ứng Sao băng

Tạo 1 vệt sáng dài (khoảng 3-4 LED liền kề) di chuyển với tốc độ cao qua 32 LED.

3.4. Mở rèm 32 LED

Hai nửa bảng LED (P1,P0 và P2,P3) sáng lan toả dần từ trung tâm sang 2 biên ngoài.

3.5. Bầu trời sao (Random)

Các LED chớp tắt loạn nhịp theo cụm ngẫu nhiên, mô phỏng bầu trời sao lấp lánh.

Hướng dẫn giải Bài tập

Dưới đây là gợi ý thuật toán và các đoạn mã mẫu giúp sinh viên hoàn thành 15 bài tập. Hãy chọn ngôn ngữ bạn đang theo học để xem hướng dẫn.

Cấp độ 1: 8 LED (Port 0) - C Snippets

1.1. Chớp nháy 8 LED

P0 = 0xFF; delay(500);
P0 = 0x00; delay(500);

1.2. Sáng dần (Fill)

P0 = 0;
for(i=0; i<8; i++) {
P0 = (P0 << 1) | 0x01;
delay(150);
}

1.3. Sáng đuổi 1 điểm

for(i=0; i<8; i++) {
P0 = (1 << i);
delay(150);
}

1.4. Sáng so le

P0 = 0x55; delay(300);
P0 = 0xAA; delay(300);

1.5. Chạy khứ hồi

for(i=0; i<7; i++) { P0 = 1<for(i=7; i>0; i--) { P0 = 1<

Cấp độ 2: 16 LED (Port 0 & 1) - C Snippets

2.1. Nháy luân phiên

P0 = 0xFF; P1 = 0x00; delay(300);
P0 = 0x00; P1 = 0xFF; delay(300);

2.2. Sáng đuổi 16 LED

P1 = 0; // Tắt P1 trước
for(i=0; i<8; i++) { P0 = 1<P0 = 0; // Chuyển qua P1
for(i=0; i<8; i++) { P1 = 1<

2.3. Sáng lan tỏa

Từ tâm (P0.7 và P1.0) lan ra ngoài.

for(i=0; i<8; i++) {
P0 = 1 << (7-i); // Chạy lùi trên P0
P1 = 1 << i; // Chạy tiến trên P1
delay(150);
}

2.4. Sáng dồn (Stack)

Gợi ý thuật toán: Dùng 2 vòng lặp lồng nhau. Vòng ngoài xác định điểm dừng (j giảm dần từ 15 về 0), vòng trong (i từ 0 đến j) để chạy điểm sáng đến vị trí dừng và cộng dồn bằng toán tử OR (|).

2.5. Hai điểm va chạm

for(i=0; i<8; i++) {
P0 = 1 << i; // P0 chạy từ trái vào
P1 = 1 << (7-i); // P1 chạy từ phải vào
delay(150);
}

Cấp độ 3: 32 LED (Port 0 -> 3) - C Snippets

3.1. Sáng đuổi 32 LED

// Reset all ports = 0 first
for(i=0; i<32; i++) {
if(i<8) P0=1< if(i>=8 && i<16) P1=1<<(i-8); else P1=0;
/* Tương tự cho P2, P3 */
delay(50);
}

3.2. Cụm 4 xen kẽ

P0=0x0F; P1=0x0F; P2=0x0F; P3=0x0F;
delay(300);
P0=0xF0; P1=0xF0; P2=0xF0; P3=0xF0;
delay(300);

3.3. Hiệu ứng Sao băng

Dùng một dải sáng như 0x07 (3 bit 1) dịch trái liên tục, xử lý nối tràn từ Port này sang Port khác bằng cờ Carry trong ASM hoặc phép toán dịch bit trong C.

3.4. Mở rèm 32 LED

P1 và P0 tạo thành nửa trái, P2 và P3 tạo nửa phải. Sáng lan tỏa đồng thời sang 2 hướng.

for(i=0; i<16; i++) {
// P1 lùi dần sang trái, P2 tiến dần sang phải
// Kết hợp phép OR để giữ lại các điểm sáng
}

3.5. Bầu trời sao (Random)

while(1) {
P0 = (P0 * 5 + 1) % 256;
P1 = (P1 * 3 + 2) % 256;
P2 = (P2 * 7 + 3) % 256;
P3 = (P3 * 11 + 5) % 256;
delay(100);
}

Thế giới Bảng Hiệu

Chọn mẫu bảng hiệu để xem kết quả khi lập trình Port 0, 1, 2, 3.

Sơ đồ đấu nối: Cạnh trên: Port 0| Cạnh phải: Port 1| Cạnh dưới: Port 2| Cạnh trái: Port 3

CAFE

HIHI