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

vi xử lý hệ thống điều khiển lcd

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, 35 trang )


KHOA CÔNG NGHỆ ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP




T
T
À
À
I
I


L
L
I
I


U
U


H
H
Ư
Ư



N
N
G
G


D
D


N
N


T
T
H
H
Í
Í


N
N
G
G
H
H
I
I



M
M


-
-


T
T
H
H


C
C


H
H
À
À
N
N
H
H




















E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Giáo trình thực hành vi xử lý. 2 Biên soạn: Phạm Quang Trí

A. MỤC ĐÍCH:

• Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào vi điều khiển và sử dụng mô
hình thí nghiệm để kiểm chứng.
• Điều khiển thiết bị ngoại vi bằng các port của vi điều khiển.
• Khảo sát nguyên lý hoạt động và nguyên lý điều khiển LCD.
• Điều khiển để hiển thị các thông tin trên màn hình tinh thể lỏng LCD (chuẩn công nghiệp, loại 2 hàng x 16
ký tự).
B. YÊU CẦU:


• Nắm vững tập lệnh của vi điều khiển MCS-51.
• Biết cách viết các chương trình điều khiển LCD.
• Nắm được sơ đồ và nguyên lý hoạt động của khối LCD trên mô hình thí nghiệm.
• Nắm được nguyên lý và kỹ thuật điều khiển để hiển thị các thông tin trên LCD.
• Biết cách viết các chương trình ứng dụng để hiển thị các dạng thông tin khác nhau trên LCD tùy theo nhu
cầu sử dụng.



E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 1: Chương trình điều khiển LCD hiển thị hai dòng chữ “MICRO-CONTROLLER” và “DESIGNED BY:
PQT.” đứng yên trên hai dòng của màn hình LCD.
Giáo trình thực hành vi xử lý. 3 Biên soạn: Phạm Quang Trí
1 Trình tự tiến hành thí nghiệm:
1.1 Kết nối thiết bị thí nghiệm.
• Tắt nguồn cấp cho mô hình thí nghiệm.
• Dùng dây bus 3 nối J63 (PORT0 / DATA) ở khối vi điều khiển với J47 (CTRL LCD) ở khối LCD (chú ý
là ta chỉ nối 3 bit thấp của J63 và J47 với nhau).
• Dùng dây bus 8 nối J64 (PORT1) ở khối vi điều khiển với J46 (DATA / CODE LCD) ở khối LCD.
• Dùng dây bus 3 nối J104 (POWER) ở khối LCD với nguồn +5V ở khối nguồn.

1.2 Sơ đồ nguyên lý của hệ thống:
AD7
AD0
AD0
AD1
AD2
AD3
AD4
AD5

AD6
AD7
AD6
AD5
AD4
AD3
AD2
AD1
D0
D7
AD2
AD0
AD1
D0
D1
D2
D3
D4
D5
D6
D1
D2
D3
D4
D5
D6
D7
XTAL2
18
XTAL1

19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1
P1.1
2
P1.2

3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8

21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
C1
33p
C2
33p
X1
12MHz
C3
10uF
R1
10k
+5V
2
3
4
5

6
7
8
9
1
RP1
10K
+5V
MAÏCH ÑIEÀU KHIEÅN LCD
MAÏCH ÑIEÀU KHIEÅN LCDMAÏCH ÑIEÀU KHIEÅN LCD
MAÏCH ÑIEÀU KHIEÅN LCD
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW

5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
ALPHANUMERIC LCD 16 CHAR x 2 LINE
RV1
10K
+5V

E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 1: Chương trình điều khiển LCD hiển thị hai dòng chữ “MICRO-CONTROLLER” và “DESIGNED BY:
PQT.” đứng yên trên hai dòng của màn hình LCD.
Giáo trình thực hành vi xử lý. 4 Biên soạn: Phạm Quang Trí
1.3 Vẽ lưu đồ giải thuật và viết chương trình điều khiển.
GỌI CTC HIỂN THỊ DÒNG 1
DISP_FLINE
BEGIN
MAIN:
E1
GỌI CTC KHỞI ĐỘNG LCD
LCDINIT
GỌI CTC HIỂN THỊ DÒNG 2
DISP_SLINE
END

SENDCOMMAND
SENDCOMMAND:
THIẾT LẬP GỬI MÃ LỆNH
(RS) = 0
SENDDATA
SENDDATA:
THIẾT LẬP GỬI DỮ LIỆU
(RS) = 1
NOP
PULSE_EN:
THIẾT LẬP GHI VÀO LCD
(RW) = 0
TẠO XUNG TRUY XUẤT LCD (EN = 1 )
(EN) = 0
NOP
ĐƯA LCD VỀ TRẠNG THÁI
HOẠT ĐỘNG BÌNH THƯỜNG
(EN) = 1
NOP
CẤU HÌNH PORT NHẬP
(DATABUS) = FFH
THIẾT LẬP ĐỌC TỪ LCD
(RW) = 1
THIẾT LẬP ĐỌC MÃ LỆNH
(RS) = 0
TẠO XUNG TRUY XUẤT LCD (EN = 1 )
(EN) = 0
NOP
NOP
BUSY:

ĐỌC MÃ LỆNH TỪ LCD
(A) = (DATABUS)
ĐƯA LCD VỀ TRẠNG THÁI
HOẠT ĐỘNG BÌNH THƯỜNG
(EN) = 1
BÁO BẬN
(ACC.7) = 1
Đ
S
BUSY2:
ĐỌC MÃ LỆNH TỪ LCD
(A) = (DATABUS)
BÁO BẬN
(ACC.7) = 1
Đ
S
THIẾT LẬP GHI VÀO LCD
(RW) = 0
RET
DELAY
KHỞI ĐỘNG TIMER
(TIMER 0, MODE 1)
(TMOD) = 01H
CHƯA ĐỦ THỜI GIAN
(TF0) = 0
Đ
S
RET
CHO TIMER HOẠT ĐỘNG
(TR0) = 1

DỪNG TIMER
(TR0) = 0
XÓA CỜ TRÀN TIMER
(TF0) = 0
DELAY:
DISP_FLINE
DISP_FLINE:
GỬI MÃ LCD = 80H
ĐẶT DDRAM ĐỊA CHỈ BẮT ĐẦU CỦA DÒNG 1: 00H
(DATABUS) = 80H
GỌI CTC GỬI LỆNH RA LCD
SENDCOMMAND
NẠP ĐỊA CHỈ VÙNG NHỚ CHỨA DỮ LIỆU CỦA DÒNG 1
(DPTR) = FLINE_DATA
GỌI CTC GỬI VÙNG DỮ LIỆU SANG LCD
WRITE
RET
VÙNG DỮ LIỆU FLINE_DATA
‘MICRO-CONTROLLER’,99H
BEGIN
WRITE:
ĐẶT ĐỊA CHỈ OFFSET DẦU TIÊN
(A) = 0
LẤY DỮ LIỆU
(A) = (@A+DPTR)
CHƯA HẾT DỮ LIỆU
(A) 99H
Đ
S
RET

WRITE_CONT:
XUẤT DỮ LIỆU RA PORT
(DATABUS) = (A)
GỌI CTC GỬI DỮ LIỆU RA LCD
SENDDATA
TĂNG ĐỊA CHỈ VÙNG DỮ LIỆU
(DPTR) = (DPTR) + 1
LCDINIT
LCDINIT:
THIẾT LẬP GỬI MÃ LỆNH
(RS) = 0
THIẾT LẬP GHI VÀO LCD
(RW) = 0
THIẾT LẬP TRUY XUẤT LCD
(EN) = 1
GỬI MÃ LCD = 38H
8 BIT, 2 DÒNG, ĐỊNH DẠNG 5x7
(DATABUS) = 38H
GỌI CTC GỬI LỆNH RA LCD
SENDCOMMAND
NẠP GIÁ TRỊ TẠO TRỄ 4.1ms
(TH0/TL0) = -4100 = EFFCH
GỌI CTC TẠO TRỄ
DELAY
GỬI MÃ LCD = 38H
8 BIT, 2 DÒNG, ĐỊNH DẠNG 5x7
(DATABUS) = 38H
GỌI CTC GỬI LỆNH RA LCD
SENDCOMMAND
NẠP GIÁ TRỊ TẠO TRỄ 100us

