Xét LCD cụ thể Hitachi HD44780

Một phần của tài liệu BÁO CÁO BÀI TẬP LỚN MÔN VI XỬ LÝ (Trang 43 - 133)

LCD hiển thị đợc 2 hàng mỗi hàng hiển thị đợc 16 ký tự (LCD cĩ 14 chân) nh đợc minh hoạ trên hình.

Thơng số của LCD :

+Kích thớc hiển thị : 16 ký tự x 2 dịng. +Màu hiển thị: đen/trắng

+Chế độ giao tiếp : 8 bít và 4 bít +Cỡ chữ hiển thị : 5x7 hoặc 5x10

1. Cấu trúc của LCD

1a. Giới thiệu sơ đồ chân LCD .

_ LCD cĩ tổng số 14 chân chia làm 3 nhĩm:

Nhĩm 1: (3 chân) Cấp nguồn VDD, VSS : cấp 5V, 0V

VEE: thay đổi điện áp để thay đổi độ tơng phản Nhĩm 2: (8 chân) Vào ra thơng tin với VĐK : Từ chân D0-D7

Nhĩm 3 : (3 chân) Điều khiển việc vào ra thơng tin : E,RS,R/W

E :(bật /tắt ) (cho phép/ khơng cho phép trao đổi thơng tin với VĐK ) RS :(loại thơng tin trao đổi)Thơng tin trao đổi là lệnh điều khiển hay à

dữ liệu để hiển thị

R/W : (hớng truyền của thơng tin) đọc trạng thái từ LCD hay thơng tin do VĐK gửi vào LCD để hiển thị

Cụ thể tên gọi và mơ tả chức năng các chân đợc tổng kết trong bảng sau:

Interface Pin Connections Chân

số Ký hiệu Tên Mơ tả chức năng

1 VSS Cấp nguồn 0V (GND)

2 VDD Cấp nguồn Nối với dơng nguồn (+4.5V~+5.5V)

3 VEE Contrast điều chỉnh điện áp chân này sẽ tăng giảm độ tơng phản

của LCD. cho nên nĩ thờng đợc nối với biến trở.

4 RS Chọn thanh ghi Nếu RS=0 : LCD nhận lệnh từ VĐKNếu RS=1: LCD nhận dữ liệu từ VĐK để hiển thị

5 RW Read/Write Chọn chức năng ghi/ đọc

RS=1 : chọn chức năng đọc dữ liệu từ LCD vào VĐK RS=0 : chọn chức năng ghi dữ liệu từ VĐKvào LCD để hiểnt thị

6 E Read Write enable

Cho phép/ ko cho phép LCD trao đổi thơng tin với VĐK. Chỉ khi E chuyển từ 10 thì tín hiệu ở các chân D0-D7 mới đợc đa vào LCD.

7 D0 Data bus 0-7

8 chân này đợc nối với VĐK để vào/ra thơng tin

8 D1 9 D2 10 D3 11 D4 12 D5 13 D6 14 D7

_ Từ những đặc điểm và chức năng đã đợc đề cập ở trên ta cĩ thể đi tới việc hình thành việc ghép nối của LCD với vi điều khiển nh sau:

Nh trên hình minh hoạ ta cĩ thể thấy các chân D0-D3 là đờng tín hiệu 2 chiều (để trao đổi thơng tin Vi điều khiển và LCD). 3 chân điều khiển RS, R/W, E là chân đa tín hiệu điều khiển từ Vi điều khiển tới LCD nên nĩ chỉ là đờng tín hiệu 1 chiều thơi.

Vì chân Contrast (VEE) điều chỉnh độ tơng phản của LCD nên ta cấp nguồn cho nĩ thơng qua biến trở (nh hình vẽ) (adsbygoogle = window.adsbygoogle || []).push({});

1b. Cấu trúc bộ nhớ trong LCD.

Màn hiển thị của LCD nĩi chung cĩ thể lên tới hơn 40 ký tự trên một dịng và một màn cĩ thể cĩ tới 4 dịng.Trong đĩ cĩ một bộ RAM để chứa mã 80 ký tự gọi là bộ nhớ DDRAM(display data ram),màn hiển thị cĩ thể dịch cả màn để quan sát đợc các ký tự khác.

