Nov 212012
 
hinh02

Tự làm bảng đèn LedKeil C: trình soạn thảo, biên dịch bằng cả ngôn ngữ C và ASM cho vi điền khiển 8951 - Hướng dẫn cài đặt và sử dụng. Xem thêm ... » chạy chữ trên ma trận 8Mạch ứng dụng: Mạch khuếch đại âm thanh dùng IC TDA2003.. Xem thêm ... »×24 chỉ dùng một ic AT89C51

 

Dẫn nhập

Dùng ic lập trình AT89C51, Bạn có thể kiểm soát được trạng thái tắt sáng của các dãy Led trên các bảng đèn, từ đó có thể tạo ra được các hình ảnh hay các dòng con chữ cho chạy trên các bảng đèn này, công việc này hiện rất được nhiều Bạn ưa thích, trong bài viết này, tôi trình bày một bài làm thực hành khá đơn giản nhưng rất căn cơ để Bạn hiểu được nguyên lý làm việc của các bảng đèn quang báo. Từ các hiểu biết này, Bạn mới có thể sẽ mở rộng ra nhiều kiểu bảng đèn phức tạp hơn. Mong Bạn để tâm tìm hiểu.

Bài thực hành này sẽ cho hiện hình và các dòng chữ chạy, nhấp nháy, trên một bảng đèn ma trận 8×8. Với ic một lập trình có 4Làm quen với vi điều khiển 89X51. Xem thêm ... » cảng p0, p1, p2, p3, chúng ta sẽ dùng 3Làm quen với vi điều khiển 89X51. Xem thêm ... » bộ ma trận 8×8 và như vậy sẽ không cần thêm một ic logic nào nữa. Mạch rất đơn giản, nhưng có cơ sở lý thuyết rất cơ bản, sẽ giúp Bạn hiểu rất rõ về các loaBài 4: Khái niệm về từ trường. Xem thêm ... »̣i đèn quang báo lớn khác.

Phân tích sơ đồ mạch điện:

02 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

(Hình có kích thước lớn nên đã được resize cho phù hợp độ rộng trang web, nếu bạn không nhìn rõ hãy save hình về máy để xem bằng cách click chuột phải lên hình chọn “Save Image As…“)

03 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

Trướt hết Bạn tạo bảng đèn dùng 3 bộ 8×8. Các hàng, trên đó là các chân Anode của các Led cho nối chung và dùng một transistorỨng dụng: Mạch khuếch đại công suất âm thanh dùng transistor. Xem thêm ... » pnpỨng dụng: Mạch khuếch đại công suất âm thanh dùng transistor. Xem thêm ... » để dùng bit 0Ứng dụng: Hướng dẫn làm đồng hồ có hẹn giờ dùng vi điều khiển AT89C51 và led 7 đoạn. Xem thêm ... » xuất trên các chân của cảng p1 cấp cho chân B của transistor để cho nối dây chung nầy lên đường nguồn 5V. Do mạch dùng kỹ thuật quét nên mỗi lần chỉ có một hàng cho nối vào đường nguồn 5V.

 

Do các chân của Cathode của Led cho nối chung trên một cột, chúng ta dùng các transistor npnBài 31: Các thông số kỹ thuật transistor - Sò công suất.. Xem thêm ... » để cho cột thông masse để lấy dòng cấp cho các Led, vậy để chân Cathode thông masse, chúng ta sẽ dùng bit 1Hướng dẫn quét led ma trận với 8951 và IC thanh ghi dịch nối tiếp 74HC595 hoặc 6B595. Xem thêm ... », cho xuất trên các chân của cổng p2, p0 và p3 cấp cho chân B của các transistor. Với một cổng có 8 bit, vậy mỗi bộ mã 8 bit cho xuất ra trên các công p2, p0, p3, chúng ta có thể điều khiển mỗi nhịp được 8 Led.

Tìm hiểu bảng ma trận Led 8×8:

Hình vẽ cho thấy cách gắn các Led trên ma trận tạo bởi 8 hàng và 8 cột.

04 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

(Hình có kích thước lớn nên đã được resize cho phù hợp độ rộng trang web, nếu bạn không nhìn rõ hãy save hình về máy để xem bằng cách click chuột phải lên hình chọn “Save Image As…“)

Sơ đồ dùng giải thích nguyên lý tắt mở các Led trên bảng ma trận 8×8.

05 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

(Hình có kích thước lớn nên đã được resize cho phù hợp độ rộng trang web, nếu bạn không nhìn rõ hãy save hình về máy để xem bằng cách click chuột phải lên hình chọn “Save Image As…“)

Cách 1: Mã quét xuất trên p2, p3, p0, mã hình hay chữ xuất trên cảng p1.

 

Sơ đồ mạch điện trên, một lần nữa, cho thấy, chúng ta cho nối 8 chân của các chân B của 8 transistor 2SA1015 và cảng p1. Vậy khi có một chân của cảng p1 xuất ra bit 0, nó sẽ làm transistor bão hòa, và lúc này dây anode chung sẽ được cho nối vào đường nguồn 5V. Ở đây, Bạn sẽ viết đoạn chương trình sao cho mỗi nhịp chỉ có một chân của cổng p1 xuất ra bit 0.

 

Bạn thấy khi xuất 8 bit ra trên cảng p2, 8 bit ở mức 1 ứng với mức volt cao dùng cấp cho chân B của 8 transistor 2SC1815, lúc này các transistor sẽ bị làm cho bão hòa, nó cho 8 cột trên đó có các chân Cathode nối masse, vậy 8 Led này sẽ phát sáng, trong mạch chúng ta hạn dòng với các điện trở 100 ohm.

 

Tóm lại, muốn in hình hay các con chữ trên bảng Led ma trận này, Bạn phải làm được 2Ứng dụng: Thiết kế quang báo cho các bóng đèn công suất lớn dùng 8951. Xem thêm ... » việc sau:

 

Việc 1: Viết đoạn chương trình cấp mã quét.Tốc độ quét đủ nhanh để dùng hiện tượng lưu ảnh của mắt mà gây ra “nhầm lẫn” là trên bảng đèn đang có rất nhiều Led đang được cấp dòng phát sáng.

 

Viết đoạn chương trình để xuất mã quét bit 0 trên các chân B của các transistor pnpBài 31: Các thông số kỹ thuật transistor - Sò công suất.. Xem thêm ... » trên các cảng p1, để cho chữ trôi xuống.

06 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

Viết đoạn chương trình để xuất mã quét bit 0 trên các chân B của các transistor pnp trên các cảng p1, để cho chữ trôi lên.

07 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

Viết chương trình mã quét, cấp bit 1 cho các chân B của các transistor npnỨng dụng: Mạch khuếch đại công suất âm thanh dùng transistor. Xem thêm ... » trên các cảng p2, p3, p0, để tạo hình dời ngang.

08 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

Việc 2: Viết các dãy mã 8 bit cho xuất mã hình trên các cảng p2, p3, p0 hay trên p1 để làm sáng các Led trên các cột, các mã 8 bit này viết theo kiểu hình hay dạng con chữ mà Bạn muốn nó hiện ra trên bảng đèn. Các dãy mã 8 bit này chúng ta sẽ cho cất trong các bảng, sau này sẽ dùng câu lệnh movc a, @a + dptr để lấy các dãy mã ra cho xuất trên các cảng của ic AT89C51.

 

Sau đây là đoạn chương trình viết cho xuất mã quét trên p2, p3, p0 và mã hình xuất trên cảng p1.

 

h1b:  ;đặt tên nhãn dùng cho lệnh nhẩy
mov r0, #11111110b ; đặt trị khởi đầu dùng cho lệnh quay vòng
mov r1, #00h  ; đặt trị khởi đầu dùng cho lệnh lấy mã hình hay chữ
ll1b:   mov a, r0  ; chuyển trị trong r0 vào thanh a
rr a   ; cho 8 bit trong a quay vòng qua hường phải
mov r0, a  ; chuyển trị trong thanh a ra r0
mov p1, r0  ; cho xuất trị trong thanh a ra cảng p1