(TH0/TL0) = -100 = FF9CH
GỌI CTC TẠO TRỄ
DELAY
GỬI MÃ LCD = 38H
8 BIT, 2 DÒNG, ĐỊNH DẠNG 5x7
(DATABUS) = 38H
GỌI CTC GỬI LỆNH RA LCD
SENDCOMMAND
GỬI MÃ LCD = 0CH
BẬT HIỂN THỊ, TẮT CON TRỎ, TẮT NHẤP NHÁY CON TRỎ
(DATABUS) = 0CH
GỌI CTC GỬI LỆNH RA LCD
SENDCOMMAND
GỬI MÃ LCD = 01H
XÓA HIỂN THỊ
(DATABUS) = 01H
GỌI CTC GỬI LỆNH RA LCD
SENDCOMMAND
RET
GỬI MÃ LCD = 06H
TỰ TĂNG ĐỊA CHỈ HIỂN THỊ, TẮT DỊCH CHUYỂN HIỂN THỊ
(DATABUS) = 06H
GỌI CTC GỬI LỆNH RA LCD
SENDCOMMAND
DISP_SLINE
DISP_SLINE:
GỬI MÃ LCD = C0H
ĐẶT DDRAM ĐỊA CHỈ BẮT ĐẦU CỦA DÒNG 2: 40H
(DATABUS) = C0H
GỌI CTC GỬI LỆNH RA LCD

SENDCOMMAND
NẠP ĐỊA CHỈ VÙNG NHỚ CHỨA DỮ LIỆU CỦA DÒNG 2
(DPTR) = SLINE_DATA
GỌI CTC GỬI VÙNG DỮ LIỆU SANG LCD
WRITE
RET
VÙNG DỮ LIỆU SLINE_DATA
‘DESIGNED BY: PQT’,99H

E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 1: Chương trình điều khiển LCD hiển thị hai dòng chữ “MICRO-CONTROLLER” và “DESIGNED BY:
PQT.” đứng yên trên hai dòng của màn hình LCD.
Giáo trình thực hành vi xử lý. 5 Biên soạn: Phạm Quang Trí
;***************************************************
;CHUONG TRINH DIEU KHIEN LCD HIEN THI 2 DONG CHU DUNG YEN
;***************************************************
;RS -> P0.0, RW -> P0.1, E -> P0.2
;DATA BUS -> PORT 1
;***************************************************
EN BIT P0.2
RW BIT P0.1
RS BIT P0.0
DATABUS EQU P1
;***************************************************
ORG 00H
MAIN:
ACALL LCDINIT ;KHOI TAO LCD
MP1:
ACALL DISP_FLINE ;HIEN THI DONG 1
ACALL DISP_SLINE ;HIEN THI DONG 2

SJMP $
;***************************************************
LCDINIT: ;CTC KHOI TAO LCD
CLR RS ;RS = 0 - GUI LENH
CLR RW ;RW = 0 - WRITE LCD MODE
SETB EN ;E = 1 - ENABLE
MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV TH0,#HIGH(-4100)
MOV TL0,#LOW(-4100)
ACALL DELAY ;DELAY 4.1MS
MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV TH0,#HIGH(-100)
MOV TL0,#LOW(-100)
ACALL DELAY ;DELAY 100US
MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DATABUS,#0CH ;CODE = 0CH - CHO PHEP LCD HIEN THI
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DATABUS,#01H ;CODE = 01H - XOA LCD
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DATABUS,#06H ;CODE = 06H - TU TANG DIA CHI HIEN THI, TAT DICH CHUYEN HIEN THI
ACALL SENDCOMMAND ;GUI LENH RA LCD
RET
;***************************************************
SENDCOMMAND: ;CTC GUI LENH (SENDCOMMAND) VA GUI DU LIEU (SENDDATA) RA LCD
CLR RS ;RS = 0 - GUI LENH
SJMP PULSE_EN
SENDDATA:

SETB RS ;RS = 1 - GUI DU LIEU
NOP
PULSE_EN: ;TAO XUNG ENABLE DE CHUYEN THONG TIN (COMMAND/DATA) VAO LCD
CLR RW ;RW = 0 - WRITE LCD MODE
CLR EN ;EN = 0
NOP
SETB EN ;EN = 1 - XUNG ENABLE
NOP
;KIEM TRA CO BAO BAN (BUSY FLAG) DE DAM BAO HOAN TAT VIEC LCD GHI NHAN THONG TIN GUI DEN
;*************************************************************
;MOV TH0,#HIGH(-2000) ;LENH NAY DUOC THAY THE CHO DOAN MA KIEM TRA DUOI DAY KHI
;MOV TL0,#LOW(-2000) ;CHAY CHUONG TRINH NAY TRONG PHAN MEM MO PHONG TOPVIEW
;ACALL DELAY
;*************************************************************
MOV DATABUS,#0FFH ;CAU HINH PORT 1 CHO CHE DO PORT NHAP
SETB RW ;RW = 1 - READ LCD MODE
CLR RS ;RS = 0 - GUI LENH
CLR EN ;EN = 0
NOP
SETB EN ;EN = 1 - XUNG ENABLE
NOP
BUSY: ;BUSY = 0 -> HOAN TAT, BUSY = 1 -> DANG THUC HIEN
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 1: Chương trình điều khiển LCD hiển thị hai dòng chữ “MICRO-CONTROLLER” và “DESIGNED BY:
PQT.” đứng yên trên hai dòng của màn hình LCD.
Giáo trình thực hành vi xử lý. 6 Biên soạn: Phạm Quang Trí
MOV A,DATABUS ;DOC DU LIEU TU LCD
JB ACC.7,BUSY ;KIEM TRA CO BUSY
BUSY2: ;KIEM TRA CO BAO BAN (BUSY FLAG) LAN THU HAI
MOV A,DATABUS ;DOC DU LIEU TU LCD

JB ACC.7,BUSY2 ;KIEM TRA CO BUSY LAN 2
CLR RW ;RW = 0 - WRITE LCD MODE (THOAT CHE DO READ, TRO VE CHE DO WRITE)
;*************************************************************
RET
;***************************************************
DISP_FLINE: ;CTC DAT DIA CHI BAT DAU DONG 1 VA NAP DU LIEU DONG 1 VAO DDRAM
MOV DATABUS,#80H ;CODE = 80H - DAT DDRAM DIA CHI BAT DAU CUA DONG 1 - 00H
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DPTR,#FLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 1 CUA LCD
ACALL WRITE ;GUI VUNG DU LIEU SANG LCD
RET
;***************************************************
DISP_SLINE: ;CTC DAT DIA CHI BAT DAU DONG 2 VA NAP DU LIEU DONG 2 VAO DDRAM
MOV DATABUS,#0C0H ;CODE = C0H - DAT DDRAM DIA CHI BAT DAU CUA DONG 2 - 40H
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DPTR,#SLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 2 CUA LCD
ACALL WRITE ;GUI VUNG DU LIEU SANG LCD
RET
;***************************************************
WRITE: ;CTC GUI DU LIEU SANG LCD, KET THUC GUI DU LIEU KHI DU LIEU GUI DI LA 99H
MOV A,#0 ;OFFSET DAU TIEN TRONG VUNG DU LIEU CUA DPTR
MOVC A,@A+DPTR ;LAY DU LIEU TU VUNG DU LIEU
CJNE A,#99H,WRITE_CONT ;KIEM TRA LAY HET DU LIEU TRONG VUNG DU LIEU - KET THUC LA 99H
RET
WRITE_CONT: ;KHONG PHAI LA DU LIEU KET THUC - CHUA LAY HET DU LIEU
MOV DATABUS,A ;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD
ACALL SENDDATA ;GUI DU LIEU RA LCD
INC DPTR ;CHUYEN SANG DU LIEU KE TIEP
SJMP WRITE ;QUAY TRO VE DE GUI DU LIEU KE TIEP
;***************************************************