Bộ ký tự hiển thị : Bộ hiển thị cĩ thể hiển thị đợc các ký tự đã đợc lập trình trớc hoặc các ký tự do ngời dùng định nghĩa.Trong bộ điều khiển hiển thị cĩ một bộ nhớ ROM dùng để phát ký tự, trong Rom này chứa 192 ký tự,khi cần chọn những ký tự này thì nĩ đợc chọn thơng qua từng mã của nĩ, cĩ tới 96 mã ký tự ASCII, 64 mã ký tự tiếng Nhật, 32 ký tự đặc biệt khác. Trong bộ điều khiển LCD cũng cĩ một bộ RAM gọi là

CGRAM(character generator ram) trong bộ nhớ này lu 8 ký tự do ngời

dùng định nghĩa, các ký tự đầu tiên phải viết vào CGRAM trớc rồi sau đĩ mới hiển thị ra màn hiển thị đợc.

2. Tập lệnh của LCD.

2a. Khả năng hiển thị của LCD.

LCD cĩ khả năng hiển thị rất linh hoạt _ Thiết lập chế độ hiển thị :

Hiển thị trên 1 dịng hay cả 2 dịng. Chọn cỡ chữ hiển thị (5x7 hay5x10).

Chọn kiểu con trỏ màn hình (cĩ/khơng gạch chân , cĩ/khơng nhấp nháy)

_ Thiết lập kiểu trao đổi thơng tin :

Trao đổi thơng tin với Vi điều khiển dùng 4 bit hay 8 bít. _ Trình bày nội dung hiển thị.

Hiển thị ký tự trên LCD.

Hiển thị ký tự ở vị trí bất kỳ trên LCD. Tạo chữ chạy trên LCD

2b. Tập lệnh của LCD

Để thực hiện đợc các khả năng hiển thị ở trên, ta cần ra lệnh cho LCD thực hiện các thao tác, tức là phải sử dụng tập lệnh của LCD.

Command D7 D6 D5 Binary D4 D3 D2 D1 D0 Hex Clear Display (Xố màn hình) 0 0 0 0 0 0 0 1 01

Display & Cursor Home 0 0 0 0 0 0 1 x 02 or 03 Character Entry Mode

(Chế độ nhận dữ liệu) 0 0 0 0 0 1 1 / D S 04 to 07

Display On/Off & Cursor

(bật/tắt LCD và kiểu con trỏ) 0 0 0 0 1 D U B 08 to 0F

Display/Cursor Shift

(Dịch LCD và con trỏ) 0 0 0 1 D / C R / L x x 10 to 1F

Function Set 0 0 1 8 / 4 2 / 1 10 / 7 x x 20 to 3F Set CGRAM Address 0 1 A A A A A A 40 to 7F Set Display Address 1 A A A A A A A 80 to FF 1 / D:

S:

1=Increment*, 0=Decrement 1=Display shift on, 0=Off*

R / L: 8 / 4: 1=Right shift, 0=Left shift 1=8-bit interface*, 0=4-bit interface

D: 1=Display on, 0=Off* 2 / 1: 1=2 line mode, 0=1 line mode* U: B: 1=Cursor underline on, 0=Off* 1=Cursor blink on,

0=Off*

10 / 7: 1=5x10 dot format, 0=5x7 dot format* D / C: 1=Display shift, 0=Cursor move x = Don't care * = Initialization settings (adsbygoogle = window.adsbygoogle || []).push({});

Chú thích bảng lệnh:

Ký hiệu Chức năng Chú thích

X bít nhị phân (0,1)tuỳ ý

1/D Địa chỉ con trỏ 1= tự động tăng; 0= tự động giảm S Dịch con trỏ sau khi hiển thị Cĩ (1); Khơng (0)

D =1: bật LCD; =0: tắt LCD

U Con trỏ đợc gạch chân Cĩ (1); Khơng (0) B Con trỏ nhấp nháy Cĩ (1); Khơng (0)

D/C Dịch chuyển Màn hình (1); Con trỏ (0)

R/L Chiều dịch chuyển Sang phải (1); Sang trái (0) 8/4 Chế độ trao đổi thơng tin 8 bít (1); 4 bít (0)

2/1 Số dịng hiển thị 2 dịng (1) ; 1 dịng (0)

10/7 Cỡ chũ Cỡ 5x10 (1); Cỡ 5x7 (0)

_ Các lệnh trên chia làm 3 nhĩm :

Nhĩm 1: Các lệnh thiết lập chế độ hiển thị : Display On/Off &

Nhĩm 2: Các lệnh điều khiển quá trình hiển thị (con trỏ và màn hình):

Display & Cursor Home , Display On/Off & Cursor , Display/Cursor Shift, Set CGRAM Address,

Nhĩm 3: Lệnh kiểm tra trạng thái của LCD : Set Display Address

