1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình điều khiển LCD

15 324 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 15
Dung lượng 280,6 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin

Trang 1

BÀI 9:

LẬP TRÌNH ðIỀU KHIỂN LCD 16x2

  

- Hiểu ñược cấu trúc và nguyên lý hoạt ñộng của LCD 16x2

- Nắm ñược phần cứng giao tiếp với vi ñiều khiển MCS51

- Viết ñược các chương trình ñơn giản ứng dụng LCD 16x2

- Hiểu và nắm ñược các chương trình con ñiều khiển LCD 16x2

- CONST (contrast): chỉnh ñộ tương phản (ñộ sáng của hình ảnh trên LCD)

- EN (Enable): cho phép ñọc/ghi dữ liệu Trong chế ñộ ñọc, EN tác ñộng bằng xung dương (cạnh lên) và trong chế ñộ ghi, EN tác ñộng bằng xung âm (cạnh xuống)

- RS (register selection): chọn thanh ghi lệnh (RS = 0) hoặc thanh ghi dữ liệu (RS = 1)

- R/W: ñọc (R/W = 1) hay ghi (R/W = 0)

- D7 – D4: bus dữ liệu (chế ñộ 8 bit: 4 bit cao, chế ñộ 4 bit: dùng cho truyền 4 bit cao và 4 bit thấp) Ngoài ra, bit D7 còn dùng làm ngõ ra cho cờ Busy

Hình 8-1 là sơ ñồ giao tiếp với MCU Trong ñó, Error! Reference source not

found.8-1 (a) là sơ ñồ giao tiếp 4 bit dữ liệu với MCU; Error! Reference source not found.8-1 (b) là sơ ñồ giao tiếp 8 bít

Trong sơ ñồ giao tiếp 4 bits thì người ta chỉ sử dụng 4 bits cao (DB4 ñến DB7) Khi

ñó, dữ liệu hoặc ñịa chỉ 8 bits ñược ñọc (hoặc ghi) 2 lần liên tiếp: lần ñầu ñọc 4 bits

cao, lần sau ñọc 4 bits thấp

- D3 – D0: 4 bit thấp trong chế ñộ 8 bit hay bỏ trống trong chế ñộ 4 bit

- A, K: anode và cathode ñèn nền của LCD

Trang 2

Hình 8-1 – (a) Giao tiếp 4 bit (b) Giao tiếp 8 bit

a Các thành phần chức năng của LCD1602A:

- Cờ Busy (BF – Busy flag): Nếu BF = 1, LCD ñang trong quá trình thực thi một

lệnh Khi ñó, các lệnh gởi tiếp theo sẽ bị bỏ qua BF ñược ñọc tại chân D7 khi RS =

0 và R/W = 1 Do ñó, trước khi thực hiện một lệnh, cần kiểm tra BF trước, nếu BF

= 0 thì mới gởi lệnh

- DDRAM (Display Data RAM): chứa các ký tự sẽ hiển thị trên LCD, tối ña là

80x8 bit (80 ký tự) Khi hiển thị ở chế ñộ 1 dòng, ñịa chỉ của DDRAM có phạm vi

từ 00h ÷ 4Fh còn khi ở chế ñộ 2 dòng, ñịa chỉ DDRAM từ 00h ÷ 27h cho dòng 1 và 40h ÷ 67h cho dòng 2

- Bộ ñếm ñịa chỉ (AC - Address Counter): dùng ñể lưu ñịa chỉ hiện hành của

DDRAM và CGRAM, có thể thực hiện ñọc AC khi RS = 0 và R/W = 1

- CGROM (Character Genaration ROM): chứa các mô hình ký tự sẽ hiển thị trên

LCD, bao gồm 192 ký tự 5x7 theo bảng mã ASCII (nghĩa là khi DDRAM chứa giá trị 41h tương ứng với mã ASCII của ký tự ‘A’ thì trên LCD sẽ hiện ‘A’), trong ñó chỉ có các mã từ 00h – 0Fh sẽ không lấy theo mã ASCII mà lấy theo các ký tự ñã

