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

BÁO CÁO ĐỀ TÀI HIỂN THỊ LCD SỬ DỤNG 8051 HỌC VIỆN KỸ THUẬT MẬT 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 (1.19 MB, 33 trang )

BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA ĐIỆN TỬ - VIỄN THÔNG
----------

BÁO CÁO ĐỀ TÀI
HIỂN THỊ LCD SỬ DỤNG 8051
GVHD: ĐẶNG VĂN HẢI
LẠI THỊ HỒNG NHUNG
SVBC:
HOÀNG TRUNG KIÊN
MAI THI HƯƠNG GIANG
LƯU THANH SƠN
HỒNG ĐÌNH HẢI

BÙI THỊ NGỌC TRÂM
NGUYỄN VĂN HIỀN
DƯƠNG TÙNG LÂM
LÊ VĂN ĐẠT

SINH VIÊN KHÓA 1

Hà Nội, ngày 07 tháng 10 năm 2019

0


Lời nói đầu:
Ngày nay khoa học kỹ thuật đang phát triển hết sức mạnh mẽ, đặc
biệt là lĩnh vực điều khiển và tự động hóa. Để tăng tính năng điều
khiển, các bộ vi điều khiển đã không ngừng được cải tiến và nâng


cấp. Và một trong những họ vi điều khiển đang được ứng dụng rộng
rãi ngày nay là họ vi điều khiển 8051. Các bộ vi điều khiển thuộc họ
8051 đầu tiên ra đời vào năm 1981. Các bộ vi điều khiển này mới chỉ
có 128byte Ram, 4Kb Rom, 2 bộ định thời, một cổng nối tiếp và 4
cổng vào ra. Tất cả được đặt trên cùng 1 chip. Và của nhiều hãng sản
xuất như vi điều khiển 8052, …
Họ vi điều khiển 8051 được ứng dụng trong thực tế rất phổ biến như
ứng dụng để điều khiển động cơ, điều khiển led, điều khiển đèn giao
thông, làm bộ đếm sản phẩm, …trong nhiều ứng dụng đó nhóm sinh
viên chúng em gồm 8 bạn đã tham gia vào thực hiện đề tài “Hiển thị
LCD sử dụng 8051 bằng Miltisim và Keil”. Trong quá trình thực hiện
làm do chúng em chưa có kinh nghiệm nhiều nên cịn thiếu sót mong
thầy (cô) chỉ dạy chúng em thêm trong những lần tiếp theo để chúng
em thực hiện đề tài thành công hơn.

MỤC LỤC
1


CHƯƠNG 1: TÌM HIỂU YÊU CẦU ĐỀ TÀI
CHƯƠNG 1.1. GIỚI THIỆU VỀ 8051
1.1.1. SƠ LƯỢC VỀ LỊCH SỬ
1.1.2. CẤU TRÚC VI ĐIỀU KHIỂN 8051
1.1.2.1. TỔ CHỨC BỘ NHỚ
1.1.2.2. CÁC THANH GHI ĐĂC BIỆT
1.1.2.3. SƠ ĐỒ CHÂN
CHƯƠNG 1.2: GIỚI THIỆU VỀ LCD
1.2.1. GIỚI THIỆU SƠ LƯỢC VỀ LCD
1.2.2. SƠ ĐỒ, CHỨC NĂNG, LIÊN KẾT CHÂN CÁC CHÂN
CỦA LCD

CHƯƠNG 2: THỰC HIỆN MƠ HÌNH ĐÊ TÀI
CHƯƠNG 2.1. MẠCH NGUN LÝ
CHƯƠNG 2.2. MẠCH LAYOUT, 3D
CHƯƠNG 2.3. CODE

CHƯƠNG 1: TÌM HIỂU ĐỀ TÀI
1.1. GIỚI THIỆU VỀ 8051
2


1.1.1. SƠ LƯỢC VỀ LỊCH SỬ
Intel 4004 là vi xử lý đầu tiên được thương mại hóa bởi Intel năm 1971.

Vi điều khiển 4004
9 năm sau đó, Intel ra mắt vi điều khiển 8-bit với mã 8051. Khi con vi điều
khiển này trở nên phổ biến, Intel cho phép các hãng khác tung ra những biến thể
dựa trên 8051. Tuy nhiên chương trình nạp cho 8051 vẫn khơng thay đổi, chỉ
cần viết 1 lần nó có thể chạy trên bất kì biến thể nào của dịng 8051

Vi điều khiển 8051
Các tính năng của vi điều khiển 8051:
– 64Kb ROM – program memory
– 128byte RAM – data memory
– 4 register bank
– 128 flag – do người dùng tự define
– data bus 2 chiều, 8-bit
– address bus 1 chiều 16-bit
3



– 32 thanh ghi đa dụng 8-bit
– 2 bộ định thời 16-bit
– 3 internal và 2 external interrupt
– 4 port 8-bit
– Thanh ghi PC và DP 16-bit
– UART, ADC, ….
Sơ đồ tổng quát các khối chức năng của 8051:
Các anh em của 8051:
8052: vi điều khiển 8052 chứa tất cả đặc tính của 8051 nhưng nó bổ sung thêm
128byte RAM, 4Kb ROM và 1 bộ định thời nữa.
8031: Khơng có sẵn ROM. Để sử dụng, bạn phải tự thêm ROM cho 8031. Bên
cạnh đó, nó chỉ có 2 port 8-bit thay vì 4 port như 8051
Sau đây là bảng so sánh các thông số cơ bản của anh em nhà 8051:

1.1.2. CẤU TRÚC VI ĐIỀU KHIỂN 8051
1.1.2.1. TỔ CHỨC BỘ NHỚ
Các vi điều khiển thuộc họ 8051 đều tổ chức thành 2 khơng gian chương trình
và dữ liệu, hình 1 và hình 2 sẽ mơ tả điều này. Kiến trúc vi xử lý 8 bit của 8051
này cho phép truy nhập và tính tốn nhanh hơn đối với khơng gian dữ liệu nhờ
việc phân chia 2 không gian bộ nhớ chương trình và dữ liệu như trên. Tuy nhiên
bộ nhớ ngoài được truy nhập bởi hệ thống 16 bit địa chỉ vẫn có thể thực hiện
nhờ thanh ghi con trỏ.
Bộ nhớ chương trình (ROM, EPROM) là bộ nhớ chỉ đọc, có thể mở rộng tối
đa 64Kbyte. Với họ vi điều khiển 89xx, bộ nhớ chương trình được tích hợp sẵn
4