_ Trên đây là tập lệnh của LCD, các mã lệnh này sẽ đợc đa từ Vi điều khiển vào LCD qua 8 đờng D0-D7. Muốn LCD nhận và hiểu các tín hiều đ- a vào này là lệnh thì phải sử dụng đúng Nhĩm 3 chân Điều khiển việc vào ra thơng tin : E,RS,R/W . Khi nào LCD hiểu tín hiệu đa vào là dữ liệu, khi nào là lệnh là do sự kết hợp của 3 chân này quyết định.

Các chế độ vào ra thơng tin của LCD (kết hợp các chân E, RS, R/W)

Cĩ 2 chế độ đa thơng tin vào LCD (từ vi điều khiển): thơng tin đa vào là lệnh; Thơng tin đa vào là dữ liệu để hiển thị

Cĩ 1 chế độ đa thơng tin ra khỏi LCD (vào vi điều khiển) : đọc trạng thái hiện hành của LCD cho Vi điều khiển biết.

Điều khiển LCD là phải sử dụng linh hoạt các chế độ này. Việc quyết định dùng chế độ vào ra thơng tin nào là do 3 chân E, RS,R/W của LCD quyết định.

+ Chân E: quyết định việc khi nào chấp nhận thơng tin ở các chân cịn lại : đĩ là khi tín hiệu ở chân E chuyển mức từ 1  0.

+ Chân RS quyết định việc nhận lệnh hay dữ liệu. Lệnh (RS=0 ); Dữ liệu (RS=1)

+ Chân R/W quyết định chiều truyền dữ liệu . Vào LCD(R/W=0); Ra khỏi LCD (R/W=0).

Tổng hợp theo bảng sau:

Ví dụ muốn hiển thị 1 chữ cái A trên LCD ta phải lần lợt qua các chế độ sau: Cấp nguồn  Đọc trạng thái của LCD xem LCD đã sẵn sàng cha Gửi lệnh từ Vi điều khiển vào LCD để thiết lập chế độ hiển thị  Gửi mã của ký tự cần hiển thị vào LCD.

Các chế độ vào/ra thơng tin do RS, R/W quyết định

RS R/ W

Chế độ

0 0 Lệnh gửi từ Vi điều khiển vào LCD

0 1 Đọc cờ bận (D7) và vị trí con trỏ (D0-D6) của LCD 1 0 Dữ liệu gửi từ Vi điều khiển vào LCD (adsbygoogle = window.adsbygoogle || []).push({});

3. Các ứng dụng hiển thị trên LCD.

Phần này sẽ sử dụng tập lệnh của LCD đợc xét ở mục 2 để đạt đợc mục đích hiển thị trên LCD kết hợp với sử dụng linh hoạt Nhĩm các chân điều khiển vào ra thơng tin E, RS, R/W.

3a. Thiết lập chế độ hiển thị cho LCD.

_ Phần này sẽ ứng dụng các lệnh : Command D7 D6 D5 Binary D4 D3 D2 D1 D0 Hex Clear Display 0 0 0 0 0 0 0 1 01

Display On/Off & Cursor 0 0 0 0 1 D U B 08 to 0F

Function Set 0 0 1 8 / 4 2 / 1 10 / 7 x x 20 to 3F

_ Đặt vấn đề :

Khi LCD modul đợc Reset, ở trạng thái ban đầu ngay khi đợc cấp nguồn màn hình LCD cha cĩ gì đợc hiển thị cả. Thậm chí , lúc này nếu ta cho dữ liệu vào để hiển thị 1 ký tự nào đĩ thì LCD cũng khơng thể làm đợc. Bởi vì trớc tiên LCD phải nhận đợc lệnh điều khiển trớc khi nĩ cĩ thể hiển thị thơng tin. Lệnh điều khiển mà ta muốn nĩi tới chính là lệnh cho LCD bật chế độ hiển thị và thiết lập chế độ hiển thị cho LCD (Ví dụ: hiển thị trên 1 hay 2 dịng, con trỏ hiển thị theo dạng nào..)

_ Lệnh Display On/Of and Cursor khi đợc gửi tới LCD sẽ bật chế độ

hiển thị của LCD và đồng thời cũng xác định kiểu con trỏ hiển thị. Nếu

bít D =1 sẽ bật LCD (ngợc lại sẽ tắt LCD). Nếu bít U=1 con trỏ màn hình sẽ đợc gạch chân (và ngợc lại ). Nếu bít B=1 thì con trỏ sẽ nhấp nháy (và ngợc lại).