ñịnh nghĩa trong CGRAM

- CGRAM (Character Genaration RAM): chứa các mô hình ký tự do người sử

dụng ñịnh nghĩa ñể hiển thị các ký tự không có sẵn trong CGROM

- CGRAM cho phép tạo tối ña 8 ký tự 5x8

MCU

RS R/W

E

DB4 – DB7

P1.1 P1.2 P1.3

P3

MCU

RS R/W

E

DB0 – DB7

P1.1 P1.2 P1.3

P3

Trang 3

Bảng 8-1 Các ký tự ñịnh nghĩa trong CGRAM

Trang 4

ðể ñịnh nghĩa một ký tự, thực hiện thay thế dấu ? bằng các giá trị 0 hay 1 tương ứng

và gởi vào CGRAM

Ví dụ: ðể ñịnh nghĩa chữ ð tại vị trí 1 trong CGRAM, ñịa chỉ và dữ liệu tương ứng là:

Trang 5

Nghĩa là tại ñịa chỉ 00h của CGRAM chứa giá trị là 1Eh và tương tự cho ñến ñịa chỉ 07h

b Các chế ñộ truyền dữ liệu:

LCD1602A có 2 chế ñộ truyền dữ liệu: chế ñộ 8 bit (dùng cả D0 – D7) và chế ñộ 4 bit (không dùng D3 – D0, chỉ dùng D7 – D4) Trong trường hợp dùng chế ñộ 4 bit, dữ liệu 8 bit sẽ ñược truyền 2 lần: truyền 4 bit cao rồi tiếp tục truyền 4 bit thấp

Sau khi thực hiện truyền xong 8 bit, BF mới chuyển lên 1 Hai chế ñộ truyền này mô tả như hình 8-2 và hình 8-3

Trang 6

Hình 8-3 ðịnh thời giao tiếp ở chế ñộ 4 bit

c Tập lệnh:

Bảng 8-2 - Tập lệnh của LCD1602A

Trang 7

Ví dụ: I/D =1 là Increment

I/D = 0 là Decrement …

Trang 8

Bảng 8-3 – Các lệnh thường dùng

d Sơ ñồ kết nối LCD 16x2 với MSC-51 trong hệ ET-LAB3A

Trang 9

III Phần thực hành

Bài 1: Viết chương trình hiển thị chuỗi “DH CAN THO-KHOA CN” trên dòng 1 và

“BO MON DIEN TU – VIEN THONG” trên dòng 2 của LCD

a Chương trình mẫu gợi ý

; ðịnh nghĩa PORT ra LCD và ñiều khiển LCD

; Viết chương trình ở MOD 4 bit tất cả dùng ở PORT1

DATA EQU P1 ;Port LCD

EN bit P1.2 ;Enable LCD

WR bit P1.1 ;WR LCD

RS bit P1.0 ;RS Select LCD

ORG 0000H

MAIN: MOV SP,#256-32 ;Initial Stack 32 Byte

CALL DELAY ;initial delay

CALL INIT_LCD ;initial LCD

MOV A,#8 0H ;ðịa chỉ của vị trí ñầu dòng 1 trên LCD

CALL GOTOLCD ;Di chuyển con trỏ ñến 80H

MOV DPTR,#LINE1 ;Ghi chuỗi Hello World ra LCD tại vị trí 40H

LOOP: CLR A

MOVC A,@A+DPTR

CJNE A,#0FFH,PRINT ;Kết thúc việc hiển thị nếu gặp 0FFH

JMP NEXT

PRINT: CALL WRITE_DATA

INC DPTR

JMP LOOP

NEXT:

MOV A,#0C 0H ;ðịa chỉ của vị trí ñầu dòng 2 trên LCD

CALL GOTOLCD ;Di chuyển con trỏ ñến 0C0H

MOV DPTR,#LINE2 ;Ghi chuỗi Hello World ra LCD tại vị trí 40H