mov a, r1  ; chuyển trị trong thanh r1 vào thanh a
movc a, @a + dptr  ; truy lấy mã hình trong bảng cho cất vào thanh a
mov p2, a  ; cho xuất mã hình trên cảng p2
inc r1  ; tăng trị trong thanh r1 lên +1 để lấy mã hình tiếp theo
mov a, r1  ; chuyển trị r1 vào thanh a
movc a, @a + dptr  ; truy lấy mã hình trong bảng cho cất vào thanh a
mov p3, a  ; cho xuất mã hình trên cảng p3
inc r1  ; tăng trị trong thanh r1 lên +1 để lấy mã hình tiếp theo
mov a, r1   ; chuyển trị r1 và thanh a
movc a, @a + dptr  ; truy lấy mã hình trong bảng cho cất vào thanh a
mov p0, a  ; cho xuất mã hình trên cảng p0
inc r1  ; lại tăng trị trong r1 lên +1
call del1   ; gọi chương trình làm chậm
mov p1, #11111111b  ; tắt 8 bit trên cảng p1
mov p0, #00h  ; tắt 8 bit trên cảng p0
mov p2, #00h  ; tắt 8 bit trên cảng p2
mov p3, #00h  ; tắt 8 bit trên cảng p3
call del1   ; gọi chương trình làm chậm
cjne r0, #11111110b, ll1b   ; so sánh mã quét để chọn hướng nhẩy
ret  ; quay lại sau lệnh call

 

Đoạn chương trình này viết giống như đoạn trên, điểm khác biệt là dùng câu lệnh rl a quay vòng theo hướng trái để đổi hướng chạy hình trên bảng ma trân 8×24. Mã quét đặt trên cảng p1, mã hình lần lượt cho lấy ra xuất trên cảng p2, rồi p3, rồi p0.

 

h1c:   ; đặt tên nhãn dùng cho lệnh nhẩy
mov r0, #01111111b  ; đặt trị khởi đầu dùng cho lệnh quay vòng
mov r1, #00h
ll1c:    mov a, r0  ; chuyển trị trong r0 vào thanh a
rl a   ; cho 8 bit trong thanh a quay vòng theo hướng trái
mov r0, a  ; chuyển trị trong thanh a vào thanh r0
mov p1, r0  ; cho xuất trị trong thanh r0 ra cảng p1

; lấy mã hình xuất trên cảng p2

mov a, r1
movc a, @a + dptr
mov p2, a

; lấy mã hình xuất trên cảng p3
inc r1
mov a, r1
movc a, @a + dptr
mov p3, a

; lấy mã hình xuất trên cảng p0
inc r1
mov a, r1
movc a, @a + dptr
mov p0, a

; tránh hình bị lem
inc r1
call del1
mov p1, #11111111b
mov p0, #00h
mov p2, #00h
mov p3, #00h
call del1
cjne r0, #01111111b, ll1c
ret  ; quay lại sau lệnh call

Một minh họa: Mã quét cho xuất trên các cảng p2 rồi p3 rồi p0. Mã hình xuất trên cảng p1.

09 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

Cho xuất mã quét nhịp nhanh trên các cảng p2, p3, p0 và cùng lúc cho xuất mã hình hay chữ trên cảng p1. Sau đây là đoạn chương trình viết cho trường hợp 2 dùng để hiện các hình và con chữ trên bảng ma trận 8×24.

 

Phân tích câu lệnh:

 

; Các câu lệnh cho xuất mã quét trên cảng p2, mã hình trên p1

h1:    ; đặt tên nhãn dùng cho lệnh nhẩy
mov r0, #00000001b  ; đặt trị khởi đầu cho thanh r0
mov r1, #00h   ; trả thanh r1 về trị 0
ll1:    mov a, r0  ; cho chuyển trị trong r0 và thanh a
rr a   ; cho các 8 bit trong thanh a, quay vòng qua theo hướng bên phải
mov r0, a  ; chuyển trị có trong thanh a vào thanh r0
mov p2, r0 ; cho xuất trị trong r0 ra ở cảng p2
mov a, r1  ; bây giờ chuyển trị trong r1 vào thanh a
movc a, @a + dptr  ; lấy mã 8 bit trong bảng theo trị trong a, rồi cho cất vào thanh a
mov p1, a  ; cho xuất trị này trên cảng p1
inc r1  ; cho tăng trị trong r1 lên +1 để chuẩn bị lấy dòng mã tiếp theo
call del1 ; gọi chương trình làm châm để tạo mức sáng cho các led
mov p2, #00h  ; cho 8 chân của cảng p2 xuống mức 0 để tắt các Led.
mov p1, #0ffh  ; Cho 8 chân của cảng p1 lên mức 1 cũng để tắt Led
call del1  ; cho gọi trìng làm chậm để xóa các Led tránh lem
cjne r0, #00000001b, ll1  ; so sánh trị trong r0, nếu thấy chưa quay đủ 8 nhịp thì tiếp tục.

 

; Các câu lệnh cho xuất mã quét trên cảng p3, mã hình trên cảng p1

ll2:    ; đặt tên nhãn dùng cho lệnh nhẩy

mov a, r0  ; lại chuyển trị trong r0 vào a
rr a   ; cho quay vòng 8 bit trong a theo hướng bên phải
mov r0, a  ; chuyển trị trong thanh a vào r0
mov p3, r0 ; cho xuất trị trong r0 ra trên cảng p3
mov a, r1  ; chuyển trị có trong r1 vào thanh a
movc a, @a + dptr   ; cho lấy mã trong bảng cất vào a
mov p1, a  ; cho trị trong a xuất ra trên cảng p1
inc r1  ; tăng trị trong r1 lên +1 để lấy dòng mã hình tiếp theo
call del1  ; gọi chương trình làm chậm
mov p3, #00h ; đặt 8 chân của cảng p3 xuống mức 0
mov p1, #0ffh  ; đặt 8 chân của cảng p1 lên mức 1
call del1  ; cho gọi chương trình làm chậm
cjne r0, #00000001b, ll2  ; so sánh trị trong r0 để định hướng nhẩy

 

; Các câu lệnh cho xuất mã quét trên cảng p0, mã hình trên cảng p1

ll3:     ; đặt tên nhãn dùng cho lệnh nhẩy

mov a, r0  ; chuyển trị trong thanh a vào thanh r0
rr a   ; cho 8 bit trong thanh a quay vòng qua hướng phải
mov r0, a  ; chuyển trị trong thanh a trở lại r0
mov p0, r0 ; cho trị trong r0 xuất ra trên cảng p0
mov a, r1  ; chuyển trị trong r1 vào thanh a
movc a, @a + dptr  ; lấy mã 8 bit trong bảng cất vào thanh a
mov p1, a  ; cho trị trong a xuất ra trên cảng p1
inc r1  ; tăng trị trong r1 lên +1 để lấy dòng mã kế tiếp
call del1  ; gọi chương trình làm chậm
mov p0, #00h  ; đặt 8 chân của cảng p0 xuống mức 0
mov p1, #0ffh  ; đặt 8 bit của cảng p1 lên mức 1
call del1  ; gọi chương trình làm chậm
cjne r0, #00000001b, ll3  ; so sánh trị trong r0 để định hướng nhẩy
ret  ; quay lại sau lệnh call

Cách 2:  Mã quét cho xuất trên p1và mã hình hay chữ cho xuất trên cảng p2, p3, p0

 

Một minh họa: Cho xuất mã quét nhanh trên cảng p1, các mã hình lần lượt cho xuất trên cảng p2, cảng p3, cảng p0

10 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

Phân tích câu lệnh:

 

