CHƯƠNG 1: TÌM HIỂU YÊU CẦU ĐỀ TÀI
CHƯƠNG 1.1: GIỚI THIỆU VỀ AT89C51
CHƯƠNG 1.1.1: GIỚI THIỆU HỌ MSC-51
CHƯƠNG 1.1.2: SƠ ĐỒ CHÂN CỦA AT89C51
CHƯƠNG 1.1.3: SƠ ĐỒ KHỐI CỦA AT89C51
CHƯƠNG 1.1.4: CHỨC NĂNG CÁC CHÂN CỦA AT89C51
CHƯƠNG 1.1.5: TỔ CHỨC CỦA CHIP 8051
CHƯƠNG 1.1.6: BỘ NHỚ CHƯƠNG TRÌNH (ROM)
CHƯƠNG 1.2: GIỚI THIỆU VỀ LCD (TEXT LCD)
CHƯƠNG 1.2.1: HÌNH ẢNH LCD
CHƯƠNG 1.2.2: GIỚI THIỆU SƠ LƯỢC VỀ LCD
CHƯƠNG 1.2.3: SƠ ĐỒ, CHỨC NĂNG LIÊN KẾT CÁC CHÂN
CỦA LCD
CHƯƠNG 1.2.4: GIỚI THIỆU SƠ LƯỢC VỀ HD44780U
CHƯƠNG 1.3: GIỚI THIỆU VỀ BÀN PHÍM GIAO TIẾP 4×4
CHƯƠNG 1.3.1: HÌNH ẢNH BÀN PHÍM
CHƯƠNG 1.3.2: THUẬT TOÁN QUÉT PHÍM
CHƯƠNG 2: THỰC HIỆN MÔ HÌNH ĐỒ ÁN
CHƯƠNG 2.1: SƠ ĐỒ MẠCH NGUYÊN LÝ
CHƯƠNG 2.2: MẠCH LAYOUT
CHƯƠNG 2.3: LƯU ĐỒ GIẢI THUẬT
88 trang |
Chia sẻ: lethao | Lượt xem: 8129 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Giao tiếp bàn phím hiển thị LCD sử dụng 89C51, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ho dữ liệu và chương trìình.
→chương trrình và dữ liệu nằm riiêng trên R
R Tổ c ức bộ nhớ của chipp 8051:
vn
htttp://www.eebook.edu.v
ROM và RA
AM.
15
ĐỒ ÁN 1
htttp://www.eebook.edu.vvn
TRẦN NGỌC LLÝ_070642D_07DD2D
16
ĐỒ ÁN 1
R Tổ c ức nhớ trrong chip 8
8051:
TRẦN NGỌC L
LÝ_070642D_07DD2D
1.1.6.
BỘ NHỚ CHƯƠN
NG TRÌNH
H (ROM)
- Dùn
ng để lưu tr ữ chương trình điều khiển cho chip 8051 hoạt động
- Chiip 8051 có 4 KB ROM
R Bộ n ớ dữ liệu
M trong, địa chỉ truy xuất: 000H
H – FFFH.
- Dùn
ng để lưu tr ữ các dữ lliệu.
.
- Chiip 8051 có 128 byte R
RAM trong
g, địa chỉ trruy xuất: 000H – 7FH.
- RAM
M trong của chip 805
51 được ch
hia ra:
• RAM đa chức năng:
• RAM định địa
vn
htttp://www.eebook.edu.v
ỉ bit:
17
ĐỒ ÁN 1
TRẦN NGỌC L
LÝ_070642D_07DD2D
→ cho phép
p xử lý từng
g bit dữ liệu riêng lẻ m
mà không ảnh hưởng
g đến các b
bit khác
trong cả bytte.
• Cácc dãy thanh
h ghi:
.
→ cho phép
p truy xuất dữ liệu nhaanh, lệnh ttruy xuất đơ n giản vàà ngắn gọn.
+ Lưu ý: Ở cchế độ mặc định thì d
dãy thanh g
ghi tích cực (đang đư
ược sử
dụng) là dãy
y 0 và các tthanh ghi ttrong dãy lần lượt có tên là R0 -- R7. Có
thể thay đổi dãy tích cực (xem phần thanh g
ghi PSW).
A
ột số tthanh ghi c
R Thaanh ghi A:
R Thaanh ghi B:
chức năng đ c biệt:
18
vn
htttp://www.eebook.edu.v
ĐỒ ÁN 1
- Phéép nhân 2 số 8 bit khô
TRẦN NGỌC L
ông dấu _ kết quả là s ố 16 bit
LÝ_070642D_07DD2D
• Bytte cao _ chứa vào than
nh ghi B
• Bytte thấp _ chứa vào thaanh ghi A
- Phé
ép chia 2 số 8 bit _ thư
ương số vàà số dư là số 8 bit
A
• Thư ng số _ c
chứa vào th
hanh ghi A
• Số dư _ chứa vào thanh ghi B
vn
htttp://www.eebook.edu.v
19
ĐỒ ÁN 1
R Thaanh ghi định
h thời:
TRẦN NGỌC LLÝ_070642D_07DD2D
R Sơ lược về hoạt động củaa bộ định tthời:
vn
htttp://www.eebook.edu.v
20
ĐỒ ÁN 1
TRẦN NGỌC L
LÝ_070642D_07DD2D
• Tần
ố: tần số xung ngõ ra bằng tần
ố xung n
ngõ vào ch
hia cho 2N.
• Giá
á trị: giá trị nhị phân ttrong các F
FF của bộ đ nh thời làà số đếm của các
ung clock ttại ngõ vào
xu
o từ khi bộ định thời b ắt đầu đếm
• Tràn
n: xảy ra h ện tượng tràn (cờ trà
àn = 1) khii số đếm chhuyển từ giiá trị lớn
nh ất xuống g
giá trị nhỏ nhất của bộ định thời.
V
ụ: Bộ định thời 16
6 bit (chứa 16 FF bên
n trong).
*T ần số:
Giá trị: số đếm nằm ttrong khoản
*G
ng 0 (0000
).
0H) _ 65535 (FFFFH)
Tràn: cờ tràn bằng 1 k
*T
khi số đếm
m từ FFFFH
H chuyển x
xuống 00000H.
H
họa đơn giản hoạt độ
vn
ộng của bộ định thời 3
3 bit:
21
htttp://www.eebook.edu.v
ĐỒ ÁN 1
TRẦN NGỌC L
LÝ_070642D_07DD2D
• Ứng
g dụng định thời gian
n (TIMER)): Bộ định tthời được lập trình sa
ao cho nó
sẽ tràn sau m ột khoảng
bằng 1.
g thời gian
n đã qui địn
đó
ờ tràn của bộ định
h thời sẽ
• Ứng
g dụng đếm
ự kiện ((COUNTER): để xác định số lần
n xuất hiện
ủa một
kíích thích từ bên ngoà
xu ống 0).
ài tới 1 chân
n của chip 8051 (kích
D):
h thích chu
uyển trạng tthái từ 1
R Thaanh ghi chế độ định thời (TMOD
• Tha
anh ghi TM
MOD (Timeer Mode R
Register) ch ứa các bit dùng để th ết lập
chế độ hoạt động cho b ộ định thời 0 và bộ đ nh thời 1
• Thaanh ghi TMMOD được nạp giá trị một lần tại thời điểm
m bắt đầu của
chương trình
h để qui định chế độ h
hoạt động của các bộ định thời..
• Cấu
h ghi TMO
vn
OD:
22
htttp://www.eebook.edu.v
ĐỒ ÁN 1
TRẦN NGỌC L
LÝ_070642D_07DD2D
R Thaanh ghi điều
ển địn
ời (TC
CON):
• Thaanh ghi TC
CON (Time
er Control R
Register) chứa các bit
it dùng để điều khiển
vàà báo trạng
g thái của bộ định thời 0 và bộ đ nh thời 1.
N:
• Cấu
h ghi TCON
vn
23
htttp://www.eebook.edu.v
ĐỒ ÁN 1
R Chế độ định th ời 13bit (C
C ế độ 0 (MMode 0):
• Chế độ định th ời 13 bit.
Chế độ 0):
TRẦN NGỌC L
LÝ_070642D_07DD2D
• Sử dụng 8 bit của thanh ghi THx v
bộ định thời
và 5 bit thấp
ủa thanh
h ghi TLx để tạo ra
• Số đ m: 0000H → 1FFF
FH nghĩa là
à từ 0 → 8191. Thời g
gian định tthời: từ
0 → (213–1))TTimer nghĩa là từ 0 → 8191TTim
mer.
• Tha
anh ghi TH
Hx và TLx cchứa giá trrị của bộ định thời.
24
vn
htttp://www.eebook.edu.v
ĐỒ ÁN 1
TRẦN NGỌC L
LÝ_070642D_07DD2D
• Khii có xung c
Hx/TLx.
TH
clock, bộ định thời bắt đầu đếm lên từ giá trị chứa tro
ong
• Xảy
ờ tràn TFx
x=1) khi số đếm chuy ển từ 1FFF
FH sang 00
000H và
vi ệc đếm sẽ tiếp tục đế m lên từ g
giá trị 0000
0H.
Chế đ
định thời 16bit (Chhế độ 1):
C ế độ 1 (M
Mode 1):
• Chế độ định th ời 16 bit.
• Sử dụng thanh
h ghi THx và TLx để tạo ra bộ đ nh thời.
• Số đ m: 0000H → FFFF
FH nghĩa là
à từ 0 → 65
5535. Thờii gian định
h thời:
từ 0 → (216– Timer ng
ghĩa là từ 0 → 65535
5TTimer.
• Thaanh ghi TH
Hx và TLx cchứa giá trrị của bộ định thời.
• Khii có xung c
Hx/TLx.
TH
clock, bộ định thời bắt đầu đếm lên từ giá trị chứa tro
ong
• Xảy
ờ tràn TFx
x=1) khi số đếm chuy ển từ FFFF
FH sang 00
000H và
vi ệc đếm sẽ tiếp tục đế m lên từ g
giá trị 0000
0H.
R Chế độ định th ời 8bit tự nạp lại (Ch ế độ 2):
C ế độ 2 (M
Mode 2):
• Chế độ định th ời 8 bit tự nạp lại.
• Sử dụng thanh
h ghi TLx đ
để tạo ra bộ định thời
• Số đ m: 00H → FFH ng
ghĩa là từ 0 → 255. Thời gian địịnh thời:
từ 0 → (28–1)TTimer ng
ghĩa là từ 0 → 255TTiimer.
25
vn
htttp://www.eebook.edu.v
ĐỒ ÁN 1
TRẦN NGỌC L
LÝ_070642D_07DD2D
• Tha
anh ghi TLx chứa giáá trị của bộ định thời v
và thanh gh
hi THx chứa giá trị
sẽ được dùn
ng để nạp lại cho bộ đ
định thời.
• Khii có xung c
clock, bộ định thời bắt đầu đếm lên từ giá trị chứa tro
ong TLx.
• Xảy
ờ tràn TFx
x=1) khi số đếm chuy ển từ FFH
H sang 00H và việc
đếm sẽ tiếp tục đếm lê
ên từ giá trị chứa tron
ng thanh gh
hi THx.
R Chế độ định th ời chia sẻ (Chế độ 3):
C ế độ 3 (M
Mode 3) là:
• Chế độ định th ời chia sẻ.
R Bộ đ nh thời 0 được chiaa ra:
+/ Bộ định
+
h thời 8 bit thứ I:
→ Sử dụng than
nh ghi TL0
0 để tạo ra bộ định thời.
→ Số đếm: 00H → FFH n
nghĩa là từ 0 → 255. Thời gian đ
định thời:
từ 0 → (28–1)TTimer ng
ghĩa là từ 0 → 255TTiimer .
→ Th
hanh ghi T
TL0 chứa giiá trị của bộ định thời.
.
→ Kh
hi có xung
g clock, bộ định thời b ắt đầu đếm
ừ giiá trị chứa ttrong TL0.
→ Xảy ra tràn ((cờ tràn TF
F0=1) khi ssố đếm chu
uyển từ FFH
H sang 00H
H và việc
đếm sẽ tiếp tục đếm lê
ên từ giá trị 00H.
+// Bộ định tthời 8 bit th ứ II:
→ Sử dụng thannh ghi TH0
0 để tạo ra bộ định th ời.
→ Số đếm: 00H → FFH ng
ghĩa là từ 0 → 255. T ời gian đ
định thời: t ừ 0 →
(28–1)TTimernghĩa là từ 0 → 255TTimer.
→ Th
hanh ghi T
TH0 chứa g
giá trị của bộ định thời.
26
vn
htttp://www.eebook.edu.v
ĐỒ ÁN 1
TRẦN NGỌC L
LÝ_070642D_07DD2D
H0.
TH
→ Kh
hi có xung
g clock, bộ định thời b ắt đầu đếm
ừ giiá trị chứa ttrong
→ Xảy ra tràn ((cờ tràn TF
F1=1) khi ssố đếm chu
uyển từ FFH
H sang 00H
H và việc
đếm sẽ tiếp tục đếm lê
+// Bộ định tthời 1:
ên từ giá trị 00H.
- Là b ộ định thời 16 bit.
- Khôông hoạt độ ng ở chế đ
độ 0, 1, 2).
độ 3 nhưng
g có thể hoạt động cáác chế độ k
khác (chế
- Khôông có cờ b
báo tràn như các bộ đ nh thời kh
hác.
a từ:
ra
R Ngu ồn xung clock cho bộ định thời: Nguồn x
xung cho bộ định thời được tạo
n.
• Mạch dao động trên chip → dù
ùng cho tính
h năng định thời gian
Xung kích
• X
h thích bên ngoài → d
dùng cho tíính năng đế m sự kiện
R Trường hợp định thời giaan:
Nếu C/T=0 thì:
• Bộ định th ời được dùùng để địnhh thời gian
n (Timer).
Nguồn xun
• N
Lưu ý:
ng clock định thời đư
ược lấy từ mạch dao đ ng trên cchip.
- Tần số xun
ng clock cu
ung cấp cho
o bộ định tthời bằng 1
1/12 tần số của mạch dao động
rên chip 80
tr
051.
- T ời gian đ nh thời là
à khoảng th ời gian tín
nh từ lúc b ộ định thời bắt đầu đ m cho
đến lúc bộ đ nh thời bắt đầu tràn (thời gian này phụ th ộc vào ggiá trị ban đ u được
nạp cho các thanh ghi THx và TL
vn
htttp://www.eebook.edu.v
Lx).
27
ĐỒ ÁN 1
R Trường hợp đếm sự kiện
Nếu C/T=1 thì:
TRẦN NGỌC L
LÝ_070642D_07DD2D
• Bộ định th ời được dù
ùng để đếm
m sự kiện (C
Counter).
Nguồn xun
• N
ng clock định thời đư
ược lấy từ x
xung kích tthích bên n
ngoài tại ha
ai chân T0
vàà T1 của ch
Lưu ý:
hip 8051.
- Tần số kích
h thích tối đa cho phéép tại chân
n T0 và T1 là 500KHz
Hz (trong trư ng hợp
hip 8051 dù
ch
ùng thạch anh 12MH
Hz).
- Số lượng sự kiện (số xung) mà bộ định thời đếm đượ
hanh ghi THHx và TLx.
th
ợc sẽ được chứa trong
g các
- Một kích thhích được gọi là một sự kiện kh
0 ở ngõ vào T0 và T1.
vn
htttp://www.eebook.edu.v
hi xảy ra sự chuyển trạng thái từ 1 xuống
28
ĐỒ ÁN 1
1.2. GIỚI
1.2.1.
1.2.2.
TRẦN NGỌC L
ỆU V Ề LCD ((TEXT LCCD)
HÌNH ẢNH LCD
U7
D
LCD
CD
LC
LCD 116×2
GIỚI TH ỆU SƠ LƯỢC VỀ LCD
LÝ_070642D_07DD2D
+/ Trrong những
g năm gần đây LCD đang ngày càng đượcc sử dụng rộng rãi
hay thế dần
th
đèn L
Led.
+/ Te
ext LCD là các loại m
màn hình tin
nh thể lỏng
g nhỏ dùng
g để hiển thị các
òng chữ hoặc số trong bảng mã
dò
ã ASCII. Kh
hông giống
g các loại L
LCD lớn, T
Text LCD
ược chia sẵn thành từng ô và ứn
đư
ng với mỗi ô chỉ có thể hiển thị một ký tự ASCII.
Cũng vì lý d
do chỉ hiện thị được kký tự ASCIII nên loại LCD này đ
được gọi là
à Text
LCD (để ph
hân biệt với
LCD có thể hiển thị h
hình ảnh). Mỗi ô của Text LCD
baao gồm các
c “chấm” tinh thể lỏn
vn
ệc kết
ợp “ẩn” và “hiện” các chấm n
này sẽ tạo
29
htttp://www.eebook.edu.v
1
2
VSS
3
4
5
6
VD
D
VEE
RS
RW
6
7
8
9
RW
E
D0
D1
10
11
12
13
D
2
D3
D4
D
5
13
14
15
16
5
D6
D7
A
K
K
ĐỒ ÁN 1 TRẦN NGỌC LÝ_070642D_07DD2D
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…
R 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 4 bit hay 8 bit 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”.
+/ 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ả:
30
ĐỒ ÁN 1
TRẦN NGỌC L
LÝ_070642D_07DD2D
- Tha
anh ghi IR : Để điều k
khiển LCD
D, người dù
ùng phải “rra lệnh” thô
ông qua
ám đường b
tá
bus DB0-D
DB7. Mỗi lệnh được n
nhà sản xuất LCD đánnh địa chỉ rõ ràng.
N ười dùng
g chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào th
hanh ghi IR
R. Nghĩa
à, khi ta nạp
là
h ghi IR m ột chuỗi 8 bit, chíp H
HD44780 ssẽ tra bảng mã lệnh
tại địa chỉ m
mà IR cung cấp và thực hiện lệnh đó.
V ệnh “
“hiển thị m
màn hình” ccó địa chỉ lệnh là 00001100 (DB
B7…DB0)
Lệnh “hiển tthị màn hìn
nh và con ttrỏ” có mã lệnh là 00001110
- Tha
anh ghi DR : Thanh g
ghi DR dùn
ng để chứa dữ liệu 8 b
bit để ghi v
vào vùng
R
AM hoặc C
CGRAM (ở chế độ gh
hi) hoặc dù
ùng để chứa dữ liệu từ 2 vùng
R
ởi ra cho M
MPU (ở chế độ đọc). Nghĩa là, k
khi MPU g
ghi thông tiin vào DR,
mạch nội bê
ên trong ch
híp sẽ tự độ ng ghi thông tin này vào DDRA
AM hoặc C
CGRAM.
H ặc khi thô
ông tin về địa chỉ đượ
ợc ghi vào IR, dữ liệu ở địa chỉ này trong vùng
R
ội của HD4478
80 sẽ được chuyển ra DR để tru
uyền cho M
MPU. Bằng cách điều
kh ển chân R
RS và R/W
W chúng ta có thể chu
uyển qua lại giữ 2 than
nh ghi này
y khi giao
tiếp. Xem bảng thiết lập đối với h
M
+// Chân đọc/ghi R/W (chân 5)
hai chân R
RS và R/W theo mục đích giao tiếp với
C
ựa chọn giữa việc đọc và gghi. Nếu R
R/W=0 thì d ữ liệu sẽ đ
được ghi từ bộ điều
kh ển ngoài (vi điều kh ển AVR chẳng hạn
D. Nếu R/W
W=1 thì dữ liệu sẽ
ược đọc từ LCD ra nggoài. Tuy nnhiên, chỉ c
đư
có duy nhất 1 trường hợp mà dữ liệu có
thể đọc từ L
LCD ra, đó là đọc trạn
ng thái LCD
D để biết L
LCD có đan
ng bận hay
y không
(cờ Busy Fla
ag - BF). D
Do LCD là một thiết bị hoạt độn
ương đối chậm (so với vi
31
vn
htttp://www.eebook.edu.v
ĐỒ ÁN 1 TRẦN NGỌC LÝ_070642D_07DD2D
đ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 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 ngoà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 này tôi 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:
0
0
1
1
RS
R/W
0
1
0
1
Khi cần
Ghi vào thanh ghi IR để ra lệnh cho LCD (VD: cần display
clear,…)
Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở DB0-DB6
Ghi vào thanh ghi DR
Đọ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
32
ĐỒ ÁN 1 TRẦN NGỌC LÝ_070642D_07DD2D
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.
Để 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
R 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.
R 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).
33
ĐỒ ÁN 1
TRẦN NGỌC L
LÝ_070642D_07DD2D
Lưu ý: Thời gian cập n
nhật AC kh
hông được
hời gian thhực thi lệnh
h mà được
cập nhật sauu khi cờ BF
F lên mức ccao (not bu
usy), cho nên khi lập trình hiển thị, bạn
phải delay m ột khoảng
g tADD kh
hoảng 4uS-5uS (ngay sau khi BF
F=1) trước
ạp
dữ liệu mới.. Xem thêm
m hình Giản đồ xung cập nhật A
AC.
Tóm tắt cácc lệnh có thể ghi vào
o LCD
Danh sáách lệnh trê
ên được tô 2 màu khá
ác nhau, cá
ác lệnh màuu đỏ sẽ đượ
ợc dùng
thường xuyêên trong lú
úc hiển thị L
LCD và cá
ác lệnh màu
u xanh thườ ng chỉ đư
ược dùng 1
lần trong lúc
c khởi động
g LCD, riêêng lệnh Re
ead BF có thể được ddùng hoặc k
không tùy
heo cách viiết chương trình wait_
th
_LCD. Phần tiếp theo
o giải thíchh ý nghĩa của các
lệnh và tham
m số kèm th
.
heo chúng.
+// Trước kh
LCD :
hi tìm hiểu tập lệnh của LCD, sa
au đây là m ột vài chúú ý khi giao
o tiếp với
* T
Tuy trong sơ đồ khối của LCD c
có nhiều khối khác nh
hau, nhưng
g khi lập
R
trìình điều kh
hiển LCD tta chỉ có thể tác động
g trực tiếp đ
c vào 22 thanh ghii DR và IR
hông qua cáác chân DB
th
Bx, và ta phải thiết lập chân RS, R/W phù
ù hợp để ch
huyển qua
lại giữ 2 thaanh ghi này
y. (xem bản
ng giới thiệu 2 thanh ghi này)
* Với mỗi lện
ần một kho ảng thời gian để hoàn
a
n tất, thời g
gian này
ó thể khá lâ
có
âu đối với tốc độ của
M
a cần kiểm
ờ BF hoặc đợi ((delay) cho
o.
o LCD thựcc thi xong llệnh hiện
hàành mới có
ó thể ra lện
vn
ếp theo
34
htttp://www.eebook.edu.v
ĐỒ ÁN 1 TRẦN NGỌC LÝ_070642D_07DD2D
* Đị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 . (!!!)
Trước hết là nhóm lệnh đỏ:
+/ Clear display – xóa LCD: lệnh này xóa toàn bộ nội dung DDRAM và vì thế
xóa toà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ỉ đã
35
ĐỒ ÁN 1 TRẦN NGỌC LÝ_070642D_07DD2D
đượ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]
(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
36
ĐỒ ÁN 1 TRẦN NGỌC LÝ_070642D_07DD2D
độ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 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