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
                
              
                                            
                                
            
 
            
                 27 trang
27 trang | 
Chia sẻ: lvcdongnoi | Lượt xem: 2895 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang tài liệu 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, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
 Bài tập lớn môn Vi Xử Lý 
 1 
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ài tập lớn môn Vi Xử Lý 
 2 
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 
 Bài tập lớn môn Vi Xử Lý 
 3 
 Bộ vi điều khiển 8051 là thành viên đầu tiên của họ 8051 
 Bố trí bên trong của sơ đồ khối 8051. 
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: 
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. 
CO
U
N
TER 
IN
PU
TS 
OSC 
INTERRUP
T 
CONTROL 
4 I/O 
PORTS 
BUS 
CONTROL 
SERIAL 
PORT 
EXTERNAL 
INTERRUPTS 
CPU 
ON - CHIP 
RAM 
 ETC 
TIMER 
0 TIMER 
1 
ADDRESS/DAT
A 
TXD RXD P P P P
 D7 D6 D5 D4 D3 D2 D1 D0 
 Bài tập lớn môn Vi Xử Lý 
 4 
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. 
 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ọ 
P1.0 
P1.1 
P1.2 
P1.3 
P1.4 
P1.5 
P1.6 
P1.7 
RST 
P0.0 (AD0) 
Vcc 1 
2 
3 
5 
6 
4 
7 
8 
9 
11 
12 
10 
13 
14 
15 
17 
18 
16 
19 
20 
40 
39 
38 
36 
35 
37 
34 
33 
32 
30 
29 
31 
28 
27 
26 
24 
23 
25 
22 
21 
8051 
(8031) 
P0.1 (AD1) 
P0.2 (AD2) 
P0.4 (AD4) 
P0.5 (AD5) 
P0.3 (AD3) 
PSEN 
P0.6 (AD6) 
P2.5 (A13) 
P2.3 (A11) 
P2.1 (A9) 
P2.7 (A15) 
P2.4(A12) 
P2.6 (A14) 
P2.0 (AB) 
P2.2 (A10) 
(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 
P0.6 (AD6) 
EA/CP
ALE/PRO
 Bài tập lớn môn Vi Xử Lý 
 5 
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à 
 Bài tập lớn môn Vi Xử Lý 
 6 
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 Mô tả 
1 VSS - Đất 
2 VCC - Dương nguồn 5v 
3 VEE - Cấp nguồn điều khiển phản 
 Bài tập lớn môn Vi Xử Lý 
 7 
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. 
 Bài tập lớn môn Vi Xử Lý 
 8 
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). 
 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) Lệnh đến thanh ghi của LCD 
1 Xoá màn hình hiển thị 
P2.1 
D0 
P1.0 
P1.0 
P2.2 
D7 
R/W E RS VSS 
VEE 
VCC
+5v
10K 
POT 
LCD 
8051 
 Bài tập lớn môn Vi Xử Lý 
 9 
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ì 
 Bài tập lớn môn Vi Xử Lý 
 10 
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
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1 2
1 2
1 2
1 2DO
D1
D1
D2
D2
D3
D3 DO
0
1
2
3
4567
89AB
CD
EF
CONG RA
CONG VAO
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à 
 Bài tập lớn môn Vi Xử Lý 
 11 
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 
Nối đất mọi hàng 
Đọc mọi cột 
Chờ nhả phím 
Nối đất hàng kế 
tiếp 
Nối đất mọi hàng 
Bắt đầu 
Mọi 
phím 
hở 
Đọc mọi cột 
Có 
phím 
ấn 
Đọc mọi cột 
Có 
phím 
ấn 
Có 
phím 
hở ở 
hàng 
này 
Tìm phím nào đợc 
ấn 
Tìm phím nào đợc 
ấn 
 Trở về 
Có 
Không 
Không 
Có 
Không 
Có 
Không Có 
 Bài tập lớn môn Vi Xử Lý 
 12 
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 
 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 
 Khối xử lý trung tâm 