h1b:      ; đặt tên nhãn cho lệnh nhẩy
mov r0, #11111110b   ; đặt trị khởi đầu cho nhịp quét
mov r1, #00h   ; trả trị khởi đầu cho r1 về 0
ll1b:   mov a, r0  ; chuyển trị r0 vào thanh a
rr a   ; cho 8 bit trong a quay vòng qua phải
mov r0, a   ; chuyển trị trong a ra r0
mov p1, r0  ; cho xuất trị trong r0 ra cảng p1

mov a, r1  ; chuyển trị r1 vào a
movc a, @a + dptr   ; lấy mã địa chỉ trong bảng cho cất vào thanh a
mov p2, a  ; cho xuất 8 bit mã hình ra trên cảng p2
inc r1 ; tăng trị trong r1 lên +1
mov a, r1 ; lại chuyển trị trong r1 vào thanh a
movc a, @a + dptr  ; lại lấy tiếp 8 bit mã hình cất vào thanh a
mov p3, a  ; cho xuất 8 bit mã hình ra trên cảng p3
inc r1  ; một lần nữa laị tăng trị trong r1 lên +1
mov a, r1   ; lại chuyển trị của r1 vào thanh a
movc a, @a + dptr  ; lại lấy tiếp 8 bit mã hình cho cất vào thanh a
mov p0, a  ; bây giờ cho xuất 8 bit mã hình ra trên cảng p0
inc r1  ; lại tăng trị r1 lên +1, chuẩn bị lấy tiếp các mã hình tiếp theo
call del1  ; gọi chương trình làm chậm
mov p1, #11111111b  ; xóa xung quét tránh lem hình
mov p0, #00h  ; xóa mã hình trên p0
mov p2, #00h  ; xóa mã hình trên p2
mov p3, #00h  ; xóa mã hình trên p3
call del1  ; gọi chương trình làm chậm
cjne r0, #11111110b, ll1b  ; so sánh trị trong a với mã quét khởi đầu để nhẩy.
ret  ; quay lại sau lệnh call
Phân tích cách viết chương trình nguồn tổng hợp:

 

org 0000h    ; khởi đầu chương trìng nguồn
slan equ 20h   ; đặt tên slan “số lần” cho thanh 20h
bd:     call xoa   ; gọi chương trình xóa
mov r3, #0  ; đặt trị 3 vào thanh r1
call h2                 ; cho gọi trình mở màn
mov p1, #11111111b ; xóa
mov dptr, #b_1          ; cho hiện chữ Phúc
st:     mov r4, #10  ; nạp trị 10 vào thanh r4
tta:    call h1   ; cho gọi chương trình có tên nhãn h1
djnz r4, tta  ; cho lập lại call h1 10 lần
;        inc dptr  ; tạm dừng dời chữ Phúc
inc r3  ; tăng trị r3 theo bước +1
cjne r3, #26, st  ; so sánh trị trong r3 để định hướng nhẩy
mov r3, #0   ; trả trị trong r3 về 0

mov p1, #11111111b ; cho tắt 8 bit trên cảng p1
mov dptr, #b_2          ; cho hiện chữ Lan
st2:    mov r4, #10
ttb:    call h1
djnz r4, ttb
;        inc dptr
inc r3
cjne r3, #26, st2
mov 3, #0

call h4a        ; bỏ màn xuống
call h4          ;  kéo màn lên

call xoa
mov dptr, #b_2b         ; cho hiện chữ N
st21:   mov r4, #2
ttb1:   call h1
djnz r4, ttb1
;        inc dptr
inc r3
cjne r3, #26, st21
mov 3, #0

call xoa
mov dptr, #b_2ba        ; cho hiện chữ NH
st21a:  mov r4, #2
ttb1a:  call h1
djnz r4, ttb1a
;        inc dptr
inc r3
cjne r3, #26, st21a
mov 3, #0

call xoa
mov dptr, #b_2bb        ; cho hiến chữ NHẬ
st21b:  mov r4, #2
ttb1b:  call h1
djnz r4, ttb1b
;        inc dptr
inc r3
cjne r3, #26, st21b
mov 3, #0

call xoa
mov dptr, #b_2bc        ; cho hiện chữ NHẬT
st21c:  mov r4, #10
ttb1c:  call h1
djnz r4, ttb1c
;        inc dptr
inc r3
cjne r3, #26, st21c
mov 3, #0

call xoa
mov dptr, #b_2c          ; cho hiện chữ T
st22:   mov r4, #2
ttb2:   call h1
djnz r4, ttb2
;        inc dptr
inc r3
cjne r3, #26, st22
mov 3, #0

call xoa
mov dptr, #b_2ca          ; cho hiện chữ TÂ
st22a:  mov r4, #2
ttb2a:  call h1
djnz r4, ttb2a
;        inc dptr
inc r3
cjne r3, #26, st22a
mov 3, #0

call xoa
mov dptr, #b_2cb          ; cho hiện chữ TÂN
st22b:  mov r4, #10
ttb2b:  call h1
djnz r4, ttb2b
;        inc dptr
inc r3
cjne r3, #26, st22b
mov 3, #0

call h4a        ; hạ màn xuống
call h4         ; kéo màn lên

call xoa
mov dptr, #b_2a  ; cho hiện chữ Phúc Lan, chữ chạy
st5a:   mov r4, #20
tte1:   call h1
djnz r4, tte1
inc dptr
inc r3
cjne r3, #54, st5a
mov r3, #0

call xoa
mov slan, #3
ttuc:   mov dptr, #b_4          ; cho hiện chữ Chào
st4:    mov r4, #10
ttd:    call h1
djnz r4, ttd
;inc dptr
inc r3
cjne r3, #10, st4
mov r3, #0
mov p0, #00h
mov p2, #00h
mov p3, #00h
call delay

call xoa
mov dptr, #b_4b         ; cho hiện chữ Bạn
st4a:   mov r4, #10
ttd1:   call h1
djnz r4, ttd1
;inc dptr
inc r3
cjne r3, #10, st4a
mov r3, #0
mov p0, #00h
mov p2, #00h
mov p3, #00h
call delay
djnz slan, ttuc

call xoa
mov dptr, #b_3  ; cho hiện chữ Tạp chí điện tử Việt Nam, chữ chạy
st3:    mov r4, #15
ttc:    call h1
djnz r4, ttc
inc dptr
inc r3
cjne r3, #122, st3
mov r3, #0

call xoa
mov dptr, #b_5  ; PHONE : 39235347, hiện số điện thoại, chữ chạy
st5:    mov r4, #20
tte:    call h1
djnz r4, tte
inc dptr
inc r3
cjne r3, #79, st5
mov r3, #0

call h4a        ; hạ màn xuống
call h4         ; kéo màn lên

call xoa
mov dptr, #b_9  ; cho hiện hình hàng cây
st9:    mov r4, #20
tti:    call h1
djnz r4, tti
;        inc dptr
inc r3
cjne r3, #26, st9
mov 3, #0

call xoa
mov slan, #14
lamt:   mov dptr, #b_10 ; hiện hình Logo 1
mov r3, #0
qlai:   mov r2, #12
llai:   call h1b
djnz r2, llai
inc dptr
inc dptr
inc dptr
inc r3
cjne r3, #16, qlai
djnz slan, lamt

call xoa
mov dptr, #b_6  ; hiện hàng chữ CHUYEN BAN CAC LINH KIEN DIEN TU ABCDEFGHIJKLMNOPQ
st6:    mov r4, #8
ttf:    call h1
djnz r4, ttf
inc dptr
inc r3
cjne r3, #255, st6
mov r3, #0

call xoa
mov dptr, #b_7  ; hiện hàng chữ RSTXYZUVW
st7:    mov r4, #8
ttg:    call h1
djnz r4, ttg
inc dptr
inc r3
cjne r3, #52, st7
mov r3, #0

call xoa
mov slan, #6Proteus: Phần mềm mô phỏng mạch điện tử không thể thiếu - Hướng dẫn cài đặt và sử dụng.. Xem thêm ... »
lamt1:  mov dptr, #b_11 ; cho hiện hình Logo 2
mov r3, #0
qlai1:  mov r2, #12
llai1:  call h1b
djnz r2, llai1
inc dptr
inc dptr
inc dptr
inc r3
cjne r3, #16, qlai1
djnz slan, lamt1

