II.4 Cỏc ứng dụng hiờ̉n thị trờn LCD.

Một phần của tài liệu Mô hình hệ thống cửa tự động” với vi điều khiển “ P89V51RD2FN” (Trang 42)

C: 1=Display shift, 0=Cursor move

II.4 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.

II.4.1 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 to0F

Function Set 0 0 1 8 /4 2 /1 10 /7 x x 20 to3F

Đặ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 chưa 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 ngoài bằng 4 đường hay 8 đường dữ liệu, độ phõn giải 5x10

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ã hoỏ 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)

II.4.2 Hiờ̉n thị ký tự trờn LCD.

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ã hoỏ 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ã hoỏ 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ã hoỏ 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:

a. 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 đề:

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

Nhưng 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ự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ỉ đú. (adsbygoogle = window.adsbygoogle || []).push({});

_ 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ã hoỏ của ký tự A (00010100) vào D0-D7 Tạo cho E 1 chuyển trang trỏi “1” – “0”. Ngay sau đú, ta sẽ thấy chữ A hiện tại vị trớ số 10 của dũng trờn. b. 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ế. Nhưng hầu hết cỏc LCD đều cú chức năng dịch chuyển khối ký tự được hiển thị sang trỏi hoặc sang phải. Điều này giỳp ớch rất nhiều nếu nội dung cần hiển thị lớn hơn cửa số LCD, và cũng làm cho hiển thị của LCD trở nờn sinh động hơn. Muốn vậy , ta dựng lệnh Cursor/Display Shift

_ Lệnh Cursor/Display Shift . Nếu D/C=1 LCD sẽ dịch chuyển màn hỡnh (nếu =0 LCD dịch chuyển con trỏ). Nếu R/L=1 LCD dịch chuyển sang phải (nếu =0 thỡ dịch sang trỏi).

_ Vớ dụ: Sau đõy ta xột cụ thể 1 vớ dụ dịch chuyển 1 khối ký tự trờn LCD:

Nhập lệnh vào LCD để thiết lập trạng thỏi ban đầu (hiển thị 1 dũng, con trỏ nhấp nhỏp cú gạch chõn ) (lệnh Function Set, Display On/Off and Cursor

), sau đú truyền dữ liệu vào LCD , ở đõy ta truyền cho LCD 26 ký tự từ A-Z (truyền mã từ 01000001 – 01011010 tức là từ $41-$5A)

Tuy nhiờn trờn LCD ta chỉ quan sỏt được 16 ký tự ở dũng trờn , từ A- P. Những ký tự cũn lại và con trỏ đều bị khuất về bờn phải nờn ta khụng quan sỏt được.

Giờ ta sẽ dựng lệnh Cursor/Display Shift để dịch khối 26 ký tự đú sang trỏi để cú thể nhỡn được cỏc ký tự cũn lại và con trỏ. Mỗi lần lệnh

cả khối 26 ký tự được quay vũng quanh - đõy chớnh là cỏch LCD thực hiờn lệnh Cursor/Display Shift-

Vỡ khi nhận lệnh này LCD khụng thay đổi địa chỉ của từng ký tự , mà dịch chuyển cả khối địa chỉ của LCD sang trỏi hay sang phải.

_ Lệnh Cursor/Display Shift ngoài cú tỏc dụng đối dịch chuyển đối với ký tự như đã trỡnh bày ở trờn , nú cũn được dựng để dịch chuyển con trỏ hiển thị. Dựng lệnh này đối với con trỏ sẽ giỳp ta chỉnh sửa nội dung tại 1 địa chỉ bất kỳ trong của sổ hiển thị.

II.4.3 . Chế độ nhận dữ liệu Phần này sẽ ứng dụng lệnh: Command D7 D6 D5 Binary D4 D3 D2 D1 D0 Hex

Character Entry Mode 0 0 0 0 0 1 1 /D S 04 to 07

Đặt vấn đề:

Như ở cỏc trường hợp ta xột ở trờn, khi 1 ký tự được nhập vào, sau khi LCD hiển thị ký tự đú thỡ con trỏ tự động tăng địa chỉ của nú lờn . Tuy nhiờn khụng phải nhất thiết lỳc nào cũng phải hiển thị theo cỏch đú, tức là sau khi hiển thị con trỏ cú thể tự động giảm địa chỉ.

Hãy xột 1 vớ dụ cụ thể màn hỡnh hiển thị của 1 chiếc mỏy tớnh điện tử bỏ tỳi bỡnh thường. Khi bật mỏy cú số 0 ở gúc bờn phải màn hỡnh. Sau đú người dựng nhập 1 số vào, thỡ sau khi hiển thị số đú, con trỏ lại tự

động dịch sang trỏi (tức là giảm địa chỉ của nú). Cứ như vậy, càng nhiều ký tự được nhập vào thỡ con trỏ càng sang bờn trỏi (tức là địa chỉ của nú càng gảm).

Bõy giờ ta sẽ làm cho màn hỡnh LCD của ta hoạt động như choc năng của màn hỡnh chiếc mỏy tớnh điện tử. Đú chớnh là hiệu quả của việc sử dụng lệnh Character Entry Mode

Lệnh Character Entry Mode : Nếu S=1 con trỏ sẽ tự động dịch địa chỉ sau khi hiển thị (nếu=0 thỡ khụng dịch). Nếu 1/D=1 địa chỉ con trỏ tự động tăng 1 tức là con trỏ dịch sang phải sau khi hiển thị (nếu =0 thỡ dịch sang trỏi).

- Thực hiện lần lượt cỏc bước sau:

Nhập cỏc lệnh thớch hợp (Function Set, Display On/Off and Cursor)vào LCD để thiết lập chế độ ban đầu cho LCD, chỉ dựng 1 dũng để hiển thị, định địa chỉ hiển thị ở $10 (lệnh Set Display Address ) .

Sau đú gửi lệnh Character Entry Mode vào LCD mã nhị phõn là: 00000111 ($07) . Lệnh này sẽ thiết lập chế độ hiển thị- dịch trỏi cho LCD (tức là sau khi hiển thị thỡ con trỏ dịch sang trỏi).

Mọi cụng việc chuẩn bị va thiết lập chế độ đã hoàn tất. Giờ chỉ cũn 1 việc là nhập số hay ký tự vào LCD để kiểm tra kiết quả.

màn hỡnh hiển thị của mỏy tớnh điện tử. Sau khi 1 số được hiển thị, con trỏ sẽ dịch sang trỏi để chờ hiển thị số tiếp theo.

ở bảng cỏc lệnh của LCD ta they rằng lệnh cú thể nhập vào LCD với 4 cỏch mã hoỏ khỏc nhau từ 00000100 đến 00000111 ($04 đến $07). Mỗi 1 cỏch mã hoỏ sẽ đỏp ứng 1 nhu cầu trong đời sống thực tế (như màn hỡnh mỏy tớnh điện tử chẳng hạn)

II.4.4. Chu trình thời gian trờn LCD.

Cần để ý tới thời gian LCD thực hiện 1 lệnh để tạo những khoảng thời gian trễ thớch hợp trong khi lập trỡnh Assembly. Khoảng thời gian trễ cú tỏc dụng đợi để LCD thực hiện xong lệnh trước rồi mới gửi lệnh tiếp theo.

Sau khi cấp nguồn cho LCD phải đợi cho tới khi LCD khởi động xong hoàn toàn, ta chèn vào đú 1 thời gian trễ. (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Mô hình hệ thống cửa tự động” với vi điều khiển “ P89V51RD2FN” (Trang 42)