trong chip có kích thước nhỏ nhất là 4kByte. Với các vi điều khiển khơng tích
hợp sẵn bộ nhớ chương trình trên chip, buộc phải thiết kế bộ nhớ chương trình
bên ngồi. Ví dụ sử dụng EPROM: 2764 (64Kbyte), khi đó chân PSEN phải ở

mức tích cực (5V).

Hình 1: Cấu trúc vi điều khiển 8051
Bộ nhớ dữ liệu (RAM) tồn tại độc lập so với bộ nhớ chương trình. Họ vi điều
khiển 8051 có bộ nhớ dữ liệu tích hợp trên chip nhỏ nhất là 128byte và có thể
mở rộng với bộ nhớ dữ liệu ngoài lên tới 64kByte. Với những vi điều khiển
khơng tích hợp ROM trên chip thì vẫn có RAM trên chip là 128byte. Khi sử
dụng RAM ngồi, CPU đọc và ghi dữ liệu nhờ tín hiệu trên các chân RD và
WR. Khi sử dụng cả bộ nhớ chương trình và bộ nhớ dữ liệu bên ngồi thì buộc
phải kết hợp chân RD và PSEN bởi cổng logic AND để phân biệt tín hiệu truy
xuất dữ liệu trên ROM hay RAM ngồi.
Bộ nhớ chương trình:

5


Hình 2: Cấu trúc bộ nhớ chương trình
Bộ nhớ dữ liệu:

Hình 3: Địa chỉ ngắt trên các bộ nhớ chương trình
Hình 2 mơ tả cấu trúc bộ nhớ chương trình. Sau khi khởi động, CPU bắt đầu
thực hiện chương trình ở vị trí 0000H. Hình 3 mơ tả địa chỉ ngắt mặc định trên
bộ nhớ chương trình. Mối khi xảy ra ngắt, con trỏ của CPU sẽ nhảy đến đúng
địa chỉ ngắt tương ứng và thực thi chương trình tại đó. Ví dụ ngắt ngồi 0 sẽ có
địa chỉ là 0003H, khi xảy ra ngắt ngồi 0 thì con trỏ chương trình sẽ nhảy đến
đúng địa chỉ 0003H để thực thi chương trình tại đó. Nếu trong chương trình ứng
dụng khơng xử dụng đến ngắt ngồi 0 thì địa chỉ 0003H vẫn có thể dùng cho
mục đích khác (sử dụng cho bộ nhớ chương trình).
Bộ nhớ dữ liệu:


Hình 4: Cấu trúc bộ nhớ dữ liệu
Hình 4 mơ tả cấu trúc bộ nhớ dữ liệu trong và bộ nhớ dữ liệu ngoài của họ vi
điều khiển 8051. CPU sẽ dùng đến các chân RD và WR khi truy cập đến bộ nhớ
dữ liệu ngoài.
6


Hình 5 mơ tả cấu trúc bộ nhớ dữ liệu trong chip, được chia thành 3 khối là 128
byte thấp, 128 byte cao và 128 byte đặc biệt.

Hình 5: Cấu trúc bộ nhớ trong
Hình 6 mơ tả cấu trúc 128 byte thấp của bộ nhớ dữ liệu của họ vi điều khiển
8051. 32 byte đầu tiên (00H-1FH) được sử dụng cho 4 bộ 8 thanh ghi R0-R7.
Hai bit của thanh ghi đặc biệt PSW sẽ lựa chọn 1 trong 4 bộ thanh ghi mà vi
điều khiển sẽ dùng trong khi thực thi chương trình.

Hình 6: Cấu trúc 128 byte thấp của bộ nhớ dữ liệu trong
8051 chứa 210 vị trí bit được định địa chỉ trong đó 128 bit chứa trong các byte
ở địa chỉ từ 20H đến 2FH (16 byte x 8 bit = 128 bit) và phần còn lại chứa trong
các thanh ghi đặc biệt. Ngoài ra 8051 cịn có các port xuất/nhập có thể định địa
chỉ từng bit, điều này làm đơn giản việc giao tiếp bằng phần mềm với các thiết
bị xuất/nhập đơn bit.
7


Vùng RAM đa mục đích có 80 byte đặt ở địa chỉ từ 30H đến 7FH, bên dưới
vùng này từ địa chỉ 00H đến 2FH là vùng nhớ có thể được sử dụng tương tự.
Bất kỳ vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được truy xuất tự
do bằng cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp.
Bất kỳ vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được truy xuất

tự do bằng cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp.
Cũng như các thanh ghi từ R0 đến R7, ta có 21 thanh ghi chức năng đặc biệt
SFR chiếm phần trên của Ram nội từ địa chỉ 80H đến FFH. Cần lưu ý là không
phải tất cả 128 địa chỉ từ 80H đến FFH đều được định nghĩa mà chỉ có 21 địa
chỉ được định nghĩa.

Hình 7: 128 byte cao của bộ nhớ dữ liệu
1.1.2.2. CÁC THANH GHI ĐẶC BIỆT

8


Hình 8: Các thanh ghi đặc biệt
Thanh ghi chính:
Thanh ghi tính tốn chính của vi điều khiển 8051 ACC (Accumulator). Là
thanh ghi đặc biệt của 8051 dùng để thực hiện các phép tốn của CPU, thường
kí hiệu là A.
Thanh ghi phụ:
Thanh ghi tính tốn phụ của vi điều khiển 8051 là B. Thanh ghi B ở địa chỉ
F0H được dùng chung với thanh chứa A trong các phép toán nhân, chia. Lệnh
MUL AB nhân 2 số 8 bit không dấu chứa trong A và B và chứa kết quả 16 bit
vào cặp thanh ghi B, A (thanh chứa A cất byte thấp và thanh ghi B cất byte cao).
Lệnh chia DIV AB chia A bởi B, thương số cất trong thanh chứa A và dư số
cất trong thanh ghi B. Thanh ghi B còn được xử lý như một thanh ghi nháp. Các
bit được định địa chỉ của thanh ghi B có địa chỉ từ F0H đến F7H.
Thanh ghi trạng thái chương trình (PSW):
Thanh ghi trạng thái chương trình PSW (địa chỉ: D0H) là thanh ghi mơ tả tồn
bộ trạng thái chương trình đang hoạt động của hệ thống. Bảng 7 và Bảng 8 sẽ
mô tả thanh ghi này.
9