call xoa
mov slan, #2
lamt2:  mov dptr, #b_12 ; cho hiện hình Logo 3 điện trở
mov r3, #0
qlai2:  mov r2, #50
llai2:  call h1b
djnz r2, llai2
inc dptr
inc dptr
inc dptr
inc r3
cjne r3, #16, qlai2
djnz slan, lamt2

call xoa
mov slan, #10
lamt3:  mov dptr, #b_13   ; cho hiện hình Logo 4 giọt nước

mov r3, #0
qlai3:  mov r2, #40
llai3:  call h1c
djnz r2, llai3
inc dptr
inc dptr
inc dptr
inc r3
cjne r3, #16, qlai3
djnz slan, lamt3

call xoa
mov slan, #4
lamt4:  mov dptr, #b_14 ; cho hiện hình Logo 5SPKTC5 - Trình biên dịch file hex cho vi điều khiển họ 89x51. Xem thêm ... »
mov r3, #0
qlai4:  mov r2, #12
llai4:  call h1b
djnz r2, llai4
inc dptr
inc dptr
inc dptr
inc r3
cjne r3, #16, qlai4
djnz slan, lamt4

call xoa
mov dptr, #b_8  ; hiện hình căn nhà
st8:    mov r4, #30
tth:    call h1
djnz r4, tth
;        inc dptr
inc r3
cjne r3, #26, st8
mov 3, #0

call h3         ; kéo màn lên
call delay
call delay

jmp bd
h2:                     ; trình mở màn
mov p1, #00h
mov p0, #0ffh
mov p2, #0ffh
mov p3, #0ffh
call delay
mov p3, #11100111b
call delay
mov p3, #11000011b
call delay
mov p3, #10000001b
call delay
mov p3, #00000000b
call delay
mov p2, #11111110b
mov p0, #01111111b
call delay
mov p2, #11111100b
mov p0, #00111111b
call delay
mov p2, #11111000b
mov p0, #00011111b
call delay
mov p2, #11110000b
mov p0, #00001111b
call delay
mov p2, #11100000b
mov p0, #00000111b
call delay
mov p2, #11000000b
mov p0, #00000011b
call delay
mov p2, #10000000b
mov p0, #00000001b
call delay
mov p2, #00000000b
mov p0, #00000000b
call delay
call delay
ret

 

h3:                     ; trình kéo màn, sáng từ 2 bên vào
mov p1, #00h
mov p0, #00h
mov p2, #00h
mov p3, #00h
call delay
mov p2, #10000000b
mov p0, #00000001b
call delay
mov p2, #11000000b
mov p0, #00000011b
call delay
mov p2, #11100000b
mov p0, #00000111b
call delay
mov p2, #11110000b
mov p0, #00001111b
call delay
mov p2, #11111000b
mov p0, #00011111b
call delay
mov p2, #11111100b
mov p0, #00111111b
call delay
mov p2, #11111110b
mov p0, #01111111b
call delay
mov p2, #11111111b
mov p0, #11111111b
call delay
mov p3, #10000001b
call delay
mov p3, #11000011b
call delay
mov p3, #11100111b
call delay
mov p3, #11111111b
call delay
call delay
ret
h4:                     ; kéo màn lên.
mov p1, #00h
mov p0, #0ffh
mov p2, #0ffh
mov p3, #0ffh
call delay
call delay
setb p1.7Keil C: trình soạn thảo, biên dịch bằng cả ngôn ngữ C và ASM cho vi điền khiển 8951 - Hướng dẫn cài đặt và sử dụng. Xem thêm ... »
call delay
setb p1.6
call delay
setb p1.5
call delay
setb p1.4
call delay
setb p1.3
call delay
setb p1.2
call delay
setb p1.1
call delay
setb p1.0
call delay
call delay
ret

 

h4a:            ; hạ màn xuống
mov p1, #0ffh
call delay
call delay
mov p0, #0ffh
mov p2, #0ffh
mov p3, #0ffh
clr p1.0
call delay
mov p0, #0ffh
mov p2, #0ffh
mov p3, #0ffh
clr p1.1
call delay
mov p0, #0ffh
mov p2, #0ffh
mov p3, #0ffh
clr p1.2
call delay
mov p0, #0ffh
mov p2, #0ffh
mov p3, #0ffh
clr p1.3
call delay
mov p0, #0ffh
mov p2, #0ffh
mov p3, #0ffh
clr p1.4
call  delay
mov p0, #0ffh
mov p2, #0ffh
mov p3, #0ffh
clr p1.5
call delay
mov p0, #0ffh
mov p2, #0ffh
mov p3, #0ffh
clr p1.6
call delay
mov p0, #0ffh
mov p2, #0ffh
mov p3, #0ffh
clr p1.7
call delay
call delay
ret

 

; đoạn chương trình dùng để in hình trên ma trận 8×24, mã hình xuất trên cảng p1

h1:  ; đặt tên nhãn dùng cho lệnh nhẩy
mov r0, #00000001b  ; đặt trị khởi đầu cho lệnh quay vòng
mov r1, #00h ; đặt trị khởi đầu dùng để lấy mã hình trong bảng
ll1:    mov a, r0  ; chuyển trị trong r0 vào thanh a để dùng lệnh rr a
rr a  ;  cho 8 bit trong thanh a quay vòng theo hướng phải
mov r0, a  ; chuyển trị trong a trở lại thanh r0
mov p2, r0 ; cho xuất trị trong r0 ra cảng p2
mov a, r1  ; chuyển trị trong r1 vào thanh a
movc a, @a + dptr  ; truy lấy mã hình trong bảng cất vào thanh a
mov p1, a  ; cho xuất mã hình trong a ra cảng p1
inc r1 ; tăng trị trong r1 lên +1 để lấy mã hình tiếp theo
call del1  ; gọi trễ
mov p2, #00h  ; tắt 8 bit trên cảng p2
mov p1, #0ffh  ; tắt ́ bit trên cảng p1
call del1  ; gọi trễ
cjne r0, #00000001b, ll1  ; so sánh thanh r0 với mã quét để chọn hướng nhẩy

 

ll2:    mov a, r0  ; chuyển trị trong r0 vào thanh a
rr a   ; cho 8 bit trong thanh a quay vòng theo hướng phải
mov r0, a  ; chuyển trị trong a vào thanh r0
mov p3, r0  ; cho trị mã quét trong r0 xuất ra  ở cảng p3
mov a, r1  ; chuyển trị trong thanh r1 vào thanh a
movc a, @a + dptr  ; truy lấy mã hình trong bảng cất vào thanh a
mov p1, a  ; cho xuất mã hình trong a ra cảng p1
inc r1   ; tăng trị trong r1 lên +1 để lấy mã hình tiếp theo
call del1  ; gọi trễ
mov p3, #00h  ; tắt 8 bit trên cảng p3
mov p1, #0ffh  ; tắt 8 bit trên cảng p1
call del1   ; gọi trễ
cjne r0, #00000001b, ll2  ; so sánh r0 và mã quét để chọn hướng nhẩy

 

ll3:    mov a, r0   ; chuyển trị trong r0 vào thanh a
rr a  ; cho 8 bit trong thanh a quay vòng theo hướng phải
mov r0, a  ; chuyển trị trong thanh a trở lại thanh r0
mov p0, r0  ; cho xuất trị mã quét trong r0 ra cảng p0
mov a, r1   ; chuyển trị trong thanh r1 vào thanh a
movc a, @a + dptr  ; truy lấy mã hình trong bảng cất vào thanh a
mov p1, a   ; cho xuất trị mã hình trong thanh a ra cảng p1
inc r1  ; tăng trị trong r1 lên +1 để lấy mã hình tiếp theo
call del1  ; gọi trễ
mov p0, #00h   ; cho tắt 8 bit trên cảng p0
mov p1, #0ffh   ; cho tắt 8 bit trên cảng p1
call del1  ; gọi trễ
cjne r0, #00000001b, ll3  ; so sánh trị trong r0 với mã quét để định hướng nhẩy
ret  ; quay lại sau lệnh call
del1:
mov r7, #3
v6:     mov r6, #50
djnz r6, $
djnz r7, v6
ret
delay:
mov r7, #5
v6a:    mov r6, #50
v5:     mov r5, #250
djnz r5, $
djnz r6, v5
djnz r7, v6a
ret
xoa:    mov p0, #00000000b
mov p2, #00000000b
mov p3, #00000000b
mov p1, #11111111b
ret

 