DELAY:
MOV TMOD,#01H
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
;***************************************************
FLINE_DATA: ;DU LIEU HIEN THI DONG 1
DB 'MICRO-CONTROLLER'
DB 99H ;MA KET THUC DONG (TU CHON)
SLINE_DATA: ;DU LIEU HIEN THI DONG 2
DB 'DESIGNED BY: PQT'
DB 99H ;MA KET THUC DONG (TU CHON)
END
1.4 Lưu chương trình và biên dịch chương trình.
1.5 Kiểm tra lỗi và hiệu chỉnh lỗi nếu có.
1.6 Gắn chip vi điều khiển thí nghiệm vào socket tương ứng trên khối nạp chip và bật nguồn cho khối nạp chip
hoạt động.
1.7 Nạp chương trình vào vi điều khiển.
1.8 Sử dụng vi điều khiển vừa nạp gắn vào socket tương ứng trên khối vi điều khiển.
1.9 Bật nguồn cho mô hình thí nghiệm. Quan sát kết quả hoạt động, nếu kết quả hoạt động không đúng yêu
cầu của đề bài thì phải quay lại kiểm tra việc kết nối mạch, hiệu chỉnh chương trình và làm lại các bước từ
bước 3 đến bước 9.
2 Bài tập:
(xem thêm trong phần hướng dẫn và phần bài tập của Bài 3)

E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 2: Chương trình điều khiển LCD hiển thị hai dòng chữ “WELLCOME TO MICROCONTROLLER
SYSTEM – 51” và “DESIGNED BY: PQT.” trên hai dòng của màn hình LCD với yêu cầu: dòng chữ

thứ nhất sẽ dịch chuyển liên tục từ phải sang trái, dòng chữ thứ hai đứng yên.
Giáo trình thực hành vi xử lý. 7 Biên soạn: Phạm Quang Trí
1 Trình tự tiến hành thí nghiệm:
1.1 Kết nối thiết bị thí nghiệm.
• Quá trình kết nối thiết bị thí nghiệm tương tự như Bài 1.
1.2 Sơ đồ nguyên lý của hệ thống:
• Sơ đồ nguyên lý của hệ thống tương tự như Bài 1.
1.3 Vẽ lưu đồ giải thuật và viết chương trình điều khiển.

;***************************************************
;CHUONG TRINH DIEU KHIEN LCD HIEN THI DONG CHU 1 DICH CHUYEN, DONG CHU 2 DUNG YEN
;***************************************************
;RS -> P0.0, RW -> P0.1, E -> P0.2
;DATA BUS -> PORT 1
;***************************************************
EN BIT P0.2
RW BIT P0.1
RS BIT P0.0
DATABUS EQU P1
;***************************************************
ORG 00H
MAIN:
ACALL LCDINIT ;KHOI TAO LCD
ACALL DISP_SLINE ;HIEN THI DONG 2
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 2: Chương trình điều khiển LCD hiển thị hai dòng chữ “WELLCOME TO MICROCONTROLLER
SYSTEM – 51” và “DESIGNED BY: PQT.” trên hai dòng của màn hình LCD với yêu cầu: dòng chữ
thứ nhất sẽ dịch chuyển liên tục từ phải sang trái, dòng chữ thứ hai đứng yên.
Giáo trình thực hành vi xử lý. 8 Biên soạn: Phạm Quang Trí
MP1: ;XU LY DICH CHUYEN DU LIEU HIEN THI CHO DONG 1

MOV DPTR,#FLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 1 CUA LCD
SHIFT:
ACALL DISP_FLINE ;HIEN THI DONG 1
MOV R1,#50 ;DELAY 500MS
DEL500:
MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
ACALL DELAY
DJNZ R1,DEL500 ;THOI GIAN DUNG YEN CUA MOT TRANG THAI MAN HINH LCD
INC DPTR ;TANG GIA TRI DPTR DE DICH CHUYEN DONG CHU
MOV A,DPL ;KIEM TRA DA DICH XONG DONG CHU RA MAN HINH LCD
CJNE A,#LOW(FLINE_DATA+55),SHIFT
MOV A,DPH
CJNE A,#HIGH(FLINE_DATA+55),SHIFT
SJMP MP1
;***************************************************
LCDINIT: ;CTC KHOI TAO LCD
CLR RS ;RS = 0 - GUI LENH
CLR RW ;RW = 0 - WRITE LCD MODE
SETB EN ;E = 1 - ENABLE
MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV TH0,#HIGH(-4100)
MOV TL0,#LOW(-4100)
ACALL DELAY ;DELAY 4.1MS
MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV TH0,#HIGH(-100)
MOV TL0,#LOW(-100)
ACALL DELAY ;DELAY 100US

MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DATABUS,#0CH ;CODE = 0CH - CHO PHEP LCD HIEN THI
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DATABUS,#01H ;CODE = 01H - XOA LCD
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DATABUS,#06H ;CODE = 06H - TU TANG DIA CHI HIEN THI, TAT DICH CHUYEN HIEN THI
ACALL SENDCOMMAND ;GUI LENH RA LCD
RET
;***************************************************
SENDCOMMAND: ;CTC GUI LENH (SENDCOMMAND) VA GUI DU LIEU (SENDDATA) RA LCD
CLR RS ;RS = 0 - GUI LENH
SJMP PULSE_EN
SENDDATA:
SETB RS ;RS = 1 - GUI DU LIEU
NOP
PULSE_EN: ;TAO XUNG ENABLE DE CHUYEN THONG TIN (COMMAND/DATA) VAO LCD
CLR RW ;RW = 0 - WRITE LCD MODE
CLR EN ;EN = 0
NOP
SETB EN ;EN = 1 - XUNG ENABLE
NOP
;KIEM TRA CO BAO BAN (BUSY FLAG) DE DAM BAO HOAN TAT VIEC LCD GHI NHAN THONG TIN GUI DEN
;*************************************************************
;MOV TH0,#HIGH(-1000) ;LENH NAY DUOC THAY THE CHO DOAN MA KIEM TRA DUOI DAY KHI
;MOV TL0,#LOW(-1000) ;CHAY CHUONG TRINH NAY TRONG PHAN MEM MO PHONG TOPVIEW
;ACALL DELAY
;*************************************************************
MOV DATABUS,#0FFH ;CAU HINH PORT 1 CHO CHE DO PORT NHAP
SETB RW ;RW = 1 - READ LCD MODE

CLR RS ;RS = 0 - GUI LENH
CLR EN ;EN = 0
NOP
SETB EN ;EN = 1 - XUNG ENABLE
NOP
BUSY: ;BUSY = 0 -> HOAN TAT, BUSY = 1 -> DANG THUC HIEN
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 2: Chương trình điều khiển LCD hiển thị hai dòng chữ “WELLCOME TO MICROCONTROLLER
SYSTEM – 51” và “DESIGNED BY: PQT.” trên hai dòng của màn hình LCD với yêu cầu: dòng chữ
thứ nhất sẽ dịch chuyển liên tục từ phải sang trái, dòng chữ thứ hai đứng yên.
Giáo trình thực hành vi xử lý. 9 Biên soạn: Phạm Quang Trí
MOV A,DATABUS ;DOC DU LIEU TU LCD
JB ACC.7,BUSY ;KIEM TRA CO BUSY
BUSY2: ;KIEM TRA CO BAO BAN (BUSY FLAG) LAN THU HAI
MOV A,DATABUS ;DOC DU LIEU TU LCD
JB ACC.7,BUSY2 ;KIEM TRA CO BUSY LAN 2
CLR RW ;RW = 0 - WRITE LCD MODE (THOAT CHE DO READ, TRO VE CHE DO WRITE)
;*************************************************************
RET
;***************************************************
DISP_FLINE: ;CTC DAT DIA CHI BAT DAU DONG 1 VA NAP DU LIEU DONG 1 VAO DDRAM
MOV DATABUS,#80H ;CODE = 80H - DAT DDRAM DIA CHI BAT DAU CUA DONG 1 - 00H
ACALL SENDCOMMAND ;GUI LENH RA LCD
ACALL WRITE ;GUI VUNG DU LIEU SANG LCD
RET
;***************************************************
DISP_SLINE: ;CTC DAT DIA CHI BAT DAU DONG 2 VA NAP DU LIEU DONG 2 VAO DDRAM
MOV DATABUS,#0C0H ;CODE = C0H - DAT DDRAM DIA CHI BAT DAU CUA DONG 2 - 40H
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DPTR,#SLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 2 CUA LCD