LOOP1: CLR A

MOVC A, @A+DPTR

CJNE A, #0FFH, PRINT1 ;Kết thúc việc hiển thị nếu gặp 0FFH

JMP EXIT

PRINT1: CALL WRITE_DATA

INC DPTR

JMP LOOP1

Trang 10

EXIT:

JMP $

;*******************************************************

;* Write Instruction LCD *

;* Input : ACC (Command) *

;* Output : Data bus LCD *

;*******************************************************

WR_INS: MOV B,A

ANL A,#0F0H ;Giao tiếp 4 bits nên chỉ sử dụng 4 bits cao

MOV P1,A ;Ghi 4 bits cao lần ñầu

CALL EN_LCD ;Tạo xung E(nable)

MOV A,B ;Ghi 4 bits thấp lần sau

SWAP A

ANL A,#0F0H

MOV P1,A

CALL EN_LCD

RET

WRITE_DATA:

ANL A,#0F0H

SETB ACC.0

MOV P1,A

CALL EN_LCD

MOV A,B

SWAP A

ANL A,#0F0H

SETB ACC.0

MOV P1,A

CALL EN_LCD

RET

;ðoạn chương trình di chuyển ñến vị trí con trỏ

GOTOLCD: SETB ACC.7

CALL WRITE_INS

RET

;*******************************************************

;* ðoạn chương trình khởi tạo LCD *

;* Initial LCD *

;* 4-Bit Interface *

Trang 11

;*******************************************************

INIT_LCD: CLR RS_LCD

MOV A,#33H ;Khởi tạo LCD (xem bảng 8-2)

CALL WR_INS

MOV A,#32H ;Chọn mode giao tiếp 4 bits

CALL WR_INS

MOV A,#28H ;Chọn giao tiếp 4 bits và hiển thị 2 lines (xem bảng 8-2)

CALL WR_INS ;Fonts ở chế ñộ 5x8 dots

MOV A,#01H ;Xoá display (xem tập lệnh bảng 8-3)

CALL WR_INS

MOV A,#02H ;ðưa con trỏ về ñầu dòng

CALL WR_INS

MOV A,#0FH ;Nhấp nháy con trỏ

CALL WR_INS

RET

;*******************************************************

;* Enable Pin E LCD *

;* Active Chip select *

;*******************************************************

EN_LCD: SETB E_LCD ;Enable LCD

CALL BUSY ;Busy delay time

CLR E_LCD ;Disable LCD

CALL BUSY

RET

;*******************************************************

;* Delay time for Busy *

;* Wait LCD Ready *

;*******************************************************

BUSY: PUSH 07H

PUSH 06H

MOV R6,#0B0H

BUSY1: MOV R7,#0FFH

DJNZ R7,$

DJNZ R6,BUSY1

POP 06H

POP 07H

RET

;*******************************************************

;* Delay Time *

;*******************************************************

DELAY: PUSH 07H

PUSH 06H

Trang 12

DEL1: MOV R6,#0FFH

DEL2: MOV R7,#0FFH

DJNZ R7,$

DJNZ R6,DEL2

POP 06H

POP 07H

RET

; -

LINE1: DB 'KHOA DIEN – DIEN TU', 0FFH

LINE2: DB 'BO MON DIEN TU – VIEN THONG', 0FFH

END

b Yêu cầu

- Chạy chương trình trên kiểm tra và cho nhận xét

- Hãy cho biết ý nghĩa của các chương trình con: BUSY, EN_LCD, INTI_LCD, WR_DATA VÀ WR_INS

- Tai sao cuối LINE1 và LINE2 có giá trin 0FFh ? Có thể thay giá trị này bằng một giá trị khác ñược không ? Hãy tìm những chỗ có thể thay thế giá trị 0FFh này Chạy chương trình kiểm chứng

- Lệnh SETB ACC.7 trong ñoạn GOTOLCD có ý nghĩa gì? (xem bảng 8-2)

- Sửa lại chương trình ñể hiển thị chuỗi LINE1 và LINE2 ở giữa LCD ?