Khối lưu trữ 
 Khối giải mã 
Khối khuếch đại 
 Khối hiển thị 
 Khối nhập dữ liệu 
 Bài tập lớn môn Vi Xử Lý 
 13 
 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 
 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 
 Khối nhập dữ liệu 
 ( Bàn phím) 
 Khối giải mã 
Khối khuếch đại 
 Khối hiển thị 
 Khối xử lý trung tâm 
 Khối lưu trữ 
(ROM + RAM) 
 Bài tập lớn môn Vi Xử Lý 
 14 
 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ự 
 Bài tập lớn môn Vi Xử Lý 
 15 
SƠ ĐỒ THUẬT TOÁN CỦA CHƯƠNG TRÌNH 
Khởi tạo LCD 
Thông báo nhập dữ liệu 
Thực hiện giao tiếp với 
bàn phím 
Bắt đầu 
Nối đất tất cả các hàng 
Đọc tất cả các cột 
Tất cả các 
phím thả 
Đọc tất cả 
các cột 
Có phím nhấn 
Chờ phím nhấn xong 
Đọc tất cả các cột 
Có phím nhấn 
Xác định phím nhấn thuộc 
hàng nào 
Xác định phím nhấn thuộc 
cột nào 
Xác định vị trí phím nhấn 
Xác định phím đợc nhấn 
lần mấy 
Xác định từ mã 
Gửi lên LCD 
Có nhấn phím nếu kết thúc 
không 
Chạy quảng cáo 
 Bài tập lớn môn Vi Xử Lý 
 16 
II.SƠ ĐỒ NGUYÊN LÝ 
J1
CON14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
U2
AT89C52
9
18
19
20
29
30
31
40
1
2
3
4
5
6
7
8
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17
39
38
37
36
35
34
33
32
RST
XTAL2
XTAL1
G
N
D
PSEN
ALE/PROG
EA/VPP
V
C
C
P1.0/T2
P1.1/T2-EX
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
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
P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
R1
R
SW1
J3
CON2
1 2
J2
1
2
3
4
5
6
7
8
C1 C3 + C5
+
C6
+ C7
C4
U4
LM7805
1
2
3
VI
G
N
D
VO
Y2
1 2 3
654
8 9
=
7
+CON 0
A
B
C
D
1 2 43
D
7
14
D
6
13
D
5
12
D
4
11
D
3
10
D
2
9
D
1
8
D
0
7
E
6
R
W
5
R
S
4
V
SS
1
V
D
D
2
V
EE
3
LCD1
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 BIT P3.0 ;Bit P3.0 dung chon thanh ghi lenh/du lieu 
EN BIT P3.1 ;Bit P3.1 dung lam chan 'Cho phep' 
RW BIT P3.4 ;Bit P3.4 dieu khien viec doc/ghi du lieu 
 Bài tập lớn môn Vi Xử Lý 
 17 
C1 BIT P1.2 ;Cac bit P1.2, P1.1, P1.0 lan luot noi voi 
C2 BIT P1.1 ;cac cot tu 1 - 3 cua ban phim 
C3 BIT P1.0 
H1 BIT P1.3 ;Cac bit P1.3 - P1.6 lan luot noi voi 
H2 BIT P1.4 ; cac hang tu 1 - 4 cua ban phim 
H3 BIT P1.5 
H4 BIT P1.6 
ORG 0 
Mainpro: 
 LCALL Hien_Promt 
 LCALL Nhap_Dulieu 
 LJMP 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 
 Bài tập lớn môn Vi Xử Lý 
 18 
LCALL COMMAND 
LCALL 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 
 Bài tập lớn môn Vi Xử Lý 
 19 
 JB P2.7,BACK ;cho cho den khi LCD het ban 
 RET ;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 4 
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 
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 R0,#0 
LCALL DELAY ; Cho cho nhan xong 
CJNE 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 
 Bài tập lớn môn Vi Xử Lý 
 20 
 SJMP KT2 
