Tải bản đầy đủ (.pdf) (27 trang)

Tiểu luận Màn hình quảng cáo ở chế độ văn bản sử dụng màn hình LCD có sử dụng giao tiếp bàn phím

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 (410.97 KB, 27 trang )

Header Page 1 of 126.

Bài tập lớn môn Vi Xử Lý

Tiểu luận
Màn hình quảng cáo ở chế độ văn bản sử dụng
màn hình LCD có sử dụng giao tiếp bàn phím

Footer Page 1 of 126.

1


Header Page 2 of 126.

Bài tập lớn môn Vi Xử Lý

LỜI NÓI ĐẦU
Trong sự phát triển của kỹ thuật điện tử ngày nay việc sử dụng các con vi điều khiển
trong các hệ thống điện tử rất phổ biến cả về số lượng các ứng dụng của nó trên nhiều
thiết bị điện tử từ dân dụng cho đến chuyên dụng, trong nhiều lĩnh vực như đo lường,
điều khiển, v.v nhờ vào nhiều ưu điểm của nó. Cùng với nó là sự phát triển kỹ thuật
số với nền tảng là các mạch logic số dựa trên sự kết hợp của các cổng logic cơ bản mà
ngày nay đã được tích hợp trong các IC số. Việc sử dụng màn hình LCD để hiển thị
thông tin nhằm mục đích thông báo, quảng cáo, tại các nơi công cộng đã được sử
dụng rất rộng rãi.
Trên cơ sở những kiến thức đã được học trong môn học kỹ thuật vi xử lý và Kỹ
thuật số chúng em đã thiết kế một mạch logic số sử dụng vi điều khiển với tên đề tài
đầy đủ là: Màn hình quảng cáo ở chế độ văn bản sử dụng màn hình LCD có sử
dụng giao tiếp bàn phím với mục đích là tìm hiểu thêm về vi điều khiểnvà lĩnh vực
kỹ thuật số, nâng cao kiến thức của mình.


Do kiến thức còn hạn hẹp và thời gian thực hiện không được nhiều nên đề tài của
chúng em còn rất nhiều sai sót, hạn chế. Mặc dù đã cố gắng phần nào thiết kế và tính
toán một cách chi tiết các mạch, các thông số nhưng đôi khi còn mang tính lý thuyết,
chưa thực tế. Chúng em mong có sự góp ý và sửa chữa để đề tài này có tính khả thi
hơn về cả phương diện kinh tế cũng như kỹ thuật.

Hà Nội 4/2006
Nhóm sinh viên thực hiện: HOÀNG NGỌC ANH
DƯƠNG THÀNH PHAO
NGUYỄN HOÀNG HẢI A
NGUYỄN HOÀNG HẢI B
NGUYỄN HỮU HẢI
Lớp Điện Tử 2-K48 ĐHBKHN

PHẦN I:VI ĐIỀU KHIỂN 8051

Footer Page 2 of 126.

2


Header Page 3 of 126.

Bài tập lớn môn Vi Xử Lý

Bộ vi điều khiển 8051 là thành viên đầu tiên của họ 8051
EXTERNAL
INTERRUPTS

ETC

ON - CHIP
RAM

TIMER
0
TIMER
1

4 I/O
PORTS

SERIAL
PORT

P P P P

TXD RXD

COUNTER
INPUTS

INTERRUP
T
CONTROL

CPU

OSC

BUS

CONTROL

ADDRESS/DAT
Bố trí bên trong của
sơ đồ khối 8051.
A

1.Bên trong 8051.
Trong phần này chúng ta nghiên cứu các thanh ghi chính của 8051 và trình bày cách
sử dụng với các lệnh đơn giản MOV và ADD.
1.1 Các thanh ghi.
Trong CPU các thanh ghi được dùng để lưu cất thông tin tạm thời, những thông tin
này có thể là một byte dữ liệu cần được sử lý hoặc là một địa chỉ đến dữ liệu cần được
nạp. Phần lớn các thanh ghi của 8051 là các thanh ghi 8 bit. Trong 8051 chỉ có một kiểu
dữ liệu: Loại 8 bit, 8 bit của một thanh ghi được trình bày như sau:
D7

D6

D5

D4

D3

D2

D1

D0


với MSB là bit có giá trị cao nhất D7 cho đến LSB là bit có giá trị thấp nhất D0. (MSB Most Sigfican bit và LSB - Leart Significant Bit). Với một kiểu dữ liệu 8 bit thì bất kỳ
dữ liệu nào lớn hơn 8 bit đều phải được chia thành các khúc 8 bit trước khi được xử lý.
Vì có một số lượng lớn các thanh ghi trong 8051 ta sẽ tập trung vào một số thanh ghi
công dụng chung đặc biệt trong các chương kế tiếp.

Footer Page 3 of 126.

3


Header Page 4 of 126.

Bài tập lớn môn Vi Xử Lý

Các thanh ghi được sử dụng rộng rãi nhất của 8051 là A (thanh ghi tích luỹ), B,
R0 - R7, DPTR (con trỏ dữ liệu) và PC (bộ đếm chương trình). Tất cả các dữ
liệu trên đều là thanh g hi 8 bit trừ DPTR và PC là 16 bit. Thanh ghi tích luỹ A
được sử dụng cho tất cả mọi phép toán số học và lô-gíc.
2. Mô tả chân của 8051.
Mặc dù các thành viên của họ 8051 (ví dụ 8751, 89C51, DS5000). Tuy nhiên, vì
hầu hết các nhà phát triển chính sử dụng chíp đóng vỏ 40 chân với hai hàng chân DIP
nên ta chỉ tập chung mô tả phiên bản này.

P1.0
P1.1
P1.2

P1.3
P1.4

P1.5
P1.6
P1.7
RST
(RXD) P3.0
(TXD) P3.1
(NT0) P3.2
(NT1) P3.3
(T0) P3.4
(T1) P3.5
(WR) P3.6
(RD) P3.7
XTAL
XTAL1
GND

1
2
3
4
5
6
7
8
9
10
11
12
13
14

15
16
17
18
19
20

8051
(8031)

40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21


