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

GIÁO TRÌNH LCD (Liquid Crystal Display)

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 (454.65 KB, 26 trang )

Ch¬ng 4
Giới thiệu về thiết bị hiển thị (LCD),cách
ghép nối vi vi x lý (Hunghe`o)
Màn hình tinh thể lỏng
LCD (liquid Crystal Display)

I/ KiÕn thøc chung vỊ LCD (Liquid Crystals Display).
1.Mµn hình tinh thể lỏng (LCD) là gì và phạm vi ứng dụng?
_ Ngày nay trong lĩnh vực thông tin và giải trí, việc dùng màn hình ống
tia ca tốt truyền thống (CRT) đang dần đợc thay thế bằng việc sử dụng
màn hình tinh thể lỏng (LCD). Vì LCD có nhiều u điểm vợt trội nh : Độ
dày màn hình nhỏ hơn rất nhiều , Kích thớc đa dạng từ loại màn hình nhỏ
tới màn hình cực lớn, Tiêu thụ ít năng lợng và không nguy hiểm bằng CRT.

LCD dùng trong thông tin giải trí
(Màn hình Tivi, máy vi tính)

LCD dùng trong lĩnh vực điều khiển

LCD dùng trong truyền thông
(Màn hình điện thoại, hiển thị của hệ thống
chuyên dụng)

ở phần này chúng ta chỉ xét tới LCD loại nhỏ và việc dùng LCD để
hiển thị của hệ thống chuyên dụng.

1


2. Cơ sở vật lý của LCD.
_ Đúng nh tên gọi của nó, LCD (Liquid Crystals Display ) - Màn


hình tinh thể lỏng - , cơ sở vật lý để LCD có thể hiển thị đợc thông tin ,
hình ảnh chính là do đặc tính của vật liệu chế tạo nên LCD, tức là Liquid
Crystals (thạch anh lỏng).
_ Đặc tính cđa Liquid Crystals :
Thø nhÊt:
Liquid Crystals lµ vËt liƯu trong suốt vừa có tính chất của chấ rắn,lại vừa
có tính chất của chất lỏng (chính điệu này đà lam nên sù kh¸c biƯt):
+ ¸nh s¸ng trun qua Liquid Crystals theo góc nghiêng của các phân
tử , và ánh sáng bị phản xạ trở lại. Đây chính là tính chất của chất rắn.
+ Khi Liquid Crystals đợc tích điện, nó sẽ bị thay đổi góc nghiêng của
các phần tử, và kết quả là ánh sáng có thể truyền xuyên qua. Đây chÝnh lµ
tÝnh chÊt cđa chÊt láng.
Thø hai :
LCD gåm 2 bề mặt dạng rÃnh , giữa 2 bề mặt này là 1 lớp Thạch Anh
lỏng (Liquid Crystal).
Trớc hết nói về đặc tính 2 bề mặt rÃnh : trên mõi bề mặt có các rÃnh . Các
rÃnh trên 1 mặt song song với nhau và vuông góc với các rÃnh trên mặt còn
lại (theo hớng bắc-nam/ tây-đông).
Bây giờ nói về đặc tính của lớp Liquid Cristal (ở giữa) : ánh sáng truyền
qua lớp này theo góc của các phần tử, và vì thế ánh sáng bị xoắn 90 độ khi
xuyên qua lớp Liquid Cristal này. Nhng khi phân cực cho lớp Liquid
Cristal, các phân tử đợc sắp xếp lại theo phơng ngang, và vì thế mà ánh
sáng có thể truyền qua lớp Liquid Cristal mà không bị xoắn. (Hình 2)
Thứ ba :
Về tính chất của lớp lọc ánh sáng đơn cực. Chúng ta đều biết rằng ánh
sáng là sóng truyền theo nhiều phơng khác nhau. Lớp lọc đơn cực thực ra
chỉ là tập hợp các đờng thẳng trong suốt song song Chính là 2 bề mặt
rÃnh của LCD đà nói ở trên-. Sau khi đi qua lớp lọc đơn cực, ánh sáng chỉ
còn thành phần sóng có phơng trùng với phơng các đờng thẳng trên lớp lọc
cực. LCD có 2 lớp lọc đơn cực có phơng lọc vuông góc nhau. Vì vậy, sau

khi ra khỏi cả 2 lớp lọc đơn cực ánh sáng bị chặn lại hoàn toàn. ánh sáng
chỉ có thể truyền qua cả 2 lớp lọc đơn cực nếu sau khi qua lớp lọc thứ nhất
ánh sáng đợc xoắn 1 góc 90 độ rồi mới đi qua lớp lọc thứ 2. Thật may, việc
xoắn ánh sáng hoàn toàn có thể thực hiện đợc theo tính chất lớp Liquid
Cristal ®· nãi ë trªn.
Cã thĨ tỉng kÕt ®êng ®i cđa ánh sáng nh sau:
Để có 1 điểm tối trên LCD: ánh sáng phát ra từ bên trong LCD sẽ đi
qua bề mặt rÃnh thứ nhất (lớp lọc đơn cực), sau đó ánh sáng đi qua lớp
Liquid Cristal (lớp này đợc phân cực nên ánh sáng qua nó mà không bị
xoắn), sau đó ánh sáng qua bề mặt rÃnh thứ 2lớp phân cực thứ 2 (lớp lọc
đơn cực), ánh sáng không ló ra đợc khỏi lớp này(bị chặn lại hoàn toàn)
ta thấy 1 điểm tối trên màn hình LCD. (Hình 3)
Để có 1 điểm sáng trên LCD: quá trình đi tơng tự nhng khác ở chỗ ánh
sáng qua lớp Liquid Cristal không đợc phân cực nên ánh sáng bị xo¾n 90

2


độ, nhờ thế mà đi qua đợc bề mặt rÃnh thứ 2 (lớp lọc đơn cực) Ta thấy 1
điểm sáng trên LCD. (Hình 3)

Hình 2

Hình 3

3


II/ Xét LCD cụ thể Hitachi HD44780


LCD hiển thị đợc 2 hàng mỗi hàng hiển thị đợc 16 ký tự (LCD có 14 chân)
nh đợc minh hoạ trên hình.
Thông số cđa LCD :
+KÝch thíc hiĨn thÞ : 16 ký tù x 2 dòng.
+Màu hiển thị: đen/trắng
+Chế độ giao tiếp : 8 bít và 4 bít
+Cỡ chữ hiển thị : 5x7 hoặc 5x10
1. Cấu trúc của LCD
1a. Giới thiệu sơ đồ ch©n LCD .

_ LCD cã tỉng sè 14 ch©n chia làm 3 nhóm:
Nhóm 1: (3 chân) Cấp nguồn VDD, VSS : cấp 5V, 0V
VEE: thay đổi điện áp để thay đổi độ tơng phản
Nhóm 2: (8 chân) Vào ra thông tin với VĐK : Từ chân D0-D7
Nhóm 3 : (3 chân) Điều khiển việc vào ra thông tin : E,RS,R/W
E :(bật /tắt ) (cho phép/ không cho phép trao đổi thông tin với VĐK )
RS :(loại thông tin trao đổi)Thông tin trao đổi là lệnh điều khiển hay à
dữ liệu để hiển thị
R/W : (hớng truyền của thông tin) đọc trạng thái từ LCD hay thông
tin do VĐK gửi vào LCD để hiển thị

Cụ thể tên gọi và mô tả chức năng các chân đợc tổng kết trong bảng sau:

4


Interface Pin Connections
Chân Ký
Tên
số

hiệu
Cấp nguồn
1
VSS
Cấp nguồn
2
VDD
3

VEE

Contrast

4

RS

Chọn thanh ghi

5

RW

Read/Write

6

E

Read Write enable


7

0V (GND)

Nối với dơng nguồn (+4.5V~+5.5V)

điều chỉnh điện áp chân này sẽ tăng giảm độ tơng phản
của LCD. cho nên nó thờng đợc nối với biến trở.
Nếu RS=0 : LCD nhận lệnh từ VĐK
Nếu RS=1: LCD nhận dữ liệu từ VĐK để hiển thị
Chọn chức năng ghi/ đọc
RS=1 : chọn chức năng đọc dữ liệu từ LCD vào VĐK
RS=0 : chọn chức năng ghi dữ liệu từ VĐKvào LCD để
hiểnt thị
Cho phép/ ko cho phép LCD trao đổi thông tin với VĐK.
Chỉ khi E chuyển từ 10 thì tín hiệu ở các chân D0-D7
mới đợc đa vào LCD.

D0

8

Mô tả chức năng

D1

9

D2


10

D3

11

D4

12

D5

13

D6

14

D7

Data bus 0-7

8 chân này đợc nối với
VĐK để vào/ra thông tin

_ Từ những đặc điểm và chức năng đà đợc đề cập ở trên ta có thể đi tới
việc hình thành việc ghép nối của LCD với vi điều khiển nh sau:

5



Nh trên hình minh hoạ ta có thể thấy các chân D0-D3 là đờng tín hiệu 2
chiều (để trao đổi thông tin Vi điều khiển và LCD). 3 chân điều khiển RS,
R/W, E là chân đa tín hiệu điều khiển từ Vi điều khiển tới LCD nên nó chỉ
là đờng tín hiệu 1 chiều thôi.

Vì chân Contrast (VEE) điều chỉnh độ tơng
phản của LCD nên ta cấp nguồn cho nó
thông qua biÕn trë (nh h×nh vÏ)

6


1b. Cấu trúc bộ nhớ trong LCD.

Màn hiển thị của LCD nói chung có thể lên tới hơn 40 ký tự trên một
dòng và một màn có thể có tới 4 dòng.Trong đó có một bộ RAM để chứa
mà 80 ký tù gäi lµ bé nhí DDRAM(display data ram),mµn hiĨn thị có thể
dịch cả màn để quan sát đợc các ký tự khác.
Bộ ký tự hiển thị : Bộ hiển thị có thể hiển thị đợc các ký tự đà đợc lập
trình trớc hoặc các ký tự do ngời dùng ®Þnh nghÜa.Trong bé ®iỊu khiĨn hiĨn
thÞ cã mét bé nhí ROM dùng để phát ký tự, trong Rom này chứa 192 ký
tự,khi cần chọn những ký tự này thì nó đợc chọn thông qua từng mà của nó,
có tới 96 m· ký tù ASCII, 64 m· ký tù tiÕng NhËt, 32 ký tự đặc biệt khác.
Trong bộ điều khiển LCD cịng cã mét bé RAM gäi lµ
CGRAM(character generator ram) trong bộ nhớ này lu 8 ký tự do ngời
dùng định nghĩa, các ký tự đầu tiên phải viết vào CGRAM trớc rồi sau đó
mới hiển thị ra màn hiển thị đợc.
2. Tập lệnh của LCD.

2a. Khả năng hiển thị của LCD.

LCD có khả năng hiển thị rất linh hoạt
_ Thiết lập chế độ hiển thị :
Hiển thị trên 1 dòng hay cả 2 dòng.
Chọn cỡ chữ hiển thị (5x7 hay5x10).
Chọn kiểu con trỏ màn hình (có/không gạch chân , có/không
nhấp nháy)
_ Thiết lập kiểu trao đổi thông tin :
Trao đổi thông tin với Vi điều khiển dùng 4 bit hay 8 bít.
_ Trình bày nội dung hiển thị.
Hiển thị ký tự trên LCD.
Hiển thị ký tự ở vị trí bất kỳ trên LCD.
Tạo chữ chạy trên LCD
Hiển thị ký tự , biểu tợng , hình vẽ tuỳ ý ngời dùng trên LCD.
2b. Tập lệnh của LCD

Để thực hiện đợc các khả năng hiển thị ở trên, ta cần ra lệnh cho LCD
thực hiện các thao tác, tức là phải sử dơng tËp lƯnh cđa LCD.

7


Binary
Command

Hex
D7
0


D6
0

D5
0

D4
0

D3
0

D2
0

D1
0

D0
1

0

0

0

0

0


0

1

x

02 or 03

0

0

0

0

0

1

1/D

S

04 to 07

0

0


0

0

1

D

U

B

08 to 0F

(Dịch LCD và con trá)

0

0

0

1

D/C

R/L

x


x

10 to 1F

Function Set

0

0

1

8/4

2/1

x

x

20 to 3F

Set CGRAM Address

0

1

A


A

A

A

A

40 to 7F

Set Display Address
1
A
1 / D: 1=Increment*, 0=Decrement 1=Display shift on,
S:
0=Off*

A

Clear Display

(Xo¸ màn hình)
Display & Cursor Home
Character Entry Mode

(Chế độ nhận dữ liệu)
Display On/Off & Cursor

(bật/tắt LCD và kiểu con trỏ)

Display/Cursor Shift

D:

1=Display on, 0=Off*

U: B:

1=Cursor underline on, 0=Off* 1=Cursor blink on,
0=Off*

D / C:

1=Display shift, 0=Cursor move

10 /
7
A

01

A
A
A
A
A
80 to FF
R / L: 8 / 4: 1=Right shift, 0=Left shift 1=8-bit interface*,
0=4-bit interface
2 / 1: 1=2 line mode, 0=1 line mode*

10 / 7: 1=5x10 dot format, 0=5x7 dot format*
x = Don't care * = Initialization settings

Chú thích bảng lệnh:
Ký hiệu
X
1/D
S
D
U
B
D/C
R/L
8/4
2/1
10/7

Chức năng
Địa chỉ con trỏ
Dịch con trỏ sau khi hiển
thị
Con trỏ đợc gạch chân
Con trỏ nhấp nháy
Dịch chuyển
Chiều dịch chuyển
Chế độ trao đổi thông tin
Số dòng hiển thị
Cỡ chũ

Chú thích

bít nhị phân (0,1)tuỳ ý
1= tự động tăng; 0= tự động giảm
Có (1); Không (0)
=1: bật LCD;
=0: tắt LCD
Có (1); Không (0)
Có (1); Không (0)
Màn hình (1); Con trỏ (0)
Sang phải (1);
Sang trái (0)
8 bít (1);
4 bÝt (0)
2 dßng (1) ; 1 dßng (0)
Cì 5x10 (1); Cỡ 5x7 (0)

_ Các lệnh trên chia làm 3 nhóm :
Nhóm 1: Các lệnh thiết lập chế độ hiển thị : Display On/Off &
Cursor , Function Set , Character Entry Mode .
Nhóm 2: Các lệnh điều khiển quá trình hiển thị (con trỏ và màn hình):
Display & Cursor Home , Display On/Off & Cursor , Display/Cursor
Shift, Set CGRAM Address,
Nhãm 3: Lệnh kiểm tra trạng thái của LCD : Set Display Address
_ Trên đây là tập lệnh của LCD, các mà lệnh này sẽ đợc đa từ Vi điều
khiển vào LCD qua 8 đờng D0-D7. Muốn LCD nhận và hiểu các tín hiều đa vào này là lệnh thì phải sử dụng đúng Nhóm 3 chân Điều khiển việc vào
8


ra thông tin : E,RS,R/W . Khi nào LCD hiểu tín hiệu đa vào là dữ liệu, khi
nào là lệnh là do sự kết hợp của 3 chân này quyết định.
Các chế độ vào ra thông tin của LCD (kết hợp các chân E, RS,

R/W)
Có 2 chế độ đa thông tin vào LCD (từ vi điều khiển): thông tin đa vào là
lệnh; Thông tin đa vào là dữ liệu để hiển thị
Có 1 chế độ đa thông tin ra khỏi LCD (vào vi điều khiển) : đọc trạng
thái hiện hành của LCD cho Vi điều khiển biết.
Điều khiển LCD là phải sử dụng linh hoạt các chế độ này. Việc quyết
định dùng chế độ vào ra thông tin nào là do 3 chân E, RS,R/W của LCD
quyết định.
+ Chân E: quyết định việc khi nào chấp nhận thông tin ở các chân còn
lại : đó là khi tín hiệu ở ch©n E chun møc tõ 1  0.
+ Ch©n RS quyết định việc nhận lệnh hay dữ liệu. Lệnh (RS=0 ); Dữ
liệu (RS=1)
+ Chân R/W quyết định chiều truyền dữ liệu . Vào LCD(R/W=0); Ra
khỏi LCD (R/W=0).
Tổng hợp theo bảng sau:

RS
0
0
1

Các chế độ vào/ra thông tin do RS, R/W quyết định
Chế độ

R/
W
Lệnh gửi từ Vi điều khiển vào LCD
0
Đọc cờ bận (D7) và vị trí con trỏ (D0-D6) của LCD
1

Dữ liệu gửi từ Vi điều khiển vào LCD
0

Ví dụ muốn hiển thị 1 chữ cái A trên LCD ta phải lần lợt qua các chế độ
sau: Cấp nguồn Đọc trạng thái của LCD xem LCD đà sẵn sàng cha
Gửi lệnh từ Vi điều khiển vào LCD để thiết lập chế độ hiển thị Gửi
mà của ký tự cần hiển thị vào LCD.

9


3. Các ứng dụng hiển thị trên LCD.
Phần này sẽ sử dụng tập lệnh của LCD đợc xét ở mục 2 để đạt đợc mục
đích hiển thị trên LCD kết hợp với sử dụng linh hoạt Nhóm các chân điều
khiển vào ra thông tin E, RS, R/W.
3a. Thiết lập chế độ hiển thị cho LCD.

_ Phần này sẽ ứng dụng c¸c lƯnh :
Binary
Command

Hex
D7

Clear Display
Display On/Off & Cursor
Function Set

D6


D5

D4

0
0
0

0
0
0

0
0
1

0
0
8/4

D3

0
1
2/1

D2

D1


D0

0
D
10 / 7

0
U
x

1
B
x

01
08 to 0F
20 to 3F

_ Đặt vấn đề :
Khi LCD modul đợc Reset, ở trạng thái ban đầu ngay khi đợc cấp nguồn
màn hình LCD cha có gì đợc hiển thị cả. Thậm chí , lúc này nếu ta cho dữ
liệu vào để hiển thị 1 ký tự nào đó thì LCD cũng không thể làm đợc. Bởi vì
trớc tiên LCD phải nhận đợc lệnh điều khiển trớc khi nó có thể hiển thị
thông tin. Lệnh điều khiển mà ta muốn nói tới chính là lệnh cho LCD bật
chế độ hiển thị và thiết lập chế độ hiển thị cho LCD (Ví dụ: hiển thị trên 1
hay 2 dòng, con trỏ hiển thị theo dạng nào..)
_ Lệnh Display On/Of and Cursor khi đợc gửi tới LCD sẽ bật chế độ
hiển thị của LCD và đồng thời cũng xác định kiểu con trỏ hiển thị. Nếu
bít D =1 sẽ bật LCD (ngợc lại sẽ tắt LCD). Nếu bít U=1 con trỏ màn hình
sẽ đợc gạch chân (và ngợc lại ). Nếu bít B=1 thì con trỏ sẽ nhấp nháy (và

ngợc lại).
Tốt nhất nên chọn kiểu con trỏ hiển thị là con trỏ nhấp nháy và có gạch
chân để tiện quan sát. Muốn vËy , ta sÏ gưi tíi LCD m· lƯnh sau :
00001111($0F).
Cụ thể các thao tác nh sau :
RS để ở mức logic 0 (LCD hoạt động ở chế độ nhận lệnh), R/W = 0 (truyền
dữ liệu từ vi điều khiểu vào LCD) các đờng vào D0-D7 đợc đặt là:
00001111 ($0F)) Sau cùng để chân E có 1 chuyển møc “1”vỊ “0” ë
møc cao (cho phÐp LCD nhËn d÷ liệu). Sau khi các thao tác này đợc thực
hiện, 1 con trỏ nhấp nháy, có gạch chân sẽ xuất hiên ở góc bên trái màn
hình LCD .
_ Lệnh Function Set: Nếu muốn LCD hiển thị cả 2 dòng. Ta có thể
dùng câu lệnh Function Set.Lệnh này còn xác định LCD trao đổi thông tin
với bên ngoài bằng 4 đờng hay 8 đờng dữ liệu, độ phân giải 5x10 hay 5x7.
Nếu bÝt 8/4 =1 th× LCD sÏ dïng 8 bÝt D0-D7 ®Ĩ trao ®ỉi th«ng tin víi Vi
®iỊu khiĨn (nÕu =0 thì chỉ dùng 4 bit thôi). Nếu bít 2/1=1 thì LCD sẽ hiển
thị trên cả 2 dòng (nếu =0 thì chỉ hiển thị trên 1 dòng ). Nếu bít 10/7=1 mỗi
ký tự sẽ đợc hiển thị với cỡ chữ 5x10 (nếu =0 thì cỡ chữ 5x7).

10


Ví dụ : dùng 8 đờng dữ liệu, hiển thị 2 dòng, phân giải 5x7 thì ta sẽ gửi
tới LCD mà lệnh sau: 00111000 ($38).
Thao tác cụ thể:
để RS =0, R/W=0 các đờng vào D0-D7 đợc đặt là: 00111000 ($38) 
ch©n E cã 1 chun møc “1”vỊ “0” ë mức cao (cho phép LCD nhận dữ
liệu).
_ Tăng độ tơng phản lên 1 chút vì hiện giờ ta đang hiển thị bằng cả 2
dòng của LCD. Tiếp theo đây , ta đà có thể hiển thị chữ trên LCD theo từng

bớc sau: để chân RS =1 (ở mức cao) (Chuyển LCD tõ chÕ ®é nhËn lƯnh
sang chÕ ®é nhËn ký tù ,ký hiƯu), R/W=0  Sau ®ã ta chØ viƯc đa tín hiệu
mà hoá của ký tự cần hiển thị vào đờng dữ liệu của LCD Cho chân E 1
chun møc “1” vỊ “0”. VÝ dơ : ®Ĩ hiĨn thị chữ A , ta truyền giá trị
01000001 ($47) (chính là mà ASCII của ký tự A) vào 8 đờng dữ liệu của
LCD. Thậm chí ta có thê hiển thị 1 d·y ký tù nh sÏ xÐt ë phÇn sau đây.
Kết luận thiết lập chế độ hiển thị ban đầu cho LCD b»ng lÖnh :
Display On/Of and Cursor : 00001111($0F)
Function Set:
00111000 ($38)
3b. Hiển thị ký tự trên LCD.

_ Đặt vấn ®Ị:
Sau khi ®· thiÕt lËp cho LCD chÕ ®ä hiĨn thị nh trên, ta sẽ hiển thị 1 vài
ký tự trên LCD. Vậy LCD có thể hiển thị những ký tự nào và đa các ký tự
đó vào LCD nh thế nào? Phần này sẽ giải đáp câu hỏi đó.
_ LCD cã bé nhí ROM m· ho¸ c¸c ký tù mà nó có thể hiển thị. Tổng số
có 192 ký tự, khi cần chọn những ký tự này thì chỉ cần đặt mà nhị phân của
nó ở đầu vào, có tíi 96 m· ký tù ASCII, 64 m· ký tù tiếng Nhật, 32 ký tự
đặc biệt khác.
Mô tả bảng mà hoá ký tự chuẩn: 16 mà đầu tiên trong bảng (từ $00 $0F) còn để trống để chứa các ký tự , biểu tợng do ngời dùng tự định nghĩa.
16 ký tù tiÕp theo (tõ $10 - $1F) hiĨn thÞ các ký tự trống. Các vị trí tiếp theo
hiển thị ký tự nh trên hình minh hoạ. Từ $80 - $9F không sử dụng.
_Chú ý rằng để hiển thị ký tự thì khi đa mà hoá của ký tự vào D0-D7 thì
LCD phải để ở chế độ nhận dữ liệu (tứclà RS=1. R/W=0) Sau đó đặt mÃ
nhị phân của ký tự đó vào D0-D7 tạo ra 1 chuyển mức 1 về 0 ở
chân E. Ngay sau đó ta sẽ thấy ký tự đó đợc hiển thị trên màn hình

11



12


3c. Hiển thị ký tự tại 1 vị trí bất kỳ trên LCD.

_Phần này sẽ ứng dụng các lệnh:
Binary
Command
Set Display Address

Hex
D7
1

D6
A

D5
A

D4
A

D3
A

D2
A


D1
A

D0
A

80 to FF

_ Đặt vấn đề:
Khi LCD bắt đầu đợc hoạt động, sau khi đợc thiết lập kiểu hiển thị, ta sẽ
thấy trên LCD có 1 con trỏ ở đầu dòng đầu tiên (đây gọilà địa chỉ $00). Mỗi
khi 1 ký tự, biểu tợng đợc hiển thị, con trỏ đó lại dịch sang phải 1 vị trí (tức
là sang địa chỉ tiếp theo $01, $02). Sự tự động tăng địa chỉ của con trỏ nh
vậy đà tạo sự thuận tiện trong hiển thị 1 chuỗi ký tự trên LCD vì ta không
cần phải định địa chỉ hiển thị cho từng ký tự.
Nhng nếu ta không muốn hiển thị chuỗi ký tự ở vị trí đầu của dòng đầu
tiên nữa, mà mn hiĨn thÞ tõ 1 vÞ trÝ bÊt kú , thì lúc này ta phải cho LCD
biết địa chỉ hiển thị thông qua lệnh Set Display Address
_ Lệnh Set Display Address : Lệnh này sẽ đặt con trỏ màn hình ở vị trí
(có toạ độ xác định bởi 0AAAAAAA) trên màn hình . Sau đó ta có thể cho
hiển thị chữ tại vị trí mới của con trỏ.
_ Các định địa chỉ trên màn hình LCD. Ta biết rằng địa chỉ đặt con trỏ
có thể nhận giá trị trong khoảng $00-$7F tức là 128 địa chỉ. Nhng trên thực
tế (do kích thờc của LCD )chỉ có 80 địa chỉ đợc xác định, 40 địa chỉ cho
dòng trên và 40 địa chỉ còn lại cho dòng dới. Chỉ có LCD loại 40x2 hàng
mới dùng hết 80 địa chỉ đó, còn loại LCD nhỏ hơn (nh của ta đang xét )
cũng không dùng hết 80 địa chỉ đó. Cách định địa chỉ hiển thị trên LCD đợc minh hoạ theo hình sau:
_ Vì Set Display Address là lệnh nên LCD phải làm việc ở chế độ lệnh
từ Vi điều khiển gửi vào LCD.
_ Ví dụ : muốn hiển thị chữ A trên LCD tại vị trí số 10 của dòng trên

($0A hay 00001010) ta làm nh sau:
Đặt chân RS=0 , R/W=0 Đặt mà 10001010 vào chân D0-D7 Tạo
cho chân E 1 chun møc “1” vỊ “0”. Sau bíc nµy, con trỏ sẽ ơ vị trí $0A.
Giờ hết chế độ nhận lệnh, ta thiết lập chế độ nhân dữ liệu : RS=1, R/W=0
Đặt mà hoá của ký tự A (00010100) vào D0-D7 Tạo cho E 1 chuyển
trang thai 1 0. Ngay sau đó, ta sẽ thấy chữ A hiện tại vị trí số 10 của
dòng trên.

13


Định địa chỉ trên LCD 20ký tự x4 dòng

Định địa chỉ trên LCD 16ký tự x2 dòng

3d. Hiển thị chữ chạy bằng LCD

_ Phần này sẽ ứng dụng các lệnh :
Binary
Command
Display/Cursor Shift

Hex
D7
0

D6
0

D5

0

D4 D3
1
D/C

D2
R/L

D1
x

D0
x

10 to 1F

_ Đặt vấn đề:
Tuỳ vào kích thớc của LCD mà số lợng ký tự hiển thị trên LDC bị hạn
chế. Nhng hầu hết các LCD đều có chức năng dịch chuyển khối ký tự đợc
hiển thị sang trái hoặc sang phải. Điều này giúp ích rất nhiều nếu nội dung
cần hiển thị lớn hơn cửa số LCD, và cũng làm cho hiển thị của LCD trở nên
sinh động hơn. Muốn vậy , ta dùng lệnh Cursor/Display Shift
_ LƯnh Cursor/Display Shift . NÕu D/C=1 LCD sÏ dÞch chuyển màn hình
(nếu =0 LCD dịch chuyển con trỏ). Nếu R/L=1 LCD dịch chuyển sang phải
(nếu =0 thì dịch sang tr¸i).

14



_ Ví dụ: Sau đây ta xét cụ thể 1 ví dụ dịch chuyển 1 khối ký tự trên
LCD:
Nhập lệnh vào LCD để thiết lập trạng thái ban đầu (hiển thị 1 dòng, con trỏ
nhấp nháp có gạch chân ) (lƯnh Function Set, Display On/Off and Cursor ), sau
®ã trun dữ liệu vào LCD , ở đây ta truyền cho LCD 26 ký tù tõ A-Z
(truyÒn m· tõ 01000001 – 01011010 tức là từ $41-$5A)
Tuy nhiên trên LCD ta chỉ quan sát đợc 16 ký tự ở dòng trên , từ A-P.
Những ký tự còn lại và con trỏ đều bị khuất về bên phải nên ta không quan
sát đợc.
Giờ ta sẽ dùng lệnh Cursor/Display Shift để dịch khối 26 ký tự đó sang
trái để có thể nhìn đợc các ký tự còn lại và con trỏ. Mỗi lần lệnh
Cursor/Display Shift đợc nhập vào LCD, khối 26 ký tự đó sẽ dịch đi 1 vị trí.
Cứ liên tục nhập lệnh vào LCD, sau 1 thời gian ta sẽ nhìn đợc ký tự ..Z, sau
đó là cả con trỏ cũng đợc hiển thị. Vẫn tiếp tục nhập lệnh dịch chuyển vào
ta lại thấy các ký tự đầu (A,B..) đợc hiển thị nh thể cả khối 26 ký tự đợc
quay vòng quanh - đây chính là cách LCD thực hiên lệnh Cursor/Display
Shift-

Vì khi nhận lệnh này LCD không thay đổi địa chỉ của từng ký tự , mà
dịch chuyển cả khối địa chỉ của LCD sang trái hay sang phải.
_ Lệnh Cursor/Display Shift ngoài có tác dụng đối dịch chuyển đối với ký
tự nh đà trình bày ở trên , nó còn đợc dùng để dịch chuyển con trỏ hiển thị.
Dùng lệnh này đối với con trỏ sẽ giúp ta chỉnh sửa nội dung tại 1 địa chỉ
bất kỳ trong của sổ hiển thị.
3e. Con trỏ cơ sở.

_ Phần này ứng dụng lệnh:
Binary
Command
Clear Display

Display & Cursor Home

Hex
D7
0
0

D6
0
0

D5
0
0

D4
0
0

D3
0
0

D2
0
0

D1
0
1


D0
1
x

01
02 or 03

_Đặt vấn đề: Sau khi thực hiện chữ chạy trên LCD, ta thấy rằng cả hệ
thống địa chỉ của màn hình LCD đà bị dịch chuyển. Có cách nào nhanh
nhất để đa hệ thống địa chỉ đó trở về dạng chuẩn nh ban đầu không? Đây là
lúc ta dùng lệnh Display and Cursor Home, Clear Display
_ LƯnh Cursor Home : võa cã t¸c dơng đa con trỏ về địa chỉ đầu tiên
($00), vừa có tác dụng kéo địa chỉ 0 của khối địa chỉ của LCD về vị trí
góctrái của dòng đàu tiên.
_ Lệnh Clear Display cũng có 2 tác dụng trên của lệnh Cursor Home ,
ngoài ra nó còn có tác dụng xoá tất cả nội dụng vừa đợc hiển thị trên LCD .
3f. Chế độ nhận dữ liệu

_Phần này sẽ ứng dụng lÖnh:

15


Binary
Command
Character Entry Mode

Hex
D7

0

D6
0

D5
0

D4
0

D3
0

D2
1

D1
1/D

D0
S

04 to 07

_ Đặt vấn đề:
Nh ở các trờng hợp ta xét ở trên, khi 1 ký tự đợc nhập vào, sau khi LCD
hiển thị ký tự đó thì con trỏ tự động tăng địa chỉ của nó lên . Tuy nhiên
không phải nhất thiết lúc nào cũng phải hiển thị theo cách đó, tức là sau khi
hiển thị con trỏ có thể tự động giảm địa chỉ.

HÃy xét 1 ví dụ cụ thể màn hình hiển thị của 1 chiếc máy tính điện tử bỏ
túi bình thờng. Khi bật máy có số 0 ở góc bên phải màn hình. Sau đó ngời
dùng nhập 1 số vào, thì sau khi hiển thị số đó, con trỏ lại tự động dịch sang
trái (tức là giảm địa chỉ của nó). Cứ nh vậy, càng nhiều ký tự đợc nhập vào
thì con trỏ càng sang bên trái (tức là địa chỉ của nó càng gảm).
Bây giờ ta sẽ làm cho màn hình LCD của ta hoạt động nh choc năng của
màn hình chiếc máy tính điện tử. Đó chính là hiệu qu¶ cđa viƯc sư dơng
lƯnh Character Entry Mode
_ LƯnh Character Entry Mode : NÕu S=1 con trá sÏ tù ®éng dịch địa
chỉ sau khi hiển thị (nếu=0 thì không dịch). Nếu 1/D=1 địa chỉ con trỏ tự
động tăng 1 tức là con trỏ dịch sang phải sau khi hiển thị (nếu =0 thì dịch
sang trái).
_ Thực hiện lần lợt các bớc sau:
Nhập các lệnh thích hợp (Function Set, Display On/Off and Cursor)vào
LCD để thiết lập chế độ ban đầu cho LCD, chỉ dùng 1 dòng để hiển thị,
định địa chỉ hiĨn thÞ ë $10 (lƯnh Set Display Address ) .
Sau đó gửi lệnh Character Entry Mode vào LCD mà nhị phân là:
00000111 ($07) . Lệnh này sẽ thiết lập chế độ hiển thị- dịch trái cho LCD
(tức là sau khi hiển thị thì con trỏ dịch sang trái).
Mọi công việc chuẩn bị va thiết lập chế độ đà hoàn tất. Giờ chỉ còn 1 việc
là nhập số hay ký tự vào LCD để kiểm tra kiết quả.
Nhập dữ liệu vào LCD . Ta nhËp c¸c sè tõ 0-9 (m· ho¸ tõ 00110000 ®Õn
00111001 ($30 ®Õn $39 )). Ta sÏ they LCD hoạt động đúng nh màn hình
hiển thị của máy tính điện tử. Sau khi 1 số đợc hiển thị, con trỏ sẽ dịch sang
trái để chờ hiển thị số tiếp theo.
_ ở bảng các lệnh của LCD ta they rằng lệnh có thể nhập vào LCD với 4
cách mà hoá khác nhau từ 00000100 đến 00000111 ($04 đến $07). Mỗi 1
cách mà hoá sẽ đáp ứng 1 nhu cầu trong đời sống thực tế (nh màn hình máy
tính điện tử chẳng hạn)
3g. Hiển thị ký tự tuỳ ý trên LCD theo định nghĩa ngời dùng.


_ Phần này sẽ ứng dơng lƯnh:
Command

D7

D6

D5

Binary

D2

D1

D0

Hex

16


D4
Set CGRAM Address

0

1


A

D3

A

A

A

A

A

40 to 7F

_ LÖnh Set CGRAM Address : sẽ khởi động chức năng hiển thị các ký
tự , hình dạng theo định nghĩa riêng của ngời sử dụng. LCD cho phép định
nghĩa tối đa 8 ký tự ngời dïng .
_ C¸c bíc thùc hiƯn: VÝ dơ mn hiĨn thị hình ngời nh minh hoạ ta phải
lần lợt thực hiện các bớc sau:

Thiết lập chế độ làm việc cho LCD. Gưi lƯnh Set CGRAM Address ®Õn Vi
®iƯu khiĨn (m· lệnh bất kỳ từ $04-$78). từ lúc này trở đi, dữ liệu đợc
truyền vào sẽ tạo nên hiển thị theo ý ngêi dïng theo tõng dßng 1. NhËp 1
bé 8 dòng mà nhị phân để hiển thị đợc nh y muèn (00001110, 00010001,
00001110, 00000100, 00011111,
00000100, 00001010, 00010001 ($0E, $11, $0E, $04, $1F, $04, $0A,
$11) ). Sau khi LCD nhËn 8 dòng vào này, 1 hình sẽ đợc hiện trên màn hình
LCD. Nếu gỉ bộ 8 dòng bít vào ta sẽ đợc 2 ký tự , hình vẽ khác.

_ Chú ý rằng CGRAM là bộ nhớ tạm thời, nếu mất điện nó sẽ mất. Vì
vậy khi nối LCD với Vi điều khiển, thì bộ 8 dòng bit đó phải đợc lu sẵn
trong bộ nhớ ROM của Vi diều khiển, khi nào dùng tới thì định nghĩa đó đợc gọi ra.
3g. LCD trao đổi với bên ngoài bằng 4 bit

_ Phần này sÏ øng dơng lƯnh :
Binary
Command
Function Set

Hex
D7
0

D6
0

D5
1

D4 D3
8/4
2/1

D2
10 / 7

D1
x


D0
x

20 to 3F

_ Đặt vấn đề:

17


Trong thực tế thờng gặp LCD đợc điều khiển bsằng loại Chip 4 bit ra.
Trong khi LCD co 8 đờng vào ra dữ liệu. Vì thế ta phải xem xét khả năng
làm việc với LCD mà chỉ dùng 4 đờng dữ liệu (để tơng thích với loại Vi
Điều Khiển 4 bit).
4 bit đợc gọi là 1 nửa byte.
ở chế độ 4 bit, dùng 4 bit nào để trao đổi thông tin? Trả lời: dùng 4 bit
cao D4-D7 để trao đổi thông tin. $ bit thấp còn lại D0-D3 phải tuân thủ
cách xử lý sau: 4 bit không sử dụng này phải thả tự do hoặc nối với 1 cực
thông qua điện trở 4k7-47k. Tuyệt đối không đợc nối 4 chân không sử dụng
này trực tiếp với đất vì sẽ làm cho LCD hiểu nhầm là dùng 8 bít để trao đổi
dữ liệu (4 bit D0-D3 là 0000).
Để LCD làm việc ở chế độ giao tiếp 4 bit thì việc đầu tiên là phải thiết
lập (ra lệnh cho LCD) chọn chế ®é lµm viƯc 4 bit (dïng lƯnh Function
Set ) . Nhng có vấn đề nảy sinh là lệnh đó cũng chỉ đợc đa vào LCD bằng 4
bit D4-D7 mà thôi, còn 4 bít thấp thì không thể thay đổit giá trị tuỳ ý đợc.
Nhng thật may mắn là trong lệnh Function Set bÝt ra lƯnh cho LCD lµm
viƯc ë chÕ độ 4 bit là bit 4 , vì vậy chỉ cần gửi tới LCD mà lệnh 00100000
là đà thiết lập đợc chế độ trao đổi thông tin 4 bit.
Sau khi thiết lập chế độ trao đổi thông tin4 bit, kể từ lúc này mọi lệnh và
dữ liệu đợc gửi tới LCD đều phải chia làm 2 phần : 4 bít phần cao gửi trớc,

sau đó mới gửi 4 bít phần thấp .
Mỗi 1 lần gửi thông tin tới LCD đều phải cấp cho chân E 1 xung dơng.
Nh vậy vì số lần gửi ở chế độ 4 bit gấp 2 lần số lần gửi ở chế độ 8 bit, nên
số xung dơng cần cấp cho chân E cũng gấp đôi.
3h.Đọc thông tin về LCD.

_ Phần này sẽ ứng dụng lệnh:
Binary
D7 D6 D5 D4
D3
Read Data
High
D
D
D
D
D
Read Status
Low
BF
A
A
A
A
D:
Character data at current cursor address
A:
Current cursor address ($00 to $7f)
BF:
Busy Flag (0 = Ready, 1 = Busy)

Instruction

RS

D2
D
A

D1
D
A

D0
D
A

Table 6: HD44780 Read Instructions.

_ LÖnh : Cê bËn của LCD sẽ đợc đọc trên đờng D7. Nếu D7=1 tức là
LCD đang thực hiện lệnh và nó cha sẵn sàng để nhân thông tin từ VI diều
khiển (nếu D7=0 tức là LCD đà sẵn sàng chờ thông tin). 6 bit A là mà hoá
vị trí của con trỏ trên màn hình, đợc đọc ra ở chân D0-D6.
_ Các thông tin trạng thái báo về Vi điều khiển để VĐK ®ỵi LCD hÕt
bËn míi gưi lƯnh tiÕp theo.
_ Chó ý rằng LCD phải để ở chế độ đọc thông tin ra : RS=1, R/W=1
18


3g. Chu trình thời gian trên LCD.


Cần để ý tới thời gian LCD thực hiện 1 lệnh để tạo những khoảng thời
gian trễ thích hợp trong khi lập trình Assembly. Khoảng thời gian trễ có tác
dụng đợi để LCD thực hiƯn xong lƯnh tríc råi míi gưi lƯnh tiÕp theo.
Sau khi cấp nguồn cho LCD phải đợi cho tới khi LCD khởi động xong
hoàn toàn, ta chèn vào đó 1 thời gian trễ.

Thời gian thực hiện lệnh

Quá trình thực hiện lƯnh (nhËn d÷ liƯu )

19


Lập trình Assembly cho Vi Điều Khiển 89C51
Điều khiển hoạt ®éng cña LCD
; LCD Example Program
; Port 1 = D0-D7 (data port), R/W nèi víi P3.2, Enable nèi víi P3.4, RS
nèi víi P3.3
;*****
#INCLUDE "8051EQU.INC"
;include predefined constants
;
;
************************************************************
**************
;
BiÕn vµ H»ng
;
; LËp 1 bộ nhớ đệm có 16 ô nhớ (đủ cho 1 LCD).
; Để viết ký tự lên LCD, ký tự đợc đa vào bộ đệm sau đó

; tất cả các bít đợc đồng loạt đa vào LCD.
B0
.EQU 070H
;BUFFER POSITION 1
B1
.EQU 071H
;
B2
.EQU 072H
;
B3
.EQU 073H
;
B4
.EQU 074H
;
B5
.EQU 075H
;
B6
.EQU 076H
;
B7
.EQU 077H
;
B8
.EQU 078H
;
B9
.EQU 079H

;
B10
.EQU 07AH
;
B11
.EQU 07BH
;
B12
.EQU 07CH
;
B13
.EQU 07DH
;
B14
.EQU 07EH
;
B15
.EQU 07FH
;BUFFER POSITION 16
;
;
************************************************************
**************
;
; RESET
;reset routine

20



.ORG 0H
;locate next command at 00H
AJMP START
;jump to START (first command of
program)
;
;
************************************************************
**************
;
; INTERRUPTS
;place interrupt routines at appropriate
;memory locations
.ORG 03H
;external interrupt 0
RETI
.ORG 0BH
;timer 0 interrupt
RETI
.ORG 13H
;external interrupt 1
RETI
.ORG 1BH
;timer 1 interrupt
RETI
.ORG 23H
;serial port interrupt
RETI
.ORG 2BH
;locate beginning of rest of program

;
;
************************************************************
**************
;
INITIALIZE:
;set up control registers
;
MOV TCON,#00H
MOV TMOD,#00H
MOV PSW,#00H
MOV IE,#00H
;disable interrupts
RET
;
;
************************************************************
**************
;
DELAYMS:
;millisecond delay routine
;
;uses R7
21


MOV R7,#00H
;put 00H in register R7
LOOPA:
INC R7

;increment R7
MOV A,R7
;move R7 to Accumlator
CJNE A,#0FFH,LOOPA
;jump to LOOPA if R7 not equal to
#FFH
RET
;return
;
;
************************************************************
**************
;
DELAYHS:
;half second delay using milsec delay
;
;uses R5 R6 (R7)
MOV R6,#00H
MOV R5,#002H
LOOPB:
INC R6
ACALL DELAYMS
MOV A,R6
JNZ LOOPB
DEC R5
MOV A,R5
JNZ LOOPB
RET
;
;

************************************************************
**************
;
DELAYS:
;delay for a second or two
;
;uses (R5 R6 R7)
ACALL DELAYHS
ACALL DELAYHS
ACALL DELAYHS
ACALL DELAYHS
RET
;

22


;
************************************************************
**************
;
;
;
************************************************************
**************
;
WRITELCD:
SETB P3.4
;enable LCD
ACALL DELAYMS

;wait for write completion
CLR P3.4
;disable LCD
RET
;
;
************************************************************
**************
;
EXECUTELCD:
CLR P3.3
;ditto
SETB P3.4
;enable LCD
ACALL DELAYMS
CLR P3.4
SETB P3.3
;Make rs=1
RET
;
;
************************************************************
**************
;
LCDSETUP:
;
MOV P1,#03CH
;set up LCD 8 bits and 2 lines
ACALL EXECUTELCD
MOV P1,#00DH

;turn on display and cursor off
ACALL EXECUTELCD
MOV P1,#006H
;set increment one and shift
ACALL EXECUTELCD
MOV P1, #02H
; Home Display
23


ACALL EXECUTELCD
RET
;
;
************************************************************
***************
;
CLEARBUFFER:
; uses R0
;
MOV R0,#070H
CBONE:
MOV @R0,#' '
; put a blank in the memory address specified in
R0
INC R0
; go to next memory address
CJNE R0,#080H,CBONE ; stop when address is 80H
RET
;

;
************************************************************
***************
;
WRITEBUFFER:
;uses R0
;
MOV R0,#070H
WBONE:
MOV P1,@R0
; get character stored in the memory address
specified in R0
ACALL WRITELCD
INC R0
; go to next memory address
CJNE R0,#080H,WBONE ; stop when address is 80H
RET
;
;
;
************************************************************
***************
;
WRITEIguana_Labs:
;write Iguana Labs to LCD
;
24


ACALL CLEARBUFFER

MOV B0,#'I'
;write I
MOV B1,#'g'
;write g
MOV B2,#'u'
;write u
MOV B3,#'a'
;write a
MOV B4,#'n'
;write n
MOV B5,#'a'
;write a
MOV B6,#' '
;write
MOV B7,#'L'
;write L
MOV B8,#'a'
;write a
MOV B9,#'b'
;write b
MOV B10,#'s'
;write s
ACALL WRITEBUFFER
RET
;
;
************************************************************
***************
;
WRITELCD_Example:

;write Example to LCD
;
ACALL CLEARBUFFER
MOV B0,#'L'
;write L
MOV B1,#'C'
;write C
MOV B2,#'D'
;write D
MOV B3,#' '
;write
MOV B4,#'E'
;write E
MOV B5,#'x'
;write x
MOV B6,#'a'
;write a
MOV B7,#'m'
;write m
MOV B8,#'p'
;write p
MOV B9,#'l'
;write l
MOV B10,#'e'
;write e
ACALL WRITEBUFFER
RET
;
;
************************************************************

**************
;
25


×