Tạp chí Khoa học Đại học Thủ Dầu Một Số 4(39)-2018<br />
<br />
<br />
<br />
<br />
PHẦN MỀM MAGIC LED BOARD<br />
Nguyễn Văn Sơn(1)<br />
(1) Trường Đại học Thủ Dầu Một<br />
Ngày nhận bài: 20/8/2018; Ngày gửi phản biện 15/9/2018; Chấp nhận đăng 20/11/2018<br />
Email: sonnv@tdmu.edu.vn<br />
<br />
Tóm tắt<br />
Theo cách thông thường để lập trình cho bảng LED quảng cáo, người ta phải lập trình<br />
cho vi điều khiển bằng ngôn ngữ Assembly, C. Để lập trình được người lập trình phải hiểu<br />
được họ vi điều khiển sử dụng và có kỹ năng lập trình Assembly hay C. Đây là công việc không<br />
dễ đối với các kỹ thuật viên ít kinh nghiệm và là công việc rất tốn thời gian đối với các kỹ thuật<br />
viên có kinh nghiệm. Phần mềm Magic LED Board được thiết kế ra để giúp các kỹ thuật viên<br />
thiết kế các bảng LED quảng cáo không phải lập trình C hay Assembly, phần mềm Magic LED<br />
Board sẽ làm thay công việc đó. Trong bài báo này tác giả trình bày các bước để xây dựng<br />
phần mềm và phần mềm được viết bằng Visual Basic 6.0.<br />
Từ khóa: bảng LED, lập trình, phần mềm Magic LED Board<br />
Abstract<br />
MAGIC LED BOARD SOFT<br />
In the usual way to program the LED board, one must program the microcontroller in<br />
assembly language or C language. To program, the programmer must understand the<br />
microcontroller family to use and have the skill programming. This is not easy for less experienced<br />
technicians and is a very time consuming job for experienced technicians. The Magic LED Board<br />
software is designed to help technicians design non-C or Assembly LED advertising boards that<br />
will replace the work. In this article, the author presents steps for building software and software<br />
written in Visual Basic 6.0.<br />
<br />
<br />
1. Giới thiệu<br />
Phần mềm Magic LED Board được thiết kế ra để giúp các kỹ thuật viên thiết kế các bảng<br />
LED quảng cáo không phải lập trình C hay Assembly, phần mềm sẽ làm thay công việc đó.<br />
Phần mềm Magic LED Board cho phép các kỹ thuật viên mô tả các trạng thái sáng của các<br />
LED, thời gian trễ chuyển trạng thái sáng các LED, số chương trình chạy độc lập giữa các LED<br />
là 03 chương trình, số LED của mỗi chương trình là tùy ý và tất nhiên LED của chương trình<br />
này không được trùng với LED của chương trình kia, chạy mô phỏng các chương trình sáng<br />
LED trên phần mềm, phần mềm có công cụ chuyển đổi mô tả các chương trình sáng LED thành<br />
file ngôn ngữ lập trình Assembly (file .ASM) và file HEX (.HEX) , kỹ thuật viên dùng file<br />
HEX đã được tạo ra để nạp cho vi điều khiển. Với phần mềm Led Magic Board việc thiết kế<br />
bảng LED quảng cáo trở nên đơn giản, nhanh chóng và thú vị. Đi đôi với phần mềm Magic<br />
LED Board là một board mạch LED được thiết kế tương thích với phần mềm.<br />
<br />
<br />
<br />
49<br />
Nguyễn Văn Sơn Phần mềm Magic LED board<br />
<br />
2. Nội dung<br />
Phần mềm Magic LED Board tác giả đã viết bằng Visual Basic 6.0, có giao diện đồ họa<br />
trên hình 1, trên giao diện này ta thấy: (1) Nút radio Pro1, Pro2, Pro3 để chọn chương trình 1,2<br />
hoặc 3. Số chương trình tối đa có thể là 3, có thể chỉ sử dụng 1 chương trình; (2) Nút radio<br />
Delay1, Delay2, Delay3 để chọn delay tương ứng với Pro1, Pro2, Pro3, thời gian trễ của delay<br />
được đặt trong menu Tools/ Set Delay, thời gian trễ từ 25ms đến 5000ms; (3) Các nút lệnh có<br />
số từ 1 đến 24 dùng để on/off các LED nằm tương ứng ngay bên trên; (4) Nút lệnh Enter dùng<br />
để nhập 1 dòng trạng thái on/off các LED đã thiết lập, mỗi lần nhấn nút Enter ta thấy số tổng số<br />
bước của chương trình (ở góc trên bên phải giao diện đồ họa) tăng lên 1 đơn vị; (5) Nút PLAY<br />
dùng để chạy mô phỏng chương trình đã soạn với delay đã chọn; (6) Nút STEP dùng để chạy<br />
mô phỏng chương trình từng bước một, mục đích dùng để kiểm tra xem có lỗi ở một bước nào<br />
đó; (7) Nút STOP để dừng chạy mô phỏng; (8) Thanh menu có menu File và menu Tools; (9)<br />
Menu File có New để thiết lập mới từ đầu, Save As để lưu chương trình đã soạn dưới dạng file<br />
.led, Open để mở chương trình đã lưu, Exit: tắt phần mềm; (10) Menu Tools có Set Delay để<br />
thiết lập thời gian trễ, Creat ASM File: tạo file ASM và lưu file ASM, Creat Hex File: tạo file<br />
HEX và lưu file HEX, Program: Nạp file HEX vào vi điều khiển.<br />
<br />
<br />
<br />
<br />
Hình 1. Màn hình giao diện phần mềm Magic LED Board.<br />
<br />
<br />
<br />
<br />
Hình 2. Các mục trong menu File và menu Tools.<br />
<br />
50<br />
Tạp chí Khoa học Đại học Thủ Dầu Một Số 4(39)-2018<br />
<br />
<br />
<br />
<br />
Hình 3. Cửa sổ SET DELAY cho phép chọn các delay từ 25ms đến 5000ms.<br />
<br />
Ví dụ ta sẽ thiết kế 24 LED chạy thành 3 chương trình độc lập: Prog 1 gồm LED1 đến<br />
LED7 sáng xen kẻ và đuổi nhau gồm 3 dòng thời gian trễ 100ms. Prog 2 gồm LED8 đến<br />
LED17 chỉ 1 LED sáng tuần tự dịch sang phải có 10 dòng, thời gian trễ 250ms. Prog 3 gồm<br />
gồm LED18 đến LED24 sáng dịch dần qua phải và tắt dịch dần qua phải gồm tất cả 14 dòng,<br />
thời gian trễ 300ms. Khi soạn thảo xong ta lưu thành file .led, trong file này một dòng các bit<br />
1,0 cùng với delay tương ứng như trong bảng 1 dưới đây. Dòng đầu tiên: 100 3 là delay1<br />
100ms, có 3 trạng thái (3 dòng); 250 10 là delay2 250ms, có 10 trạng thái; 300 14 là delay3<br />
300ms, có 14 trạng thái.<br />
Bảng 1. File .led lưu các dòng trạng thái sáng tắt của LED cùng với delay.<br />
100 3 250 10 300 14<br />
000000000000000000010101 DELAY1<br />
000000000000000000101010 DELAY1<br />
000000000000000001010100 DELAY1<br />
000000010000000000000000 DELAY2<br />
000000001000000000000000 DELAY2<br />
000000000100000000000000 DELAY2<br />
000000000010000000000000 DELAY2<br />
000000000001000000000000 DELAY2<br />
000000000000100000000000 DELAY2<br />
000000000000010000000000 DELAY2<br />
000000000000001000000000 DELAY2<br />
000000000000000100000000 DELAY2<br />
000000000000000010000000 DELAY2<br />
100000000000000000000000 DELAY3<br />
110000000000000000000000 DELAY3<br />
111000000000000000000000 DELAY3<br />
111100000000000000000000 DELAY3<br />
111110000000000000000000 DELAY3<br />
111111000000000000000000 DELAY3<br />
111111100000000000000000 DELAY3<br />
011111100000000000000000 DELAY3<br />
001111100000000000000000 DELAY3<br />
000111100000000000000000 DELAY3<br />
000011100000000000000000 DELAY3<br />
000001100000000000000000 DELAY3<br />
000000100000000000000000 DELAY3<br />
000000000000000000000000 DELAY3<br />
<br />
<br />
51<br />
Nguyễn Văn Sơn Phần mềm Magic LED board<br />
<br />
Nhấn menu Tools/ Creat asm file file asm được tạo ra. File Assembly được tạo ra nhờ<br />
một văn bản các lệnh Assembly khung, các dữ liệu là các trạng thái sáng tắt của LED của một<br />
chương trình cùng với thời gian trễ là delay tương ứng được điền vào khung chương trình<br />
Assembly đó để tạo ra một file Assembly hoàn chỉnh như thấy trong file Assembly trong bảng<br />
2 dưới đây, còn các dữ liệu thay đổi theo chương trình được gạch dưới chân và tô đậm.<br />
Bảng 2. File Assembly (. asm) được tạo ra bằng phần mềm Magic LED Board.<br />
BITACTIVE1 BIT 03H L2:<br />
BITACTIVE2 BIT 04H JNB BITACTIVE3, LOOP<br />
BITACTIVE3 BIT 05H LCALL ACTIVE3<br />
SOBUOC1 EQU 30H JMP LOOP<br />
SOBUOC2 EQU 31H ISRT0:<br />
SOBUOC3 EQU 32H CLR TF0<br />
DELAY1 EQU 33H MOV TH0,#HIGH(-25000)<br />
DELAY2 EQU 34H MOV TL0,#LOW(-25000)<br />
DELAY3 EQU 35H CJNE R2,#0,T1<br />
MN1_3 EQU 36H JMP TT1<br />
MN1_2 EQU 37H T1:<br />
MN1_1 EQU 38H DJNZ R2, TT1<br />
MN2_3 EQU 39H MOV R2, DELAY1<br />
MN2_2 EQU 3AH SETB BITACTIVE1<br />
MN2_1 EQU 3BH TT1:<br />
MN3_3 EQU 3CH CJNE R3,#0,T2<br />
MN3_2 EQU 3DH JMP TT2<br />
MN3_1 EQU 3EH T2:<br />
ORG 0000H DJNZ R3, TT2<br />
LJMP MAIN MOV R3, DELAY2<br />
ORG 000BH SETB BITACTIVE2<br />
LJMP ISRT0 TT2:<br />
ORG 0030H CJNE R4,#0,T3<br />
MAIN: JMP TT3<br />
MOV IE,#82H T3:<br />
MOV TMOD,#01H DJNZ R4, TT3<br />
MOV TH0,#HIGH(-25000) MOV R4, DELAY3<br />
MOV TL0,#LOW(-25000) SETB BITACTIVE3<br />
SETB TR0 TT3:<br />
CLR BITACTIVE1 RETI<br />
CLR BITACTIVE2 ACTIVE1:<br />
CLR BITACTIVE3 CLR BITACTIVE1<br />
MOV R5,#0 MOV A, P0<br />
MOV R6,#0 ORL A, MN1_3<br />
MOV R7,#0 MOV R0, A<br />
MOV SOBUOC1, #4 MOV A, R5<br />
MOV SOBUOC2, #22 LCALL LOOK_UP_1_3<br />
MOV SOBUOC3, #13 CPL A<br />
MOV DELAY1, #2 ANL A, R0<br />
MOV DELAY2, #20 MOV P0, A<br />
MOV DELAY3, #12 MOV A, P2<br />
MOV R2, #2 ORL A, MN1_2<br />
MOV R3, #20 MOV R0, A<br />
MOV R4, #12 MOV A, R5<br />
MOV MN1_3, #000H LCALL LOOK_UP_1_2<br />
MOV MN1_2, #000H CPL A<br />
MOV MN1_1, #00FH ANL A, R0<br />
MOV MN2_3, #000H MOV P2, A<br />
MOV MN2_2, #07FH MOV A, P3<br />
MOV MN2_1, #0F0H ORL A, MN1_1<br />
MOV MN3_3, #0FFH MOV R0, A<br />
MOV MN3_2, #080H MOV A, R5<br />
MOV MN3_1, #000H LCALL LOOK_UP_1_1<br />
LOOP: CPL A<br />
JNB BITACTIVE1, L1 ANL A, R0<br />
LCALL ACTIVE1 MOV P3, A<br />
L1: INC R5<br />
JNB BITACTIVE2, L2 MOV A, R5<br />
LCALL ACTIVE2 CJNE A,SOBUOC1,EXITACTIVE1<br />
<br />
<br />
52<br />
Tạp chí Khoa học Đại học Thủ Dầu Một Số 4(39)-2018<br />
<br />
MOV R5,#0 MOV P0, A<br />
EXITACTIVE1: MOV A, P2<br />
RET ORL A, MN3_2<br />
ACTIVE2: MOV R0, A<br />
CLR BITACTIVE2 MOV A, R7<br />
MOV A, P0 LCALL LOOK_UP_3_2<br />
ORL A, MN2_3 CPL A<br />
MOV R0, A ANL A, R0<br />
MOV P2, A<br />
MOV A, R6<br />
MOV A, P3<br />
LCALL LOOK_UP_2_3 ORL A, MN3_1<br />
CPL A MOV R0, A<br />
ANL A, R0 MOV A, R7<br />
MOV P0, A LCALL LOOK_UP_3_1<br />
MOV A, P2 CPL A<br />
ORL A, MN2_2 ANL A, R0<br />
MOV R0, A MOV P3, A<br />
MOV A, R6 INC R7<br />
LCALL LOOK_UP_2_2 MOV A, R7<br />
CPL A CJNE A,SOBUOC3,EXITACTIVE3<br />
ANL A, R0 MOV R7,#0<br />
MOV P2, A EXITACTIVE3:<br />
MOV A, P3 RET<br />
ORL A, MN2_1 ORG 0200H<br />
MOV R0, A LOOK_UP_1_3:<br />
MOV A, R6 INC A<br />
MOVC A,@A+PC<br />
LCALL LOOK_UP_2_1 RET<br />
CPL A TABLE_1_3: DB 000H, 000H, 000H, 000H,<br />
ANL A, R0 ORG 0400H<br />
MOV P3, A LOOK_UP_1_2:<br />
INC R6 INC A<br />
MOV A, R6 MOVC A,@A+PC<br />
RET<br />
CJNE A,SOBUOC2,EXITACTIVE2 TABLE_1_2: DB 000H, 000H, 000H, 000H,<br />
MOV R6,#0 ORG 0600H<br />
EXITACTIVE2: LOOK_UP_1_1:<br />
RET INC A<br />
ACTIVE3:<br />
CLR BITACTIVE3 MOVC A,@A+PC<br />
MOV A, P0 RET<br />
ORL A, MN3_3 TABLE_1_1: DB 001H, 002H, 004H, 008H,<br />
MOV R0, A ORG 0800H<br />
MOV A, R7 LOOK_UP_2_3:<br />
LCALL LOOK_UP_3_3 INC A<br />
CPL A MOVC A,@A+PC<br />
ANL A, R0 RET<br />
TABLE_2_3: DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H,<br />
000H,<br />
DB 000H, 000H, 000H, 000H, 000H, 000H,<br />
ORG 0A00H<br />
LOOK_UP_2_2:<br />
INC A<br />
MOVC A,@A+PC<br />
RET<br />
TABLE_2_2: DB 000H, 000H, 000H, 000H, 001H, 003H, 007H, 00FH, 01FH, 03FH, 07FH, 07FH, 07FH, 07FH, 07FH,<br />
07EH,<br />
DB 07CH, 078H, 070H, 060H, 040H, 000H,<br />
ORG 0C00H<br />
LOOK_UP_2_1:<br />
INC A<br />
MOVC A,@A+PC<br />
RET<br />
TABLE_2_1: DB 010H, 030H, 070H, 0F0H, 0F0H, 0F0H, 0F0H, 0F0H, 0F0H, 0F0H, 0F0H, 0E0H, 0C0H, 080H, 000H,<br />
000H,<br />
DB 000H, 000H, 000H, 000H, 000H, 000H,<br />
ORG 0E00H<br />
LOOK_UP_3_3:<br />
INC A<br />
<br />
<br />
53<br />
Nguyễn Văn Sơn Phần mềm Magic LED board<br />
<br />
MOVC A,@A+PC<br />
RET<br />
TABLE_3_3: DB 080H, 0C0H, 0E0H, 0F0H, 078H, 03CH, 01EH, 00FH, 007H, 003H, 001H, 000H, 000H,<br />
ORG 1000H<br />
LOOK_UP_3_2:<br />
INC A<br />
MOVC A,@A+PC<br />
RET<br />
TABLE_3_2: DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 080H, 080H, 080H, 080H, 000H,<br />
ORG 1200H<br />
LOOK_UP_3_1:<br />
INC A<br />
MOVC A,@A+PC<br />
RET<br />
TABLE_3_1: DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H,<br />
END<br />
<br />
Nhấn menu Tools/ Creat Hex File để tạo file HEX, bảng 3 là file HEX đã được tạo ra. Từ<br />
file văn bản Assembly để chuyển thành file HEX ta thực hiện qua hai bước: (1) Chuyển tương<br />
ứng các câu lệnh Assembly thành văn bản gồm các byte là các con số hexa; (2) Từ văn bản<br />
gồm các byte là các con số hexa ta chuyển thành định dạng file HEX. Bản chất của file HEX là<br />
file văn bản, mỗi dòng của file HEX gồm 6 bộ phận: 1. Bắt đầu bằng ký tự ASCII “:”; 2. Số<br />
byte dữ liệu của dòng bằng 02 số hexa; 3. Địa chỉ: Địa chỉ gồm 04 số hexa, địa chỉ là địa chỉ<br />
của byte dữ liệu đầu tiên của dòng; 4. Loại record (Record gồm 02 số hexa, 02 số hexa này từ<br />
00 – 05, có nghĩa có 06 loại record: 00: record data; 01: record chấm hết file (end of file); 02:<br />
record địa chỉ segment mở rộng; 03: record địa chỉ segment bắt đầu; 04: record địa chỉ tuyến<br />
tính mở rộng; 05: record địa chỉ tuyến tính bắt đầu; 5. Dữ liệu (data): n byte dữ liệu biểu diễn<br />
bằng 2n con số hexa); 6. Checksum: là tổng và bù 2 của 4 bộ phận đứng trước chỉ trừ bộ phận<br />
1, ví dụ một dòng file HEX là: :0300300002337A1E là vì 03 + 00 + 30 + 00 + 02 + 33 + 7A =<br />
E2, và bù 2 của E2 là 1E.<br />
Sau đây là 1 file HEX đơn giản gồm 04 dòng, mỗi dòng gồm 06 bộ phận như đã mô tả ở<br />
trên, trừ dòng cuối cùng chỉ có 05 bộ phận vì đây là dòng kết thức file HEX không có bộ phận<br />
data, và mọi file HEX có dòng cuối cùng đều giống nhau.<br />
:10010000214601360121470136007EFE09D2190140<br />
:100110002146017EB7C20001FF5F16002148011988<br />
:10012000194E79234623965778239EDA3F01B2CAA7<br />
:100130003F0156702B5E712B722B732146013421C7<br />
:00000001FF<br />
Bảng 3. File HEX được tạo ra từ phần mềm Magic LED Board.<br />
:03000000020030CB<br />
:03000B00020092E5<br />
:1000300075A882758901758C9E758A58D28CC20309<br />
:10004000C204C2057D007E007F0075300475311644<br />
:1000500075320D75330275341475350C7A027B14C4<br />
:100060007C0275360075370075380F753900753AA2<br />
:100070007F753BF0753CFF753D80753E0030030396<br />
:100080001200BF3004031200F03005F1120121020A<br />
:10009000007DC28D758C9E758A58BA00030200A639<br />
:1000A000DA04AA33D203BB00030200B2DB04AB3490<br />
:1000B000D204BC00030200BEDC04AC35D20532C25F<br />
:1000C00003E5804536F8ED120200F458F580E5A00E<br />
<br />
<br />
54<br />
Tạp chí Khoa học Đại học Thủ Dầu Một Số 4(39)-2018<br />
<br />
:1000D0004537F8ED120400F458F5A0E5B04538F8BE<br />
:1000E000ED120600F458F5B00DEDB530027D00229A<br />
:1000F000C204E5804539F8EE120800F458F580E5B1<br />
:10010000A0453AF8EE120A00F458F5A0E5B0453BD8<br />
:10011000F8EE120C00F458F5B00EEEB531027E0088<br />
:1001200022C205E580453CF8EF120E00F458F58038<br />
:10013000E5A0453DF8EF121000F458F5A0E5B045F4<br />
:100140003EF8EF121200F458F5B00FEFB532027F0F<br />
:0201500000228B<br />
:07020000048322000000004E<br />
:07040000048322000000004C<br />
:07060000048322010204083B<br />
:10080000048322000000000000000000000000003F<br />
:09081000000000000000000000DF<br />
:100A0000048322000000000103070F1F3F7F7F7F48<br />
:090A10007F7F7E7C78706040005D<br />
:100C0000048322103070F0F0F0F0F0F0F0F0E0C06B<br />
:090C10008000000000000000005B<br />
:100E000004832280C0E0F0783C1E0F07030100003D<br />
:101000000483220000000000000000808080800037<br />
:101200000483220000000000000000000000000035<br />
:00000001FF<br />
<br />
Một khi file HEX được tạo ra ta có thể dùng một phần mềm bất kỳ để nạp (program) cho<br />
vi điều khiển.<br />
<br />
3. Kết luận<br />
Phần mềm Magic LED Board đã được sử dụng trong thực tế trong khoảng thời gian dài<br />
cho thấy phần mềm hoạt động ổn định và chính xác.Tuy nhiên để phần mềm có tính đa năng<br />
hơn, phần mềm Magic LED Board cần tích hợp công cụ nạp cho vi điều khiển, đây là công việc<br />
cần phát triển trong thời gian sắp tới. Nếu hoàn thành tích hợp công cụ nạp cho vi điều khiển<br />
như đã nói trên như vậy sau khi soạn thảo các dòng trạng thái sáng tắt LED, chạy mô phỏng<br />
trên phần mềm để điều chỉnh delay cho phù hợp, thì kỹ thuật viên chỉ cần nhấn một nút là xong,<br />
một công việc quá đơn giản cho kỹ thuật viên.<br />
<br />
<br />
TÀI LIỆU THAM KHẢO<br />
[1]. I. Scott Mackenzie (1995). The Microcontroller” Prentice Hall<br />
[2]. Tài liệu vi điều khiển AT89S52. Truy cập ngày 10/01/2017 nguồn<br />
https://www.keil.com/dd/docs/datashts/atmel/at89s52_ds.pdf<br />
[3]. Tài liệu định dạng file HEX. Truy cập ngày 10/02/2017 nguồn<br />
http://www.keil.com/support/docs/1584/<br />
<br />
<br />
<br />
<br />
55<br />