; đoạn chương trình cho xuất mã hình trên cảng p2, p3, p0
h1b:
mov r0, #11111110b
mov r1, #00h
ll1b:   mov a, r0
rr a
mov r0, a
mov p1, r0

mov a, r1
movc a, @a + dptr
mov p2, a
inc r1
mov a, r1
movc a, @a + dptr
mov p3, a
inc r1
mov a, r1
movc a, @a + dptr
mov p0, a
inc r1
call del1
mov p1, #11111111b
mov p0, #00h
mov p2, #00h
mov p3, #00h
call del1
cjne r0, #11111110b, ll1b
ret

 

; đoạn chương trình cho xuất mã hình trên cảng p2, p3, p0
h1c:
mov r0, #01111111b
mov r1, #00h
ll1c:    mov a, r0
rl a
mov r0, a
mov p1, r0

mov a, r1
movc a, @a + dptr
mov p2, a
inc r1
mov a, r1
movc a, @a + dptr
mov p3, a
inc r1
mov a, r1
movc a, @a + dptr
mov p0, a
inc r1
call del1
mov p1, #11111111b
mov p0, #00h
mov p2, #00h
mov p3, #00h
call del1
cjne r0, #01111111b, ll1c
ret

 

; các bảng dùng đặt mã hình và chữ do Bạn tự soạn
b_1:    ; tạo chữ Phúc
db 11111111b
db 00000001b
db 00000001b
db 11101101b
db 11101101b
db 11110011b
db 11111111b
db 00000001b
db 00000001b
db 11101111b
db 11101111b
db 00000001b
db 11111111b
db 10000001b
db 00000001b
db 01111101b
db 01111110b
db 10000001b
db 11111111b
db 10000011b
db 00000001b
db 01111101b
db 01111101b
db 10011011b
b_2:  ; tạo chữ Lan
db 11111111b
db 11111111b
db 11111111b
db 00000001b
db 00000001b
db 01111111b
db 01111111b
db 01111111b
db 11111111b
db 00000111b
db 00000011b
db 11011101b
db 11011011b
db 00000111b
db 11111111b
db 00000001b
db 00000011b
db 11110111b
db 11101111b
db 00000001b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
b_2a:      ; tạo chữ Phúc * Lan
db 11111111b
db 11111111b
db 00000001b
db 00000001b
db 11101101b
db 11101101b
db 11110011b
db 11111111b
db 00000001b
db 00000001b
db 11101111b
db 11101111b
db 00000001b
db 11111111b
db 10000001b
db 00000001b
db 01111101b
db 01111110b
db 10000001b
db 11111111b
db 10000011b
db 00000001b
db 01111101b
db 01111101b
db 10011011b
db 11111111b
db 11111111b
db 10111011b
db 11010111b
db 00000001b
db 11010111b
db 10111011b
db 11111111b
db 11111111b
db 00000001b
db 00000001b
db 01111111b
db 01111111b
db 01111111b
db 11111111b
db 00000111b
db 00000011b
db 11011101b
db 11011011b
db 00000111b
db 11111111b
db 00000001b
db 00000011b
db 11110111b
db 11101111b
db 00000001b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

b_2b:            ; tạo chữ N
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

b_2ba:            ; tạo chữ NH
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 00000011b
db 11011111b
db 11011111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

b_2bb:            ; tạo chữ NHẬ
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 00000011b
db 11011111b
db 11011111b
db 11011111b
db 00000011b
db 11111111b
db 00001111b
db 11010101b
db 01011010b
db 11010101b
db 00001111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

b_2bc:            ; tạo chữ NHẬT
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 00000011b
db 11011111b
db 11011111b
db 11011111b
db 00000011b
db 11111111b
db 00001111b
db 11010101b
db 01011010b
db 11010101b
db 00001111b
db 11111111b
db 11111011b
db 11111011b
db 00000011b
db 11111011b
db 11111011b
db 11111111b

b_2c:            ; tạo chữ T
db 11111111b
db 11111111b
db 11111111b
db 11111011b
db 11111011b
db 00000011b
db 11111011b
db 11111011b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

b_2ca:            ; tạo chữ TÂ
db 11111111b
db 11111111b
db 11111111b
db 11111011b
db 11111011b
db 00000011b
db 11111011b
db 11111011b
db 11111111b
db 11111111b
db 00001111b
db 11010101b
db 11011010b
db 11010101b
db 00001111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

b_2cb:            ; tạo chữ TÂN
db 11111111b
db 11111111b
db 11111111b
db 11111011b
db 11111011b
db 00000011b
db 11111011b
db 11111011b
db 11111111b
db 11111111b
db 00001111b
db 11010101b
db 11011010b
db 11010101b
db 00001111b
db 11111111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b

b_3:     ; tạo chữ Tạp Chí Điện Tử Việt Nam
db 11111111b
db 11111101b
db 11111101b
db 00000001b
db 11111101b
db 11111101b
db 11111111b
db 00001111b
db 11010111b
db 01011011b
db 11010111b
db 00001111b
db 11111111b
db 00000011b
db 11011011b
db 11011011b
db 11011011b
db 11100111b
db 11111111b
db 11011111b
db 11011111b
db 11011111b
db 11111111b
db 10000111b
db 01111011b
db 01111011b
db 01111011b
db 10110111b
db 11111111b
db 00000011b
db 11101111b
db 11101111b
db 11101111b
db 00000011b
db 11111111b
db 00000011b
db 11111111b
db 11011101b
db 11011110b
db 11011111b
db 11111111b
db 00000001b
db 01101101b
db 01101101b
db 01111101b
db 10000011b
db 11111111b
db 00000010b
db 11111111b
db 00000111b
db 01010101b
db 01010110b
db 01010101b
db 01110111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11011111b
db 11011111b
db 11011111b
db 11111111b
db 11111101b
db 11111101b
db 00000001b
db 11111101b
db 11111101b
db 11111111b
db 10000111b
db 01111111b
db 01110010b
db 01111101b
db 10000111b
db 11111001b
db 11011111b
db 11011111b
db 11011111b
db 11111111b
db 11000001b
db 10111111b
db 01111111b
db 10111111b
db 11000001b
db 11111111b
db 00000010b
db 11111111b
db 00000111b
db 01010101b
db 01010110b
db 01010101b
db 01110111b
db 11111111b
db 11111011b
db 11111011b
db 00000011b
db 11111011b
db 11111011b
db 11111111b
db 11101111b
db 11101111b
db 11101111b
db 11111111b
db 00000001b
db 11111011b
db 11110111b
db 11101111b
db 00000001b
db 11111111b
db 00001111b
db 10110111b
db 10111011b
db 10110111b
db 00001111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11110111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
b_4:          ; tạo chữ Chào
db 10000111b
db 01111011b
db 01111011b
db 01111011b
db 10110111b
db 11111111b
db 00000011b
db 11011111b
db 11011111b
db 11011111b
db 00000011b
db 11111111b
db 00001111b
db 11010111b
db 11011011b
db 11010110b
db 00001101b
db 11111111b
db 10000111b
db 01111011b
db 01111011b
db 01111011b
db 10000111b
db 11111111b
b_4b:     ; tạo chữ Bạn
db 11111111b
db 11111111b
db 00000011b
db 01101011b
db 01101011b
db 01101011b
db 10010111b
db 11111111b
db 11111111b
db 00001111b
db 11010111b
db 01011011b
db 11010111b
db 00001111b
db 11111111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b

