Theo mình đơn kinh tế và hiệu quả nhất là dùng 1 em AT89S52, tổng chi phí khoảng <30k), có thể lập trình để nháy đủ kiểu chương trình theo ý của mình.
Dưới đây là một project của mình:
Phần cứng:
- 1 IC AT89S52 (15k)
- 1 thạch anh + 2 tụ 33p (3k)
- 16 led (có thể thêm đến 32)
- 16 R 270 ôm (có thể thay bằng R thanh cho đơn giản) (1k)
- 3 nút nhấn (reset, tăng tốc, giảm tốc)
- 1 miếng mạch đục lỗ sẵn (3k)
Option:
- Phần mạch nguồn dùng 7805
- Phần giao tiếp với COM PC, điều khiển thử chơi vui
16 led nối vào P0 và P2 qua R hạn dòng 270.
Chương trình viết bằng C:
#include <REG52.H>
unsigned char code LED_01 = 17;
unsigned int code Data_01[] = //{Diem sang chay phai}
{
0xFEFF, 0xFDFF, 0xFBFF, 0xF7FF, 0xEFFF, 0xDFFF, 0xBFFF, 0x7FFF,
0xFF7F, 0xFFBF, 0xFFDF, 0xFFEF, 0xFFF7, 0xFFFB, 0xFFFD, 0xFFFE,
0xFFFF
};
unsigned char code LED_02 = 17;
unsigned int code Data_02[] = //{Diem sang chay trai}
{
0xFFFE, 0xFFFD, 0xFFFB, 0xFFF7, 0xFFEF, 0xFFDF, 0xFFBF, 0xFF7F,
0x7FFF, 0xBFFF, 0xDFFF, 0xEFFF, 0xF7FF, 0xFBFF, 0xFDFF, 0xFEFF,
0xFFFF
};
unsigned char code LED_03 = 17;
unsigned int code Data_03[] = //{Diem toi chay phai}
{
0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
0x0080, 0x0040, 0x0020, 0x0010, 0x0008, 0x0004, 0x0002, 0x0001,
0x0000
};
unsigned char code LED_04 = 16;
unsigned int code Data_04[] = //{Diem toi chay qua trai}
{
0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
0x8000, 0x4000, 0x2000, 0x1000, 0x0800, 0x0400, 0x0200, 0x0100
};
unsigned char code LED_05 = 241;
unsigned int code Data_05[] = //{Diem sang qua lai lap phai}
{
0xFEFF, 0xFDFF, 0xFBFF, 0xF7FF, 0xEFFF, 0xDFFF, 0xBFFF, 0x7FFF,
0xFF7F, 0xFFBF, 0xFFDF, 0xFFEF, 0xFFF7, 0xFFFB, 0xFFFD, 0xFFFE,
0xFFFC, 0xFFFA, 0xFFF6, 0xFFEE, 0xFFDE, 0xFFBE, 0xFF7E, 0x7FFE,
0xBFFE, 0xDFFE, 0xEFFE, 0xF7FE, 0xFBFE, 0xFDFE, 0xFEFE, 0xFDFE,
0xFBFE, 0xF7FE, 0xEFFE, 0xDFFE, 0xBFFE, 0x7FFE, 0xFF7E, 0xFFBE,
0xFFDE, 0xFFEE, 0xFFF6, 0xFFFA, 0xFFFC, 0xFFF8, 0xFFF4, 0xFFEC,
0xFFDC, 0xFFBC, 0xFF7C, 0x7FFC, 0xBFFC, 0xDFFC, 0xEFFC, 0xF7FC,
0xFBFC, 0xFDFC, 0xFEFC, 0xFDFC, 0xFBFC, 0xF7FC, 0xEFFC, 0xDFFC,
0xBFFC, 0x7FFC, 0xFF7C, 0xFFBC, 0xFFDC, 0xFFEC, 0xFFF4, 0xFFF8,
0xFFF0, 0xFFE8, 0xFFD8, 0xFFB8, 0xFF78, 0x7FF8, 0xBFF8, 0xDFF8,
0xEFF8, 0xF7F8, 0xFBF8, 0xFDF8, 0xFEF8, 0xFDF8, 0xFBF8, 0xF7F8,
0xEFF8, 0xDFF8, 0xBFF8, 0x7FF8, 0xFF78, 0xFFB8, 0xFFD8, 0xFFE8,
0xFFF0, 0xFFE0, 0xFFD0, 0xFFB0, 0xFF70, 0x7FF0, 0xBFF0, 0xDFF0,
0xEFF0, 0xF7F0, 0xFBF0, 0xFDF0, 0xFEF0, 0xFDF0, 0xFBF0, 0xF7F0,
0xEFF0, 0xDFF0, 0xBFF0, 0x7FF0, 0xFF70, 0xFFB0, 0xFFD0, 0xFFE0,
0xFFC0, 0xFFA0, 0xFF60, 0x7FE0, 0xBFE0, 0xDFE0, 0xEFE0, 0xF7E0,
0xFBE0, 0xFDE0, 0xFEE0, 0xFDE0, 0xFBE0, 0xF7E0, 0xEFE0, 0xDFE0,
0xBFE0, 0x7FE0, 0xFF60, 0xFFA0, 0xFFC0, 0xFF80, 0xFF40, 0x7FC0,
0xBFC0, 0xDFC0, 0xEFC0, 0xF7C0, 0xFBC0, 0xFDC0, 0xFEC0, 0xFDC0,
0xFBC0, 0xF7C0, 0xEFC0, 0xDFC0, 0xBFC0, 0x7FC0, 0xFF40, 0xFF80,
0xFF00, 0x7F80, 0xBF80, 0xDF80, 0xEF80, 0xF780, 0xFB80, 0xFD80,
0xFE80, 0xFD80, 0xFB80, 0xF780, 0xEF80, 0xDF80, 0xBF80, 0x7F80,
0xFF00, 0x7F00, 0xBF00, 0xDF00, 0xEF00, 0xF700, 0xFB00, 0xFD00,
0xFE00, 0xFD00, 0xFB00, 0xF700, 0xEF00, 0xDF00, 0xBF00, 0x7F00,
0x3F00, 0x5F00, 0x6F00, 0x7700, 0x7B00, 0x7D00, 0x7E00, 0x7D00,
0x7B00, 0x7700, 0x6F00, 0x5F00, 0x3F00, 0x1F00, 0x2F00, 0x3700,
0x3B00, 0x3D00, 0x3E00, 0x3D00, 0x3B00, 0x3700, 0x2F00, 0x1F00,
0x0F00, 0x1700, 0x1B00, 0x1D00, 0x1E00, 0x1D00, 0x1B00, 0x1700,
0x0F00, 0x0700, 0x0B00, 0x0D00, 0x0E00, 0x0D00, 0x0B00, 0x0700,
0x0300, 0x0500, 0x0600, 0x0500, 0x0300, 0x0100, 0x0200, 0x0100,
0x0000
};
unsigned char code LED_06 = 137;
unsigned int code Data_06[] = //{Diem sang lap phai}
{
0xFEFF, 0xFDFF, 0xFBFF, 0xF7FF, 0xEFFF, 0xDFFF, 0xBFFF, 0x7FFF,
0xFF7F, 0xFFBF, 0xFFDF, 0xFFEF, 0xFFF7, 0xFFFB, 0xFFFD, 0xFFFE,
0xFEFE, 0xFEFE, 0xFDFE, 0xFBFE, 0xF7FE, 0xEFFE, 0xDFFE, 0xBFFE,
0x7FFE, 0xFF7E, 0xFFBE, 0xFFDE, 0xFFEE, 0xFFF6, 0xFFFA, 0xFFFC,
0xFEFC, 0xFDFC, 0xFBFC, 0xF7FC, 0xEFFC, 0xDFFC, 0xBFFC, 0x7FFC,
0xFF7C, 0xFFBC, 0xFFDC, 0xFFEC, 0xFFF4, 0xFFF8, 0xFEF8, 0xFDF8,
0xFBF8, 0xF7F8, 0xEFF8, 0xDFF8, 0xBFF8, 0x7FF8, 0xFF78, 0xFFB8,
0xFFD8, 0xFFE8, 0xFFF0, 0xFEF0, 0xFDF0, 0xFBF0, 0xF7F0, 0xEFF0,
0xDFF0, 0xBFF0, 0x7FF0, 0xFF70, 0xFFB0, 0xFFD0, 0xFFE0, 0xFEE0,
0xFDE0, 0xFBE0, 0xF7E0, 0xEFE0, 0xDFE0, 0xBFE0, 0x7FE0, 0xFF60,
0xFFA0, 0xFFC0, 0xFEC0, 0xFDC0, 0xFBC0, 0xF7C0, 0xEFC0, 0xDFC0,
0xBFC0, 0x7FC0, 0xFF40, 0xFF80, 0xFE80, 0xFD80, 0xFB80, 0xF780,
0xEF80, 0xDF80, 0xBF80, 0x7F80, 0xFF00, 0xFE00, 0xFD00, 0xFB00,
0xF700, 0xEF00, 0xDF00, 0xBF00, 0x7F00, 0x7E00, 0x7D00, 0x7B00,
0x7700, 0x6F00, 0x5F00, 0x3F00, 0x3E00, 0x3D00, 0x3B00, 0x3700,
0x2F00, 0x1F00, 0x1E00, 0x1D00, 0x1B00, 0x1700, 0x0F00, 0x0E00,
0x0D00, 0x0B00, 0x0700, 0x0600, 0x0500, 0x0300, 0x0200, 0x0100,
0x0000
};
unsigned char code LED_07 = 136;
unsigned int code Data_07[] = //{Diem sang lap phai}
{
0xFFFE, 0xFFFD, 0xFFFB, 0xFFF7, 0xFFEF, 0xFFDF, 0xFFBF, 0xFF7F,
0x7FFF, 0xBFFF, 0xDFFF, 0xEFFF, 0xF7FF, 0xFBFF, 0xFDFF, 0xFEFF,
0xFEFE, 0xFEFD, 0xFEFB, 0xFEF7, 0xFEEF, 0xFEDF, 0xFEBF, 0xFE7F,
0x7EFF, 0xBEFF, 0xDEFF, 0xEEFF, 0xF6FF, 0xFAFF, 0xFCFF, 0xFCFE,
0xFCFD, 0xFCFB, 0xFCF7, 0xFCEF, 0xFCDF, 0xFCBF, 0xFC7F, 0x7CFF,
0xBCFF, 0xDCFF, 0xECFF, 0xF4FF, 0xF8FF, 0xF8FE, 0xF8FD, 0xF8FB,
0xF8F7, 0xF8EF, 0xF8DF, 0xF8BF, 0xF87F, 0x78FF, 0xB8FF, 0xD8FF,
0xE8FF, 0xF0FF, 0xF0FE, 0xF0FD, 0xF0FB, 0xF0F7, 0xF0EF, 0xF0DF,
0xF0BF, 0xF07F, 0x70FF, 0xB0FF, 0xD0FF, 0xE0FF, 0xE0FE, 0xE0FD,
0xE0FB, 0xE0F7, 0xE0EF, 0xE0DF, 0xE0BF, 0xE07F, 0x60FF, 0xA0FF,
0xC0FF, 0xC0FE, 0xC0FD, 0xC0FB, 0xC0F7, 0xC0EF, 0xC0DF, 0xC0BF,
0xC07F, 0x40FF, 0x80FF, 0x80FE, 0x80FD, 0x80FB, 0x80F7, 0x80EF,
0x80DF, 0x80BF, 0x807F, 0x00FF, 0x00FE, 0x00FD, 0x00FB, 0x00F7,
0x00EF, 0x00DF, 0x00BF, 0x007F, 0x007E, 0x007D, 0x007B, 0x0077,
0x006F, 0x005F, 0x003F, 0x003E, 0x003D, 0x003B, 0x0037, 0x002F,
0x001F, 0x001E, 0x001D, 0x001B, 0x0017, 0x000F, 0x000E, 0x000D,
0x000B, 0x0007, 0x0006, 0x0005, 0x0003, 0x0002, 0x0001, 0x0000
};
unsigned char code LED_08 = 17;
unsigned int code Data_08[] = //{Hai diem sang chay nguoc chieu}
{
0xFEFF, 0xFFFE, 0xFBFF, 0xFFFB, 0xEFFF, 0xFFEF, 0xBFFF, 0xFFBF,
0xFF7F, 0x7FFF, 0xFFDF, 0xDFFF, 0xFFF7, 0xF7FF, 0xFFFD, 0xFDFF,
0xFFFE
};
unsigned char code LED_09 = 8;
unsigned int code Data_09[] = //{Den duoi 1-7}
{
0xFE7F, 0xFDBF, 0xFBDF, 0xF7EF, 0xEFF7, 0xDFFB, 0xBFFD, 0x7FFE
};
unsigned char code LED_10 = 6;
unsigned int code Data_10[] = //{Den duoi 1-6}
{
0xBEF7, 0x7DFB, 0xFB7D, 0xF7BE, 0xEFDF, 0xDFEF
};
unsigned char code LED_11 = 5;
unsigned int code Data_11[] = //{Den duoi 1-5}
{
0xDEDE, 0xBDEF, 0x7BF7, 0xF77B, 0xEFBD
};
unsigned char code LED_12 = 4;
unsigned int code Data_12[] = //{Den duoi 1-4}
{
0xEE77, 0xDDBB, 0xBBDD, 0x77EE
};
unsigned char code LED_13 = 3;
unsigned int code Data_13[] = //{Den duoi 1-3}
{
0xB6B6, 0x6DDB, 0xDB6D
};
unsigned char code LED_14 = 2;
unsigned int code Data_14[] = //{Nhap nhay xen ke}
{
0xAA55, 0x55AA
};
unsigned char code LED_15 = 2;
unsigned int code Data_15[] = //{Nhap nhay 4 nhanh}
{
0xCC33, 0x33CC
};
unsigned char code LED_16 = 2;
unsigned int code Data_16[] = //{Nhap nhay 2 nhanh}
{
0xFF00, 0x00FF
};
unsigned char code LED_17 = 21;
unsigned int code Data_17[] = //{4 diem chay xuoi}
{
0xFFFF, 0xFEFF, 0xFCFF, 0xF8FF, 0xF0FF, 0xF0FF, 0xE1FF, 0xC3FF,
0x87FF, 0x0FFF, 0x1F7F, 0x3F3F, 0x7F1F, 0xFF0F, 0xFF87, 0xFFC3,
0xFFE1, 0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE
};
unsigned char code LED_18 = 20;
unsigned int code Data_18[] = //{4 diem chay nguoc}
{
0xFFFF, 0xFFFE, 0xFFFC, 0xFFF8, 0xFFF0, 0xFFE1, 0xFFC3, 0xFF87,
0xFF0F, 0x7F1F, 0x3F3F, 0x1F7F, 0x0FFF, 0x87FF, 0xC3FF, 0xE1FF,
0xF0FF, 0xF8FF, 0xFCFF, 0xFEFF
};
unsigned char code LED_19 = 16;
unsigned int code Data_19[] = //{Lan dan phai}
{
0xFEFF, 0xFCFF, 0xF8FF, 0xF0FF, 0xE0FF, 0xC0FF, 0x80FF, 0x00FF,
0x007F, 0x003F, 0x001F, 0x000F, 0x0007, 0x0003, 0x0001, 0x0000
};
unsigned char code LED_20 = 17;
unsigned int code Data_20[] = //{Tat dan trai}
{
0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F,
0x00FF, 0x80FF, 0xC0FF, 0xE0FF, 0xF0FF, 0xF8FF, 0xFCFF, 0xFEFF,
0xFFFF
};
unsigned char code LED_21 = 16;
unsigned int code Data_21[] = //{Lan dan trai}
{
0xFFFE, 0xFFFC, 0xFFF8, 0xFFF0, 0xFFE0, 0xFFC0, 0xFF80, 0xFF00,
0x7F00, 0x3F00, 0x1F00, 0x0F00, 0x0700, 0x0300, 0x0100, 0x0000
};
unsigned char code LED_22 = 17;
unsigned int code Data_22[] = //{Tat dan phai}
{
0x0000, 0x0100, 0x0300, 0x0700, 0x0F00, 0x1F00, 0x3F00, 0x7F00,
0xFF00, 0xFF80, 0xFFC0, 0xFFE0, 0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE,
0xFFFF
};
unsigned char code LED_23 = 206;
unsigned int code Data_23[] = //{Diem sang lap phai + nhay}
{
0xFEFF, 0xFDFF, 0xFBFF, 0xF7FF, 0xEFFF, 0xDFFF, 0xBFFF, 0x7FFF,
0xFF7F, 0xFFBF, 0xFFDF, 0xFFEF, 0xFFF7, 0xFFFB, 0xFFFD, 0xFFFE,
0xFFFF, 0xFFFE, 0xFFFF, 0xFFFE, 0xFEFE, 0xFEFE, 0xFDFE, 0xFBFE,
0xF7FE, 0xEFFE, 0xDFFE, 0xBFFE, 0x7FFE, 0xFF7E, 0xFFBE, 0xFFDE,
0xFFEE, 0xFFF6, 0xFFFA, 0xFFFC, 0xFFFF, 0xFFFC, 0xFFFF, 0xFFFC,
0xFFFF, 0xFEFC, 0xFDFC, 0xFBFC, 0xF7FC, 0xEFFC, 0xDFFC, 0xBFFC,
0x7FFC, 0xFF7C, 0xFFBC, 0xFFDC, 0xFFEC, 0xFFF4, 0xFFF8, 0xFFFF,
0xFFF8, 0xFFFF, 0xFFF8, 0xFFFF, 0xFEF8, 0xFDF8, 0xFBF8, 0xF7F8,
0xEFF8, 0xDFF8, 0xBFF8, 0x7FF8, 0xFF78, 0xFFB8, 0xFFD8, 0xFFE8,
0xFFF0, 0xFFFF, 0xFFF0, 0xFFFF, 0xFFF0, 0xFFFF, 0xFEF0, 0xFDF0,
0xFBF0, 0xF7F0, 0xEFF0, 0xDFF0, 0xBFF0, 0x7FF0, 0xFF70, 0xFFB0,
0xFFD0, 0xFFE0, 0xFFFF, 0xFFE0, 0xFFFF, 0xFFE0, 0xFFFF, 0xFEE0,
0xFDE0, 0xFBE0, 0xF7E0, 0xEFE0, 0xDFE0, 0xBFE0, 0x7FE0, 0xFF60,
0xFFA0, 0xFFC0, 0xFFFF, 0xFFC0, 0xFFFF, 0xFFC0, 0xFFFF, 0xFEC0,
0xFDC0, 0xFBC0, 0xF7C0, 0xEFC0, 0xDFC0, 0xBFC0, 0x7FC0, 0xFF40,
0xFF80, 0xFFFF, 0xFF80, 0xFFFF, 0xFF80, 0xFFFF, 0xFE80, 0xFD80,
0xFB80, 0xF780, 0xEF80, 0xDF80, 0xBF80, 0x7F80, 0xFF00, 0xFFFF,
0xFF00, 0xFFFF, 0xFF00, 0xFFFF, 0xFE00, 0xFD00, 0xFB00, 0xF700,
0xEF00, 0xDF00, 0xBF00, 0x7F00, 0xFFFF, 0x7F00, 0xFFFF, 0x7F00,
0xFFFF, 0x7E00, 0x7D00, 0x7B00, 0x7700, 0x6F00, 0x5F00, 0x3F00,
0xFFFF, 0x3F00, 0xFFFF, 0x3F00, 0xFFFF, 0x3E00, 0x3D00, 0x3B00,
0x3700, 0x2F00, 0x1F00, 0xFFFF, 0x1F00, 0xFFFF, 0x1F00, 0xFFFF,
0x1E00, 0x1D00, 0x1B00, 0x1700, 0x0F00, 0xFFFF, 0x0F00, 0xFFFF,
0x0F00, 0xFFFF, 0x0E00, 0x0D00, 0x0B00, 0x0700, 0xFFFF, 0x0700,
0xFFFF, 0x0700, 0xFFFF, 0x0600, 0x0500, 0x0300, 0xFFFF, 0x0300,
0xFFFF, 0x0300, 0xFFFF, 0x0200, 0x0100, 0x0000
};
unsigned char code LED_24 = 211;
unsigned int code Data_24[] = //{Dien sang lap trai + nhay}
{
0xFFFE, 0xFFFD, 0xFFFB, 0xFFF7, 0xFFEF, 0xFFDF, 0xFFBF, 0xFF7F,
0x7FFF, 0xBFFF, 0xDFFF, 0xEFFF, 0xF7FF, 0xFBFF, 0xFDFF, 0xFEFF,
0xFFFF, 0xFEFF, 0xFFFF, 0xFEFF, 0xFFFF, 0xFEFE, 0xFEFD, 0xFEFB,
0xFEF7, 0xFEEF, 0xFEDF, 0xFEBF, 0xFE7F, 0x7EFF, 0xBEFF, 0xDEFF,
0xEEFF, 0xF6FF, 0xFAFF, 0xFCFF, 0xFFFF, 0xFCFF, 0xFFFF, 0xFCFF,
0xFFFF, 0xFCFE, 0xFCFD, 0xFCFB, 0xFCF7, 0xFCEF, 0xFCDF, 0xFCBF,
0xFC7F, 0x7CFF, 0xBCFF, 0xDCFF, 0xECFF, 0xF4FF, 0xF8FF, 0xFFFF,
0xF8FF, 0xFFFF, 0xF8FF, 0xFFFF, 0xF8FE, 0xF8FD, 0xF8FB, 0xF8F7,
0xF8EF, 0xF8DF, 0xF8BF, 0xF87F, 0x78FF, 0xB8FF, 0xD8FF, 0xE8FF,
0xF0FF, 0xFFFF, 0xF0FF, 0xFFFF, 0xF0FF, 0xFFFF, 0xF0FE, 0xF0FD,
0xF0FB, 0xF0F7, 0xF0EF, 0xF0DF, 0xF0BF, 0xF07F, 0x70FF, 0xB0FF,
0xD0FF, 0xE0FF, 0xFFFF, 0xE0FF, 0xFFFF, 0xE0FF, 0xFFFF, 0xE0FE,
0xE0FD, 0xE0FB, 0xE0F7, 0xE0EF, 0xE0DF, 0xE0BF, 0xE07F, 0x60FF,
0xA0FF, 0xC0FF, 0xFFFF, 0xC0FF, 0xFFFF, 0xC0FF, 0xFFFF, 0xC0FE,
0xC0FD, 0xC0FB, 0xC0F7, 0xC0EF, 0xC0DF, 0xC0BF, 0xC07F, 0x40FF,
0x80FF, 0xFFFF, 0x80FF, 0xFFFF, 0x80FF, 0xFFFF, 0x80FE, 0x80FD,
0x80FB, 0x80F7, 0x80EF, 0x80DF, 0x80BF, 0x807F, 0x00FF, 0xFFFF,
0x00FF, 0xFFFF, 0x00FF, 0xFFFF, 0x00FE, 0x00FD, 0x00FB, 0x00F7,
0x00EF, 0x00DF, 0x00BF, 0x007F, 0xFFFF, 0x007F, 0xFFFF, 0x007F,
0xFFFF, 0x007E, 0x007D, 0x007B, 0x0077, 0x006F, 0x005F, 0x003F,
0xFFFF, 0x003F, 0xFFFF, 0x003F, 0xFFFF, 0x003E, 0x003D, 0x003B,
0x0037, 0x002F, 0x001F, 0xFFFF, 0x001F, 0xFFFF, 0x001F, 0xFFFF,
0x001E, 0x001D, 0x001B, 0x0017, 0x000F, 0xFFFF, 0x000F, 0xFFFF,
0x000F, 0xFFFF, 0x000E, 0x000D, 0x000B, 0x0007, 0xFFFF, 0x0007,
0xFFFF, 0x0007, 0xFFFF, 0x0006, 0x0005, 0x0003, 0xFFFF, 0x0003,
0xFFFF, 0x0003, 0xFFFF, 0x0002, 0x0001, 0xFFFF, 0x0001, 0xFFFF,
0x0001, 0xFFFF, 0x0000
};
unsigned char rate = 30;
unsigned char stop = 0;
//-------------------------------//
void init()
{
EX0 = 1; // Enable EX0 Interrupt
IT0 = 1; // Configure interrupt 0 for falling edge on /INT0 (P3.2)
EX1 = 1; // Enable EX1 Interrupt
IT1 = 1; // Configure interrupt 1 for falling edge on /INT1 (P3.3)
ES = 1; // Enable Serial Interrupt
SCON = 0x52;// Set UART-Mode1, enable receiver SM0-SM1-SM2-REN = 0-1-0-1
TMOD = 0x21;// Timer1 mode 2, Timer0 mode 1
TH1 = 0xFD; // Set buadrate = 9600 kbps
TR1 = 1; // Start Timer1
EA = 1; // Enable Global interrupt
}
//-------------------------------//
void ex_int0(void) interrupt 0
{
rate--;
}
//-------------------------------//
void ex_int1(void) interrupt 2
{
rate++;
}
//-------------------------------//
void serial_int(void) interrupt 4
{
unsigned char pc_char = 0;
if (RI) {
pc_char = SBUF;
if (pc_char=='p') stop = 0;
if (pc_char=='s') stop = 1;
P2 = pc_char;
RI = 0;
}
}
//-------------------------------//
void delay()
{
unsigned char i;
for (i=0; i<rate; i++) {
TH0 = 0xFE;
TL0 = 0x9C;
TR0 = 1;
while (!TF0);
TR0 = 0;
TF0 = 0;
}
}
//-------------------------------//
void view_led(unsigned char *ptData, unsigned char n)
{
unsigned char len;
unsigned char *pt;
while (n--) {
pt = ptData;
len = *pt;
while (len--) {
if (stop) return;
pt++;
P0 = *pt;
SBUF = P0;
pt++;
P2 = *pt;
SBUF = P2;
delay();
}
}
}
//-------------------------------//
void main(void)
{
init();
while (1) {
view_led(&LED_14, 10); //{Nhap nhay xen ke}
view_led(&LED_15, 10); //{Nhap nhay 4 nhanh}
view_led(&LED_16, 10); //{Nhap nhay 2 nhanh}
view_led(&LED_09, 10); //{Den duoi 1-7}
view_led(&LED_10, 15); //{Den duoi 1-6}
view_led(&LED_11, 20); //{Den duoi 1-5}
view_led(&LED_12, 25); //{Den duoi 1-4}
view_led(&LED_13, 30); //{Den duoi 1-3}
view_led(&LED_01, 2); //{Diem sang chay phai}
view_led(&LED_02, 2); //{Diem sang chay trai}
view_led(&LED_03, 2); //{Diem toi chay phai}
view_led(&LED_04, 2); //{Diem toi chay trai}
view_led(&LED_05, 1); //{Diem sang qua lai lap phai}
view_led(&LED_08, 2); //{Hai diem sang chay nguoc chieu}
view_led(&LED_06, 1); //{Diem sang lap phai}
view_led(&LED_07, 2); //{Diem sang lap trai}
view_led(&LED_17, 5); //{4 diem chay xuoi}
view_led(&LED_18, 5); // {4 diem chay nguoc}
view_led(&LED_19, 1); //{Lan dan phai}
view_led(&LED_20, 1); //{Tat dan trai}
view_led(&LED_21, 1); //{Lan dan trai}
view_led(&LED_22, 1); //{Tat dan phai}
view_led(&LED_23, 1); //{Diem sang lap phai + nhay}
view_led(&LED_24, 1); //{Diem sang lap trai + nhay}
}
}
//-------------------------------//