ACALL WRITE ;GUI VUNG DU LIEU SANG LCD
RET
;***************************************************
WRITE: ;CTC GUI DU LIEU SANG LCD, KET THUC GUI DU LIEU KHI DU LIEU GUI DI LA 99H
MOV R0,#0 ;OFFSET DAU TIEN TRONG VUNG DU LIEU CUA DPTR
WR1:
MOV A,R0 ;NAP OFFSET
MOVC A,@A+DPTR ;LAY DU LIEU TU VUNG DU LIEU
MOV DATABUS,A ;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD
ACALL SENDDATA ;GUI DU LIEU RA LCD
INC R0 ;CHUYEN SANG DU LIEU KE TIEP
CJNE R0,#16,WR1 ;KIEM TRA NAP DAY DU DU LIEU CHO MOT DONG MAN HINH - 16 CHU
RET
;***************************************************
DELAY:
MOV TMOD,#01H
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
;***************************************************
FLINE_DATA: ;DU LIEU HIEN THI DONG 1
DB ' '
DB 'WELLCOME TO MICROCONTROLLER SYSTEM - 51'
DB ' '
SLINE_DATA: ;DU LIEU HIEN THI DONG 2
DB 'DESIGNED BY: PQT'
END
1.4 Thực hiện lần lượt các bước từ 1.3 đến 1.8 tương tự như bài trên.

2 Bài tập:
(xem thêm trong phần hướng dẫn và phần bài tập của Bài 3)
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 10 Biên soạn: Phạm Quang Trí
1 Trình tự tiến hành thí nghiệm:
1.1 Kết nối thiết bị thí nghiệm.
• Tắt nguồn cấp cho mô hình thí nghiệm.
• Dùng dây bus 3 nối J63 (PORT0 / DATA) ở khối vi điều khiển với J47 (CTRL LCD) ở khối LCD (chú ý
là ta chỉ nối 3 bit thấp của J63 và J47 với nhau).
• Dùng dây bus 8 nối J64 (PORT1) ở khối vi điều khiển với J46 (DATA / CODE LCD) ở khối LCD.
• Dùng dây bus 8 nối J66 (PORT3 / FUNCTION) ở khối vi điều khiển với J76 (MOMENTARY SW) ở khối
nút nhấn.
• Dùng dây hai bus 3 nối J104 (POWER) ở khối LCD và J114 (POWER) ở khối nút nhấn với nguồn +5V ở
khối nguồn.
MOMENTARY
SW
POWER
PORT 0PORT 1PORT 3PORT 2
PORT 1PORT 3
40 PINS
20 PINS
3

1.2 Sơ đồ nguyên lý của hệ thống:
AD7

AD0
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
AD6
AD5
AD4
AD3
AD2
AD1
D0
D7
AD2
AD0
AD1
D0
D1
D2
D3
D4
D5
D6
D1
D2
D3

D4
D5
D6
D7
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33

P0.7/AD7
32
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17

P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
C1
33p
C2
33p
X1
12MHz
C3
10uF

R1
10k
+5V
2
3
4
5
6
7
8
9
1
RP1
10K
+5V
MAÏCH ÑIEÀU KHIEÅN LCD
MAÏCH ÑIEÀU KHIEÅN LCDMAÏCH ÑIEÀU KHIEÅN LCD
MAÏCH ÑIEÀU KHIEÅN LCD
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9

D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
ALPHANUMERIC LCD 16 CHAR x 2 LINE
RV1
10K
+5V
PULSE BUTTON
R2
10k
+5V

E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị

trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 11 Biên soạn: Phạm Quang Trí
1.3 Vẽ lưu đồ giải thuật và viết chương trình điều khiển.

;***************************************************
;CHUONG TRINH DIEU KHIEN LCD HIEN THI DONG CHU 1 HIEN THI XUNG, DONG CHU 2 DICH CHUYEN
;***************************************************
;RS -> P0.0, RW -> P0.1, E -> P0.2
;DATA BUS -> PORT 1
;MOMENTARY SW -> PORT 3 (P3.0 -> ACT = 0)
;***************************************************
EN BIT P0.2
RW BIT P0.1
RS BIT P0.0
DATABUS EQU P1
;***************************************************
ORG 00H
MAIN:
ACALL LCDINIT ;KHOI TAO LCD
ACALL DISP_FLINE ;HIEN THI DONG 1
MOV R7,#0 ;SO XUNG BAN DAU
MP1:
MOV DPTR,#SLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 2 CUA LCD
SHIFT:
ACALL DISP_SLINE ;HIEN THI DONG 2
ACALL DISP_PULSE ;HIEN THI SO XUNG
JB P3.0,DEL500 ;TIEP TUC CHUONG TRINH KHI KHONG NHAN NUT NHAN
JNB P3.0,$ ;CHO NHA NUT NHAN
MOV A,R7 ;TANG GIA TRI KHI CO NHAN NUT NHAN

ADD A,#1
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 12 Biên soạn: Phạm Quang Trí
DA A
MOV R7,A
MOV R1,#100 ;DELAY 500MS
DEL500:
MOV TH0,#HIGH(-5000)
MOV TL0,#LOW(-5000)
ACALL DELAY
DJNZ R1,DEL500 ;THOI GIAN DUNG YEN CUA MOT TRANG THAI MAN HINH LCD
INC DPTR ;TANG GIA TRI DPTR DE DICH CHUYEN DONG CHU
MOV A,DPL ;KIEM TRA DA DICH XONG DONG CHU RA MAN HINH LCD
CJNE A,#LOW(SLINE_DATA+106),SHIFT
MOV A,DPH
CJNE A,#HIGH(SLINE_DATA+106),SHIFT
SJMP MP1
;***************************************************
LCDINIT: ;CTC KHOI TAO LCD
CLR RS ;RS = 0 - GUI LENH
CLR RW ;RW = 0 - WRITE LCD MODE
SETB EN ;E = 1 - ENABLE
MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV TH0,#HIGH(-4100)

MOV TL0,#LOW(-4100)
ACALL DELAY ;DELAY 4.1MS
MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV TH0,#HIGH(-100)
MOV TL0,#LOW(-100)
ACALL DELAY ;DELAY 100US
MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DATABUS,#0CH ;CODE = 0CH - CHO PHEP LCD HIEN THI
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DATABUS,#01H ;CODE = 01H - XOA LCD
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DATABUS,#06H ;CODE = 06H - TU TANG DIA CHI HIEN THI, TAT DICH CHUYEN HIEN THI
ACALL SENDCOMMAND ;GUI LENH RA LCD
RET
;***************************************************
SENDCOMMAND: ;CTC GUI LENH (SENDCOMMAND) VA GUI DU LIEU (SENDDATA) RA LCD
CLR RS ;RS = 0 - GUI LENH
SJMP PULSE_EN
SENDDATA:
SETB RS ;RS = 1 - GUI DU LIEU
NOP
PULSE_EN: ;TAO XUNG ENABLE DE CHUYEN THONG TIN (COMMAND/DATA) VAO LCD
CLR RW ;RW = 0 - WRITE LCD MODE
CLR EN ;EN = 0
NOP
SETB EN ;EN = 1 - XUNG ENABLE
NOP
;KIEM TRA CO BAO BAN (BUSY FLAG) DE DAM BAO HOAN TAT VIEC LCD GHI NHAN THONG TIN GUI DEN

;*************************************************************
;MOV TH0,#HIGH(-1000) ;LENH NAY DUOC THAY THE CHO DOAN MA KIEM TRA DUOI DAY KHI
;MOV TL0,#LOW(-1000) ;CHAY CHUONG TRINH NAY TRONG PHAN MEM MO PHONG TOPVIEW
;ACALL DELAY
;*************************************************************
MOV DATABUS,#0FFH ;CAU HINH PORT 1 CHO CHE DO PORT NHAP
SETB RW ;RW = 1 - READ LCD MODE
CLR RS ;RS = 0 - GUI LENH
CLR EN ;EN = 0
NOP
SETB EN ;EN = 1 - XUNG ENABLE
NOP
BUSY: ;BUSY = 0 -> HOAN TAT, BUSY = 1 -> DANG THUC HIEN
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 13 Biên soạn: Phạm Quang Trí
MOV A,DATABUS ;DOC DU LIEU TU LCD
JB ACC.7,BUSY ;KIEM TRA CO BUSY
BUSY2: ;KIEM TRA CO BAO BAN (BUSY FLAG) LAN THU HAI
MOV A,DATABUS ;DOC DU LIEU TU LCD
JB ACC.7,BUSY2 ;KIEM TRA CO BUSY LAN 2
CLR RW ;RW = 0 - WRITE LCD MODE (THOAT CHE DO READ, TRO VE CHE DO WRITE)
;*************************************************************
RET
;***************************************************
DISP_FLINE: ;CTC DAT DIA CHI BAT DAU DONG 1 VA NAP DU LIEU DONG 1 VAO DDRAM

