Tổng quát về LCD sơ đồ khối của HD44780 tập lệnh của LCD
Trang 1— ~eg—3== 34 0 = a
DAI HOC DA NANG TRUONG DAI HOC BACH KHOA KHOA CONG NGHE THONG TIN
-=-C * 5) an
sử
BAO CAO THUC TAP
NHAN THUC
|
/
3
\
:
i
/
V
A
\
|
}
GVHD : TRUONG MINH HUY SVTH : NGUYEN ANH DUC -
LOP :09T1
ở T2 eas 4 - ` S ] att „Sỹ
Trang 2Báo cáo thực tập nhận thức Đề tài 56
Đề tài sô 56: Tìm hiệu về cách điêu khiên LCD 2x16 Viêt chương trình đêm từ 1 đên 9 trên LCD bang vi
điêu khiên 8051
I Tống Quát Về LCD HD44780 o.s so 5c co csss se ssseseseseseesesesee 2
3) Sơ đồ khối của HD4478): -o 5-55 5s cssEsESSs 2S 2s esEsEsessesssesee 3
II — Chương trình đếm từ 0 đến 9 sử dụng VDK 8051: 10
Trang 3Báo cáo thực tập nhận thức Dé tai 56
I Tổng Quát Về LCD HD44780
Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên hình
1 là loại LCD thông dụng
TIH=HHF:F
nee OM | ee) od
Hinh 1: Hinh dang cua loai LCD thong dung
Khi san xuat LCD, nha san xuat da tich hop chip diéu khién (HD44780) bên trong lớp vỏ và chỉ đưa các chân giao tiêp cân thiệt Các chân này được đánh sô thứ tự
và đặt tên như hình 2 :
VSS VOD VEE RS RW EN DO D1 D2 D3 D4 DS DE D7 AK
TIHSHHREP
=s2lharacterLeht
Hình 2: Sơ đô chân của LCD
Trang 4Báo cáo thực tập nhận thức Dé tai 56
Chan Ký hiệu VO Mô tả
2 Vec - Dương nguồn 5v
3 Ver 3 Cập nguôn điêu khiên phản
thanh dữ liệu
6 E lO Cho phép
9 DB2 lO Các bít dữ liệu
II DB4 L/O Các bít dữ liệu
12 DB5 VO Các bít dữ liệu
Hình 3 : Chic nang các chân của LCD
3) Sơ đồ khôi của HD44780:
Chíp HD447&0 có 2 thanh ghi § bịt quan trọng : Thanh ghi lệnh IR (Instructor Register) va thanh ghi di ligu DR (Data Register)
- Thanh ghi IR : Để điều khiển LCD, người dùng phải “ra lệnh” thông qua tám
đường bus DB0-DB7 Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõ ràng Người dùng chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi IR Nghĩa
là, khi ta nạp vào thanh ghi IR một chuỗi 8 bít, chíp HD44780 sẽ tra bảng mã lệnh
tại địa chỉ mà IR cung cấp và thực hiện lệnh đó
VD : Lệnh “hiển thị màn hình” có địa chỉ lệnh là 00001100 (DB7 DB0) Lệnh “hiên thị màn hình và con trỏ” có mã lệnh là 00001110
- Thanh ghi DR : Thanh ghi DR dùng để chứa đữ liệu 8 bit để ghi vào vùng RAM
DDRAM hoặc CGRAM (ở chế độ ghi) hoặc dùng để chứa đữ liệu từ 2 vùng RAM
này gởi ra cho MPU (ở chế độ đọc) Nghĩa là, khi MPU ghi thông tin vào DR, mạch nội bên trong chíp sẽ tự động ghi thông tin này vào DDRAM hoặc CGRAM Hoặc khi thông tin về địa chỉ được ghi vào IR, dữ liệu ở địa chỉ này trong vùng
RAM nội của HD44780 sẽ được chuyên ra DR để truyền cho MPU
=> Bằng cách điều khiến chân RS và R/W chúng ta có thể chuyển qua lại giữ 2 thanh ghi này khi giao tiêp với MPU Bảng sau đây tóm tắt lại các thiệt lập đôi với hai chân RS và R/W theo mục đích giao tiêp
Trang 5Báo cáo thực tập nhận thức Dé tai 56
0 0 Ghi vào thanh ghi IR để ra lệnh cho LCD
0 1 Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở DB0-DB6
b, — 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ờ BE lại mức 0
Nhu 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 va R/W=1 (xem bang tom tat RS - R/W)
Lưu ý: Thời gian cập nhật AC không được tính vào thời gian thực thi lệnh mà
được cập nhật sau khi cờ BF lên mức cao (not busy), cho nên khi lập trình hiên thị,
bạn phải delay một khoảng tADD khoảng 4uS-5uS (ngay sau khi BF=1) trước khi nap
dữ liệu mới
d, Vung RAM hién thi DDRAM : (Display Data RAM)
Đây là vùng RAM dùng để hiển thị, nghĩa là ứng với một địa chỉ của RAM 1a một ô kí tự trên màn hình và khi bạn ghi vào vùng RAM này một mã 8 bit, LCD sé hiển thị tại vị trí tương ứng trên màn hình một kí tự có mã 8 bit mà bạn đã cung cấp
Hình sau đây sẽ trình bày rõ hơn mỗi liên hệ này :
Trang 6Báo cáo thực tập nhận thức Dé tai 56
Display position
(hexadecimal)
Display
position 12 3 4 5 aot Gi
address lise "II =lÍ —~
(hexadecimail | 40 | 41 | 42 | 43| 44 |: -:- ri: | 66,67
Hinh 4: Mối liên hệ giữa địa chỉ của DDRAM và vị trí hiển thị của LCD
Vung RAM nay có 80x8§ bịt nhớ, nghĩa là chứa được 80 kí tự mã 8 bịt Những vùng RAM còn lại không dùng cho hiên thị có thê dùng như vùng RAM đa mục đích Lưu ý là để truy cập vào DDRAM, ta phải cung cấp địa chỉ cho AC theo mã
HEX
Vung ROM nay dung dé chứa các mẫu kí tự loại 5x8 hoặc 5x10 điểm ảnh/kí
tự, và định địa chi bang 8 bit Tuy nhiên, nó chỉ có 208 mẫu kí tự 5x8 và 32 mau kí tự
kiêu 5x10 (tông cộng là 240 thay vì 2^8 = 256 mâu kí tự) Người dùng không thê thay
đôi vùng ROM này
Table 2 Example of Corrnespendence between EPROM Address Data and Character Potters
(5š - % [hota)
La
1 { úũ
+——
1 1 1 1 Ể 1
0 [Tlo o off
Dl
E
Hinh 5: Mối liên hệ giữa địa chỉ của ROM và đữ liệu tạo mau ki tu
Trang 7
Báo cáo thực tập nhận thức Đề tài 56
Như vậy, dé co thé ghi vao vi tri thir x trén man hinh một kí tự y nào đó, người dùng phải ghi vào vùng DDRAM tại địa chỉ x (xem bảng môi liên hệ giữa DDRAM
và vị trí hiên thị) một chuôi mã kí tự 8 bit trên CGROM Chú ý là trong bảng mã kí tự trong CGROM ở hình bên dưới có mã ROM A00
Như trên bảng mã kí tự, nhà sản xuất dành vùng cé dia chi byte cao 14 0000 dé
người dùng có thê tạo các mâu kí tự đô họa riêng Tuy nhiên dung lượng vùng này Tât
hạn chê: Ta chỉ có thê tao 8 kí tự loại 5x8 điềm ảnh, hoặc 4 kí tự loại 5x10 điềm ảnh
Đề ghi vào CGRAM, hãy xem hình 6 bên dưới
Table 5 Relationship between COLRAM Addresses, Character Codes (DDRAM) and Characte
Patterns (CC; RAS Data)
For 5 « 8 dot character patterns
Character Codes — | : il Character Patterns
' 86543210 5B 4 3 2 1 Ũ 7 6 B54 3210
[ 1ï 1 1 TẠO
[ 1 ) OF
[ I1 1 3 | g a et f1
f ‡ :o|lilo[Tflo
ee T1 |
id
1
Notes: 1 Character code bits 0 to 2 correspond to CGRAM address bits 3 lo 5 (3 bits: 8 types
GRAM address bits 0 lo 2 designate the character pattem ling position The fh line is the
cursin position and its Gispay is formed by ñä kKx]ieäil í{ YR with ihe cursor
Maintain the Sih line dala, conresponding to the cursor display position, al 0 as the cursor display
It the Bin line data is 1, 1 Bits will bght up the 81h line regardless of the cursor presence
Character pattern row positions correspond to CGRAM data bits 0 to 4 (bit 4 being at the len)
4 As shown Table 5, CORAM character pattiens are selected when character code iets 4 to 7 are
sedtocled by either character code ODH or OSH
5 1 for CGRAM data corresponds to display selection and 0 to nan-selection
= indicates no affect
Hinh 6: Mỗi liên hệ giữa địa chỉ của CGRAM, đữ liệu của CGRAM, và mã kí tự
4) — Tập lệnh của LCD:
Trước khi tìm hiểu tập lệnh của LCD, sau đây là một vài chú ý khi giao tiếp
voi LCD:
Trang 8Báo cáo thực tập nhận thức Đề tài 56
— Tuy trong sơ đồ khối của LCD có nhiều khối khác nhau, nhưng khi lập trình
điêu khiên LCD ta chỉ có thê tác động trực tiệp được vào 2 thanh ghi DR và IR thông qua các chân DBx, và ta phải thiệt lập chân RS, R/W phù hợp đề chuyên qua lại giữ 2 thanh ghi này (xem bảng 2)
- Với mỗi lệnh, LCD cần một khoảng thời gian để hoàn tất, thời gian này có thể khá lâu đôi với tôc độ của MPU, nên ta cần kiêm tra cờ BE hoặc đợi (delay) cho LCD thực thi xong lệnh hiện hành mới có thê ra lệnh tiêp theo
— Địa chỉ của RAM (AC) sẽ tự động táng (giảm) | don vi, 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ị (I hàng /2 hàng), chiêu dài
* Chi dinh dia chi RAM nội
* Nhóm lệnh truyền đữ liệu trong RAM nội
Mã lệnh (HEX) Chức năng của lệnh
1 Xóa mản hình hiển thị
2 Trở về đầu dòng
6 Dịch con trỏ sang phải
C Bật hiền thị, tắt con trỏ
E Bật hiền thị, nhập nháy con trõ
14 Dịch vị trí con trõ sang phải
18 Dịch toàn bộ hiên thị sang trải 1C Dịch toàn bộ hiền thị sang phải
co Đưa con trỏ vê đầu dòng thứ 2
Hình 7: Tập lệnh của LCD
3) Cách gửi dữ liệu và thực thi lệnh từ VDK:
Ở đây chúng ta sử dụng chế độ giao tiếp mặc định của LCD là 8 bit
Ta nối mạch như trong hình sau:
- Chân D0 D7 nối voi Port!
- Chân E nỗi với P2.2
- Chân RS ni với P2.I
- Chân R/W nối với P2.0
Trang 9
Báo cáo thực tập nhận thức Dé tai 56
Hinh8: Sơ đồ mạch
=
80) On) a) rr] Ny) Cy ST 25 812
FH Cy a oe EH
VDD Œ
XI | + Al TTT U4
[| + 138 3 x Tal P0.0/aDd
3g
12MHz F0.2/aba |_S“
18 | xTAlz P0.3japa |_#E
P0.5iaDs +24
P0.8/epg | #5
_ ea P0.7/aD7 |“
P2.0„a |_—21 P2140 |-22 P2.2/ain |—2Š
245 _| BSEN P2.3/a11 24
20! ale Fz.4ialz | #5
21 ea P2.8/aA13 2E
P2.7/Ad5 2S
1 lpịn P3.0/Rxp |1
2 pas P3.1/Tzp | J1 2) p42 P32/NTn |_—12
3 P13 P3 3/NTT | TS P14 P3.4T10 |_12 8_ P12 P3.8/T1 | 15
2 pig P3.8/WR | 1S
&_| paz p3.z/RD [12
ATBBEEI
Bước đầu tiên chúng ta phải thiết lập trạng thái ban đầu cho LCD tức là phải báo cho nó là ta dang dùng chê độ 4 chân, dot 8*5 rôi sau đó mới gủi dữ liệu hiên thị hay lệnh điêu khiên lên lcd
_ Trước khi đề cập đến cách thiết lập trạng thái ban đầu cho LCD chúng ta dé cap dén cach doc va ghi lén LCD Nhin vao bang 1 thay muc dich giao tiép cua chan
RS va RW Khi ghi thi ta CLR RW (RW=0) con khi doc thi SET RW (RW=1)
MOV PILA ; CHEP THANH GHIA DEN PORTI : CLR RS : DAT RS = 0 DE GUI LENH
| CLR RW -DAT RW =0 DE GUI LENH
Trang 10Bao cao thực ap nhan thức _Đè dài 56
SEIB EN ;EN=1=>0CHOXUNGCAO _
;NHAN LENH TIEP THEO DUOC CHUA?
RET
b, — Gbi giá trị vào thanh ghi DR dé hién thi lén LCD:
Code:
(GHILDLIEU:
MOV A,RO MOV P1,A; XUAT DU LIEU SETB RS ; DAT RS=1 CHO XUAT DU LIEU CLR RW ; DAT RW=0 GHI DU LIEU RA LCD SETB EN ; EN = 1 => 0 CHO XUNG CAO CLR EN _ ;XUONG THAP => CHE DO GHI
ACALL WAIT_LCD _ ; KIEM TRA CO BAN DE XEM LCD DA | SAN ;SANG HIEN THI CHUA?
RET
Ở 2 chương trình trên có dùng chương trình con WAIT_LCD Vì khi thực hiện các hoạt động bên trong chip 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” và cần khoảng 4uS-5uS để có thể nạp dữ liệu
mới Do đó có 2 cách đề kiểm tra xem LCD có thê nhận dữ liệu mới tiếp hay chưa, đó
là ta cho delay khoảng 4uS-5uS giữa các lần nạp dữ liệu và kiểm tra cờ bận D7 Ở
trong chương trình ta đi kiểm tra cờ bận D7:
Code:
SETB P1.7 ; LAY P1.7 LAM CONG VAO CLR RS_ ; DAT RS=0 DE TRUY CAP THANH GHI LENH SETB RW ; DAT RW=1] DE DOC THANH GHI LENH BACK:
CLR EN;
SETB EN;
Trang 11Báo cáo thực tập nhận thức Dé tai 56
JB P1.7,BACK; CHO DEN KHI BUSY FLAG=O _
| RET
H Chương trình đếm từ 0 đến 9 sử dụng VDK 8051:
Ta có sơ đồ thuật toán như sau:
Delay giữa các lần hiển thị ta sử dụng bộ định thời timer0 chế độ 1
Khởi tạo LCD
——
ee
=
R0 =4§h
L“ HIEN THI RO (DELAY 1S)
XOA MAN HINH
VA GIU NGUYEN
VỊ TRÍ CON TRO
RO==57H?
Trang 12
Báo cáo thực tập nhận thức Đề tài 56
TH ?Ÿ =—<“—s———— ®
RETI
RETI
ORG IBH ;timer I interrupt
RETI
KHOL TAO: ;set up control registers
MOV TCON,#00H
Trang 13Báo cáo thực tập nhận thức Dé tai 56
MOV TMOD,#00000001B _ ;timer 0 che do 1 MOV PSW,#00H
RET
START:
GHI
SJMP $
KHOI_TAO_LCD:
ACALL GHI_LENH
RET
Trang 14Báo cáo thực tập nhận thức Dé tai 56
; CT CON CHAY TU 0 DEN 9 VA HIEN THI RA LCD
DEM 10:
LOOPI0:
LOOP_XUAT:
;THI RA LCD
DE HIEN THI SO TIEP THEO
TANG_RO:
0
RET
;CT GHI LENH
;PORTI1
Trang 15Báo cáo thực tập nhận thức Đề tài 56
LCALL WAITICD @Ð; KIEM TRA CO BAN DE
-LCD CO THE NHAN LENH TIEP THEO DUOCCHUA?
WAIT_LCD:
GHI LENH BACK:
RET
GHI_DLIEU:
MOV A,RO MOV PIA : XUAT DU LIEU SETB RS : DAT RS=1 CHO XUAT DU LIEU
CLR RW ; DAT RW=0 GHI DU LIEU RA LCD
CLR EN
ACALL WAIT_LCD ; KIEM TRA CO BAN DE -XEM LCD DA SAN SANG HIEN THI CHUA?