7
CY

6
AC

5
4
3
2
1
F0
RS1
RS0
OV
Bảng 7: Thanh ghi trạng thái chương trình PSW

0
P

Bit

Ký Hiệu

Địa Chỉ

Mơ tả Bit


PSW.7

CY

D7H

Cờ nhớ (Carry Flag): được Set nếu
có Bit nhớ từ Bit 7 trong phép cộng
hoặc có Bit mượn cho Bit 7 trong
phép trừ.

PSW.6

AC

D6H

Cờ nhớ phụ: được Set trong phép
cộng nếu có Bit nhớ từ Bit 3 sang
Bit 4 hoặc kết quả trong 4 Bit thấp
nằm trong khoảng 0AH->0FH.

PSW.5

FO

D5H

Cờ O: dành cho người sử dụng.


PSW.4

RS1

D4H

Chọn dãy thanh ghi (Bit 1)

PSW.3

RS0

D3H

Chọn dãy thanh ghi (Bit 0)
00=Bank 0: Địa chỉ 00H->07H
01=Bank 1: Địa chỉ 08H->0FH
10=Bank 2: Địa chỉ 10H->17H
11=Bank 3: Địa chỉ 18H->1FH

PSW.2

OV

D2H

Cờ tràn (Overflow Flag): được Set
khi phép tốn có dấu có kết quả >
+127 hoặc < -128.


PSW.1

-

D1H

Chưa dùng

PSW.0

P

D0H

Cờ kiểm tra chẵn lẻ: được Set
hoặc Clear bởi phần cứng sau mỗi
1 chu kỳ lệnh, để chỉ ra rằng có 1
số chẵn hoặc số lẻ Bit 1 trong thanh
chứa.

10


Bảng 8: Chi tiết các bit trong thanh ghi PSW
Thanh ghi ngăn xếp (Stack Pointer):
Con trỏ stack SP (stack pointer) là 1 thanh ghi 8 bit ở địa chỉ 81H. SP chứa địa
chỉ của dữ liệu hiện đang ở đỉnh của stack. Các lệnh liên quan đến satck bao
gồm lệnh cất dữ liệu vào stack và lệnh lấy dữ liệu ra khỏi stack. Việc cất vào
stack làm tăng SP trước khi ghi dữ liệu và việc lấy dữ liệu ra khỏi stack sẽ giảm
SP. Vùng stack của 8051 được giữ trong RAM nội và được giới hạn đến các địa

chỉ truy xuất được bởi kiểu định địa chỉ gián tiếp. Các lệnh PUSH và POP sẽ cất
dữ liệu vào stack và lấy dữ liệu từ stack, các lệnh gọi chương trình con
(ACALL, LCALL) và lệnh trở về (RET, RETI) cũng cất và phục hồi nội dung
của bộ đếm chương trình PC (Program counter)
Con trỏ dữ liệu DPTR:
Con trỏ dữ liệu DPTR (data pointer) được dùng để truy xuất bộ nhớ chương
trình ngồi hoặc bộ nhớ dữ liệu ngồi. DPTR là một thanh ghi 16 bit có địa chỉ
là 82H (DPL, byte thấp) và 83H (DPH, byte cao).
Thanh ghi các cổng P0-P3:
Các port xuất/nhập của 8051 bao gồm Port 0 tại địa chỉ 80H, Port 1 tại địa chỉ
90H, Port 2 tại địa chỉ A0H và Port 3 tại địa chỉ B0H. Tất cả các port đều được
định địa chỉ từng bit nhằm cung cấp các khả năng giao tiếp mạnh.
Thanh ghi bộ đệm truyền thông nối tiếp (Serial Data Buffer):
Bộ đệm truyền thông được chia thành hai bộ đệm, bộ đệm truyền dữ liệu và bộ
đệm nhận dữ liệu. Khi dữ liệu được chuyển vào thanh ghi SBUF, dữ liệu sẽ
được chuyển vào bộ đệm truyền dữ liệu và sẽ được lưu giữ ở đó cho đến khi q
trình truyền dữ liệu qua truyền thông nối tiếp kết thúc. Khi thực hiện việc
chuyển dữ liệu từ SBUF ra ngoài, dữ liệu sẽ được lấy từ bộ đệm nhận dữ liệu
của truyền thông nối tiếp.
Thanh ghi của bộ định thời/bộ đếm:
8051 có 2 bộ đếm/định thời (counter/timer) 16 bit để định các khoảng thời
gian hoặc để đếm các sự kiện. Các cặp thanh ghi (TH0, TL0) và (TH1, TL1) là
các thanh ghi của bộ đếm thời gian. Bộ định thời 0 có địa chỉ 8AH (TL0, byte
thấp) và 8CH (TH0, byte cao). Bộ định thời 1 có địa chỉ 8BH (TL1, byte thấp)
và 8DH (TH1, byte cao).
Hoạt động của bộ định thời được thiết lập bởi thanh ghi chế độ định thời
TMOD (Timer Mode Register) ở địa chỉ 88H. Chỉ có TCON được định địa chỉ
từng bit.
Các thanh ghi điều khiển:
11



Các thanh ghi điều khiển đặc biệt như IP, IE, TMOD, TCON, SCON và PCON
là các thanh ghi điều khiển và ghi nhận trạng thái của hệ thống ngắt, bộ
đếm/định thời, truyền thông nối tiếp. Chi tiết của các thanh ghi này sẽ được mô
tả sau.
1.1.2.3. SƠ ĐỒ CHÂN

Hinh 9: Sơ đồ chân 8051

Chức năng các chân chip:
+ Port 0(từ chân 32-39) kí hiệu P0.0-P0.7: làm nhiệm vụ xuất /nhập, khi dùng
port 0 phải dùng thêm các điện trở kéo lên (pull up), giá trị của điện trở phụ
thuộc vào thành phần kết nối với Port.khi dùng làm ngõ ra thì port 0 có thể kéo
được 8 ngõ TTL. Khi dùng là ngõ vào port 0 phải được set mức logic 1 trước
đó. Với các thiết kế lớn hơncó bộ nhớ ngồi thì port 0 trở thành bit địa chỉ và bit
dữ liệu đa hợp
+ Port 1(từ chân 1-8) kí hiệu P1.0-P1.7: dùng xuất /nhập, giao tiếp với thiết bị
bên ngoài.
12