MOV DATABUS,#80H ;CODE = 80H - DAT DDRAM DIA CHI BAT DAU CUA DONG 1 - 00H
ACALL SENDCOMMAND ;GUI LENH RA LCD
MOV DPTR,#FLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 1 CUA LCD
ACALL WRITE ;GUI VUNG DU LIEU SANG LCD
RET
;***************************************************
DISP_SLINE: ;CTC DAT DIA CHI BAT DAU DONG 2 VA NAP DU LIEU DONG 2 VAO DDRAM
MOV DATABUS,#0C0H ;CODE = C0H - DAT DDRAM DIA CHI BAT DAU CUA DONG 2 - 40H
ACALL SENDCOMMAND ;GUI LENH RA LCD
ACALL WRITE ;GUI VUNG DU LIEU SANG LCD
RET
;***************************************************
DISP_PULSE: ;CTC HIEN THI SO XUNG TAI CHAN P3.0
MOV DATABUS,#88H ;CODE = 88H - DAT DDRAM DIA CHI HIEN THI SO XUNG - 08H
ACALL SENDCOMMAND ;GUI LENH RA LCD
ACALL BCDTOASCII ;GOI CHUONG TRINH GIAI MA BCD SANG ASCII
MOV DATABUS,7FH ;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD (HANG CHUC)
ACALL SENDDATA
MOV DATABUS,7EH ;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD (HANG DON VI)
ACALL SENDDATA
RET
;***************************************************
BCDTOASCII: ;CTC CHUYEN DOI TU SO BCD CHUA TRONG R7 (00 - 99) SANG MA ASCII (2 MA)
MOV A,R7 ;LAY GIA TRI BCD (R7) CAN CHUYEN DOI
ANL A,#0FH ;GIU LAI 4 BIT THAP (HANG DON VI)
ADD A,#30H ;DOI SANG ASCII (ASCII = BCD + 30H)
MOV 7EH,A ;CAT SO ASCII VAO VUNG NHO HANG DON VI
MOV A,R7 ;LAY GIA TRI BCD (R7) CAN CHUYEN DOI
ANL A,#0F0H ;GIU LAI 4 BIT CAO (HANG CHUC)
SWAP A

ADD A,#30H ;DOI SANG ASCII (ASCII = BCD + 30H)
MOV 7FH,A ;CAT SO ASCII VAO VUNG NHO HANG CHUC
RET
;***************************************************
WRITE: ;CTC GUI DU LIEU SANG LCD, KET THUC GUI DU LIEU KHI DU LIEU GUI DI LA 99H
MOV R0,#0 ;OFFSET DAU TIEN TRONG VUNG DU LIEU CUA DPTR
WR1:
MOV A,R0 ;NAP OFFSET
MOVC A,@A+DPTR ;LAY DU LIEU TU VUNG DU LIEU
MOV DATABUS,A ;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD
ACALL SENDDATA ;GUI DU LIEU RA LCD
INC R0 ;CHUYEN SANG DU LIEU KE TIEP
CJNE R0,#16,WR1 ;KIEM TRA NAP DAY DU DU LIEU CHO MOT DONG MAN HINH - 16 CHU
RET
;***************************************************
DELAY: ;CTC DELAY CO KET HOP KIEM TRA NUT NHAN P3.0
MOV TMOD,#01H
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0

RET
;***************************************************
FLINE_DATA: ;DU LIEU HIEN THI DONG 1
DB 'PULSE = '
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị

trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 14 Biên soạn: Phạm Quang Trí
SLINE_DATA: ;DU LIEU HIEN THI DONG 2
DB ' '
DB 'DESIGNED BY PHAM QUANG TRI'
DB ' - ELECTRIC TRAINING CENTER - '
DB 'HO CHI MINH UNIVERSITY OF INDUSTRY'
DB ' '
END
1.4 Thực hiện lần lượt các bước từ 1.3 đến 1.8 tương tự như bài trên.
2 Bài tập:
• Bài 1: Hãy viết chương trình điều khiển LCD hiển thị hai dòng chữ “KHOA CONG NGHE” và “DIEN
TU” đứng yên trên hai dòng của màn hình LCD.
• Bài 2: Hãy viết chương trình điều khiển LCD hiển thị hai dòng chữ “KHOA CONG NGHE DIEN TU –
BO MON DIEN TU CONG NGHIEP” và “DH CONG NGHIEP” trên hai dòng của màn hình LCD với yêu
cầu: dòng chữ thứ nhất dịch chuyển liên tục từ phải sang trái, dòng chữ thứ hai đứng yên.
• Bài 3: Hãy viết chương trình điều khiển LCD hiển thị hai dòng chữ “TRUONG DAI HOC CONG
NGHIEP THANH PHO HO CHI MINH” và “KHOA CONG NGHE DIEN TU – BO MON DIEN TU
CONG NGHIEP” trên hai dòng của màn hình LCD với yêu cầu: hai dòng chữ đồng thời dịch chuyển liên
tục từ phải sang trái.
• Bài 4: Hãy viết chương trình điều khiển LCD hiển thị một số ký tự đặc biệt như:
α
αα
α β
ββ
β χ
χχ
χ δ
δδ

δ ε
εε
ε φ
φφ
φ γ
γγ
γ η
ηη
η ι
ιι
ι ϕ
ϕϕ
ϕ κ
κκ
κ
λ
λλ
λ µ
µµ
µ ν
νν
ν ο
οο
ο π
ππ
π θ
θθ
θ ρ
ρρ
ρ σ

σσ
σ τ
ττ
τ υ
υυ
υ ϖ
ϖϖ
ϖ ω
ωω
ω
trên hai dòng của màn hình LCD.
• Bài 5: Hãy viết chương trình điều khiển LCD hiển thị một số ký tự đặc biệt như:
á à ả ã ạ â ấ ầ ẩ ẫ ậ
ắ ằ ẳ ẵ ặ đ é è ẻ ẽ ẹ ê ế ề ể ễ ệ í ì ỉ ĩ ị ó ò ỏ õ ọ ô ố ồ ổ ỗ ộ ơ ớ ờ ở ỡ ợ ú ù ủ ũ ụ ư ứ
ừ ử ữ ự ý ỳ ỷ ỹ ỵ
trên hai dòng của màn hình LCD.
• Bài 6: Hãy viết chương trình điều khiển LCD hiển thị hai dòng chữ “HO CHI MINH UNIVERSITY OF
INDUSTRY – ELECTRONIC TRAINNING CENTER” và “IN 1 = … IN 2 = …” trên hai dòng của màn
hình LCD với yêu cầu: dòng chữ thứ nhất sẽ dịch chuyển từ phải sang trái, số lượng xung đếm được tại
chân P3.0 (IN 1) và chân P3.1 (IN 2) sẽ được hiển thị trên dòng thứ nhất tiếp phía sau dòng chữ “UP = …
DOWN= …”. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
• Bài 7: Hãy viết chương trình điều khiển LCD hiển thị hai dòng chữ tiếng Việt có dấu (tự chọn nội dung
hiển thị) trên hai dòng của màn hình LCD.
• Bài 8: Sinh viên tự mình suy nghĩ và phát triển thêm chương trình.
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.

Giáo trình thực hành vi xử lý. 15 Biên soạn: Phạm Quang Trí
3 Hướng dẫn:
3.1 Giới thiệu LCD (Liquid Crystal Display):

