1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

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

9 326 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 178,79 KB

Nội dung

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 1

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

Trang 2

Mô 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 3

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

Trang 4

MOV 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 5

RET

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 6

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

SETB 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 8

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 ;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 9

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

Ngày đăng: 07/05/2016, 08:52

TỪ KHÓA LIÊN QUAN

w