+ Port 2(từ chân 21-28) kí hiệu P2.0-P2.7: làm nhiệm vụ xuất nhập có khả
năng kéo được 4 ngõ TTL hoặc là byte địa chỉ cao nhất của bus địa chỉ 16 bit
cho các thiết kế có bộ nhớ chương tình ngồi hoặc các thiết kế có nhiều hơn
256byte bộ nhớ dữ liệu. Khi dùng làm ngõ vào Port 2 phải được set mức logic 1
trước đó.
+ Port 3 (từ chân 10-17) kí hiệu P3.0-P3.7: có thể kéo được 4 ngõ TTL. Khi
dùng là ngõ vào port 3 phải được set mức logic 1 trước đó. Khi khơng hoạt động
xuất /nhập, các chân có chức năng riêng.


+ 0 được sử dụng làm bus địa chỉ /dữ liệu đa hợp, chân ALE xuất tín hiệu để
chốt địa chỉ (byte thấp của địa chỉ 16 bit) vào 1 thanh ghi ngoài trong suốt ½
đàu hua chu kỳ bộ nhớ memory cycle). Sau khi điều này đã được thực hiện các
chân của port 0sex xuất /nhập dữ liệu hợp hệ trong suốt ½ thứu hai của chu kỳ
bộ nhớ. Tín hiệu ALE Có tần số bằng 1/6 tần số của mạch dao động bên trong
chip vi điều khiển
+ PSEN (Program store enable): là tín hiệu suất trên chân 29. đây là tín hiệu
điều khiển cho phép ta truy xuát bộ nhớ chương trình ngoài. Chân này thường
nối với chân cho phép xuất /OE (Output enable) của EPROM hoặc ROM để cho
phép các đọc byte lệnh. Tín hiệu /PSEN ở mức logic 0 trong suốt thời gian tìm
nạp lệnh. Các mã nhị phân của chương trình hay Opcode được đọc từ EPROM
qua bus dữ liệu và được chốt vào thanh ghi lệnh IR của 8051để được giải mã.
Khi thực hiện 1 chương trình chư sở ROM nội, chân /PSER được duy trì ở mức
logic khơng tích cực (logic 1).
+ ALE (address latch enable): dùng để giải đa hợp (demultiplexing) bus dữ
liệu và bus địa chỉ.
+ EA: ngõ vào EA có thể được nối với 5V (logic 1) hoặc với GND (logic 0).
Nếu chân này nối lên 5v chip 8051 thực thi chương trình trong ROM nội. Nếu
13


chân này được nối với GND (và chân /PSEN cũng ở logic) thì chương trình cần
được thực thi chứa ở bộ nhớ ngoài.
+ RESET(RST): ngõ vào RST là ngõ vào xóa chính (master reset) của 8051
dùng để thiết lập lại trạng thái ban đầu cho hệ thống hay gọi tất cả là reset hệ
thống. Khi ngõ vào này được treo ở mức logic 1 tối thiểu 2 chu kỳ máy, các
thanh ghi bên trong của 8051 được nạp lại các giá trị thích hợp cho việc khởi
động lại hệ thống.
1.2: TỔNG QUAN VỀ LCD

1.2.1. GIỚI THIỆU VỀ LCD
+ Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay
thế dần các đèn Led.
+ Text LCD là các loại màn hình tinh thể lỏng nhỏ dùng để hiển thị các dòng
chữ hoặc số trong bảng mã ASCII. Không giống các loại LCD lớn, Text LCD
được chia sẵn thành từng ơ và ứng với mỗi ơ chỉ có thể hiển thị một ký tự
ASCII. Cũng vì lý do chỉ hiện thị được ký tự ASCII nên loại LCD này được gọi
là Text LCD (để phân biệt với Graphic LCD có thể hiển thị hình ảnh). Mỗi ơ
của Text LCD bao gồm các “chấm” tinh thể lỏng, việc kết hợp “ẩn” và “hiện”
các chấm này sẽ tạo thành một ký tự cần hiển thị. Trong các Text LCD, các mẫu
ký tự được định nghĩa sẵn. Kích thước của Text LCD được định nghĩa bằng số
ký tự có thể hiển thị trên 1 dòng và tổng số dòng mà LCD có. Ví dụ LCD 16x2
là loại có 2 dịng và mỗi dịng có thể hiển thị tối đa 16 ký tự. Một số kích thước
Text LCD thơng thường gồm 16x1, 16x2, 16x4, 20x2, 20x4...
Ngày nay, thiết bị hiển thị LCD (Liquid Crystal Display) được sử dụng trong
rất nhiều các ứng dụng của VĐK. LCD có rất nhiều ưu điểm so với các dạng
hiển thị khác: Nó có khả năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí tự
đồ họa), dễ dàng đưa vào.
LCD là tên viết tắt của (Liquid Crystal Display) hay còn được biết đến cái tên
dân dã hơn là màn hình tinh thể lỏng. Có rất nhiều loại màn hình LCD khác
nhau. Với những ứng dụng nhỏ thường sử dụng loại màn hình cỡ nhỏ đơn giản
là loại LCD16x2. Các ký tự được hiển thị trên màn hình với 2 hàng, mỗi hàng
hiển thị được 16 ký tự.

14


Có thể chia các module LCD làm 2 loại chính:
+ Loại hiển thị ký tự (charater LCD) gồm có các các kích cỡ 16x1(16 kí tự x1
dịng) ;16x2(16 ký tự x2 dòng); 16x4(16 ký tự x4 dòng);20x1(20 ký tự x1 dòng)

Loại hiển thị đồ họa (graphic LCD) đen trắng hoặc màu gồm các kích cỡ 1,47
inch (128x128 điểm ảnh); 1,8inch (128x160 điểm ảnh ); 2,4 inch(240x320 điểm
ảnh).
1.2.2. SƠ ĐỒ, CHỨC NĂNG, LIÊN KẾT CÁC CHÂN CỦA LCD
Sơ đồ chân LCD:

>

Mô tả các chân, loại 16 chân.
+ VDD (chân 2): cấp nguồn dương 5v +/ VSS (chân 1): cấp nguồn âm(GND)
+ VEE (chân 3): điều khiển độ tương phản của LCD (contrast), chân này cần
được nối với 1 biến trở 10k để chia áp. Trong khi hoạt động, chỉnh để thay đổi
giá trị biến trở để đạt được độ tương phản cần thiết, sau đó giữ mức biến trở
này. Các chân điều khiển RS, R/W, EN và các đường dữ liệu được nối trực tiếp
với vi điều khiển. Tùy theo chế độ hoạt động 4bit hay 8bit mà các chân từ D0
đến D3 có thể bỏ qua hoặc nối với vi điều khiển
+ Trong một số LCD, 2 chân LED nền được đánh số 15 và 16 nhưng trong
một số trường hợp 2 chân này được ghi là A (Anode) và K (Cathode), gọi là 2
chân nguồn cho “đèn LED nền”.
15