Trong các ví dụ của phần này, mô tả một kỹ thuật đơn giản để hiển thị các ký tự mặc định của nhà sản xuất từ
bộ phát ký tự nội và các ký tự được người sử dụng thiết kế trên một modul LCD ký tự. Modul LCD được kết nối
với vi điều khiển thông qua các port xuất nhập. Modul LCD cũng có thể được kết nối trực tiếp với bus dữ liệu kết
hợp với mạch giải mã địa chỉ. Các modul LCD này được thiết kế chuyên biệt để sử dụng với các loại vi điều khiển
khác nhau. Điều này có nghĩa là nó không thể được kích hoạt bởi các mạch IC đơn giản. Modul LCD trình bày ở
đây được sử dụng để hiển thị các thông tin đơn giản (dưới dạng các ký tự).
Kiểu modul LCD được trình bày ở đây, trong thực tế được sử dụng rất nhiều do có cấu trúc đơn giản, dễ sử
dụng và giá thành thấp. Modul LCD được thiết kế trên cơ sở vi điều khiển HD44780 (Hitachi) và có thể hiển thị
thông tin trên 2 dòng, mỗi dòng có 16 ký tự. Nó có thể hiển thị tất cả các chữ trong bảng chữ cái, chữ Hy Lạp, các
dấu chấm câu, các ký hiệu toán học,…. Thêm vào đó, modul LCD này có thể hiển thị được các ký hiệu do người sử
dụng thiết kế ra. Ngoài ra còn có một số đặc trưng hữu dụng khác như tự động dịch chuyển thông tin hiển thị (dịch
trái và dịch phải), hiển thị con trỏ, đèn nền,…
Qui trình hiển thị thông tin trên modul LCD này được chia ra làm 3 bước.
• Bước 1: Modul LCD phải được khởi động. Thao tác này sẽ thiết lập các thông số hoạt động cho chip
điều khiển được tích hợp sẵn trên modul LCD.
• Bước 2: Các ký tự do người sử dụng thiết kế sẽ được tải vào trong CGRAM. Thao tác này cho phép
hiển thị thêm 8 ký tự người dùng vào tổng số 192 ký tự được lưu trữ mặc định trên modul.
• Bước 3: Nội dung của thông tin bao gồm các ký tự ASCII chuẩn và các ký tự do người sử dụng thiết
kế được hiển thị trên modul.
3.2 Chức năng các chân của LCD – HD44780:
Modul LCD có các chân được bố trí thành một hàng ngang trên một bo mạch nhỏ, được dùng để kết nối với vi
điều khiển. Có tất cả là 14 chân được đánh số thứ tự (sẽ là 16 chân trong trường hợp đèn nền được tích hợp). Chức
năng của các chân này được mô tả trong bảng dưới đây.
Do ngày nay, các modul LCD được sản xuất bởi các hãng khác nhau hoặc xuất xứ từ các quốc gia khác nhau.
Cho nên thông số kỹ thuật và cách bố trí thứ tự các chân trên modul LCD sẽ có nhiều điểm không đồng nhất so với
modul LCD (chuẩn) được trình bày ở đây. Cho nên, khi sử dụng các modul LCD ta cần phải lưu ý rằng luôn luôn

kiểm tra lại bảng thông số kỹ thuật (datasheet) được cung cấp bởi nhà sản xuất kèm theo từng loại LCD. Phải chú ý
kiểm tra lại vị trí chân số 1 trên modul so với bảng thông số kỹ thuật. Việc sử dụng modul LCD không đúng thông
số kỹ thuật hoặc kết nối sai vị trí chân có thể dẫn đến việc làm cho LCD không hoạt động như mong muốn hoặc bị
hư hỏng, không thể phục hồi lại được.
Bảng mô tả chức năng các chân của các modul LCD ký tự (chuẩn công nghiệp)
Số
chân
Tên Chức năng
Mức
logic
I/O Mô tả
1 Vss Nguồn cung cấp cho LCD - - GND
2 Vdd Nguồn cung cấp cho LCD - - +5V
3 Vee Chỉnh độ tương phản - - 0 - Vdd
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 16 Biên soạn: Phạm Quang Trí
0 I
D0 – D7 đóng vai trò là ngõ
vào lệnh.
4 RS
1 I
D0 – D7 đóng vai trò là ngõ
vào dữ liệu.
0 I
Ghi thông tin (từ bộ điều

khiển đến LCD)
5 R/W
1 I
Đọc thông tin (từ LCD đến
bộ điều khiển)
0 I Cấm truy xuất LCD
1 I LCD hoạt động bình thường
6 E
Điều khiển hoạt động của LCD
Từ 1
xuống
0
I
Các dữ liệu/Lệnh được
truyền tới LCD
7 D0 0/1 I/O Bit 0 LSB
8 D1 0/1 I/O Bit 1
9 D2 0/1 I/O Bit 2
10 D3 0/1 I/O Bit 3
11 D4 0/1 I/O Bit 4
12 D5 0/1 I/O Bit 5
13 D6 0/1 I/O Bit 6
14 D7
Dữ liệu / Lệnh
0/1 I/O Bit 7 MSB
15 A Nguồn cung cấp cho LED nền - - V(+)
16 K Nguồn cung cấp cho LED nền - - 0V

3.3 Màn hình của LCD – HD44780:
Màn hình LCD có 2 dòng, trên mỗi dòng có khả năng hiển thị 16 ký tự. Mỗi ký tự là một ma trận điểm (dot

matrix) có kích thước 5 x 8 hoặc 5 x 11. Ở đây chỉ trình bày ký tự có kích thước 5 x 8 bởi vì trên thực tế nó thường
được sử dụng nhiều hơn.

Độ tương phản trên màn hình LCD phụ thuộc vào nguồn cung cấp và các thông tin được hiển thị trên một hoặc
hai dòng. Để điều chỉnh độ tương phản ta thay đổi giá trị điện áp (từ 0V đến Vdd) cung cấp cho chân có ký hiệu là
Vee. Để làm điều này ta có thể dùng một biến trở để điều chỉnh mức điện áp, xem cách mắc biến trở như hình bên
dưới. Trong một số loại LCD, để tiện cho việc quan sát các thông tin hiển thị trên LCD được rõ ràng, nhất là khi
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 17 Biên soạn: Phạm Quang Trí
ánh sáng môi trường bên ngoài không đủ độ chiếu sáng, người ta thường tích hợp trên modul LCD một đèn nền
(Backlight) có màu xanh dương hoặc màu xanh lá cây. Trong quá trình sử dụng, để kéo dài tuổi thọ cho đèn nền
của LCD ta nên mắc nối tiếp với đèn nền một điện trở để giới hạn dòng điện qua đèn (tương tự như giới hạn dòng
qua các LED thông thường). Hình dưới đây trình bày cách kết nối mạch khi modul LCD có sử dụng đèn nền và
cách điều chỉnh độ tương phản của LCD.

Ghi chú: Nếu trên LCD không có ký tự nào được hiển thị hoặc tất cả các ký tự đều bị mờ trong quá trình LCD
hoạt động, thì điều đầu tiên ta nên làm là kiểm tra lại biến trở để điều chỉnh độ tương phản cho phù hợp. Tương tự
cho trường hợp chế độ hoạt động bị thay đổi (hiển thị thông tin trên một dòng hoặc hai dòng).
3.4 Bộ nhớ trong LCD – HD44780:
Trong modul LCD có 3 khối bộ nhớ: DDRAM (Display Data RAM), CGRAM (Character Generator RAM) và
CGRAM (Chareacter Generator ROM).
3.4.1 Bộ nhớ DDRAM:
Bộ nhớ DDRAM được dùng để lưu trữ các ký tự mà nó sẽ được hiển thị trên màn hình LCD. Kích thước của
bộ nhớ này có khả năng lưu trữ đến 80 ký tự. Một phần bộ nhớ được kết nối trực tiếp đến các ký tự trên màn hình
hiển thị. Các ô nhớ có địa chỉ 00H – 0FH dùng để lưu giữ thông tin hiển thị hiện tại cho hàng thứ nhất, các ô nhớ

có địa chỉ 40H – 4FH dùng để lưu giữ thông tin hiển thị hiện tại cho hàng thứ hai.