b_5:    ; tạo chữ Phone: 39235347
db 11111111b
db 11111111b
db 00000011b
db 11011011b
db 11011011b
db 11100111b
db 11111111b
db 00000011b
db 11101111b
db 11101111b
db 00000011b
db 11111111b
db 10000111b
db 01111011b
db 01111011b
db 10000111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 00000011b
db 11111111b
db 00000011b
db 01101011b
db 01101011b
db 11111111b
db 11111111b
db 11101111b
db 11010111b
db 10111011b
db 11010111b
db 11010111b
db 10111011b
db 11010111b
db 11101111b
db 11111111b
db 11111111b
db 10111011b
db 01111101b
db 01101101b
db 01101101b
db 10010011b
db 11111111b
db 01110011b
db 01101101b
db 01101101b
db 01101101b
db 10000011b
db 11111111b
db 00111011b
db 01011101b
db 01011101b
db 01011101b
db 01100011b
db 11111111b
db 10111011b
db 01111101b
db 01101101b
db 01101101b
db 10010011b
db 11111111b
db 10110001b
db 01110101b
db 01110101b
db 01110101b
db 10001101b
db 11111111b
db 10111011b
db 01111101b
db 01101101b
db 01101101b
db 10010011b
db 11111111b
db 11001111b
db 11010111b
db 11011011b
db 00000001b
db 11011111b
db 11111111b
db 11111001b
db 11111101b
db 00001101b
db 11110101b
db 11111001b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

 

b_6:    ; tạo chữ Chuyên Mua Bán Các Linh Kiện Điện Tử
db 10000111b
db 01111011b
db 01111011b
db 01111011b
db 10110111b
db 11111111b
db 00000011b
db 11101111b
db 11101111b
db 11101111b
db 00000011b
db 11111111b
db 10000011b
db 01111111b
db 01111111b
db 01111111b
db 10000011b
db 11111111b
db 11110011b
db 11101111b
db 00011111b
db 11101111b
db 11110011b
db 11111111b
db 00000111b
db 01010101b
db 01010110b
db 01010101b
db 01110111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11110111b
db 00000011b
db 11111111b
db 10000011b
db 01111111b
db 01111111b
db 01111111b
db 10000011b
db 11111111b
db 00001111b
db 10110111b
db 10111011b
db 10110111b
db 00001111b
db 11111111b
db 11111111b
db 11111111b
db 00000011b
db 01101011b
db 01101011b
db 01101011b
db 10010111b
db 11111111b
db 00001111b
db 10110111b
db 10111011b
db 10110111b
db 00001101b
db 11111110b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 10000111b
db 01111011b
db 01111011b
db 01111011b
db 10110111b
db 11111111b
db 00001111b
db 10110111b
db 10111011b
db 10110111b
db 00001101b
db 11111110b
db 10000111b
db 01111011b
db 01111011b
db 01111011b
db 10110111b
db 11111111b
db 11111111b
db 11111111b
db 00000011b
db 01111111b
db 01111111b
db 01111111b
db 01111111b
db 11111111b
db 00000101b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 00000011b
db 11011111b
db 11011111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 00000011b
db 11011111b
db 11001111b
db 10110111b
db 01111111b
db 11111111b
db 00000101b
db 11111111b
db 00000111b
db 01010011b
db 01010101b
db 01010011b
db 01110111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 00000011b
db 01011011b
db 01011011b
db 01111011b
db 10000111b
db 11111111b
db 00000101b
db 11111111b
db 00000111b
db 01010011b
db 01010101b
db 01010011b
db 01110111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 11111011b
db 11111011b
db 00000011b
db 11111011b
db 11111011b
db 11111111b
db 10000011b
db 01111111b
db 01110010b
db 01111101b
db 10000111b
db 11111001b
db 11111111b
db 11111111b
db 00000111b
db 11011011b
db 11011101b
db 11011011b
db 00000111b
db 11111111b
db 00000001b
db 01101101b
db 01101101b
db 01101101b
db 10010011b
db 11111111b
db 10000011b
db 01111101b
db 01111101b
db 01111101b
db 10111011b
db 11111111b
db 00000001b
db 01111101b
db 01111101b
db 01111101b
db 10000011b
db 11111111b
db 00000001b
db 01101101b
db 01101101b
db 01101101b
db 01111101b
db 11111111b
db 00000001b
db 11101101b
db 11101101b
db 11101101b
db 11111101b
db 11111111b
db 10000011b
db 01111101b
db 01101101b
db 01101101b
db 10001011b
db 11111111b
db 00000001b
db 11101111b
db 11101111b
db 11101111b
db 00000001b
db 11111111b
db 00000001b
db 11111111b
db 10111101b
db 01111101b
db 10000001b
db 11111101b
db 11111101b
db 11111111b
db 00000001b
db 11101111b
db 11010111b
db 10111011b
db 01111101b
db 11111111b
db 00000001b
db 01111111b
db 01111111b
db 01111111b
db 01111111b
db 11111111b
db 00000001b
db 11111011b
db 11110111b
db 11111011b
db 00000001b
db 11111111b
db 00000001b
db 11111011b
db 11110111b
db 11101111b
db 00000001b
db 11111111b
db 10000011b
db 01111101b
db 01111101b
db 01111101b
db 10000011b
db 11111111b
db 00000001b
db 11101101b
db 11101101b
db 11101101b
db 11110011b
db 11111111b
db 10000011b
db 01111101b
db 01111101b
db 01011101b
db 10000011b
db 01111111b
db 11111111b
b_7:   ; tạo mẫu các con chữ
db 11111111b
db 00000001b
db 11101101b
db 11001101b
db 10101101b
db 01110011b
db 11111111b
db 10011011b
db 01110101b
db 01101101b
db 10011011b
db 11111111b
db 11111101b
db 11111101b
db 00000001b
db 11111101b
db 11111101b
db 11111111b
db 10000001b
db 01111111b
db 01111111b
db 01111111b
db 10000001b
db 11111111b
db 11000001b
db 10111111b
db 01111111b
db 10111111b
db 11000001b
db 11111111b
db 10000001b
db 01111111b
db 10011111b
db 01111111b
db 10000001b
db 11111111b
db 01111101b
db 11011011b
db 11110111b
db 11011011b
db 01111101b
db 11111111b
db 11111001b
db 11110111b
db 00001111b
db 11110111b
db 11111001b
db 11111111b
db 00111101b
db 01011101b
db 01101101b
db 01110101b
db 01111001b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
b_8:   ; tạo hình căn nhà và cây
db 01110011b
db 00001101b
db 01110011b
db 00000111b
db 01111011b
db 01000101b
db 01010110b
db 01000100b
db 01111000b
db 00000000b
db 01110000b
db 01110000b
db 01110000b
db 01110000b
db 01110000b
db 01110001b
db 00000011b
db 00110111b
db 00011111b
db 00001111b
db 00111001b
db 00000110b
db 00111001b
db 01111111b
b_9:   ; tạo hình rừng cây
db 00111111b
db 01111001b
db 00000110b
db 01111001b
db 00111111b
db 00000111b
db 00001111b
db 00111111b
db 00111111b
db 00000011b
db 00011111b
db 00000011b
db 00000000b
db 00000111b
db 00011111b
db 00111111b
db 01110001b
db 00000000b
db 01110001b
db 01111111b
db 00111111b
db 00011111b
db 00000111b
db 00011111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
b_10:   ; tạo hình hoa văn
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 01000100b,01000100b,01000100b
db 00101000b,00101000b,00101000b
db 01000100b,01000100b,01000100b
db 10010010b,10010010b,10010010b
db 01000100b,01000100b,01000100b
db 00101000b,00101000b,00101000b
db 01000100b,01000100b,01000100b
db 00101000b,00101000b,00101000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
b_11:   ; tạo hình các mũi tên
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00010000b,00001000b,00000100b
db 00111000b,00011100b,00001110b
db 11111110b,01111111b,00111111b
db 01111100b,00111110b,00011111b
db 01000100b,00100010b,00010001b
db 11000110b,01100011b,00110001b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
b_12:   ; tạo hình các ký hiệu điện tử
db 11111111b,11111111b,11111111b
db 10000000b,00001100b,11000001b
db 10000000b,00001110b,11000001b
db 10000001b,11111111b,11111001b
db 10000000b,00001110b,11000001b
db 10000000b,00001100b,11000001b
db 10000000b,00001000b,00000001b
db 11111111b,11111111b,11111111b
db 00000000b,00000000b,00000000b
db 11111111b,11111111b,11111111b
db 10000000b,00000000b,00000001b
db 10000010b,00100010b,00000001b
db 10011101b,01010101b,01110001b
db 10000000b,10001000b,10000001b
db 10000000b,00000000b,00000001b
db 11111111b,11111111b,11111111b
db 00000000b,00000000b,00000000b
db 00000000b,01001000b,00000000b
db 00000000b,01001000b,00000000b
db 00011111b,11001111b,11100000b
db 00000000b,01001000b,00000000b
db 00000000b,01001000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
b_13:     ; tạo hình các bông hoa
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00011100b,00011100b,00011100b
db 00111110b,00111110b,00111110b
db 00011100b,00011100b,00011100b
db 10001001b,10001001b,10001001b
db 01001010b,01001010b,01001010b
db 00101100b,00101100b,00101100b
db 00011000b,00011000b,00011000b
db 11111111b,11111111b,11111111b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
b_14:   ; tạo hình các giọt nước
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00100000b,10000010b,00001000b
db 01110001b,11000111b,00011100b
db 11111011b,11101111b,10111110b
db 01110001b,11000111b,00011100b
db 00000100b,00010000b,01000000b
db 00001110b,00111000b,11100000b
db 00011111b,01111101b,11110000b
db 00001110b,00111000b,11100000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
end

 

