Trong khi đèn LED phải đ-ợc làm t-ơi bằng CPU hoặc bằng cách nào đó để duy trì việc hiển thị dữ liệu.. Chân Vcc, Vss và Vee: Các chân Vcc, Vss và Vee: Cấp d-ơng nguồn + 5v và đất t-ơng ứ
Trang 1Ghép một LCD với 8051
Ở phần này ta sẽ mô tả các chế độ hoạt động của các LCD và sau đó mô tả cách lập trình
và phối ghép một LCD tới 8051
1.1 Hoạt động của LCD
Trong những năm gần đây LCD đang ngày càng đ-ợc sử dụng rộng rãi thay thế dần cho các đèn LED (các đèn LED 7 đoạn hay nhiều đoạn) Đó là vì các nguyên nhân sau:
1 Các LCD có giá thành hạ
2 Khả năng hiển thị các số, các ký tự và đồ hoạ tốt hơn nhiều so với các đèn LED (vì các
đèn LED chỉ hiển thị đ-ợc các số và một số ký tự)
3 Nhờ kết hợp một bộ điều khiển làm t-ơi vào LCD làm giải phóng cho CPU công việc làm t-ơi LCD Trong khi đèn LED phải đ-ợc làm t-ơi bằng CPU (hoặc bằng cách nào đó) để duy trì việc hiển thị dữ liệu
4 Dễ dàng lập trình cho các ký tự và đồ hoạ
1.2 Mô tả các chân của LCD
LCD đ-ợc nói trong mục này có 14 chân, chức năng của các chân đ-ợc cho trong bảng
1 Chân Vcc, Vss và Vee: Các chân Vcc, Vss và Vee: Cấp d-ơng nguồn + 5v và đất t-ơng ứng thì VEE đ-ợc dùng để điều khiển độ t-ơng phản của LCD
2 Chân chọn thanh ghi RS (Register Select)
Có hai thanh ghi rất quan trọng bên trong LCD, chân RS đ-ợc dùng để chọn các thanh ghi này nh- sau: Nếu RS = 0 thì 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- xoá màn hình, đ-a con trỏ về đầu dòng v.v… Nếu RS = 1 thì 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
3 Chân đọc/ ghi (R/W)
Đầu vào đọc/ ghi cho phép ng-ời dùng ghi thông tin lên LCD khi R/W = 0 hoặc đọc thông tin
từ nó khi R/W = 1
4 Chân cho phép E (Enable)
Chân cho phép E đ-ợc sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó Khi dữ liệu đ-ợc 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
5 Chân D0 - D7
Đây là 8 chân dữ liệu 8 bít, đ-ợc dùng để gửi thông tin lê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 z và các con số từ 0 - 9 đến các chân này khi bật RS = 1
Cũng có các mã lệnh mà có thể đ-ợc gửi đến LCD để xoá màn hình hoặc đ-a con trỏ về
đầu dòng hoặc nhấp nháy con trỏ
Chúng ta cũng sử dụng RS = 0 để kiểm tra bít 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 = 0 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 kỳ dữ liệu nào lên LCD
Trang 2Mô tả các chân của LCD
thanh dữ liệu
Các mã lệnh LCD
Mó lệnh
(hex)
Lệnh đến thanh ghi của LCD
1 Xoá màn hình hiển thị
4 Giảm con trỏ (dịch con trỏ sang trái)
6 Tăng con trỏ (dịch con trỏ sang phải)
5 Dịch hiển thị sang phải
7 Dịch hiển thị sang trái
8 Tắt con trỏ, tắt hiển thị
A Tắt hiển thị, bật con trỏ
C Bật hiển thị, tắt con trỏ
E Bật hiển thị, nhấp nháy con trỏ
F Tắt con trỏ, nhấp nháy con trỏ
10 Dịch vị trí con trỏ sang trái
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
80 ép con trỏ về đầu dòng thứ nhất
C0 ép con trỏ về đầu dòng thứ hai
94 ép con trỏ về đầu dòng thứ ba
0D4 ép con trỏ về đầu dòng thứ tư
38 Khởi tạo lcd 2 dũng, ma trận 5x7 (với LCD 20x4 ta khởi tạo
hai lần)
Trang 3Các vị trí chân của các LCD khác nhau của Optrex
1.3 Gửi các lệnh và dữ liệu đến LCD với một độ trễ
Để gửi một lệnh bất kỳ từ bảng 12.2 đến LCD ta phải đ-a chân RS về 0 Đối với dữ liệu thì bật
RS = 1 sau đó gửi một s-ờn xung cao xuống thấp đến chân E để cho phép chốt dữ liệu trong LCD Điều này đ-ợc chỉ ra trong đoạn mã ch-ơng trình d-ới đây (xem hình )
; gọi độ thời gian trễ tr-ớc khi gửi dữ liệu/ lệnh kế tiếp
; chân P1.0 đến P1.7 đ-ợc nối tới chân dữ dữ liệu D0 - D7 của LCD
; Chân P2.0 đ-ợc nối tới chân RS của LCD
; Chân P2.1 đ-ợc nối tới chân R/W của LCD
; Chân P2.2 đ-ợc nối đến chân E của LCD
LCD equ P1
RS bit P2.0
RW bit P2.1
EN bit P2.2
ORG 0000h
Trang 4MOV A, # 38H ; Khởi tạo LCD hai dòng với ma trận 5x7 ACALL COMNWRT ; Gọi ch-ơng trình con ghi lệnh
ACALL DELAY ; Cho LCD một độ trễ
MOV A, # 0EH ; Hiển thị màn hình và con trỏ
ACALL COMNWRT ; Gọi ch-ơng trình con ghi lệnh
ACALL DELAY ; Cấp một độ trễ cho LCD
MOV A,# 01 ; Xoá LCD
ACALL COMNWRT ; Gọi ch-ơng trình con ghi lệnh
ACALL DELAY ; Tạo độ trễ cho LCD
MOV A, # 06H ; Dịch con trỏ sang phải
ACALL COMNWRT ; Gọi ch-ơng trình con ghi lệnh
ACALL DELAY ; Tạo độ trễ cho LCD
MOV A,# 84H ; Đ-a con trỏ về dòng 1 cột 4
ACALL COMNWRT ; Gọi ch-ơng trình con ghi lệnh
ACALL DELAY ; Tạo độ trễ cho LCD
MOV A, # “N” ; Hiển thị chữ N
ACALL DATAWRT ; Gọi ch-ơng trình con đưa dữ liệu đến LCD ACALL DELAY ; Tạo độ trễ cho LCD
MOV A,#“0” ; Hiển thị chữ 0
ACALL DATAWRT ; Gọi ch-ơng trình con đưa dữ liệu đến LCD
AGAIN:
SJMP AGAIN ; Chờ ở đây
COMNWRT: ; chương trỡnh con gửi lệnh đến LCD
MOV LCD, A ; Sao chép thanh ghi A đến cổng P1
CLR RS ; Đặt RS = 0 để gửi lệnh
CLR RW ; Đặt R/W = 0 để ghi dữ liệu
SETB EN ; Đặt EN = 1 cho xung cao
NOP NOP CLR EN ; Đặt EN = 0 cho xung cao xuống thấp RET
MOV LCD, A ; Sao chép thanh ghi A đến cổng P1
SETB RS ; Đặt RS = 1 để gửi dữ liệu
CLR RW ; Đặt R/W = 0 để ghi
NOP NOP CLR EN ; Đặt EN = 0 cho xung cao xuống thấp
Trang 5RET
DELAY: MOV 50H, # 10
DEL: MOV 51H, # 255
DJNZ 50H, DEL
RET
END
1.4 Địa chỉ con trỏ LCD
1.5 Một số chương trình điều khiển hiển thị text trên LCD
Ví dụ 1: "HELLO SPKT"
;89C51 dieu khien 44780 LCD 16characters x 2 lines
LCD EQU P0
EN BIT P3.7
RW BIT P3.6
RS BIT P3.5
START:
LCALL RESET_LCD
LCALL INI_LCD
LCALL CLEAR_LCD
MAIN:
SETB EN
CLR RS
MOV LCD,#85H ;CURSOR => 05H
CLR EN
LCALL DELAY
;
MOV A,#'H'
LCALL WRITE_TEXT
MOV A,#'E'
LCALL WRITE_TEXT
MOV A,#'L'
LCALL WRITE_TEXT
Trang 6MOV A,#'L'
LCALL WRITE_TEXT
MOV A,#'O'
LCALL WRITE_TEXT
LCALL DELAY1
;
SETB EN
CLR RS
MOV LCD,#0C5H ;CURSOR => 45H
CLR EN
LCALL DELAY
;
MOV A,#'S'
LCALL WRITE_TEXT
MOV A,#'P'
LCALL WRITE_TEXT
MOV A,#'K'
LCALL WRITE_TEXT
MOV A,#'T'
LCALL WRITE_TEXT
LCALL DELAY1
LCALL DELAY1
LCALL CLEAR_LCD
LCALL DELAY1
LCALL DELAY1
LJMP MAIN
INI_LCD: ;CHUONG TRINH CON KHOI TAO LCD
CLR RW
SETB EN
CLR RS
MOV LCD,#38H ;Function Set:8 bit, 2 lines, 5x7dot CLR EN
LCALL DELAY
SETB EN
MOV LCD,#0FH ;Display On, Cursor On, Cursor Blink On CLR EN
LCALL DELAY
SETB EN
CLR RS
MOV LCD,#06H ;Entry Mode Set:increment cursor position CLR EN
LCALL DELAY
SETB EN
CLR RS
MOV LCD,#1CH ;Cursor Display Shift
CLR EN
LCALL DELAY
RET
CLEAR_LCD: ;CHUONG TRINH CON XOA MAN HINH LCD
Trang 7SETB EN
CLR RS
MOV LCD,#01H
CLR EN
LCALL DELAY
RET
RESET_LCD: ;CHUONG TRINH CON RESET LCD
CLR EN
CLR RS
LCALL DELAY
RET
WRITE_TEXT:
SETB EN
SETB RS
CLR RW
MOV LCD,A
CLR EN
LCALL DELAY
RET
DELAY:
MOV 50H,#4 LOOP : MOV 51H,#249
DJNZ 51H,$
DJNZ 50H,LOOP RET
DELAY1:
MOV 50H,#30 DEL2: MOV 51H,#200
DEL1: MOV 52H,#249
DJNZ 52H,$
DJNZ 51H,DEL1 DJNZ 50H,DEL2 RET
END
VÍ DỤ 2:
;LINE1: 80H ; LINE2:0C0H; LINE3: 094H; LINE4: 0D4H
EN BIT P3.7
RW BIT P3.6
RS BIT P3.5
LCD EQU P0
ORG 0000H
START:
LCALL RESET_LCD
LCALL INI_LCD
LCALL CLEAR_LCD
MAIN:
MOV A,#80H ;CURSOR => 00H
LCALL WRITE_CONTROL
Trang 8MOV 30H,#20
MOV DPTR,#500H
ROW1: CLR A
MOVC A,@A+DPTR
LCALL WRITE_TEXT
INC DPTR
DJNZ 30H,ROW1
LCALL DELAY1
MOV A,#0C0H ;CURSOR => 40H
LCALL WRITE_CONTROL
MOV 30H,#20
ROW2: CLR A
MOVC A,@A+DPTR
LCALL WRITE_TEXT
INC DPTR
DJNZ 30H,ROW2
LCALL DELAY1
LCALL CLEAR_LCD
LCALL DELAY1
LJMP MAIN
;CHUONG TRINH CON KHOI TAO LCD
INI_LCD:
MOV A,#38H ;Function Set:8 bit, 2 lines, 5x7dot LCALL WRITE_CONTROL
MOV A,#38H ;Function Set:8 bit, 2 lines, 5x7dot LCALL WRITE_CONTROL
MOV A,#0FH ;Display On, Cursor On, Cursor Blink On LCALL WRITE_CONTROL
MOV A,#06H ;Entry Mode Set:increment cursor position LCALL WRITE_CONTROL
MOV A,#1CH ;Cursor Display Shift
LCALL WRITE_CONTROL
RET
CLEAR_LCD:
MOV A,#01H
LCALL WRITE_CONTROL
RET
RESET_LCD:
CLR EN
CLR RS
Trang 9LCALL DELAY
RET
;CHUONG TRINH CON VIET DU LIEU DEN LCD
WRITE_TEXT:
SETB EN
SETB RS
CLR RW
MOV LCD,A
CLR EN
LCALL DELAY
RET
;CHUONG TRINH CON VIET LENH DIEU KHIEN DEN LCD WRITE_CONTROL:
SETB EN
CLR RS
CLR RW
MOV LCD,A
CLR EN
LCALL DELAY
RET
DELAY:
MOV 20H,#4
LOOP :MOV 21H,#249
DJNZ 21H,$
DJNZ 20H,LOOP
RET
DELAY1:
MOV 20H,#10
DEL2: MOV 21H,#200
DEL1: MOV 22H,#249
DJNZ 22H,$
DJNZ 21H,DEL1
DJNZ 20H,DEL2
RET
ORG 500H
MACHU: DB ' NGUYEN VAN HIEP '
DB ' DIEN TU CONG NGHIEP' END