+) Chân chọn thanh ghi RS (chân 4_Register Select)
Có hai thanh ghi rất quan trọng trong LCD, chân này cho phép lựa chọn 1 trong
2 thanh ghi IR hoặc DR để làm việc. Vì cả 2 thanh ghi này đều được kết nối với
các chân Data của LCD nên cần 1 bit để lựa chọn giữa chúng. Nếu RS=0, thanh
ghi IR được chọn, 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ư xóa màn hình và nếu RS=1 thanh ghi DR được chọn,
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. Chúng ta đều biết thanh ghi IR là thanh ghi chứa mã lệnh cho LCD, vì thế

nếu muốn gửi 1 mã lệnh đến LCD thì chân RS phải được reset về 0. Ngược lại,
khi muốn ghi mã ASCII của ký tự cần hiển thị lên LCD thì chúng ta sẽ set RS=1
để chọn thanh ghi DR. Hoạt động của chân RS được mô tả như sau :
- Thanh ghi IR: Để điều khiển LCD, người dùng phải “ra lệnh” thông qua
tám đường bus DB0-DB7. Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõ
ràng. Người dùng chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi
IR. Nghĩa là, khi ta nạp vào thanh ghi IR một chuỗi 8 bit, chip HD44780 sẽ tra
bảng mã lệnh tại địa chỉ mà IR cung cấp và thực hiện lệnh đó.
VD: Lệnh “hiển thị màn hình” có địa chỉ lệnh là 00001100 (DB7...DB0)
Lệnh “hiển thị màn hình và con trỏ” có mã lệnh là 00001110
- Thanh ghi DR: Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng
RAM DDRAM hoặc CGRAM (ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2
vùng RAM này gởi ra cho MPU (ở chế độ đọc). Nghĩa là, khi MPU ghi thông
tin vào DR, mạch nội bên trong chip sẽ tự động ghi thông tin này vào DDRAM
hoặc CGRAM. Hoặc khi thông tin về địa chỉ được ghi vào IR, dữ liệu ở địa chỉ
này trong vùng RAM nội của HD44780 sẽ được chuyển ra DR để truyền cho
MPU. Bằng cách điều khiển chân RS và R/W chúng ta có thể chuyển qua lại giữ
2 thanh ghi này khi giao tiếp. Xem bảng thiết lập đối với hai chân RS và R/W
theo mục đích giao tiếp với MPU.
+) Chân đọc/ghi R/W (chân 5)
Chân lựa chọn giữa việc đọc và ghi. Nếu R/W=0 thì dữ liệu sẽ được ghi từ bộ
điều khiển ngoài (vi điều khiển AVR chẳng hạn) vào LCD. Nếu R/W=1 thì dữ
liệu sẽ được đọc từ LCD ra ngoài. Tuy nhiên, chỉ có duy nhất 1 trường hợp mà
dữ liệu có thể đọc từ LCD ra, đó là đọc trạng thái LCD để biết LCD có đang
bận hay khơng (cờ Busy Flag - BF). Do LCD là một thiết bị hoạt động tương
đối chậm (so với vi điều khiển), vì thế một cờ BF được dùng để báo LCD đang
bận, nếu BF=1 thì chúng ta phải chờ cho LCD xử lí xong nhiệm vụ hiện tại, đến
khi nào BF=0 một thao tác mới sẽ được gán cho LCD. Vì thế, khi làm việc với
16



Text LCD chúng ta nhất thiết phải có một chương trình con tạm gọi là
wait_LCD để chờ cho đến khi LCD rảnh. Có 2 cách để viết chương trình
wait_LCD. Cách 1 là đọc bit BF về kiểm tra và chờ BF=0, cách này đòi hỏi lệnh
đọc từ LCD về bộ điều khiển ngồi, do đó chân R/W cần được nối với bộ điều
khiển ngoài. Cách 2 là viết một hàm delay một khoảng thời gian cố định nào đó
(tốt nhất là trên 1ms). Ưu điểm của cách 2 là sự đơn giản vì khơng cần đọc
LCD, do đó chân R/W không cần sử dụng và luôn được nối với GND. Tuy
nhiên, nhược điểm của cách 2 là khoảng thời gian delay cố định nếu quá lớn sẽ
làm chậm quá trình thao tác LCD, nếu quá nhỏ sẽ gây ra lỗi hiển thị. Trong bài
báo cáo này tôi xin hướng dẫn bạn cách tổng quát là cách 1, để sử dụng cách 2
bạn chỉ cần một thay đổi nhỏ trong chương trình wait_LCD (sẽ trình bày chi tiết
sau) và kết nối chân R/W của LCD xuống GND. Tóm tắt bảng chức năng sau:
RS

R/W

Khi cần

0

0

Ghi vào thanh ghi IR để ra lệnh cho LCD (VD: cần display
clear,...)

0

1


Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở DB0DB6

1

0

Ghi vào thanh ghi DR

1

1

Đọc dữ liệu từ DR