Tất cả các chức năng rất đơn giản: nó có khả năng thiết lập việc hiển thị sao cho các địa chỉ được tăng lên một
cách tự động (dịch phải). Tiếp theo, nó sẽ đặt giá trị địa chỉ bắt đầu cho thông tin cần được hiển thị (ví dụ 00H).
Sau đó, tất cả các ký tự được gửi thông qua các đường D0 – D7 sẽ được hiển thị như là một thông tin chúng ta
thường thấy từ trái sang phải. Trong trường hợp này, quá trình hiển thị bắt đầu từ ký tự đầu tiên ở dòng thứ nhất
trên màn hình, khi đó địa chỉ là 00H. Nếu có nhiều hơn 16 ký tự được gửi đến, tất cả ký tự này cũng sẽ được ghi
nhớ lại nhưng sẽ không được hiển thị (chỉ hiển thị được 16 ký tự đầu tiên). Để có thể nhìn thấy được hết các ký tự
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 18 Biên soạn: Phạm Quang Trí
này, ta cần phải sử dụng lệnh dịch chuyển. Từ hình ảnh minh họa bộ nhớ DDRAM bên trên, chúng ta nhận thấy
rằng mọi thứ có thể được nhìn thấy nếu màn hình LCD là một “cửa sổ” mà nó được di chuyển từ trái sang phải trên
các ô nhớ chứa ký tự. Trong thực tế, điều đó tạo ra hiệu ứng thông tin “di chuyển” trên màn hình (từ trái sang phải
hoặc ngược lại).
Nếu con trỏ được cho phép hiển thị, nó sẽ xuất hiện tại vị trí đang được định địa chỉ. Trong trường hợp này, các
ký tự sẽ xuất hiện tại vị trí của con trỏ trong khi con trỏ được di chuyển một cách tự động sang vị trí được định địa
chỉ kế tiếp. Khi đó, đây là một phần của bộ nhớ RAM mà dữ liệu có thể được ghi vào và đọc từ đó. Ở đây có một
điểm bất lợi là các nội dung sẽ bị mất đi khi nguồn cung cấp cho modul LCD bị ngắt.
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 19 Biên soạn: Phạm Quang Trí

3.4.2 Bộ nhớ CGROM:
Một “bản đồ” với tất cả các ký tự có thể hiển thị được trên modul LCD khi ở chế độ mặc định. Mỗi ký tự sẽ có
một địa chỉ 8 bit tương ứng trong bộ nhớ CGROM.

E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 20 Biên soạn: Phạm Quang Trí
Địa chỉ của các ô nhớ trong CGROM thì phù hợp với giá trị ASCII chuẩn của các ký tự (chẳng hạn mã ASCII
chuẩn của ký tự “A” là 41H, quan sát trong bản đồ nhớ bên trên thì ta thấy ký tự “A” cũng có địa chỉ trong
CGROM là 41H, tương tự cho các ký tự còn lại). Điều này có nghĩa là nếu trong một chương trình, giả sử rằng vi
điều khiển thực thi lệnh “xuất ký tự P ra port” thì giá trị nhị phân 01010000 sẽ xuất hiện tại port tương ứng. Giá trị
này là mã ASCII tương đương cho ký tự P. Khi đó, con số nhị phân này được gửi tới LCD, một ký hiệu được lưu
trữ tại ô nhớ 01010000 trong CGROM sẽ được hiển thị lên màn hình LCD. Trong trường hợp này thì ký tự “P” sẽ
được hiển thị. Điều này áp dụng cho tất cả các ký tự của bảng chữ cái nhưng không áp dụng cho các số.
Nếu ta quan sát một cách chi tiết “bản đồ” các ký tự trong bộ nhớ này, ta có thể nhận thấy rằng địa chỉ của tất
cả các con số được “dịch” đi 48 đơn vị khi so sánh giá trị của các con số này (ví dụ địa chỉ của số 0 là 48, của số 1
là 49, của số 2 là 50,…). Chính vì lý do này và để hiển thị một cách chính xác các con số thì mỗi con số phải được
cộng thêm một giá trị thập phân là 48 trước khi được gửi đến LCD.
Ghi chú: Vào thời điểm khi chiếc máy tính đầu tiên được chế tạo, nó chỉ ghi nhận các số nhưng không ghi
nhận các chữ. Điều này có nghĩa là việc gửi bất cứ ký tự nào từ bàn phím đến PC, từ PC đến máy in hoặc từ vi điều
khiển đến máy tính, thông qua đường dây liên kết thì thật ra là gửi các con số nhị phân thay cho các ký tự. Một
bảng mà nó liên kết tất cả các ký hiệu chuẩn và các con số tương đương của chúng được gọi là “bảng mã ASCII”.
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị

trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 21 Biên soạn: Phạm Quang Trí
3.4.3 Bộ nhớ CGRAM:
Bên cạnh khả năng có thể hiển thị tất cả các ký tự chuẩn, modul LCD này còn có thể hiển thị các ký hiệu mà
người sử dụng định nghĩa cho LCD. Nó cho phép hiển thị các kiểu chữ cũng như nhiều ký hiệu khác được định
dạng trong một khung có kích thước 5 x 8 điểm. Bộ nhớ RAM (CGRAM) có kích thước 64 byte.
Kích thước các thanh ghi của bộ nhớ này là 8 bit, nhưng chỉ có 5 bit thấp là được sử dụng. Mức 1 trong mỗi bit
của thanh ghi tượng trưng cho một điểm đen, trong khi đó 8 thanh ghi liên tiếp nhau sẽ tương ứng với một ký tự.
Để hiểu rõ hơn vấn đề này ta có thể quan sát hình ảnh được trình bày dưới đây về cách thức tạo ra một ký hiệu do
người sử dụng định nghĩa:

Các ký hiệu thường được định nghĩa ngay khi bắt đầu một chương trình bằng cách đơn giản là ghi các giá trị 0
và 1 vào các thanh ghi tương ứng của bộ nhớ CGRAM để có được các ký hiệu mong muốn. Trong bộ nhớ
CGRAM, các thanh ghi có địa chỉ 00H – 07H chứa mã của ký hiệu thứ nhất; các thanh ghi có địa chỉ 08H – 0FH
chứa mã của ký hiệu thứ hai; … và các thanh ghi có địa chỉ 38H – 3FH chứa mã của ký hiệu thứ tám. Mỗi ký hiệu
(trong tổng số 8 ký hiệu mà người sử dụng có thể định nghĩa được) sẽ được định địa chỉ từ 00H – 07H tương tự
như các ký tự chuẩn trong bản đồ CGROM của các ký tự (xem bản đồ nhớ CGROM ta sẽ nhận thấy cột đầu tiên
của bản đồ được để trống dùng để định địa chỉ cho các ký tự được tạo ra bởi người sử dụng).
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 22 Biên soạn: Phạm Quang Trí
3.5 Tập lệnh của LCD – HD44780:
Tất cả các dữ liệu được truyền tới LCD thông qua các đường D0 – D7 sẽ được coi như là một lệnh hoặc một dữ
liệu, điều này tùy thuộc vào trạng thái logic đặt vào chân RS.
RS = 1: Các bit D0 – D7 đóng vai trò là địa chỉ của các ký tự cần được hiển thị. Bộ xử lý tích hợp trên modul

LCD sẽ xác định địa chỉ trong “bản đồ các ký tự” tích hợp sẵn trên chip và hiển thị các ký hiệu tương ứng lên màn
hình LCD. Vị trí hiển thị được xác định bởi địa chỉ DDRAM. Địa chỉ này hoặc là được định nghĩa trước đó hoặc là
địa chỉ của ký tự truyền trước đó được tăng lên một cách tự động.
RS = 0: Các bit D0 – D7 đóng vai trò là các lệnh được dùng để xác định chế độ hiển thị.Danh sách các lệnh
được dùng để “định dạng” LCD được trình bày trong bảng dưới đây:


Lệnh Mô tả lệnh
RS

RW

D7

D6

D5

D4

D3

D2

D1

D0

Thời gian
thực hiện

Xóa hiển thị.
Xóa hiển thị và trả con trỏ về vị trí

đầu dòng (địa chỉ 0).
0 0 0 0 0 0 0 0 0 1
1.64mS
Con trỏ về đầu
dòng.
Trả con trỏ về vị trí đầu dòng (đị
a
chỉ 0). Các nộ
i dung trong DDRAM
không thay đổi.
0 0 0 0 0 0 0 0 1 *
1.64mS
Đặt chế độ đầu vào.

Đặt chiều di chuyển con trỏ
(I/D),
qui định việc dịch chuyển hiển thị

(S). Các hoạt động này được thự
c
hiện trong quá trình đọc/ghi dữ liệu.

0 0 0 0 0 0 0 1 I/D

S
40uS
Điều khiển bật/tắt

hiển thị.
Đặt bật/tắt hiển thị (D), bật/tắ
t con
trỏ (C) và nhấp nháy con trỏ vị trí

ký tự (B).
0 0 0 0 0 0 1 D C B

