Tải bản đầy đủ (.doc) (26 trang)

BÀI THUYẾT TRÌNH LED MA TRẬN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (498.62 KB, 26 trang )

ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG CAO ĐẲNG KỸ THUẬT LÝ TỰ TRỌNG
KHOA ĐIỆN – ĐIỆN TỬ
MÔN: VI XỬ LÝ – VI ĐIỀU KHIỂN
BÀI THUYẾT TRÌNH: LED MA TRẬN
GIÁO VIÊN HƯỚNG DẪN: BỐC MINH TRÍ
LỚP 12CĐ – ĐT3
NHÓM 9:
CHÍ NGỌC SƠN
LÊ HOÀNG TUẤN TÚ
HOÀNG MINH ĐỨC
MONG HOÀNG PHONG
NGUYỄN THÀNH LUÂN
Thành phố Hồ Chí Minh – 2014
Để tìm hiểu led ma trận ta tìm hiểu về IC89C51
Phân tích sơ đồ chân:
Ma trận LED tức Dot Matrix LED là tập hợp nhiều đèn LED được bố trí thành dạng “ma
trận” hình chữ nhật hoặc vuông với số hàng là a và số cột là b. Ma trận LED được dùng rất
nhiều trong các ứng dụng hiển thị như các biển quảng cáo, hiển thị thay thế LCD hoặc thậm
chí dùng hiển thị video…Để giảm số lượng các đường điều khiển, trong các ma trận LED các
LED được nối chung với nhau theo hàng và cột. Số lượng LED trên ma trận LED là axb
trong khi số lượng ngõ ra bằng tổng số hàng và cột: a + b. Việc điều khiển 1 ma trận LED
kích thước lớn đòi hỏi thiết kế một mạch driver và điều khiển rất phức tạp.
Các hàng của led ma trận trên đó là các chân Anode của các Led cho nối chung và dùng một
transistor pnp để dùng bit 0 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
npn để 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 1, 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.
2
Do có nhiều mô hình led ma trận nên xin phép xét led ma trận 8x8
Tìm hiểu bảng ma trận Led 8x8:
Sơ đồ dùng giải thích nguyên lý tắt mở các Led trên bảng ma trận 8x8.
3
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.
In hình hay các con chữ trên bảng Led ma trận này, có 2 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 pnp trên các
cảng p1, để cho chữ trôi xuống.

4
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.

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 trên các cảng p2,
p3, p0, để tạo hình dời ngang.
5
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à muốn nó
hiện ra trên bảng đèn. Các dãy mã 8 bit này 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 8x24. 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
6
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.
7
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 8x24.
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
8
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
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
9
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
10
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ữ Nst21: 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ữ NHst21a: 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ẬTst21c: 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ữ Tst22: 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
11
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ÂNst22b: 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ạyst5a: 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àost4: 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ạnst4a: 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
12
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ạyst3: 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ạyst5: 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âyst9: 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
ABCDEFGHIJKLMNOPQst6: mov r4, #8
ttf: call h1
djnz r4, ttf
inc dptr
13
inc r3
cjne r3, #255, st6
mov r3, #0
call xoa
mov dptr, #b_7 ; hiện hàng chữ RSTXYZUVWst7: mov r4, #8
ttg: call h1
djnz r4, ttg
inc dptr
inc r3
cjne r3, #52, st7
mov r3, #0
call xoa
mov slan, #6
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

14
cjne r3, #16, qlai3
djnz slan, lamt3
call xoa
mov slan, #4
lamt4: mov dptr, #b_14 ; cho hiện hình Logo 5 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
15
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
16
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.7
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
17
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 8x24, 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
18
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
19
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, p0h1b:
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
20
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, p0h1c:
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ạnb_1: ; tạo chữ Phúcdb 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
21
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ữ Landb 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 * Landb 11111111b
db 11111111b
db 00000001b
db 00000001b
db 11101101b
db 11101101b
db 11110011b
db 11111111b
db 00000001b
22
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
23
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ữ Ndb 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
24
b_2ba: ; tạo chữ NHdb 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
25

×