Tốt nhất nên chọn kiểu con trỏ hiển thị là con trỏ nhấp nháy và cĩ gạch chân để tiện quan sát. Muốn vậy , ta sẽ gửi tới LCD mã lệnh sau : 00001111($0F).

Cụ thể các thao tác nh sau :

RS để ở mức logic 0 (LCD hoạt động ở chế độ nhận lệnh), R/W = 0 (truyền dữ liệu từ vi điều khiểu vào LCD)  các đờng vào D0-D7 đợc đặt là: 00001111 ($0F))  Sau cùng để chân E cĩ 1 chuyển mức “1”về “0” ở mức cao (cho phép LCD nhận dữ liệu). Sau khi các thao tác này đợc thực hiện, 1 con trỏ nhấp nháy, cĩ gạch chân sẽ xuất hiên ở gĩc bên trái màn hình LCD .

_ Lệnh Function Set: Nếu muốn LCD hiển thị cả 2 dịng. Ta cĩ thể dùng câu lệnh Function Set.Lệnh này cịn xác định LCD trao đổi thơng tin với bên ngồi bằng 4 đờng hay 8 đờng dữ liệu, độ phân giải 5x10 hay 5x7. Nếu bít 8/4 =1 thì LCD sẽ dùng 8 bít D0-D7 để trao đổi thơng tin với Vi điều khiển (nếu =0 thì chỉ dùng 4 bit thơi). Nếu bít 2/1=1 thì LCD sẽ hiển thị trên cả 2 dịng (nếu =0 thì chỉ hiển thị trên 1 dịng ). Nếu bít 10/7=1 mỗi ký tự sẽ đợc hiển thị với cỡ chữ 5x10 (nếu =0 thì cỡ chữ 5x7).

Ví dụ : dùng 8 đờng dữ liệu, hiển thị 2 dịng, phân giải 5x7 thì ta sẽ gửi tới LCD mã lệnh sau: 00111000 ($38).

Thao tác cụ thể:

để RS =0, R/W=0  các đờng vào D0-D7 đợc đặt là: 00111000 ($38)  chân E cĩ 1 chuyển mức “1”về “0” ở mức cao (cho phép LCD nhận dữ liệu).

_ Tăng độ tơng phản lên 1 chút vì hiện giờ ta đang hiển thị bằng cả 2 dịng của LCD. Tiếp theo đây , ta đã cĩ thể hiển thị chữ trên LCD theo từng bớc sau: để chân RS =1 (ở mức cao) (Chuyển LCD từ chế độ nhận lệnh sang chế độ nhận ký tự ,ký hiệu), R/W=0  Sau đĩ ta chỉ việc đa tín hiệu mã hố của ký tự cần hiển thị vào đờng dữ liệu của LCD  Cho chân E 1 chuyển mức “1” về “0”. Ví dụ : để hiển thị chữ A , ta truyền giá trị 01000001 ($47) (chính là mã ASCII của ký tự A) vào 8 đờng dữ liệu của LCD. Thậm chí ta cĩ thê hiển thị 1 dãy ký tự nh sẽ xét ở phần sau đây. Kết luận thiết lập chế độ hiển thị ban đầu cho LCD bằng lệnh :

Display On/Of and Cursor : 00001111($0F)

Function Set: 00111000 ($38)

3b. Hiển thị ký tự trên LCD.

_ Đặt vấn đề:

Sau khi đã thiết lập cho LCD chế đọ hiển thị nh trên, ta sẽ hiển thị 1 vài ký tự trên LCD. Vậy LCD cĩ thể hiển thị những ký tự nào và đa các ký tự đĩ vào LCD nh thế nào? Phần này sẽ giải đáp câu hỏi đĩ.

_ LCD cĩ bộ nhớ ROM mã hố các ký tự mà nĩ cĩ thể hiển thị. Tổng số cĩ 192 ký tự, khi cần chọn những ký tự này thì chỉ cần đặt mã nhị phân của nĩ ở đầu vào, cĩ tới 96 mã ký tự ASCII, 64 mã ký tự tiếng Nhật, 32 ký tự đặc biệt khác.

Mơ tả bảng mã hố ký tự chuẩn: 16 mã đầu tiên trong bảng (từ $00 - $0F) cịn để trống để chứa các ký tự , biểu tợng do ngời dùng tự định nghĩa.

16 ký tự tiếp theo (từ $10 - $1F) hiển thị các ký tự trống. Các vị trí tiếp theo hiển thị ký tự nh trên hình minh hoạ. Từ $80 - $9F khơng sử dụng.