+ Chân cho phép E (chân 6_Enable)
Chân cho phép LCD hoạt động (Enable), chân này cần được kết nối với bộ điều
khiển để cho phép thao tác LCD. Để đọc và ghi data từ LCD chúng ta cần tạo
một “xung cạnh xuống” trên chân EN, nói theo cách khác, muốn ghi dữ liệu vào
LCD trước hết cần đảm bảo rằng chân EN=0, tiếp đến xuất dữ liệu đến các chân
D0^7, sau đó set chân EN lên 1 và cuối cùng là xóa EN về 0 để tạo 1 xung cạnh
xuống, nói cách khác 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 cung 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.
+ Chân D0+D7: Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên
LCD hoặc đọc nội dung của các thanh ghi trong LCD.
17



Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ
cái từ A đến Z, a đến f và các con số từ 0~9 đến các chân này khi bật RS=1
Cũng như các mã lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa
con trỏ về vị trí đầu dòng hoặc nhấp nháy con trỏ. Chúng ta cũng sử dụng RS=0
để kiểm tra bit 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 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 khì dữ liệu nào lên LCD
>
Cờ báo bận BF: (Busy Flag)
Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một khoảng
thời gian để hoàn tất. Khi đang thực thi các hoạt động bên trong chip như thế,
LCD bỏ qua mọi giao tiếp với bên ngoài và bật cờ BF (thơng qua chân DB7 khi
có thiết lập RS=0, R/W=1) lên để báo cho MPU biết nó đang “bận”. Dĩ nhiên,
khi xong việc, nó sẽ đặt cờ BF lại mức 0.
>
Bộ đếm địa chỉ AC: (Address Counter)
Như trong sơ đồ khối, thanh ghi IR không trực tiếp kết nối với vùng RAM
(DDRAM và CGRAM) mà thông qua bộ đếm địa chỉ AC. Bộ đếm này lại nối
với 2 vùng RAM theo kiểu rẽ nhánh. Khi một địa chỉ lệnh được nạp vào thanh
ghi IR, thông tin được nối trực tiếp cho 2 vùng RAM nhưng việc chọn lựa vùng
RAM tương tác đã được bao hàm trong mã lệnh.
Sau khi ghi vào (đọc từ) RAM, bộ đếm AC tự động tăng lên (giảm đi) 1 đơn vị
và nội dung của AC được xuất ra cho MPU thơng qua DB0-DB6 khi có thiết lập
RS=0 và R/W=1 (xem bảng tóm tắt RS - R/W). 
Lưu ý: Thời gian cập nhật AC khơng được tính vào thời gian thực thi lệnh mà
được cập nhật sau khi cờ BF lên mức cao (not busy), cho nên khi lập trình hiển
thị, bạn phải delay một khoảng tADD khoảng 4uS-5uS (ngay sau khi BF=1)
trước khi nạp dữ liệu mới.


18


Tóm tắt các lệnh có thể ghi vào LCD
Danh sách lệnh trên được tô 2 màu khác nhau, các lệnh màu đỏ sẽ được dùng
thường xuyên trong lúc hiển thị LCD và các lệnh màu xanh thường chỉ được
dùng 1 lần trong lúc khởi động LCD, riêng lệnh Read BF có thể được dùng hoặc
khơng tùy theo cách viết chương trình wait_LCD. Phần tiếp theo giải thích ý
nghĩa của các lệnh và tham số kèm theo chúng.
+ Trước khi tìm hiểu tập lệnh của LCD, sau đây là một vài chú ý khi giao tiếp
với LCD:
* Tuy trong sơ đồ khối của LCD có nhiều khối khác nhau, nhưng khi lập trình
điều khiển LCD ta chỉ có thể tác động trực tiếp được vào 2 thanh ghi DR và IR
thông qua các chân DBx, và ta phải thiết lập chân RS, R/W phù hợp để chuyển
qua lại giữ 2 thanh ghi này. (xem bảng giới thiệu 2 thanh ghi này)
* Với mỗi lệnh, LCD cần một khoảng thời gian để hồn tất, thời gian này có thể
khá lâu đối với tốc độ của
MPU, nên ta cần kiểm tra cờ BF hoặc đợi (delay) cho LCD thực thi xong lệnh
hiện hành mới có thể ra lệnh tiếp theo. 
 Địa chỉ của RAM (AC) sẽ tự động tăng (giảm) 1 đơn vị, mỗi khi có
lệnh ghi vào RAM. (Điều này giúp
chương trình gọn hơn)
 Các lệnh của LCD có thể chia thành 4 nhóm như sau:

Các lệnh về kiểu hiển thị. VD: Kiểu hiển thị (1 hàng / 2 hàng), chiều dài
dữ liệu (8 bit / 4 bit), ...

Chỉ định địa chỉ RAM nội.


Nhóm lệnh truyền dữ liệu trong RAM nội.

Các lệnh còn lại. (!!!)

19


***Trước hết là nhóm lệnh đỏ:
+ Clear display - xóa LCD: lệnh này xóa tồn bộ nội dung DDRAM và vì thế
xóa tồn bộ hiển thị trên LCD. Vì đây là 1 lệnh ghi Instruction nên chân RS
phải được reset về 0 trước khi ghi lệnh này lên LCD. Mã lệnh xóa LCD là
0x01(ghi vào D0:D7).
Mã lệnh: DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 0 0 0 0 0
1
Lệnh Clear Display (xóa hiển thị) sẽ ghi một khoảng trống-blank (mã hiển thị kí
tự 20H) vào tất cả ơ nhớ trong DDRAM, sau đó trả bộ đếm địa AC=0, trả lại
kiểu hiện thị gốc nếu nó bị thay đổi. Nghĩa là: Tắt hiển thị, con trỏ dời về góc
trái (hàng đầu tiên), chế độ tăng AC
+ Cursor home - đưa con trỏ về vị trí đầu, dịng 1 của LCD: lệnh này thực hiện
việc đưa con trỏ về vị trí đầu tiên của bộ nhớ DDRAM, vì thế nếu sau lệnh này
một biến được ghi vào DDRAM thì biến này sẽ nằm ở vị trí đầu tiên (1;1). RS
cũng phải bằng 0 trước khi ghi lệnh. Mã lệnh là 0x02 hoặc 0x03(chọn 1 trong 2
mã lệnh, tùy ý).
+ Set DDRAM address (texe(max)=37uS): Mã lệnh: DBx = DB7 DB6 DB5
DB4 DB3 DB2 DB1 DB0. DBx = 1 [AD] [AD] [AD] [AD] [AD] [AD] [AD]
Lệnh này ghi vào AC địa chỉ của DDRAM, dùng khi cần thiết lập tọa độ hiển
thị mong muốn. Ngay sau lệnh này là lệnh đọc/ghi dữ liệu từ DDRAM tại địa
chỉ đã
được chỉ định. Khi ở chế độ hiển thị 1 hàng: địa chỉ có thể từ 00H đến 4FH. Khi
ở chế độ hiển thị 2 hàng, địa chỉ từ 00h đến 27H cho hàng thứ nhất, và từ 40h