- Sửa lại chương trình sao cho LINE1 và LINE2 dịch trái, dịch phải

- Sửa lại chương trình sao cho LINE1 dịch trái và LINE2 dịch phải và ngược lại

- Có thể sửa chương trình lại ñể cho LCD 16x2 hoạt ñộng ở chế ñộ truyền 8 bit ñược không? Tại sao? Nếu ñược hãy thử thay ñổi và kiểm chứng

- Phải sửa lại ñoạn lệnh INIT_LCD như thế nào ñể LCD hiển thị ở chế ñộ 1

line và font ở chế ñộ 5x10 dots (xem bảng 8-2)

- Sửa chương trình sao cho hiển thị ký tự A trên 1 dòng duy nhất

Bài 2: Chương trình sau ñây sẽ ñếm và hiển thị số ra LCD từ 0 ñến 9 rồi dừng Chú ý

con trỏ sẽ tự ñộng dịch phải sau khi in 1 số ñếm ra LCD Do ñó, ñể số ñếm sau sẽ hiển thị ñè lên số ñếm trước thì ta phải dịch ngược con trỏ 1 ñơn vị sau mỗi lần hiển thị số

ñếm

a Chương trình gợi ý mẫu:

DATA EQU P1 ;Port LCD

EN bit P1.2 ;Enable LCD

WR bit P1.1 ;WR LCD

Trang 13

RS bit P1.0 ;RS Select LCD

ORG 0000H

MAIN: MOV SP,#256-32 ;Initial Stack 32 Byte

CALL DELAY ;initial delay

CALL INIT_LCD ;initial LCD

;ðây là ñoạn lệnh ñếm và hiển thị ra màn hình LCD

MOV R1,#0FFH

LOOP: INC R1

CLR A ; mov a, #00h

CALL GOTOLCD ; Dời con trỏ về ñầu dòng 1

MOV A,R1

ADD A,#30H

CALL WRITE_DATA ;Hiển thị số ñếm ra LCD

CALL DELAY

CALL DELAY

CALL DELAY

CJNE R1,#9H,LOOP ;Dừng hiển thị khi ñếm ñến 9

JMP $

;*******************************************************

;* Write Instruction LCD *

;* Input : ACC (Command) *

;* Output : Data bus LCD *

;*******************************************************

WR_INS: MOV B,A

ANL A,#0F0H ;Giao tiếp 4 bits nên chỉ sử dụng 4 bits cao

MOV P1,A ;Ghi 4 bits cao lần ñầu

CALL EN_LCD ;Tạo xung E(nable)

MOV A,B ;Ghi 4 bits thấp lần sau

SWAP A

ANL A,#0F0H

MOV P1,A

CALL EN_LCD

RET

WRITE_DATA:

ANL A,#0F0H

SETB ACC.0

MOV P1,A

CALL EN_LCD

MOV A,B

Trang 14

SWAP A

ANL A,#0F0H

SETB ACC.0

MOV P1,A

CALL EN_LCD

RET

;ðoạn chương trình di chuyển ñến vị trí con trỏ

CALL WRITE_INS

RET

;*******************************************************

;* ðoạn chương trình khởi tạo LCD *

;* Initial LCD *

;* 4-Bit Interface *

;*******************************************************

INIT_LCD: CLR RS_LCD

MOV A,#33H ;Khởi tạo LCD (xem bảng 8-2)

CALL WR_INS

MOV A,#32H ;Chọn mode giao tiếp 4 bits

CALL WR_INS

MOV A,#28H ;Chọn giao tiếp 4 bits và hiển thị 2 lines (xem bảng 8-2) CALL WR_INS ;Fonts ở chế ñộ 5x8 dots

MOV A,#01H ;Xoá display (xem tập lệnh bảng 8-3)

CALL WR_INS

MOV A,#02H ;ðưa con trỏ về ñầu dòng

CALL WR_INS

MOV A,#0FH ;Nhấp nháy con trỏ