Vcc
P0.0 (AD0)
P0.1 (AD1)
P0.2 (AD2)
P0.3 (AD3)
P0.4 (AD4)
P0.5 (AD5)
P0.6 (AD6)
P0.6 (AD6)
EA/CP
ALE/PRO
PSEN
P2.7 (A15)
P2.6 (A14)
P2.5 (A13)
P2.4(A12)
P2.3 (A11)
P2.2 (A10)
P2.1 (A9)
P2.0 (AB)

Sơ đồ bố trí chân của 8051.
Trên hình là sơ đồ bố trí chân của 8051. Ta thấy rằng trong 40 chân thì có 32 chân
dành cho các cổng P0, P1, P2 và P3 với mỗi cổng có 8 chân. Các chân còn lại được dành
cho nguồn VCC, đất GND, các chângiao động XTAL1 và XTAL2 tái lập RST cho phép
chốt địa chỉ ALE truy cập được địa chỉ ngoài EA , cho phép cất chương trình PSEN .
Trong 8 chân này thì 6 chân VCC , GND, XTAL1, XTAL2, RST và EA được các họ
Footer Page 4 of 126.


4


Header Page 5 of 126.

Bài tập lớn môn Vi Xử Lý

8031 và 8051 sử dụng. Hay nói cách khác là chúng phải được nối để cho hệ thống làm
việc mà không cần biết bộ vi điều khiển thuộc họ 8051 hay 8031. Còn hai chân khác là
PSEN và ALE được sử dụng chủ yếu trong các hệ thống dựa trên 8031.
CÁC CHẾ ĐỘ ĐÁNH ĐỊA CHỈ CỦA 8051
Các chế độ đánh địa chỉ khác nhau của bộ vi xử lý được xác định như nó được
thiết kế và do vậy người lập trình không thể đánh địa chỉ khác nhau là:
1. tức thời 2. Theo thanh ghi
3. Trực tiếp
4. gián tiếp qua thanh ghi
5. Theo chỉ số
1 Các chế độ đánh địa chỉ tức thời và theo thanh ghi
1.1 Chế độ đánh địa chỉ tức thời
Trong chế độ đánh địa chỉ này toán hạng nguồn là một hằng số. Và như tên gọi của nó
thì khi một lệnh được hợp dịch toán hạng đi tức thi ngay sau mã lệnh. Lưu ý rằng trước
dữ liệu tức thời phải được đặt dấu (#) chế độ đánh địa chỉ này có thể được dùng để nạp
thông tin vào bất kỳ thanh ghi nào kể cả thanh ghi con trỏ dữ liệu DPTR.
1.2 chế độ đánh địa chỉ theo thanh ghi:
Chế độ đánh địa chỉ theo thanh ghi liên quan đến việc sử dụng các thanh ghi để
dữ liệu cần được thao tác các ví dụ về đánh địa chỉ theo thanh ghi như sau:
MOV A, RO
; Sao nội dung thanh ghi RO vào thanh ghi A
Cũng nên lưu ý rằng các thanh ghi nguồn và đích phải phù hợp về kích thước. Hay
nói cách khác, nếu viết “ MOV DPTR, A” sẽ cho một lỗi vì nguồn là thanh ghi 8 bit và

đích lại là thanh ghi 16 bit. Xét đoạn mã sau:
MOV
DPTR, #25F5H
Để ý rằng ta có thể chuyển dữ liệu giữa thanh ghi tích luỹ A và thanh ghi Rn (n từ
0 đến 7) nhưng việc chuyển dữ liệu giữa các thanh ghi Rn thì không được phép. Ví
dụ, lệnh “MOV R4, R7” là không hợp lệ.
2 Truy cập bộ nhớ sử dụng các chế độ đánh địa chỉ khác nhau.
2.1 Chế độ đánh địa chỉ trực tiếp.
Như đã nói ở chương 2 trong 8051 có 128 byte bộ nhớ RAM. Bộ nhớ RAM
được gán các địa chỉ từ 00 đến FFH và được phân chia như sau:
1. Các ngăn nhớ từ 00 đến 1FH được gán cho các băng thanh ghi và ngăn xếp.
2. Các ngăn nhớ từ 20H đến 2FH được dành cho không gian đánh địa chỉ theo bit
để lưu các dữ liệu 1 bit.
3. Các ngăn nhớ từ 30H đến 7FH là không gian để lưu dữ liệu có kích thước 1byte.
Mặc dù toàn bộ byte của bộ nhớ RAM có thể được truy cập bằng chế độ đánh địa
chỉ trực tiếp, nhưng chế độ này thường được sử dụng nhất để truy cập các ngăn nhớ
RAM từ 30H đến 7FH. Đây là do một thực tế là các ngăn nhớ dành cho băng ghi được
truy cập bằng thanh ghi theo các tên gọi của chúng là R0 - R7 còn các ngăn nhớ khác
của RAM thì không có tên như vậy. Trong chế độ đánh địa chỉ trực tiếp thì dữ liệu ở
trong một ngăn nhớ RAM mà địa chỉ của nó được biết và địa chỉ này được cho như là
Footer Page 5 of 126.

5


Header Page 6 of 126.

Bài tập lớn môn Vi Xử Lý

một phần của lệnh. Khác với chế độ đánh địa chỉ tức thì mà toán hạng tự nó được cấp

với lệnh. Dấu (# 0 là sự phân biệt giữa hai chế độ đánh địa chỉ.
*Các thanh ghi có thể đánh địa chỉ theo bit.
Xét theo chế độ đánh địa chỉ trực tiếp thì cần phải lưu ý rằng giá trị địa chỉ được
giới hạn đến 1byte, 00 - FFH. Điều này có nghĩa là việc sử dụng của chế độ đánh địa chỉ
này bị giới hạn bởi việc truy cập các vị trí ngăn nhớ của RAM và các thanh ghi với địa
chỉ được cho bên trong 8051.
2.3 Ngăn xếp và chế độ đánh địa chỉ trực tiếp.
Một công dụng chính khác của chế độ đánh địa chỉ trực tiếp là ngăn xếp. Trong
họ 8051 chỉ có chế độ đánh địa chỉ trực tiếp là được phép đẩy vào ngăn xếp. Do vậy,
một lệnh như “PVSH A” là không hợp lệ. Việc đẩy thanh ghi A vào ngăn xếp phải
được viết dưới dạng “PVAH 0E0H” với 0E0H là địa chỉ của thanh ghi A. Tương tự như
vậy để đẩy thanh ghi R3 rãnh 0 vào ngăn xếp ta phải viết là “PVSH 03”. Chế độ đánh
địa chỉ trực tiếp phải được sử dụng cho cả lệnh POP. Vì dụ “POP 04” sẽ kéo đỉnh của
ngăn xếp vào thanh ghi R4 rãnh 0.
2.4 chế độ đánh địa chỉ gián tiếp thanh ghi.
Trong chế độ này, một thanh ghi được sử dụng như một con trỏ đến dữ liệu.
Nếu dữ liệu ở bên trong CPU thì chỉ các thanh ghi R0 và R1 được sử dụng
cho mục đích này. Hay nói cách khác các thanh ghi R2 - R7 không có thể
dùng được để giữ địa chỉ của toán hạng nằm trong RAM khi sử dụng chế độ
đánh địa chỉ này khi Ro và R1 được dùng như các con trỏ, nghĩa là khi chúng
giữ các địa chỉ của các ngăn nhớ RAM thì trước chúng phải đặt dấu (@) như
chỉ ra dưới đây.
MOV A, @ R0; Chuyển nội dung của ngăn nhớ RAM có địa chỉ trong RO và A
Lưu ý rằng R0 cũng như R1 luôn có dấu “@” đứng trước. Khi không có dấu
này thì đó là lệnh chuyển nội dung các thanh ghi Ro và R1 chứ không phải
dữ liệu ngăn nhớ mà địa chỉ có trong R0 và R1.
12.1 Phối ghép một LCD với 8051.
ở phần này ta sẽ mô tả các chế độ hoạt động của các LCD và sau đó mô tả cách
lập trình và phối ghép một LCD tới 8051.
12.1.2 Các chân của LCD.

Bảng 2.1: Mô tả các chân của LCD.
Chân

Ký hiệu

I/O

1

VSS

-

Đất

2

VCC

-

Dương nguồn 5v

3

VEE

-

Cấp nguồn điều khiển phản


Footer Page 6 of 126.

Mô tả

6


Header Page 7 of 126.

Bài tập lớn môn Vi Xử Lý

4

RS

I

RS = 0 chọn thanh ghi lệnh. RS = 1 chọn
thanh dữ liệu

5

R/W

I

R/W = 1 đọc dữ liệu. R/W = 0 ghi

6


E

I/O

Cho phép

7

DB0

I/O

Các bít dữ liệu

8

DB1

I/O

Các bít dữ liệu

9

DB2

I/O

Các bít dữ liệu


10

DB3

I/O

Các bít dữ liệu

11

DB4

I/O

Các bít dữ liệu

12

DB5

I/O

Các bít dữ liệu

13

DB6

I/O


Các bít dữ liệu

14

DB7

I/O

Các bít dữ liệu

15

A

-

Anode

16

K

-

Kathode

LCD được nói trong mục này có 14 chân, chức năng của các chân được cho
trong bảng 12.1. Vị trí của các chân được mô tả trên hình 12.1 cho nhiều LCD khác
nhau.

1. Chân VCC, VSS và VEE: Các chân VCC, VSS và VEE: Cấp dương nguồn - 5v và đất
tương ứng thì VEE được dùng để điều khiển độ tương phản của LCD.
2. Chân chọn thanh ghi RS (Register Select).
Có hai thanh ghi rất quan trọng bên trong LCD, chân RS được dùng để chọn các
thanh ghi này như sau: Nếu RS = 0 thì thanh ghi mà lệnh được chọn để cho phép người
dùng gửi một lệnh chẳng hạn như xoá màn hình, đưa con trỏ về đầu dòng v.v… Nếu RS
= 1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên
LCD.
3. Chân đọc/ ghi (R/W).
Đầu vào đọc/ ghi cho phép người dùng ghi thông tin lên LCD khi R/W = 0 hoặc
đọc thông tin từ nó khi R/W = 1.
4. Chân cho phép E (Enable).
Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ
liệu của nó. Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức cao xuống thấp
phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liêu. Xung này phải
rộng tối thiểu là 450ns.

Footer Page 7 of 126.

7


Header Page 8 of 126.

Bài tập lớn môn Vi Xử Lý

5. Chân D0 - D7.
Đây là 8 chân dữ liệu 8 bít, được dùng để gửi thông tin lên LCD hoặc đọc nội
dung của các thanh ghi trong LCD.
Để hiển thị các chữ cái và các con số thì bật RS = 1.

Cũng có các mã lệnh mà có thể được gửi đến LCD để xoá màn hình hoặc đưa con
trỏ về đầu dòng hoặc nhấp nháy con trỏ. Bảng 12.2 liệt kê các mã lênh.
Chúng ta cũng sử dụng RS = 0 để kiểm tra bít cờ bận để xem LCD có sẵn sàng
nhân thông tin. Cờ bận là D7 và có thể được đọc khi R/W = 1 và RS = 0 như sau:
Nếu R/W = 1, RS = 0 khi D7 = 1 (cờ bận 1) thì LCD bận bởi các công việc bên
trong và sẽ không nhận bất kỳ thông tin mới nào. Khi D7 = 0 thì LCD sẵn sàng nhận
thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất kỳ dữ liệu nào lên
LCD.
12.1.3 Gửi các lệnh và dữ liệu đến LCD với một độ trễ.
Để gửi một lệnh bất kỳ từ bảng 12.2 đến LCD ta phải đưa chân RS về 0. Đối với
dữ liệu thì bật RS = 1 sau đó gửi một sườn xung cao xuống thấp đến chân E để cho phép
chốt dữ liệu trong LCD. Điều này được chỉ ra trong đoạn mã chương trình dưới đây
(xem hình 12.2).
LCD
8051

D0

+5v
VCC
VEE

P1.0

D7
VSS
RS R/W E

P1.0
P2.1

P2.2

Hình 12.2: Nối ghép LCD.
12.1.4 Gửi mã lệnh hoặc dữ liệu đến LCD có kiểm tra cờ
Bảng 2.2: Các mã lệnh LCD.
Mã (Hex)
1

Footer Page 8 of 126.

Lệnh đến thanh ghi của LCD
Xoá màn hình hiển thị

8

10K
POT


Header Page 9 of 126.

Bài tập lớn môn Vi Xử Lý

2

Trở về đầu dòng

4

Giảm con trỏ (dịch con trỏ sang trái)


6

Tăng con trỏ (dịch con trỏ sang phải)

5

Dịch hiển thị sang phải

7

Dịch hiển thị sang trái

8

Tắt con trỏ, tắt hiển thị

A

Tắt hiển thị, bật con trỏ

C

Bật hiển thị, tắt con trỏ

E

Bật hiển thị, nhấp nháy con trỏ

F


Tắt con trỏ, nhấp nháy con trỏ

10

Dịch vị trí con trỏ sang trái

14

Dịch vị trí con trỏ sang phải

18

Dịch toàn bộ hiển thị sang trái

1C

Dịch toàn bộ hiển thị sang phải

80

Đa con trỏ về đầu dòng thứ nhất

C0

Đa con trỏ về đầu dòng thứ hai

38

Hai dòng và ma trận 5  7


Đoạn chương trình trên đây đã chỉ ra cách gửi các lệnh đến LCD mà không có kiểm tra
cờ bận (Busy Flag). Lưu ý rằng chúng ta phải đặt một độ trễ lớn trong quá ảtình xuất dữ
liệu hoặc lệnh ra LCD. Tuy nhiên, một cách tốt hơn nhiều là hiển thị cờ bận trước khi
xuất một lệnh hoặc dữ liệu tới LCD. Dưới đây là một chương trình như vậy.
; Kiểm tra cờ bận trước khi gửi dữ liệu, lệnh ra LCD
Lưu ý rằng trong chương trình cờ bận D7 của thanh ghi lệnh. Để đọc thanh ghi
lệnh ta phải đặt RS = 0, R/W = 1 và xung cao - xuống - thấp cho bít E để cấp thanh ghi
lệnh cho chúng ta. Sau khi đọc thanh ghi lệnh, nếu bít D7 (cờ bận) ở mức cao thì LCD
bận và không có thông tin (lệnh) nào được xuất đến nó chỉ khi nào D7 = 0 mới có thể
gửi dữ liệu hoặc lệnh đến LCD. Lưu ý trong phương phát này không sử dụng độ trễ thời
gian nào vì ta đang kiểm tra cờ bận trước khi xuất lệnh hoặc dữ liệu lên LCD.
13.2 Phối ghép 8051 với bàn phím.
13.2.1 Phối ghép bàn phím với 8051.
ở mức thấp nhất các bàn phím được tổ chức dưới dạng một ma trận các hàng và
các cột. CPU truy cập cả hàng lẫn cột thông qua các cổng. Do vậy, với hai cổng 8 bít thì
Footer Page 9 of 126.

9


Header Page 10 of 126.

Bài tập lớn môn Vi Xử Lý

2
2

1


2

1

2

1

2

2

1
2

1

1
2

1

1

2

1

2


2

2

1

8

2

1
1
2

1

C
1

2

1

4

D
1

D3


E

1

F

9

1

A

1

D2

5

2

1

6

2

B

0


1

2

1
2

7
D1

2

2

3
DO

1

2
1
2

2

1

2

có thể nối tới một bàn phím 8  8 tới bộ vi xử lý. Khi một phím được ấn thì một hàng và

một cột được tiếp xúc, ngoài ra không có sự tiếp xúc nào giữa các hàng và các cột.
Trong các bàn phím máy tính IBM PC có một bộ vi điều khiển (bao gồm một bộ vi xử
lý, bộ nhớ RAM và EPROM và một số cổng tất cả được bố trí trên một chíp) chịu trách
nhiệm phối ghép phần cứng và phần mềm của bàn phím. Trong những hệ thống như
vậy, nó là chức năng của các chương trình được lưu trong EPROM của bộ vi điều khiển
để quét liên tục các phím, xác định xem phím nào đã được kích hoạt và gửi nó đến bo
mạch chính. Trong phần này nghiên cứu về cơ cấu 8051 quét và xác định phím.
13.2.2 Quét và xác định phím.

VCC_CIRCLE

D3

D2

D1

DO

CONG VAO

CONG RA
Hình 1.1: Nối ghép bàn phím ma trận tới các cổng.
Các hàng được nối tới một đầu ra và các cột được nối tới một cổng vào. Nếu
không có phím nào được ấn thì việc đóng cổng vào sẽ hoàn toàn là 1 cho tất cả các cột
vì tất cả được nối tới dương nguồn VCC. Nếu tất cả các hàng được nối đất và một phím
được ấn thì một trong các cột sẽ có giá trị 0 vì phím được ấn tạo đường xuống đất. Chức
năng của bộ vi điều khiển là quét liên tục để phát hiện và xác định phím được ấn.
13.2.3 Nối đất các hàng và đọc các cột.
Để phát hiện một phím được ấn thì bộ vi điều khiển nối đất tất cả các hàng bằng

cách cấp 0 tơí chốt đầu ra, sau đó nó đọc các hàng. Nếu dữ được đọc từ các cột là D3 D0 = 1101 thì không có phím nào được ấn và quá trình tiếp tục cho đến khi phát hiện
một phím được ấn. Tuy nhiên, nếu một trong các bít cột có số 0 thì điều đó có nghĩa là

Footer Page 10 of 126.

10


Header Page 11 of 126.

Bài tập lớn môn Vi Xử Lý

việc ấn phím đã xảy ra. Ví dụ, nếu D3 - D0 = 1101 có nghĩa là một phím ở cột 1 được
ấn. Sau khi một ấn phím được phát hiện, bộ vi điều khiển sẽ chạy quá trình xác định
phím. Bắt đầu với hàng trên cùng, bộ vi điều khiển nối đất nó bằng cách chỉ cấp mức
thấp tới chân D0, sau đó nó đọc các cột. Nếu dữ liệu đọc được là toàn số 1 thì không có
phím nào của hàng này được ấn và quá trình này chuyển sang hàng kế tiếp. Nó nối đất
hàng kế tiếp, đọc các cột và kiểm tra xem có số 0 nào không? Qúa trình này tiếp tục cho
đến khi xác định được hàng nào có phím ấn. Sau khi xác định được hàng có phím được
ấn thì công việc tiếp theo là tìm ra phím ấn thuộc cột nào. Điều này thật là dễ dàng vì bộ
vi điều khiển biết tại thời điểm bất kỳ hàng nào và cột nào được truy cập.
Hình 1.2: Lưu đồ tìm phím ấn
Bắt đầu
Nối đất mọi hàng

Nối đất hàng kế
tiếp
Nối đất mọi hàng

Đọc mọi cột

Không
Không

Mọi
phím
hở



Tìm phím nào đợc
ấn

Đọc mọi cột

Không

Tìm phím nào đợc
ấn


phím
ấn

Trở về


Chờ nhả phím
Đọc mọi cột
11


Footer Page 11 of 126.

Không


phím


phím
hở ở
hàng
này




Header Page 12 of 126.

Bài tập lớn môn Vi Xử Lý

2.Giới thiệu về LCD
2.1 Mô tả các chân của LCD.

Phần II: Sơ đồ khối của hệ thống

Khối xử lý trung tâm

Khối hiển thị










Khối giải mã

Khối khuếch đại

Khối lưu trữ

Khối nhập dữ liệu

Chức năng của các khối:
Khối nhập dữ liệu: Khối này dùng để nhập các thông tin cần hiển thị trên LCD
như hình ảnh hoặc các ký tự. Việc nhập dữ liệu được thực hiện bằng bàn phím
giao tiếp trực tiếp với mạch hoặc được thực hiện trong quá trình lập trình (nạp
vào bộ nhớ của vi điều khiển).
Khối lưu trữ: chính là bộ nhớ ROM hoặc RAM, dùng để lưu trữ dữ liệu hiển
thị trên LCD.
Khối xử lý trung tâm: dùng để xử lý dữ liệu, đưa ra khối giải mã.
Khối giải mã: dùng để giải mã địa chỉ dữ liệu dược đưa từ bộ vi xử lý ra.
Khối khuếch đại: tín hiệu đưa ra từ bộ vi xử lý thường rất nhỏ nên tín hiệu
được khuyếch đại
Khối hiển thị: LCD hiển thị dữ liệu mà ta đã nhập vào.
PHẦN III: Phương án

Footer Page 12 of 126.


12


Header Page 13 of 126.

Bài tập lớn môn Vi Xử Lý

Do kiến thức còn hạn chế nên trong khoảng thời gian 2 học kỳ, chúng em quyết
định làm phương án

Khối nhập dữ liệu
( Bàn phím)

Khối hiển thị

Khối lưu trữ
(ROM + RAM)

Khối giải mã

Khối xử lý trung tâm

Khối khuếch đại

Nguyên lý làm việc của mạch:
Khi khởi động mạch, khối xử lý trung tâm sẽ lấy dữ liệu lưu trữ từ bộ nhớ ROM.
Để khối xử lý quy chiếu chính xác đến địa chỉ của dữ liệu lưu trữ trong ROM, ta dùng
bộ giải mã địa chỉ.
Sau khi bộ xử lý quy chiếu được đến dữ liệu trong ROM, dữ liệu được đưa từ

ROM về bộ xử lý. Trong bộ vi xử lý, dữ liệu sẽ được xử lý (trễ, lặp, xuất ra các
port,…)
Dữ liệu khi nhập từ bàn phím được vi điều khiển quét và xãc định phím ấn xẽ gửi mã
ASCII cuả phím ấn đến bộ vi xử lý
Sau khi dữ liệu được xử lý ở bên trong bộ vi xử lý, nó sẽ được xuất ra các port của
vi xử lý. Các port này lại được nối tới các chân tương ứng của màn hình LCD
Lựa chọn linh kiện để lắp mạch:
 1 IC AT89C51.
 1 BÀN PHÍM 4X4
Footer Page 13 of 126.

13


Header Page 14 of 126.

Bài tập lớn môn Vi Xử Lý

 1 LCD 16X2
 1 BỘ DAO ĐỘNG THẠCH ANH TẦN SỐ 12 MHZ.
 CÁC ĐIỆN TRỞ VÀ CÁC TỤ ĐIỆN
PHẦN IV : THIẾT KẾ CHƯƠNG TRìNH CHO VI ĐIỀU KHIỂN
I. THUẬT TOÁN
Theo nguyên lý và thiết kế phần cứng của mạch quảng cáo, chúng ta xẽ xây dựng
thuật toán cho chương trình điều khiển để nạp vào vi điều khiển AT89C51.
Trong sơ đồ nguyên lý, dữ liệu từ Port 2 sẽ được xuất các chân dữ liệu tương ứng
của LCD
Ba chân p3.0,p3.1,p3.4 xẽ được nối với chân RS,EN,RW của LCD
Port 1 có 8 chân được sử dụng để lối với các chân của bàn phím .Như vậy mục đích
chương trình sẽ là

- Điều khiển việc nhập dữ liệu từ bàn phím vào vi điều khiển
+trước tiên xác định phím nào được bấm bằng việc cho các hành nối đất và các
cột được nối ở mức cao
+sau đó xác định mã ASCII của phím đựơc ấn và gửi đến vi xử lý
- Điều khiển để dòng chữ nhập từ bàn phím khi nhấn phím # thì kết thúc nhập và
cho dòng chữ nhập từ bàn phím nhấp nháy trên màn hình LCD sau đó cho chữ chạy từ
trái qua phải
Đầu tiên cần phải khai báo dữ liệu(nạp dữ liệu vào các ô nhớ của Rom 8951) được
nhập theo tong byte.Các byte này xẽ được cất vào các ô nhớ liên tiếp của bộ nhớ rom
của vi điều khiển 89c51 khi chúng ta muốn truy xuất dữ liệu thì chỉ việc truy xuất vào
các ô nhớ đã đính địa chỉ
Dữ liệu được truy xuất, đưa ra Port 2 để hiển thị chữ bằng cách sau:
Theo nguyên tắc: địa chỉ = bộ đếm + con trỏ
Con trỏ mà chúng ta sử dụng ở đây là con trỏ dữ liệu DPTR. Đầu tiên con trỏ sẽ được
đặt ở địa chỉ đầu bảng dữ liệu, bộ đếm là đếm địa chỉ offset , chúng ta sẽ dựng thanh ghi
A chứa địa chỉ này. Và lệnh sau sẽ truy xuất vào dữ liệu:
MOVC A, @A+DPTR
Khi đó chỉ việc xuất dữ liệu từ thanh chứa A ra Port 2 là được.
Việc nhập dữ liệu từ bàn phím trước hết cho các hàng nối đất lấy các cột làm đầu vào
xem có phím bấm chưa .Sau đó để xác định phím bấm ta cho tất cả các hàng nối ở mức
cao lấy các cột làm đầu vào,sau đó cho hàng 1 nối đất và quét tất cả các cột xem nhấn ở
đâu ,sau đó làm lại với các hàng còn lại .Rồi lấy mã ASCII của phím bấm gửi về vi điều
khiển và xuất ra LCD,lưu ý 1 phím có thể hiển thị 4 ký tự

Footer Page 14 of 126.

14


Header Page 15 of 126.


Bài tập lớn môn Vi Xử Lý

Khởi tạo LCD
Xác định phím nhấn thuộc
hàng nào

Thông báo nhập dữ liệu

Xác định phím nhấn thuộc
cột nào

Thực hiện giao tiếp với
bàn phím

Xác định vị trí phím nhấn
Bắt đầu

Xác định phím đợc nhấn
lần mấy

Nối đất tất cả các hàng

Xác định từ mã
Đọc tất cả các cột

Gửi lên LCD
Tất cả các
phím thả
Có nhấn phím nếu kết thúc

không

Đọc tất cả
các cột

Chạy quảng cáo

Có phím nhấn

Chờ phím nhấn xong

Đọc tất cả các cột
Có phím nhấn

SƠ ĐỒ THUẬT TOÁN CỦA CHƯƠNG TRÌNH

Footer Page 15 of 126.

15


Header Page 16 of 126.

Bài tập lớn môn Vi Xử Lý

II.SƠ ĐỒ NGUYÊN LÝ
J3

1
2


CON2
J1

U4

39
38
37
36
35
34
33
32

J2

1
2
3
4
5
6
7
8

8
7
6
5

4
3
2
1
R1
R

C4

19
18
9

Y2

31

P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
P1.0/T2
P1.1/T2-EX
P1.2
P1.3
P1.4

P1.5
P1.6
P1.7
XTAL1
XTAL2
RST

P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INTO
P3.3/INT1
P3.4/TO
P3.5/T1
P3.6/WR
P3.7/RD
PSEN

EA/VPP
AT89C52

SW1


VCC

C5

GND

+

40

U2
C3

2

C1

1

ALE/PROG

21
22
23
24
25
26
27
28
10

11
12
13
14
15
16
17

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CON14

29
30

20

C7


+

VI

GND

LM7805
VO

3

C6

5

6

C

1

2

3

ON

0


=

+
LCD1

4

3

2

C
1

D

7
8
9
10
11
12
13
14

4

D0
D1
D2

D3
D4
D5
D6
D7

B

4
5
6

9
RS
RW
E

8

VSS
VDD
VEE

7

1
2
3

+

A

LM016L

II. CHƯƠNG TRÌNH
Chương trình được lập trình bằng ngôn ngữ lập trình là ASSEMBLY.
********************************************************
RS
EN
RW

BIT
BIT
BIT

Footer Page 16 of 126.

P3.0
P3.1
P3.4

;Bit P3.0 dung chon thanh ghi lenh/du lieu
;Bit P3.1 dung lam chan 'Cho phep'
;Bit P3.4 dieu khien viec doc/ghi du lieu
16


Header Page 17 of 126.

C1

C2
C3
H1
H2
H3
H4

BIT
BIT
BIT
BIT
BIT
BIT
BIT

ORG 0
Mainpro:
LCALL
LCALL
LJMP

Bài tập lớn môn Vi Xử Lý

P1.2
P1.1
P1.0
P1.3
P1.4
P1.5
P1.6


;Cac bit P1.2, P1.1, P1.0 lan luot noi voi
;cac cot tu 1 - 3 cua ban phim
;Cac bit P1.3 - P1.6 lan luot noi voi
; cac hang tu 1 - 4 cua ban phim

Hien_Promt
Nhap_Dulieu
QuangCao

Hien_Promt:
;1-Hien thi dau nhac nap du lieu
;Khoi tao LCD
MOV A,#38H
;Che do 2 dong ma tran 5x7
LCALL COMMAND
;Thuc hien lenh
MOV A,#0EH
;Bat hien thi nhap nhay con tro
LCALL
COMMAND
MOV A,#01H
;Xoa man hinh hien thi
LCALL COMMAND
;gioi thieu cac thanh vien lam de tai
MOV
DPTR,#900H
;Nap con tro du lieu
MOV
R3,#7

;R3 de chua so chuoi duoc hien thi
AGAIN: LCALL
GTTIEP
; GTIEP = gioi thieu tiep
INC
DPTR
DJNZ
R3,AGAIN
LJMP
Xoamanhinh
GTTIEP:
BACK1:
CLR
A
MOVC
A,@A+DPTR
MOV
R7,A
;Du cat vao R7 de phuc vu cho HIENTHI1
JZ
TIEPTUC ;Chuyen sang nhap chuoi tiep theo
LCALL
HIENTHI1
LCALL
DELAY
LCALL
DELAY
INC
DPTR
SJMP

BACK1
TIEPTUC:
LCALL
DELAY
MOV
A,#01
;Xoa man hinh de hien thi chuoi moi

Footer Page 17 of 126.

17


Header Page 18 of 126.
LCALL
LCALL

Bài tập lớn môn Vi Xử Lý

COMMAND
DELAY

RET

; RET OF GTTIEP

;Chuong trinh con xuat lenh
COMMAND: LCALL READY
;Kiem tra co ban neu san sang
MOV P2,A

;thi chuyen ma lenh ra cong P2
CLR RS
;RS =0 Cho xuat lenh
CLR RW
;RW = O De gi lenh toi LCD
SETB EN
;Chan E nhan duoc mot xung cao
CLR EN
;xuong thap cho phep LCD chot lenh
RET
; ret of COMMAND
xoamanhinh:
;giu prompt mot luc, roi xoa man hinh de nhap du lieu
LCALL
DELAY
MOV A,#01
LCALL COMMAND
LJMP
Nhap_dulieu
;Chuong trinh con hien thi
HIENTHI1:
MOV
A,#06H
;Chon huong hien thi sang ben phai
LCALL
COMMAND
LCALL
READY
MOV
P2,R7

SETB
RS
;RS = 1 De cho phep xuat du lieu
CLR
RW
;RW = 0 De ghi du lieu ra LCD
SETB
EN
;Chan Enable nha mot xung cao
CLR
EN
;xuong thap de chot du lieu
RET
;RET of HIENTHI1
;Chuong trinh con tao tre
DELAY:
MOV R6,#255
VONG2:MOV R7,#255
HERE: DJNZ R7,HERE
DJNZ R6,VONG2
RET
; Kiem tra co ban
READY:
SETB
P2.7
;lay P2.7- chan co ban lam dau vao
CLR RS
; RS =0 de truy cap thanh ghi lenh
SETB
RW ; RW = 1 Doc thanh ghi lenh

;Doc thanh ghi lenh va kiem tra co lenh
BACK:
CLR EN
SETB
EN

Footer Page 18 of 126.

18


Header Page 19 of 126.
JB
RET

Bài tập lớn môn Vi Xử Lý
P2.7,BACK
;cho cho den khi LCD het ban
;Of ready

;CHUONG TRINH CON GIAO TIEP VOI BAN PHIM
;P1.1
P1.2
P1.3 duoc noi voi cac cot 3
2 1
;P1.4
P1.5
P1.6
P1.7 duoc noi voi cac hang 1
2 3

Nhap_Dulieu:
;Doan nay phuc vu cho viec luu Du lieu vao vung RAM da nang
MOV
R1,#30H
;R1 dung lam con tro ram,phuc vu cho
; viec luu giu du lieu vao RAM
MOV
R2,#4FH
; do lon khong gian RAM dan nang
Xoaram: MOV @R1,#20H ;20h ma ASCII cua ky tu trang ' '
INC R1
DJNZ R2,Xoaram

4

MOV
R1,#30H
MOV
R5,#0
;dem so ky tu hien tai dang hien thi tren LCD
;doan nay chi nhan biet xem la co phim nhan chua
; nen ta tiep dat tat ca cac hang
batdau:
MOV
P1,#00000111b
;De co the nhan biet duoc phim da nhan
; chua ta dat cac bit tuong ung voi
;cac cot lam dau vao va cac bit tuong
;ung voi hang duoc noi dat
MOV

R0,#0
;vi moi phim co the hien thi 4 ky tu
;ta dung R0 de xac dinh so ky tu tren
; mot phim da duoc nhan la bao nhieu
KT1:
MOV
A,P1
CJNE
A,#00000111b,KT1 ;Kiem tra nha phim chua,neu chua
;kiem tra lai cho den khi nha phim
KT2: LCALL DELAY
MOV
A,P1
; De doc cac cot
CJNE
A,#00000111b,CHO1 ; Neu phim nhan cho xong
SJMP
KT2
; Neu khong thi kiem tra lai xem no co
duoc nhan ko
CHO1:
MOV
LCALL
CJNE

R0,#0
DELAY
; Cho cho nhan xong
A,#00000111b,CHO2 ;Neu co phim nhan thi nhay den
;CHO2 cho hien thi phim do va

;tiep tuc kiem tra xem phim do
; co duoc nhan tiep ngay khong

Footer Page 19 of 126.

19


Header Page 20 of 126.
SJMP

Bài tập lớn môn Vi Xử Lý
KT2

CHO2:
INC
LCALL
LCALL
LCALL
MOV
LCALL
MOV
CJNE
MOV

R0
;Da co mot phim duoc nhan 1 lan
HIEN
; hien thi ky tu do
DELAY

DELAY
P1,#00000111B ;kiem tra co phim nhan tiep khong
DELAY
A,P1
A,#00000111b,CHO3
A,R4
;luu ky tu duoc hien thi cuoi
;cung cua phim nhan vao RAM
MOV
@R1,A
INC
R1
INC
R5
;Doan nay dung de dich man hinh hien thi sang phai khi so
;ky tu da hien thi lon hon 16
CLR
C
MOV
A,R5
SUBB
A,#16
JC
TIEP1
MOV
A,#18H
LCALL COMMAND
;het doan dich hien thi sang phai
TIEP1:MOV
R0,#0

SJMP
KT2
CHO3:MOV
LCALL
INC
LCALL
LCALL
LCALL
MOV
LCALL
MOV
CJNE
MOV
MOV
INC
INC
CLR
MOV
SUBB
JC
MOV

Footer Page 20 of 126.

A,#10H
COMMAND
R0
HIEN
DELAY
DELAY

P1,#00000111B
DELAY
A,P1
A,#00000111b,CHO4
A,R4
@R1,A
R1
R5
C
A,R5
A,#16
TIEP2
A,#18H

20


Header Page 21 of 126.
LCALL
TIEP2:
MOV
SJMP
CHO4:MOV
LCALL
INC
LCALL
LCALL
LCALL
MOV
LCALL

MOV
CJNE
MOV
MOV
INC
INC
CLR
MOV
SUBB
JC
MOV
LCALL

Bài tập lớn môn Vi Xử Lý
COMMAND
R0,#0
KT2
A,#10H
COMMAND
R0
HIEN
DELAY
DELAY
P1,#00000111B
DELAY
A,P1
A,#00000111b,CHO5
A,R4
@R1,A
R1

R5
C
A,R5
A,#16
TIEP3
A,#18H
COMMAND

TIEP3:
MOV
R0,#0
LJMP
KT2
CHO5:MOV
A,#10H
LCALL COMMAND
INC
R0
LCALL HIEN
LCALL DELAY
LCALL DELAY
MOV
P1,#00000111B
LCALL DELAY
MOV
A,P1
CJNE
A,#00000111b,VONGVE
MOV
A,R4

MOV
@R1,A
INC
R1
INC
R5
CLR
C
MOV
A,R5
SUBB
A,#16
JC
TIEP4
MOV
A,#18H
LCALL COMMAND

Footer Page 21 of 126.

21


Header Page 22 of 126.

Bài tập lớn môn Vi Xử Lý

TIEP4:
MOV
R0,#0

VONGVE: LJMP KT2
HIEN:
Timhang:
MOV
P1,#11111111B

;DAU TIEN KO TIEP DAT HANG NAO
;VA DAT CAC COT LAM DAU VAO
CLR
H1
;Tiep dat hang 1
MOV
A,P1
;Doc tat ca cac cot
CJNE
A,#11110111b,HG1
;Hang 1 tim cot (ro rang la cac hang tuong ung voi 5 bit
;dau la co dinh=11110 do chi tiep dat hang1, tai day
;ta chi can quan tam den phim co phai o hang 1 khong thoi
; boi vay chi can co 1 trong 3 cot duoc nhan se lam cho
;1 cot tiep dat dan den 1 trong 3 bit dau =0 nhu vay
; khi do gia tri A se khac #11110111 chung to phim nhan
; o hang 1 va ta tiep tuc xac dinh phim do o cot nao
MOV
P1,#11111111B
CLR
H2
;Tiep dat hang 2
MOV
A,P1

;Doc tat ca cac cot
CJNE
A,#11101111b,HG2 ;Hang 1 tim cot
MOV
CLR
MOV
CJNE

P1,#11111111B
H3
;Tiep dat hang 3
A,P1
;Doc tat ca cac cot
A,#11011111b,HG3 ;Hang 3 tim cot

MOV
CLR
MOV
CJNE
LJMP

P1,#11111111B
H4
;Tiep dat hang 4
A,P1
;Doc tat ca cac cot
A,#10111111b,HG4 ;Hang 4 tim cot
KT2

HG1: CJNE

MOV
LJMP
DT12: CJNE
MOV
LJMP

R0,#1,DT12
DPTR,#DATA11
TIM

;Tim xem phim nhan o cot nao

R0,#2,DT13
DPTR,#DATA12
TIM

DT13: CJNE
R0,#3,DT14
MOV
DPTR,#DATA13
LJMP
TIM
;Neu khong phai la cac truong hop tren thi R0 = 4
; ta tim luon den data14
DT14: MOV
DPTR,#DATA14

Footer Page 22 of 126.

22



Header Page 23 of 126.
LJMP
HG2: CJNE
MOV
LJMP

Bài tập lớn môn Vi Xử Lý
TIM
R0,#1,DT22
DPTR,#DATA21
TIM

DT22: CJNE
R0,#2,DT23
MOV
DPTR,#DATA22
SJMP
TIM
DT23: CJNE
MOV
SJMP
DT24: MOV
SJMP
HG3: CJNE
MOV
SJMP

R0,#3,DT24

DPTR,#DATA23
TIM
DPTR,#DATA24
TIM
R0,#1,DT32
DPTR,#DATA31
TIM

DT32: CJNE
R0,#2,DT33
MOV
DPTR,#DATA32
SJMP
TIM
DT33: CJNE
MOV
SJMP
DT34: MOV
SJMP
HG4: CJNE
MOV
SJMP

R0,#3,DT34
DPTR,#DATA33
TIM
DPTR,#DATA34
TIM
R0,#1,DT42
DPTR,#DATA41

TIM

DT42: CJNE
R0,#2,DT43
MOV
DPTR,#DATA42
SJMP
TIM
DT43: CJNE
MOV
SJMP

R0,#3,DT44
DPTR,#DATA43
TIM

DT44: MOV
DPTR,#DATA44
SJMP
TIM
TIM:
RRC
A
;Kiem tra cot nao o muc thap nho co CY
JNC
LAYMA
;Neu bang 0 thi lay ma ASCII

Footer Page 23 of 126.


23


Header Page 24 of 126.
INC
SJMP
LAYMA:CLR
MOVC
JZ
MOV

Bài tập lớn môn Vi Xử Lý
DPTR
TIM

;Trai lai tim cot ke

A
A,@A + DPTR
Ketthucnhap
R4,A

CJNE

A,#23h,SS2
SJMP
backspace
SS2 : CJNE A,#24h,SS3
LCALL Xuongdong
SS3 :

LCALL HienThiPhimNhan
VE:
RET
BACKSPACE:
;doan nay de xoa ca ky
DEC R1
DEC R5
DEC R1
DEC R5
MOV A,@R1
MOV R4,A
;Doan nay de xoa ky tu
MOV
A,#10H
LCALL COMMAND
MOV
A,#20H
LCALL HIENTHIPHIMNHAN
MOV
A,#10H
LCALL COMMAND
LJMP
VE
ketthucnhap:
LJMP quangcao
ngoai

; a= '#' ,ta quy uoc la phim xoa
;quy uoc '$' la ma xuong dong


;hien thi phim da nhan
;OF HIEN

tu do da duoc luu trong RAM

tren LCD
;dich con tro sang phai mot cot
;chen ky tu trang vao vi tri do
;lui ve 1 cot

;do khoang cach tu doan lay ma
;den doan quangcao nam

;dai cua lenh JZ nen ta dung
;doan nay de noi tiep
xuongdong: MOV A,#0C0H
LCALL COMMAND
LJMP
VE
Hienthiphimnhan:
LCALL READY
MOV P2,A
SETB
RS
;RS = 1 De cho phep xuat du lieu
CLR RW
;RW = 0 De ghi du lieu ra LCD
SETB
EN
;Chan Enable nha mot xung cao

CLR EN
;xuong thap de chot du lieu

Footer Page 24 of 126.

24


Header Page 25 of 126.

Bài tập lớn môn Vi Xử Lý

LCALL
RET

DELAY

QUANGCAO:

MOV
A,R5
MOV
R3,A
;Xoa tung ky tu
CHAY1:
Mov
a,#10h
Lcall command
MOV A,#20h
LCALL

HIENTHIPHIMNHAN
Mov
a,#10h
Lcall command
LCALL DELAY
LCALL DELAY
DJNZ
R5,CHAY1
;hien thi lai tung ky tu
MOV
HTL:

R1,#30H
MOV
A,@R1
MOV
R7,A
LCALL Hienthi1
LCALL DELAY
LCALL DELAY
LCALL DELAY
INC
R1
R3,HTL

TIEP:
DJNZ
MOV R4,#5
FOREVER:
MOV R4,#5

NHAPNHAY:

Footer Page 25 of 126.

MOV

A,#0AH
;Xoa man hinh hien thi
LCALL COMMAND
LCALL DELAY
;de man hinh tat mot luc
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV
A,#0eH
;Bat man hinh hien thi
LCALL COMMAND
LCALL DELAY
; de mot luc
LCALL DELAY

25


×