Nói rõ hơn: Cách tạo hình trên bảng đèn ma trận 8×24

❶ Hình vẽ dưới đây cho thấy cách Bạn tạo ra khung mã hình dùng bit 0 để tạo hình.

11 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

(Hình có kích thước lớn nên đã được resize cho phù hợp độ rộng trang web, nếu bạn không nhìn rõ hãy save hình về máy để xem bằng cách click chuột phải lên hình chọn “Save Image As…“)

Muốn in hình ra trên bảng ma trận 8×24, trước hết Bạn hãy đặt tên bảng, rồi tạo khung hình tương ứng với bảng đèn. Một thí dụ:

 

b_8:  ; đặt tên nhãn của bảng mã hình
db 01110011b
db 00001101b
db 01110011b
db 00000111b
db 01111011b
db 01000101b
db 01010110b
db 01000100b
db 01111000b
db 00000000b
db 01110000b
db 01110000b
db 01110000b
db 01110000b
db 01110000b
db 01110001b
db 00000011b
db 00110111b
db 00011111b
db 00001111b
db 00111001b
db 00000110b
db 00111001b
db 01111111b

 

Trên đây là 24 dòng mã 8 bit viết ở dạng hệ cơ 2. Trong đó ứng với vị trí bit 0 sẽ làm cho Led sáng. Hình trên cho thấy chúng ta đã dùng bit 0 để tạo ra hình một ngôi nhà trên bảng đèn. Tóm lại, muốn Led nào sáng, chúng ta đặt vào số 0, và số 1 sẽ làm tắt Led. Kết quả chúng ta sẽ có hình hiện ra như sau:

12 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

Bạn có thể viết gọn lại bảng mã hình trên nếu dùng mã 8 bit viết ở dạng hệ 16, kết quả chúng ta có bảng mã hinh trên như sau:

b_8:  ; đặt tên nhãn của bảng mã hình
db 0111 0011b   ; 73h
db 0000 1101b   ; 0dh
db 0111 0011b   ; 73h
db 0000 0111b   ; 07h
db 0111 1011b   ; 7bh
db 0100 0101b   ; 45h
db 0101 0110b   ; 56h
db 0100 0100b   ; 44h
db 0111 1000b   ; 78h
db 0000 0000b   ; 00h
db 0111 0000b   ; 70h
db 0111 0000b   ; 70h
db 0111 0000b   ; 70h
db 0111 0000b   ; 70h
db 0111 0000b   ; 70h
db 0111 0001b   ; 71h
db 0000 0011b   ; 03h
db 0011 0111b   ; 37h
db 0001 1111b   ; 1fh
db 0000 1111b   ; 0fh
db 0011 1001b   ; 39h
db 0000 0110b   ; 06h
db 0011 1001b   ; 39h
db 0111 1111b   ; 7fh

Ghi nhận: Viết mã hình ở dạng hệ 16, tuy ngắn gọn hơn, nhưng Bạn sẽ không nhìn thấy trong các dòng mã này nó là hình gì và khi hình hay chữ bị sai rất khó sửa lai cho đúng.

b_8:  ; đặt tên nhãn của bảng mã hình
db 73h, 0dh, 73h, 07h, 7bh, 45h, 56h, 44h
db 78h, 00h, 70h, 70h, 70h, 70h, 70h, 71h
db 03h, 37h, 1fh, 0fh, 39h, 06h, 39h, 7fh

 

Dưới đây là một khung hình trắng, vì toàn bit 1 (tắt Led), muốn tạo hình trên các điểm Led của ma trận 8×24, Bạn dùng bit 0.

 

b_vkh:        ; đặt tên nhãn cho bảng
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b  ;
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b  ;
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

❷ Hình vẽ dưới đây cho thấy cách Bạn dùng bit 1 để tạo hình

13 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

(Hình có kích thước lớn nên đã được resize cho phù hợp độ rộng trang web, nếu bạn không nhìn rõ hãy save hình về máy để xem bằng cách click chuột phải lên hình chọn “Save Image As…“)

Bạn có thể đặt mã quét trên cảng p1, và cho xuất mã hình trên các cảng p2, p3, p0. Lúc này ứng với bit 1 sẽ làm cho Led sáng. Bạn xem một thí dụ, minh họa bằng hình sau:

14 Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51

Như vậy khung để tạo hình cho kiểu quét này sẽ như sau:

b_14:

; đặt tên nhãn để dùng lệnh mov dptr, #b_14

; câu lệnh này cho đặt bảng vào thanh địa chỉ dptr.
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b

 

Trên đây là một khung mẫu trắng vì toàn là bit 0, nếu Bạn muốn có hình gì hiện trên ma trận 8×24, thì hãy dùng bit 1 làm sáng các Led ở các vị trí tương ứng. Bạn cũng có thể viết các mã hình 8 bit này ở dạng hệ cơ 16, lúc đó bảng sẽ ngắn gọn hơn, nhưng Bạn sẽ không thấy được hình gì trên các dòng mã này, và khi cần sửa đổi sẽ rất khó khăn.

Tạm kết: Qua phần trình bày trên, Bạn thấy dùng ic lập trình AT89C51, chúng ta đã có thể điều khiển được sự tắt sáng của bất kỳ con Led nào trên bảng đèn, điều này cho chúng ta một sự thích thú khó tả, cũng qua bài viết này tôi nghĩ Bạn đã làm quen với cách dùng bàng Led ma trận để làm hiện hình và cho chạy chữ, đây là một đề tài rất rất hấp dẫn, khi có dịp chúng tôi sẽ trở lại đề tài này với một mức độ rộng hơn, cao hơn. Mong Bạn thích bài viết này.

Nguồn: thầy Vương Khánh Hưng.

(9529)

pixel Hướng dẫn làm mạch quang báo led ma trận 8x24 dùng vi điều khiển 89C51
  

