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

Điều khiển LCD với 8051

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 (178.79 KB, 9 trang )

Ghé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.


Mô tả các chân của LCD.
Chõn
1
2
3
4

Ký hiu
VSS
VCC
VEE
RS

I/O
I


5
6
7
8
9
10
11
12
13
14

R/W
E
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7

I
I/O
I/O
I/O
I/O
I/O
I/O
I/O

I/O
I/O

Mụ t
Đất
D-ơng nguồn 5v
Cp ngun iu khin tng phn
RS = 0 chọn thanh ghi lệnh. RS = 1 chọn
thanh dữ liệu
R/W = 1 đọc dữ liệu. R/W = 0 ghi
Cho phép
Các bít dữ liệu
Các bít dữ liệu
Các bít dữ liệu
Các bít dữ liệu
Các bít dữ liệu
Các bít dữ liệu
Các bít dữ liệu
Các bít dữ liệu

Các mã lệnh LCD.
Lệnh đến thanh ghi của LCD
Mó lnh
(hex)
1
Xoá màn hình hiển thị
2
Trở về đầu dòng
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
Khi to lcd 2 dũng, ma trn 5x7 (vi LCD 20x4 ta khi to
hai ln)


Cá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



MOV
ACALL
ACALL
MOV
ACALL
ACALL
MOV
ACALL
ACALL
MOV
ACALL
ACALL
MOV
ACALL
ACALL
MOV
ACALL
ACALL
MOV
ACALL

A, # 38H
COMNWRT
DELAY
A, # 0EH
COMNWRT
DELAY
A,# 01

COMNWRT
DELAY
A, # 06H
COMNWRT
DELAY
A,# 84H
COMNWRT
DELAY
A, # N
DATAWRT
DELAY
A,#0
DATAWRT

; Khởi tạo LCD hai dòng với ma trận 5x7
; Gọi ch-ơng trình con ghi lệnh
; Cho LCD một độ trễ
; Hiển thị màn hình và con trỏ
; Gọi ch-ơng trình con ghi lnh
; Cấp một độ trễ cho LCD
; Xoá LCD
; Gọi ch-ơng trình con ghi lệnh
; Tạo độ trễ cho LCD
; Dịch con trỏ sang phải
; Gọi ch-ơng trình con ghi lệnh
; Tạo độ trễ cho LCD
; Đ-a con trỏ về dòng 1 cột 4
; Gọi ch-ơng trình con ghi lệnh
; Tạo độ trễ cho LCD
; Hiển thị chữ N

; Gọi ch-ơng trình con a d liu n LCD
; Tạo độ trễ cho LCD
; Hiển thị chữ 0
; Gọi ch-ơng trình con a d liu n LCD

AGAIN:
SJMP

AGAIN

LCD, A
RS
RW
EN

; chng trỡnh con gi lnh n LCD
; Sao chép thanh ghi A đến cổng P1
; Đặt RS = 0 để gửi lệnh
; Đặt R/W = 0 để ghi dữ liệu
; Đặt EN = 1 cho xung cao

EN

; Đặt EN = 0 cho xung cao xuống thấp

COMNWRT:
MOV
CLR
CLR
SETB

NOP
NOP
CLR

; Chờ ở đây

RET
DATAWRT:
MOV LCD, A
SETB RS
CLR
RW
SETB EN
NOP
NOP
CLR EN

; Ghi dữ liệu ra LCD
; Sao chép thanh ghi A đến cổng P1
; Đặt RS = 1 để gửi dữ liệu
; Đặt R/W = 0 để ghi
; Đặt EN = 1 cho xung cao

; Đặt EN = 0 cho xung cao xuống thấp


RET
DELAY:
DEL:


MOV
MOV
DJNZ
DJNZ

50H, # 10
51H, # 255
51H, $
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
EN
RW
RS

EQU
BIT
BIT
BIT

P0
P3.7
P3.6

P3.5

START:
LCALL RESET_LCD
LCALL INI_LCD
LCALL CLEAR_LCD
MAIN:
SETB
CLR
MOV
CLR
LCALL

EN
RS
LCD,#85H
EN
DELAY

MOV
LCALL
MOV
LCALL
MOV
LCALL

A,#'H'
WRITE_TEXT
A,#'E'
WRITE_TEXT

A,#'L'
WRITE_TEXT

;

;CURSOR => 05H


MOV
LCALL
MOV
LCALL
LCALL

A,#'L'
WRITE_TEXT
A,#'O'
WRITE_TEXT
DELAY1

SETB
CLR
MOV
CLR
LCALL

EN
RS
LCD,#0C5H
EN

DELAY

;

;CURSOR => 45H

;
MOV
LCALL
MOV
LCALL
MOV
LCALL
MOV
LCALL
LCALL
LCALL
LCALL
LCALL
LCALL
LJMP
INI_LCD:
CLR
SETB
CLR
MOV
CLR
LCALL
SETB
MOV

CLR
LCALL
SETB
CLR
MOV
CLR
LCALL
SETB
CLR
MOV
CLR
LCALL
RET
CLEAR_LCD:

A,#'S'
WRITE_TEXT
A,#'P'
WRITE_TEXT
A,#'K'
WRITE_TEXT
A,#'T'
WRITE_TEXT
DELAY1
DELAY1
CLEAR_LCD
DELAY1
DELAY1
MAIN
;CHUONG TRINH CON KHOI TAO LCD

RW
EN
RS
LCD,#38H
;Function Set:8 bit, 2 lines, 5x7dot
EN
DELAY
EN
LCD,#0FH
;Display On, Cursor On, Cursor Blink On
EN
DELAY
EN
RS
LCD,#06H
;Entry Mode Set:increment cursor position
EN
DELAY
EN
RS
LCD,#1CH
;Cursor Display Shift
EN
DELAY
;CHUONG TRINH CON XOA MAN HINH LCD


SETB
EN
CLR

RS
MOV
LCD,#01H
CLR
EN
LCALL DELAY
RET
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

;CHUONG TRINH CON RESET LCD

DELAY1:
DEL2:
DEL1:

MOV
MOV
MOV
DJNZ
DJNZ
DJNZ
RET

50H,#30
51H,#200
52H,#249
52H,$
51H,DEL1
50H,DEL2

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


MOV
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
LCALL WRITE_CONTROL

;CURSOR => 40H

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
LCALL WRITE_CONTROL
MOV
A,#38H
LCALL WRITE_CONTROL

;Function Set:8 bit, 2 lines, 5x7dot

MOV
A,#0FH
LCALL WRITE_CONTROL

;Display On, Cursor On, Cursor Blink On

MOV
A,#06H
LCALL WRITE_CONTROL

;Entry Mode Set:increment cursor position

MOV
A,#1CH
LCALL WRITE_CONTROL

;Cursor Display Shift

RET
CLEAR_LCD:

MOV
A,#01H
LCALL WRITE_CONTROL
RET
RESET_LCD:
CLR
CLR

EN
RS

;Function Set:8 bit, 2 lines, 5x7dot


LCALL 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
LOOP :MOV
DJNZ
DJNZ
RET
DELAY1:
MOV
DEL2: MOV
DEL1: MOV
DJNZ
DJNZ
DJNZ
RET
ORG
500H
MACHU:
END

20H,#4
21H,#249

21H,$
20H,LOOP

20H,#10
21H,#200
22H,#249
22H,$
21H,DEL1
20H,DEL2

DB
DB

' NGUYEN VAN HIEP '
' DIEN TU CONG NGHIEP'



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×