40uS
Dời con trỏ/hiển
thị.
Đặt di chuyển con trỏ hoặc dị
ch
chuyển hiển thị (S/C), chiều dị
ch
chuyển (R/L). Các nộ
i dung trong
DDRAM không thay đổi.
0 0 0 0 0 1 S/C

R/L

* *
40uS
Đặt chức năng.
Đặt kích thước dữ liệu giao tiế
p
(DL), số lượng dòng hiển thị (N) và

kiểu chữ của ký tự (F).

0 0 0 0 1 DL

N F * *
40uS
Đặt địa chỉ
CGRAM.
Đặt địa chỉ CGRAM. Dữ liệ
u
CGRAM được gửi và nhậ
n sau khi
thiết lập điều này.
0 0 0 1 Địa chỉ CGRAM
40uS
Đặt địa chỉ
DDRAM.
Đặt địa chỉ DDRAM. Dữ liệ
u
DDRAM được gửi và nhậ
n sau khi
thiết lập điều này.
0 0 1 Địa chỉ DDRAM
40uS
Đọc cờ báo bận
(BF) và bộ đếm địa
chỉ.
Đọc cờ báo bận (BF) chỉ thị hoạ
t
động bên trong đang được thực hiệ
n
và đọc bộ đếm địa chỉ CGRA

M
hoặc DDRAM.
0 1 BF

Địa chỉ CGRAM / DDRAM

-
Ghi vào CGRAM
hoặc DDRAM.
Ghi dữ liệu.
1 0 D7

D6

D5

D4

D3

D2

D1

D0

40uS
Đọc từ CGRAM
hoặc DDRAM.
Đọc dữ liệu.

1 1 D7

D6

D5

D4

D3

D2

D1

D0

40uS
Bảng tập lệnh của HD44780
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 23 Biên soạn: Phạm Quang Trí
Các ký hiệu bit dùng trong các lệnh:

Thông số thiết lập
Tên bit


0 1
I/D
Giãm vị trí con trỏ Tăng vị trí con trỏ
S
Không dịch chuyển hiển thị Dịch chuyển hiển thị
D
Tắt hiển thị Bật hiển thị
C
Tắt con trỏ Bật con trỏ
B
Tắt nhấp nháy con trỏ Bật nhấp nháy con trỏ
S/C
Di chuyển con trỏ Dịch chuyển hiển thị
R/L
Dịch sang trái Dịch sang phải
DL
Giao tiếp 4 bit Giao tiếp 8 bit
N
1/8 hoặc 1/11 chu kỳ làm việc (1 dòng)

1/16 chu kỳ làm việc (2 dòng)
F
5 x 7 điểm 5 x 10 điểm
BF
Có thể chấp nhận lệnh (không bận) Hoạt động bên trong đang xử lý (bận)
Bảng giải thích ý nghĩa của các bit sử dụng trong tập lệnh của HD44780
Cờ báo bận (BF: Busy Flag) là gì? So sánh với vi điều khiển thì LCD hoạt động chậm hơn rất nhiều lần. Bởi
vậy LCD cần phải cing cấp một tín hiệu dùng để chỉ thị rằng bộ hiển thị đã sẵn sang nhận một dữ liệu mới hoặc
một lệnh mới sau khi dữ liệu hoặc lệnh trước đó đã được thực thi xong. Tín hiệu đó được gọi là cờ báo bận và có
thể đọc được từ bit D7. Khi bit BF được xóa (BF=0), nghĩa là bộ hiển thị sẵn sàng nhận thông tin.

3.6 Kết nối LCD:

Phụ thuộc vào số lượng đường dây được sử dụng để kết nối với vi điều khiển, có hai chế độ là LCD 4 bit và
LCD 8 bit. Chế độ hoạt động thích hợp của LCD được xác định ngay từ thời điểm bắt đầu của quá trình xử lý trong
một chương trình và được gọi là quá trình “khởi động”. Trong trường hợp thứ nhất (LCD 8 bit), dữ liệu được
truyền thông qua các đường D0 – D7 và vấn đề này đã được giải thích bên trên. Trong trường hợp chế độ LCD 4
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 24 Biên soạn: Phạm Quang Trí
bit, nhằm mục đích tiết kiệm các chân I/O của vi điều khiển, chỉ có 4 bit cao (D4 – D7) được sử dụng để kết nối,
trong khi các bit còn lại (D0 – D3) thì bỏ trống không dùng đến. Cho nên, mỗi dữ liệu (8 bit) được gửi đến LCD
qua hai bước: 4 bit cao được gửi đầu tiên (việc này được gửi thông qua các đường D4 – D7 một cách bình thường),
sau đó 4 bit thấp sẽ được gửi tiếp theo. Bên cạnh đó, trong thực tế các dữ liệu rất hiếm khi được đọc về từ LCD
(phần lớn dữ liệu sẽ được truyền từ vi điều khiển đến LCD), cho nên để tiết kiệm thêm một chân I/O nữa của vi
điều khiển ta có thể kết nối một cách đơn giản chân R/W của LCD xuống GND (nghĩa là chỉ cho phép ghi thông tin
vào LCD). Với cách kết nối như thế này vi điều khiển không thể kiểm tra được cờ báo bận vì lúc này không thể đọc
được thông tin từ LCD về vi điều khiển. Cho nên để thông tin có thể hiển thị một cách bình thường trên LCD, ta
cần chú ý đến giản đồ thời gian của LCD để lập trình cho vi điều khiển hoạt động chính xác. Thật may mắn là việc
giải quyết vần đề này rất đơn giản, ta chỉ cần lập trình vi điều khiển sao cho mỗi lệnh hoặc dữ liệu được gửi tới
LCD cách nhau một khoảng thời gian phù hợp và khoảng thời gian này phải lớn hơn thời gian xử lý lệnh hoặc dữ
liệu của LCD. Xem xét bảng tập lệnh đã trình bày bên trên, ta nhận thấy rằng khi LCD xử lý một lệnh chậm nhất
cũng mất khoảng 1.64ms, như vậy cần lập trình để vi điều khiển mỗi lần gửi thông tin đến LCD cách nhau khoảng
2ms là tốt nhất.
3.7 Khởi động LCD:
Mỗi lần cấp nguồn cho LCD hoạt động, LCD sẽ bị xóa một cách tự động, thao tác này được gọi là reset tự
động. Thao tác này mất khoảng 15ms. Sau đó, bộ hiển thị sẵn sàng để hoạt động. Chế độ hoạt động được thiết lập

mặc định. Có nghĩa là:
• Bộ hiển thị được xóa.
• Chế độ:
o DL = 1: Truyền thông bằng giao diện 8 bit.
o N = 0: Thông tin được hiển thị trên một dòng.
o F = 0: Kiểu ký tự là 5 x 8 điểm.
• Bật/tắt hiển thị/con trỏ:
o D = 0: Tắt hiển thị.
o U = 0: Tắt con trỏ.
o B = 0: Tắt nhấp nháy con trỏ.
• Ngõ vào ký tự:
o ID = 0: Các địa chỉ trên bộ hiển thị được tăng lên 1 tự động.
o S = 0: Tắt dời hiển thị.
Reset tự động phần lớn được thực hiện mà không có bất kỳ vấn đề gì. Phần lớn được thực hiện nhưng không
phải là luôn luôn như vậy! Nếu vì một lý do nào đó, nguồn cung cấp không đạt tới giá trị yêu cầu trong khoảng thời
gian 10ms thì bộ hiển thị sẽ bắt đầu hoạt động một cách không ổn định, cho nên vấn đề reset tự động xảy ra khi đó
có thể làm cho chế độ hoạt động của LCD không như các thiết lập mặc định đã được trình bày. Nếu nguồn cung
cấp không gặp sự cố như trên nhưng để bộ hiển thị hoạt động chính xác và ổn định thì qui trình khởi động phải tạo
ra được một thao tác reset để cho phép bộ hiển thị làm việc một cách bình thường. Thuật toán để khởi động LCD
phụ thuộc vào việc kết nối với vi điều khiển thông qua giao tiếp 4 bit hoặc 8 bit.
E. HỆ THỐNG ĐIỀU KHIỂN LCD.
Bài 3: Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG
TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai
dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị
trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang
trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.
Giáo trình thực hành vi xử lý. 25 Biên soạn: Phạm Quang Trí
Trường hợp khởi động LCD chế độ 8 bit, qui trình thực hiện như sau:


×