CHO2: 
 INC R0 ;Da co mot phim duoc nhan 1 lan 
 LCALL HIEN ; hien thi ky tu do 
 LCALL DELAY 
 LCALL DELAY 
 MOV P1,#00000111B ;kiem tra co phim nhan tiep khong 
 LCALL DELAY 
 MOV A,P1 
 CJNE A,#00000111b,CHO3 
 MOV 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 A,#10H 
 LCALL COMMAND 
 INC R0 
 LCALL HIEN 
 LCALL DELAY 
 LCALL DELAY 
 MOV P1,#00000111B 
 LCALL DELAY 
 MOV A,P1 
 CJNE A,#00000111b,CHO4 
 MOV A,R4 
 MOV @R1,A 
 INC R1 
 INC R5 
 CLR C 
 MOV A,R5 
 SUBB A,#16 
 JC TIEP2 
 MOV A,#18H 
 Bài tập lớn môn Vi Xử Lý 
 21 
 LCALL COMMAND 
TIEP2: 
 MOV R0,#0 
 SJMP KT2 
CHO4:MOV A,#10H 
 LCALL COMMAND 
 INC R0 
 LCALL HIEN 
 LCALL DELAY 
 LCALL DELAY 
 MOV P1,#00000111B 
 LCALL DELAY 
 MOV A,P1 
 CJNE A,#00000111b,CHO5 
 MOV A,R4 
 MOV @R1,A 
 INC R1 
 INC R5 
 CLR C 
 MOV A,R5 
 SUBB A,#16 
 JC TIEP3 
 MOV A,#18H 
 LCALL 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 
 Bài tập lớn môn Vi Xử Lý 
 22 
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 P1,#11111111B 
 CLR H3 ;Tiep dat hang 3 
 MOV A,P1 ;Doc tat ca cac cot 
 CJNE A,#11011111b,HG3 ;Hang 3 tim cot 
 MOV P1,#11111111B 
 CLR H4 ;Tiep dat hang 4 
 MOV A,P1 ;Doc tat ca cac cot 
 CJNE A,#10111111b,HG4 ;Hang 4 tim cot 
 LJMP KT2 
HG1: CJNE R0,#1,DT12 
 MOV DPTR,#DATA11 
 LJMP TIM ;Tim xem phim nhan o cot nao 
 DT12: CJNE R0,#2,DT13 
 MOV DPTR,#DATA12 
 LJMP 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 
 Bài tập lớn môn Vi Xử Lý 
 23 
 LJMP TIM 
HG2: CJNE R0,#1,DT22 
 MOV DPTR,#DATA21 
 LJMP TIM 
 DT22: CJNE R0,#2,DT23 
 MOV DPTR,#DATA22 
 SJMP TIM 
 DT23: CJNE R0,#3,DT24 
 MOV DPTR,#DATA23 
 SJMP TIM 
 DT24: MOV DPTR,#DATA24 
 SJMP TIM 
HG3: CJNE R0,#1,DT32 
 MOV DPTR,#DATA31 
 SJMP TIM 
 DT32: CJNE R0,#2,DT33 
 MOV DPTR,#DATA32 
 SJMP TIM 
 DT33: CJNE R0,#3,DT34 
 MOV DPTR,#DATA33 
 SJMP TIM 
 DT34: MOV DPTR,#DATA34 
 SJMP TIM 
HG4: CJNE R0,#1,DT42 
 MOV DPTR,#DATA41 
 SJMP TIM 
 DT42: CJNE R0,#2,DT43 
 MOV DPTR,#DATA42 
 SJMP TIM 
 DT43: CJNE R0,#3,DT44 
 MOV DPTR,#DATA43 
 SJMP 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 
 Bài tập lớn môn Vi Xử Lý 
 24 
 INC DPTR ;Trai lai tim cot ke 
 SJMP TIM 
LAYMA:CLR A 
 MOVC A,@A + DPTR 
 JZ Ketthucnhap 
 MOV R4,A 