đến 67h cho hàng thứ 2. Định vị trí con trỏ cho DDRAM: di chuyển con trỏ đến
một vị trí tùy ý trong DDRAM và vì thế có thể được dùng để chọn vị trí cần
hiển thị trên LCD. Để thực hiện lệnh này cần reset RS=0. Bit MSB của mã lệnh
(D7) phải bằng 1, 7 bit còn lại của mã lệnh chính là địa chỉ DDRAM muốn di
chuyển đến. Ví dụ chúng ta muốn di chuyển con trỏ đến vị trí thứ 3 trên dòng 2
của LCD (địa chỉ 42) chúng ta cần ghi mã lệnh 0xAA vì 0xAA=10101010
(binary) trong đó bit MSB bằng 1, bảy bit còn lại là 0101010=42, địa chỉ của ô
nhớ muốn đến.
+ Read BF fand address (texe(max)=0uS): Mã lệnh: DBx = DB7 DB6 DB5
DB4 DB3 DB2 DB1 DB0. DBx = [BF] [AC] [AC] [AC] [AC] [AC] [AC] [AC]
20


(RS=0, R/W=1). Như đã đề cập trước đây, khi cờ BF bật, LCD đang làm việc và
lệnh tiếp theo (nếu có) sẽ bị bỏ qua nếu cờ BF chưa về mức thấp. Cho nên, khi
lập trình điều khiển, bạn phải kiểm tra cờ BF trước khi ghi dữ liệu vào LCD.
Khi đọc cờ BF, giá trị của AC cũng được xuất ra các bit [AC]. Nó là địa chỉ của
CG hay DDRAM là tùy thuộc vào lệnh trước đó.
+ Write to CGRAM or DDRAM (texe(max)=37uS, tadd=4uS): Mã lệnh: DBx
= DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0. DBx = [Write data] (RS=1,
R/W=0). Khi thiết lập RS=1, R/W=0, dữ liệu cần ghi được đưa vào các chân
DBx từ mạch ngoài sẽ được LCD chuyển vào trong LCD tại địa chỉ được xác
định từ lệnh ghi địa chỉ trước đó (lệnh ghi địa chỉ cũng xác định luôn vùng
RAM cần ghi). Sau khi ghi, bộ đếm địa chỉ AC tự động tăng/giảm 1 tùy theo
thiết lập Entry mode.
Lưu ý là thời gian cập nhật AC khơng tính vào thời gian thực thi lệnh. Ghi dữ
liệu vào CGRAM hoặc DDRAM: vì đây khơng phải là lệnh ghi instruction mà
là 1 lệnh ghi dữ liệu nên chân RS cần được set lên 1 trước khi ghi lệnh vào
LCD. Lệnh này cho phép ghi mã ASCII của một ký tự cần hiển thị vào thanh
ghi DDRAM. Trường hợp ghi vào CGRAM không được khảo sát.

*** Kế đến là nhóm lệnh màu xanh : nhóm lệnh này thường chỉ thực hiện 1
lần (ít nhất là trong bài học này) và thường được viết chung trong 1 chương
trình con khởi
động LCD (chúng ta gọi là init_LCD trong bài học này).
+ Entry mode set(texe(max)=37uS): Mã lệnh: DBx = DB7 DB6 DB5 DB4
DB3 DB2 DB1 DB0. DBx = 0 0 0 0 0 1 [I/D] [S]. Xác lập các hiện thị liên tiếp
cho LCD: nói một cách dễ hiểu, lệnh này chỉ ra cách mà bạn muốn hiển thị một
ký tự tiếp theo 1 ký tự trước đó. Ví dụ nếu bạn muốn hiện thị 2 ký tự liên tiếp
AB, trước hết bạn viết A tại vị trí 5, dịng 1. Sau đó bạn ghi B vào LCD, lúc này
có 4 cách mà LCD có thể hiển thị B như sau: hiển thị B bên phải A tại vị trí số 6
(cách 1); B cũng có thể được hiển thị bên trái A, tại vị trí số 4 (cách 2); hoặc
LCD có thể tự dịch chuyển A về bên trái đến vị trí 4 sau đó hiển thị B bên phải
A, tại vị trí 5(cách 3); và khả năng cuối cùng là LCD dịch chuyển A về bên phải
đến vị trí 6 sau đó hiển thị B bên trái A, tại vị trí 5 (cách 4). Chúng ta có thể
chọn 1 trong 4 cách hiển thị trên thông qua lệnh Entry mode set. Đây là lệnh ghi
Instruction nên RS=0, 5 bit cao D7:3=00000, bit D2=1, hai bit còn lại D1:0
chứa mã lệnh để lựa chọn 1 trong 4 cách hiển thị. Xem lại bảng 2, bit D1 chứa
21


giá trị I/D và D0 chứa S. Trong đó I/D nghĩa là tăng hoặc giảm (Increment or
Decrement). I/D= 1 là hiển thị tăng tức ký tự sau sẽ hiển thị bên phải ký tự
trước, nếu I/D=0 thì hiển thị giảm, tức ký tự sau hiển thị bên trái ký tự trước. S
là giá trị Shift, nếu S=1 thì các ký tự trước đó sẽ được “đẩy” đi, ký tự sau chiếm
chỗ ký tự trước, ngược lại nếu S=0 thì vị trí hiển thị của các ký tự trước đó
khơng thay đổi. Có thể tóm tắt 4 mode hiển thị ứng với 4 mã lệnh như sau:
+ D7:0 = 0x04 (00000100): hiển thị giảm và khơng shift (cách 2 trong ví dụ)
+ D7:0 = 0x05 (00000101): hiển thị giảm và shift (cách 4 trong ví dụ)
+ D7:0 = 0x06 (00000110): hiển thị tăng và khơng shift (cách 1, khuyến khích)
+ D7:0 = 0x07 (00000111): hiển thị tăng và shift (cách 3 trong ví dụ)

Display
position
DDRAM
address
For
shift left
For
shift right

1

2

3

4

5

6

7

8

00
40
01
41
27

67

01
41
02
42
00
40

02
42
03
43
01
41

03
43
04
44
02
42

04
44
05
45
03
43


05
45
06
46
04
44

06
46
07
47
05
45

07
47
08
48
06
46

+ Display on/off control (texe(max)=37uS): Mã lệnh: DBx = DB7 DB6 DB5
DB4 DB3 DB2 DB1 DB0. DBx = 0 0 0 0 1 [D] [C] [B]
D: Hiển thị màn hình khi D=1 và ngược lại. Khi tắt hiển thị, nội dung DDRAM
không thay đổi.
C: Hiển thị con trỏ khi C=1 và ngược lại. Vị trí và hình dạng con trỏ, xem hình
8 B: Nhấp nháy kí tự tại vị trí con trỏ khi B=1 và ngược lại. Chu kì nhấp nháy
khoảng 409,6ms khi mạch dao động nội LCD là 250kHz.
Xác lập cách hiện thị cho LCD: lệnh này bao gồm các thông số cho phép LCD
hiển thị, cho phép hiển thị cursor và mở/tắt blinking. Đây cũng là một lệnh ghi