CALL WR_INS

RET

;*******************************************************

;* Enable Pin E LCD *

;* Active Chip select *

;*******************************************************

EN_LCD: SETB E_LCD ;Enable LCD

CALL BUSY ;Busy delay time

CLR E_LCD ;Disable LCD

CALL BUSY

RET

;*******************************************************

;* Delay time for Busy *

;* Wait LCD Ready *

;*******************************************************

BUSY: PUSH 07H

Trang 15

PUSH 06H

MOV R6,#0B0H

BUSY1: MOV R7,#0FFH

DJNZ R7,$

DJNZ R6,BUSY1

POP 06H

POP 07H

RET

;*******************************************************

;* Delay Time *

;*******************************************************

DELAY: PUSH 07H

PUSH 06H

DEL1: MOV R6,#0FFH

DEL2: MOV R7,#0FFH

DJNZ R7,$

DJNZ R6,DEL2

POP 06H

POP 07H

RET

END

b Yêu cầu

- Quan sát số ñếm hiển thị trên LCD khi cho chạy chương trình? Chú ý: nếu số

ñếm hiểu thị quá nhanh, học viên hãy tăng số lần gọi DELAY sau khi hiển thị

số ñếm

- Tại sao phải cộng số ñếm với 30H trước khi cho hiển thị?

- Sửa lại chương trình trên ñể số ñếm hiển thị ñến 25?

- Sửa lại chương trình cho hiển thị ñồng hồ giờ phút giây tương ñối hiển thị trên LCD

- Sửa chương trình sao cho khi ấn SW1 = Px.2 thì tăng giá trị hiển thị trên LCD

là 1, còn khi ấn SW2 = Px.3 thì giảm giá trị hiển thị trên LCD xuống một Khi chạy chương trình thi LCD hiển thị 0000

-Hết -

Ngày đăng: 23/10/2014, 12:38

HÌNH ẢNH LIÊN QUAN

Hỡnh  8-1  là  sơ  ủồ  giao  tiếp  với  MCU.  Trong  ủú,  Error!  Reference  source  not  found.8-1 (a) là sơ ủồ giao tiếp 4 bit dữ liệu với MCU; Error! Reference source not  found.8-1 (b) là sơ ủồ giao tiếp 8 bớt - Lập trình điều khiển LCD
nh 8-1 là sơ ủồ giao tiếp với MCU. Trong ủú, Error! Reference source not found.8-1 (a) là sơ ủồ giao tiếp 4 bit dữ liệu với MCU; Error! Reference source not found.8-1 (b) là sơ ủồ giao tiếp 8 bớt (Trang 1)
Hình 8-1 – (a) Giao tiếp 4 bit  (b) Giao tiếp 8 bit - Lập trình điều khiển LCD
Hình 8 1 – (a) Giao tiếp 4 bit (b) Giao tiếp 8 bit (Trang 2)
Bảng 8-1 Cỏc ký tự ủịnh nghĩa trong CGRAM - Lập trình điều khiển LCD
Bảng 8 1 Cỏc ký tự ủịnh nghĩa trong CGRAM (Trang 3)
Hỡnh 8-2  ðịnh thời giao tiếp ở chế ủộ 8 bit - Lập trình điều khiển LCD
nh 8-2 ðịnh thời giao tiếp ở chế ủộ 8 bit (Trang 5)
Hỡnh 8-3  ðịnh thời giao tiếp ở chế ủộ 4 bit - Lập trình điều khiển LCD
nh 8-3 ðịnh thời giao tiếp ở chế ủộ 4 bit (Trang 6)
Bảng 8-2 - Tập lệnh của LCD1602A - Lập trình điều khiển LCD
Bảng 8 2 - Tập lệnh của LCD1602A (Trang 6)
Bảng 8-3 – Các lệnh thường dùng - Lập trình điều khiển LCD
Bảng 8 3 – Các lệnh thường dùng (Trang 8)

TỪ KHÓA LIÊN QUAN

w