CJNE A,#23h,SS2 ; a= '#' ,ta quy uoc la phim xoa 
 SJMP backspace 
SS2 : CJNE A,#24h,SS3 ;quy uoc '$' la ma xuong dong 
 LCALL Xuongdong 
SS3 : 
 LCALL HienThiPhimNhan ;hien thi phim da nhan 
VE: RET ;OF HIEN 
BACKSPACE: 
;doan nay de xoa ca ky tu do da duoc luu trong RAM 
 DEC R1 
 DEC R5 
 DEC R1 
 DEC R5 
 MOV A,@R1 
 MOV R4,A 
;Doan nay de xoa ky tu tren LCD 
MOV A,#10H ;dich con tro sang phai mot cot 
LCALL COMMAND 
MOV A,#20H ;chen ky tu trang vao vi tri do 
LCALL HIENTHIPHIMNHAN 
MOV A,#10H ;lui ve 1 cot 
LCALL COMMAND 
LJMP VE 
ketthucnhap: ;do khoang cach tu doan lay ma 
 LJMP quangcao ;den doan quangcao nam 
ngoai 
 ;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 
 Bài tập lớn môn Vi Xử Lý 
 25 
 LCALL DELAY 
 RET 
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 R1,#30H 
HTL: 
 MOV A,@R1 
 MOV R7,A 
 LCALL Hienthi1 
 LCALL DELAY 
 LCALL DELAY 
 LCALL DELAY 
TIEP: INC R1 
 DJNZ R3,HTL 
MOV R4,#5 
FOREVER: 
MOV R4,#5 
 NHAPNHAY: 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 
 Bài tập lớn môn Vi Xử Lý 
 26 
 LCALL DELAY 
 LCALL DELAY 
 DJNZ R4,NHAPNHAY 
LCALL DELAY 
LCALL DELAY 
MOV R4,#40 ; vi LCD co 40 cot, nen cuoi cung 
 ;hien thi se dich ve dung vi tri cu 
DichTrai: Mov A,#18H 
 LCALL COMMAND 
 LCALL DELAY 
 LCALL DELAY 
 LCALL DELAY 
DJNZ R4,DichTrai 
LCALL DELAY 
LCALL DELAY 
MOV R4,#40 
DichPhai: Mov A,#1CH 
 LCALL COMMAND 
 LCALL DELAY 
 LCALL DELAY 
DJNZ R4,DichPhai 
LJMP FOREVER 
 ORG 900H 
DANHSACH: DB "Nhom thuc hien: ",0 
SV1: DB "NGUYEN HOANG HAI",0 
SV2: DB "HOANG NGOC ANH",0 
SV3: DB "NGUYEN HUU HAI",0 
SV4: DB "DUONG THANH PHAO",0 
SV5: DB "NGUYEN HOANG HAI",0 
DULIEU: DB "Nhap du lieu...",0 
ORG 1000H 
DATA11: DB '1','2','3' 
DATA12: DB '1','A','D' 
DATA13: DB '1','B','E' 
DATA14: DB '1','C','F' 
DATA21: DB '4','5','6' 
DATA22: DB 'G','J','M' 
DATA23: DB 'H','K','N' 
 Bài tập lớn môn Vi Xử Lý 
 27 
DATA24: DB 'I','L','O' 
DATA31: DB '7','8','9' 
DATA32: DB 'P','T','W' 
DATA33: DB 'R','U','X' 
DATA34: DB 'S','V','Y' 
DATA41: DB '#',' ',0 
DATA42: DB ' ','0',0 
DATA43: DB '$','_',0 
DATA44: DB '#','@',0 
END 
5 :Tài liệu tham khảo: 
 Kĩ thuật Vi xử lý -- Tác giả Văn Thế Minh--. 
 Cấu trúc và lập trình họ vi điều khiển 8051. -- Tác giả Nguyễn Tăng 
Cường, Phan Quốc Thắng -- 
            Các file đính kèm theo tài liệu này:
 cua_phao_0093.pdf cua_phao_0093.pdf