_Chú ý rằng để hiển thị ký tự thì khi đa mã hố của ký tự vào D0-D7 thì LCD phải để ở chế độ nhận dữ liệu (tứclà RS=1. R/W=0)  Sau đĩ đặt mã nhị phân của ký tự đĩ vào D0-D7  tạo ra 1 chuyển mức “1” về “0 ” ở chân E. Ngay sau đĩ ta sẽ thấy ký tự đĩ đợc hiển thị trên màn hình

3c. Hiển thị ký tự tại 1 vị trí bất kỳ trên LCD. _Phần này sẽ ứng dụng các lệnh: Command D7 D6 D5 Binary D4 D3 D2 D1 D0 Hex Set Display Address 1 A A A A A A A 80 to FF

_ Đặt vấn đề: (adsbygoogle = window.adsbygoogle || []).push({});

Khi LCD bắt đầu đợc hoạt động, sau khi đợc thiết lập kiểu hiển thị, ta sẽ thấy trên LCD cĩ 1 con trỏ ở đầu dịng đầu tiên (đây gọilà địa chỉ $00). Mỗi khi 1 ký tự, biểu tợng đợc hiển thị, con trỏ đĩ lại dịch sang phải 1 vị trí (tức là sang địa chỉ tiếp theo $01, $02…). Sự tự động tăng địa chỉ của con trỏ nh vậy đã tạo sự thuận tiện trong hiển thị 1 chuỗi ký tự trên LCD vì ta khơng cần phải định địa chỉ hiển thị cho từng ký tự.

Nhng nếu ta khơng muốn hiển thị chuỗi ký tự ở vị trí đầu của dịng đầu tiên nữa, mà muốn hiển thị từ 1 vị trí bất kỳ , thì lúc này ta phải cho LCD biết địa chỉ hiển thị thơng qua lệnh Set Display Address

_ Lệnh Set Display Address : Lệnh này sẽ đặt con trỏ màn hình ở vị trí (cĩ toạ độ xác định bởi 0AAAAAAA) trên màn hình . Sau đĩ ta cĩ thể cho hiển thị chữ tại vị trí mới của con trỏ.

_ Các định địa chỉ trên màn hình LCD. Ta biết rằng địa chỉ đặt con trỏ cĩ thể nhận giá trị trong khoảng $00-$7F tức là 128 địa chỉ. Nhng trên thực tế (do kích thờc của LCD )chỉ cĩ 80 địa chỉ đợc xác định, 40 địa chỉ cho dịng trên và 40 địa chỉ cịn lại cho dịng dới. Chỉ cĩ LCD loại 40x2 hàng mới dùng hết 80 địa chỉ đĩ, cịn loại LCD nhỏ hơn (nh của ta đang xét ) cũng khơng dùng hết 80 địa chỉ đĩ. Cách định địa chỉ hiển thị trên LCD đ- ợc minh hoạ theo hình sau:

_ Vì Set Display Address là lệnh nên LCD phải làm việc ở chế độ lệnh từ Vi điều khiển gửi vào LCD.

_ Ví dụ : muốn hiển thị chữ A trên LCD tại vị trí số 10 của dịng trên ($0A hay 00001010) ta làm nh sau:

Đặt chân RS=0 , R/W=0  Đặt mã 10001010 vào chân D0-D7  Tạo cho chân E 1 chuyển mức “1” về “0”. Sau bớc này, con trỏ sẽ ơ vị trí $0A. Giờ hết chế độ nhận lệnh, ta thiết lập chế độ nhân dữ liệu : RS=1, R/W=0  Đặt mã hố của ký tự A (00010100) vào D0-D7 Tạo cho E 1 chuyển

trang thai “1” – “0”. Ngay sau đĩ, ta sẽ thấy chữ A hiện tại vị trí số 10 của dịng trên. Định địa chỉ trên LCD 20ký tự x4 dịng Định địa chỉ trên LCD 16ký tự x2 dịng 3d. Hiển thị chữ chạy bằng LCD _ Phần này sẽ ứng dụng các lệnh : Command D7 D6 D5 Binary D4 D3 D2 D1 D0 Hex Display/Cursor Shift 0 0 0 1 D / C R / L x x 10 to 1F

_ Đặt vấn đề:

Tuỳ vào kích thớc của LCD mà số lợng ký tự hiển thị trên LDC bị hạn chế. Nhng hầu hết các LCD đều cĩ chức năng dịch chuyển khối ký tự đợc

Một phần của tài liệu BÁO CÁO BÀI TẬP LỚN MÔN VI XỬ LÝ (Trang 43 - 133)