Bài liên quan:

  19 Responses to “Hướng dẫn làm mạch quang báo led ma trận 8×24 dùng vi điều khiển 89C51”

  1. thầy ơi co thể chi em cách viet chuong trinh ko sao em viet no bi loi hoai zay thay

  2. bạn viết chương trình thế nào mà bị lỗi, bạn nêu ý tưởng của bạn xem nào??? bạn chỉ nói như thế thì làm sao mình biết mà có thể hướng dẫn cho bạn?
    quy trình để lập trình cho led ma trận là: CHỌN PHƯƠNG PHÁP QUÉT —> CHỌN LINH KIỆN NGOẠI VI —> LẬP TRÌNH.
    + chọn phương pháp quét nghĩa là quét dòng xuất dữ liệu cột hay quét cột và xuất dữ liệu dòng, nếu chọn quét cột và xuất dữ liệu dòng thì quét cột mức cao hay mức thấp???
    + chọn linh kiện ngaoị vi để kết nối với vi điều khiển và kết nối với led ma trận dựa trên phương pháp quét mà mình đã chọn ở trên

    • thay cho em xin cai yahoo dc ko ak, đe em goi tai lieu cua em qua cho thay co ji thay huong dan dum em dc ko ak. Mạch em mắc theo so đồ của thầy, nhưng khi viết chuong trình thi bi lỗi không xuất ra file hex được, em chon quét dữ liệu cột mức thấp, tất cả linh kiện điều giống o trên sai 1 IC 89c51 3 led matrix và các transitor như trên em đinh cho led hiển thị dòng chữ ĐHKTCN (đại học Kỹ Thuật Công Nghệ), chat từ trái sang phải như dòng chữ PHUC ở trên, Xin thầy giúp đỡ giùm cho em.

      • nếu bạn mới bắt đầu làm quen với vi điều khiển và với led ma trận và bạn dùng proteus để mô phỏng thì hocdientu có vài lời khuyên với bạn như sau:
        + về mạch điện phần cứng thì bạn khoan hãy kết nối với các IC ngoại vi, chỉ dùng 1 vi điều khiển kết nối với 1 led ma trận là đủ.Khi nào bạn viết chương trình cho mạch đó chạy, thì bạn hãy tiếp tục kết nối với các IC ngoại vi để nâng cấp quét cho nhiều led ma trận hơn như trong bài này: http://hocdientu.info/huong-dan-quet-led-ma-tran-voi-8951-va-ic-thanh-ghi-dich-noi-tiep-74hc595-hoac-6b595
        + Khi kết nối 1 led ma trận với 1 vi điều khiển thì bạn chỉ cần dùng 2 port: 1 port quét cột còn 1 port xuất dữ liệu hàng. Quét cột bạn kết nối với Anode led matrix thì bạn phải quét mức 1 ==> xuất dữ liệu hàng kết nối với Kathode led matrix bạn phải xuất dữ liệu mức 0 thì led mới có thể sáng.
        Bạn tham khảo bài viết bên trên để biết cách kết nối và tải về chương trình tạo mã ma trận phục vụ việc tao mã được nhanh chóng.

        LƯU Ý: việc kết nối thực tế led ma trận với vi điều khiển cần phải có các IC ngoại vi để khuếch đại dòng điện, vì kết nối trực tiếp thì dòng điện do vi điều khiển cung cấp sẽ không đủ để làm led ma trận sáng. Nhưng ở đây ta đang nghiên cưu phương pháp viết chương trình nên ta ko cần kết nối IC ngoại vi và việc mô phỏng trên proteus cũng vẫn làm led ma trận sáng.

  3. BANG:
    db 11101111b
    db 10000011b
    db 10111011b
    db 11000111b
    db 11111111b
    db 10000011b
    db 11101111b
    db 10000011b
    db 11111111b
    db 10000011b
    db 11010111b
    db 10111011b
    db 11111111b
    db 11111011b
    db 10000011b
    db 11111011b
    db 11000111b
    db 10111011b
    db 11010111b
    db 11111111b
    db 10000011b
    db 11100111b
    db 11001111b
    db 10000011b
    (ĐHKTCN)

  4. Thầu co chuogn trinh nao hoan chinh khong sent qua cho em tham khao voi cuoi thang nop do an roi ma h chuong trinh em van chua lam xong mong thay giup do dum em

    • Thầy ơi.thầy có thể gửi cho e 1 bài code hoàn chỉnh ví dụ cho chạy chữ AOE từ trái sang phải rồi tắt màn hình sau đó cho chạy từ phải sang trái được ko ạ,e viết nhưng bị lỗi quá.chạy chữ ko rõ và ko chạy được như ý muốn.mong thầy sớm giúp e với ạ.cảm ơn thầy nhiều.thầy gửi vào mail nha...@gmail.com cho e với thầy nhé :D

  5. thầy ơi cho em hỏi,dòng “mov R1,#00h” có phải có nghĩa là lấy giá trị trong địa chỉ 00h bỏ vào R1 khônh?và tại sao lại là tại địa chỉ 00h,mã dữ liệu trong Rom mà chúng ta dùng bắt đầu từ vị trí nào,cách chúng ta dự đoán ra sao,e xin cảm ơn

    • dòng đó có nghĩa là nạp giá trị 00 mã hex vào thanh ghi R1, em xem lại cú pháp lệnh trong các tài liệu vi điều khiển 8951 để biết nhé. Đây là kiến thức cơ bản đấy.

  6. Thầy ơi.thầy có thể gửi cho e 1 bài code hoàn chỉnh ví dụ cho chạy chữ AOE từ trái sang phải rồi tắt màn hình sau đó cho chạy từ phải sang trái được ko ạ,e viết nhưng bị lỗi quá.chạy chữ ko rõ và ko chạy được như ý muốn.mong thầy sớm giúp e với ạ.cảm ơn thầy nhiều.thầy gửi vào mail nha...@gmail.com cho e với thầy nhé :D
    ….

    • bạn chịu khó đọc các bài viết trên hocdientu về led ma trận nhé, nếu ai cũng có yêu cầu như bạn thì hocdientu không thể có thời gian để đáp ứng được.

  7. thầy ơi giờ em mún làm 1 caí led maxtrick như thế này em đã mua đủ linh kiện cũng như boak mạch hết gox nhưng em muốn viết 1 chương trình hex để nạp cho avr 89s52 la chữ I LOVE YOU va hai chữ B♥B chạy các hiệu ứng như phải sang trái em thì hum rành mấy cái này lém tại em mún lam 1 cái tặng bạn gái em h thầy hay anh nào viết giúp em với nếu thấy lập trình cho em it hiệu ứng nào đẹp đẹp thuộc lỉnh vực tình yêu nha thây có thể gởi fine hex vào dc: gmail của em nha nhox...@gmail.com hay thầy gọi vào sdt 01669778979 để em biê trước để nhân fine nha cảm ơn thầy và mấy anh nhiều.

  8. e viet chuong trinh 8×24 chay binh thuong.nhung em muon dung nguon ben ngoai nen them transistor vào thì các led có gắn transistor nháy nhanh hơn nên khong thay rõ chữ.thầy có thể cho em biết tại sao lại như vậy không ạ.e cảm ơn

    • bạn hãy gõ lại bằng tiếng Việt rõ ràng, mô tả chi tiết tình trạng, và gửi ảnh mạch sơ đồ nguyên lý của bạn lên đây được không? bạn nói như thế thì tôi không thể nào có thể giúp bạn được. bạn có thể upload hình lên photobucket.com rồi paste link hình vào đây.

  9. Thầy có thể viết và phân tích code trên bằng nngữ C được không ạ? e Cảm ơn

  10. cam on vi bai viet cua ban nhe.

  11. cho em hoi kai kau lenh ne thi khi nao nhap ha thay.
    db 00000000b, 00000000b, 00000000b

  12. hi! rất là cảm ơn thầy đã hướng dẫn rất chi tiết !mong thầy có nhiều bài viết hơn như thế này! :) chúc thầy sức khỏe!

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

CommentLuv badge
 

Có thể bạn cũng thíchclose