Instrcution nên RS phải bằng 0. Mã lệnh cho lệnh này có dạng 00001DCB trong
đó D (Display) cho phép hiển thị LCD nếu mang giá trị 1, C (Cursor) bằng 1 thì
cursor sẽ được hiển thị và B là blinking cho cursor tại vị trí hiển thị (blinking là
dạng 1 ô đen nhấp nháy tại vị trí ký tự đang hiển thị). Mã lệnh được dùng phổ
biến cho lệnh này là 0x0E (00001110 - hiển thị cursor nhưng không hiển thị
blinking).

22


+ Function set (texe(max)=37uS): Mã lệnh: DBx = DB7 DB6 DB5 DB4 DB3
DB2 DB1 DB0. DBx = 0 0 1 [DL] [N] [F] * *
Xác lập chức năng cho LCD: đây là lệnh thiết lập phương thức giao tiếp với
LCD, kích thước font chữ và số lượng line của LCD. RS cũng phải bằng 0 khi
sử dụng lệnh này. Mã lệnh function set có dạng 001D—LNFxx. Trong đó nếu
DL=1 (DL: Data Length) thì mode giao tiếp 8 bit sẽ được dùng, lúc này tất cả
các chân từ D0 đến D7 phải được kết nối với bộ điều khiển ngoài. Nếu DL=0
thì mode 4 bit được dùng, trong trường hợp này chỉ có 4 chân D4:7 được dùng
để truyền nhận dữ liệu và kết nối với bộ điều khiển ngoài, các chân D0:3 được
để trống. N quy định số dòng của LCD, vì chúng ta đang khảo sát LCD loại
hiển thị 2 dòng nên N=1 (N=0 cho trường hợp LCD 1 dịng). F là kích thước
font chữ hiển thị, do LCD có 2 bộ font chữ có sẵn trong CGROM nên chúng ta
cần lựa chọn thông qua bit F, nếu F=1 bộ font 5x10 được sử dụng và nếu F=0
thì font 5x8 được hiển thị. 2 bit thấp trong mã lệnh này có thể được gán giá trị
tùy ý. Mã lệnh được dùng phổ biến cho lệnh function set là 0x38 (00111000 giao tiếp 8 bit, 2 dòng với font 5x8) hoặc 0x28 (00101000 - giao tiếp 4 bit, 2
dòng với font 5x8).
 Chú ý:

Chỉ thực hiện thay đổi Function set ở đầu chương trình. Và sau khi
được thực thi 1 lần, lệnh thay đổi Function set không được LCD chấp nhận

nữa ngoại
trừ thiết lập chuyển đổi giao thức giao tiếp.

Khơng thể hiển thị kiểu kí tự 5x10 điểm ảnh ở kiểu hiển thị 2 hàng
>
Giao tiếp 8 bit và 4 bit
Như trình bày trong lệnh function set, có 2 mode để ghi và đọc dữ liệu vào
LCD đó là mode 8 bit và mode 4 bit:
- Mode 8 bit: Nếu bit DL trong lệnh function set bằng 1 thì mode 8 bit được
dùng. Để sử dụng mode 8 bit, tất cả các lines dữ liệu của LCD từ D0 đến D7 (từ
chân 7 đến chân 14) phải được nối với 1 PORT của chip điều khiển bên ngồi
(ví dụ PORTC của ATmega32 trong ví dụ của bài này) như trong hình 3. Ưu
23


điểm của phương pháp giao tiếp này là dữ liệu được ghi và đọc rất nhanh và đơn
giản vì chip điều khiển chỉ cần xuất hoặc nhận dữ liệu trên 1 PORT. Tuy nhiên,
phương pháp này có nhược điểm là tổng số chân dành cho giao tiếp LCD quá
nhiều, nếu tính ln cả 3 chân điều khiển thì cần đến 11 đường cho giao tiếp
LCD.
-Mode 4 bit: LCD cho phép giao tiếp với bộ điều khiển ngoài theo chế độ 4
bit. Trong chế độ này, các chân D0, D1, D2 và D3 của LCD không được sử
dụng (để trống), chỉ có 4 chân từ D4 đến D7 được kết nối với chip bộ điều khiển
ngoài. Các instruction và data 8 bit sẽ được ghi và đọc bằng cách chia thành 2
phần, gọi là các Nibbles, mỗi nibble gồm 4 bit và được giao tiếp thông qua 4
chân D7:4, nibble cao được xử lí trước và nibble thấp sau. Ưu điểm lớn nhất của
phương pháp này tối thiểu số lines dùng cho giao tiếp LCD. Tuy nhiên, việc đọc
và ghi từng nibble tương đối khó khăn hơn đọc và ghi dữ liệu 8 bit. Trong bài
học này, tơi sẽ trình bày 2 chương trình con được viết riêng để ghi và đọc các
nibbles gọi là Read2Nib và Write2Nib.

Chân
1

Kí hiệu
VSS

2

VCC

3

VEE

-

4

RS

I

5

R/W

6

E


I/O
-

I
I/O

Mơ tả
Đất
Chân cấp nguồn cho LCD, khi thiết kế
mạch ta nối chân này với VCC= 5V của
mạch điều khiển
Cấp nguồn điều khiển độ tương phản
Chân chọn thanh ghi (Register select). Nối
chân RS với logic “0” (GND) hoặc logic
“1” (VCC) để chọn thanh ghi.
+ Logic “0”: Bus DB0-DB7 sẽ nối với
thanh ghi lệnh IR của LCD (ở chê độ “ghi”
- write) hoặc nối với bộ đếm địa chỉ của
LCD (ở chê độ “đọc” - read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh
ghi dữ liệu DR bên trong LCD
Chân chọn chê độ đọc/ghi (Read/Write).
Nối chân R/W với logic “0” để LCD hoạt
động ở chê độ ghi, hoặc nối với logic “1” để
LCD ở chê độ đọc
Chân cho phép (Enable). Sau khi các tín
hiệu được đặt lên bus DB0-DB7, các lệnh
chỉ được chấp nhận khi có 1 xung cho phép
của chân E.
24



×