Project 7: Giao Tiếp Arduino Với LCD16x2 - 123doc

Giao tiếp giữa Arduino và LCD 16x2 rất đơn giản bởi vì Arduino IDE đã có sẵn thư viện cho LCD là LiquidCrystal.h, công việc của chúng ta là hiểu và biết cách sử dụng thư viện này mà thôi.

 Sơ đồ mạch:

Hình 30: giao tiếp với LCD 16x2.

 Code chương trình :

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // thiet lap chan cho LCD void setup() {

lcd.begin(16, 2); // thiet lap loai LCD su dung la 16 cot va 2 dong } void loop() { introduce(); basicPrintDemo(); displayOnOffDemo(); setCursorDemo();

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 35 scrollLeftDemo(); scrollRightDemo(); cursorDemo(); createGlyphDemo(); } void introduce(){ lcd.clear(); lcd.setCursor(0,0);

lcd.print("HV HANG KHONG VN"); lcd.setCursor(1,1);

lcd.print("HD SD ARDUINO"); delay (1000);

for(int x=0; x < 3; x++) {

lcd.noDisplay(); //tat hien thi delay(300);

lcd.display(); // bat hien thi delay(300);

} }

void basicPrintDemo() {

lcd.clear(); // xoa man hinh

lcd.print("HV HANG KHONG"); delay(1000);

}

void displayOnOffDemo() { lcd.clear();

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 36 for(int x=0; x < 3; x++) { lcd.noDisplay(); delay(500); lcd.display(); delay(500); } } void setCursorDemo() { lcd.clear(); lcd.print("Setup Cursor"); delay(500); lcd.clear();

lcd.setCursor(5,0); // thiet lap con tro o vi tri cot 5 hang 0 lcd.print("5,0");

delay(500);

lcd.setCursor(10,1); // thiet lap con tro cot 10 hang thu 1 lcd.print("10,1");

delay(500);

lcd.setCursor(3,1); // thiet lap con tro o vi tri cot 3 hang 1 lcd.print("3,1");

delay(500); }

void scrollLeftDemo() { lcd.clear();

lcd.print("Scroll Left Demo"); delay(500);

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 37 lcd.setCursor(7,0); lcd.print("Beginning"); lcd.setCursor(9,1); lcd.print("Arduino"); delay(500); for(int x=0; x<16; x++) {

lcd.scrollDisplayLeft(); // cuon man hinh sang trai delay(250); } } void scrollRightDemo() { lcd.clear(); lcd.print("Scroll Right"); lcd.setCursor(0,1); lcd.print("Demo"); delay(500); lcd.clear(); lcd.print("Beginning"); lcd.setCursor(0,1); lcd.print("Arduino"); delay(500); for(int x=0; x<16; x++) {

lcd.scrollDisplayRight(); // cuon mang hinh sang phai delay(250);

} }

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 38

void cursorDemo() { lcd.clear();

lcd.cursor(); // bat con tro lcd.print("Cursor On"); delay(1000);

lcd.clear();

lcd.noCursor(); // tat con tro lcd.print("Cursor Off"); delay(1000);

lcd.clear(); lcd.cursor();

lcd.blink(); // nhap nhay con tro lcd.print("Cursor Blink On"); delay(1000);

lcd.noCursor();

lcd.noBlink(); // tat nhap nhay con tro }

void createGlyphDemo() { lcd.clear();

byte char1[8] = { //tạo chữ “ô” B01110, B10001, B00000, B01110, B10001, B10001,

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 39

B01110, B00000 };

byte char2[8] = { //tạo chữ “ơ” B01110, B00001, B00010, B01110, B10001, B10001, B01110, B00000 };

lcd.createChar(0, char1); // tao ky tự tuỳ chỉnh 0 lcd.createChar(1, char2); // tạo ký tự tuỳ chỉnh 1 for(int x=0; x<5; x++) { lcd.setCursor(8,0); lcd.write(byte(0)); // in chữ “ô” ra màn hình delay(1000); lcd.setCursor(8,0); lcd.write(byte(1)); // in chữ “ơ” ra màn hình delay(1000); } }

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 40

 Giải thích chương trình:

Đầu tiên chúng ta khai báo thư viện mà chúng ta sẽ sử dụng để điều khiển LCD. Như đã nói ở trên chúng ta sẽ sử dụng thư viện có tên là LiquidCrystal.h. Có rất nhiều thư viện và code mẫu cho những loại LCD khác, bạn có thể truy cập vào trang web http://www.arduino.cc/playground/Code/LCD để tải về sử dụng.

Để khai báo thư viện cho LCD hay bất cứ thư viện nào khác ta dùng câu lệnh #include <tenthuvien.h>

Trong trường hợp này ta khai báo là :

#include <LiquidCrystal.h>

Tiếp theo tạo một đổi tượng và gán chân cho nó bằng câu lệnh :

LiquidCrystal Object(RS, E, D4, D5, D6, D7);

Như vậy trong đoạn code trên tôi đã khai báo một đối tượng có tên là lcd ( các bạn có thể thay thế lcd bằng những từ khác mà các bạn muốn ) và chân 12 của Arduino nối với chân RS, chân 11 nối với E và các chân 5 đến chân 2 lần lượt nối với D4 đến D7 trên LCD 16x2.

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Trong hàm setup() chúng ta cần khai báo loại LCD mà chúng ta sử dụng. Vì trong thư viện LiquidCrystal.h hỗ trợ rất nhiều loại LCD chẳng hạn như 16x2, 16x4, 20x2, 20x4, GLCD….Ở đây chúng ta sử dụng 16x2 thì ta khai báo.

lcd.begin(16,2);

Trong loop() chúng ta có 8 chương trình con, và tôi sẽ giải thích từng chương trình con.

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 41

 Chương trình con thứ 1: introduce().

Đây là chương trình giới thiệu.

 Chương trình con thứ 2: basicPrintDemo()

Trong chương trình con này chúng ta sẽ điều khiển sao cho LCD hiển thị dòng chứ mà ta mong muốn.

Đầu tiên chúng ta xoá tất cả màn hình bằng câu lệnh:

lcd.clear();

Chúng ta cần lưu ý đối tượng lcd : nếu như ban đầu chúng ta khai báo đổi tượng là

LCD16x2 thì chúng ta phải viết câu lệnh là LCD16x2.clear().

Để hiển thị một dòng ký tự bất kỳ lên màn hình thì ta dùng câu lệnh print() cụ thể trong trường hợp này là:

lcd.print("HV HANG KHONG");

Các ký tự bên trong ngoặc kép sẽ được hiển thị lên màn hình, nếu tổng các ký tự lớn hơn 16, thì các ký tự từ thứ 17 trở đi sẽ không được hiển thị lên màn hình.

 Chương trình con thứ 3: displayOnOffDemo()

Trong chương trình con này hướng dẫn cho chúng ta các câu lệnh chức năng bật và tắt màn hình. Ta cần quan tâm tới 2 câu lệnh sau.

lcd.nodisplay();

Câu lệnh này có chức năng tắt màn hình hiển thị.

lcd.display();

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 42

 Chương trình con thứ 4: setCursorDemo()

Hình 31: LCD 16x2.

Chương trình con này hướng dẫn chúng ta các câu lệnh dịch chuyển vị trí con trỏ theo ý muốn, các câu lệnh cần quan tâm đó là:

lcd.setCursor(5,0);

lcd.print("5,0");

Dịch con trỏ đến cột thứ 5 hàng thứ 0. Sau đó xuất ra màn hình LCD “5,0” từ cột thứ 5 hàng 0 trở đi.

lcd.setCursor(10,1); // thiet lap con tro cot 10 hang thu 1

lcd.print("10,1");

Dịch con trỏ đến vị trí cột 10 hàng thứ 1. Xuất ra màn hình "10,1"

Tương tự như vậy đối vơi 2 câu lệnh cuối là :

lcd.setCursor(3,1); // thiet lap con tro o vi tri cot 3 hang 1

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 43

 Chương trình con thứ 5: scrollLeftDemo()

Chương trình con này sẽ dịch các ký tự đang hiển thị trên màn hình sang bên trái. Các câu lệnh trong chương trình con này không khó, chúng ta chỉ quan tâm tới các câu lệnh sau:

for(int x=0; x<16; x++) {

lcd.scrollDisplayLeft(); // cuon man hinh sang trai

delay(250);

}

Trong vòng lặp chúng ta có câu lệnh:

lcd.scrollDisplayLeft();

Mỗi lần chương trình thực hiện câu lệnh này sẽ dịch tất cả các ký tự đang hiển thị trên màn hình sang bên trái 1 cột. Chúng ta có vòng lặp 16 lần như vậy các ký tự sẽ được dịch hết về bên trái.

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 44 Hình 33: Dịch trái lần thứ 8.

Khi vòng lặp thực hiện được 16 lần thì màn hình sẽ trống hoàn toàn.

 Chương trình con thứ 6: scrollRightDemo()

Hoàn toàn tương tự như scrollLeftDemo() chương trình con này sẽ thực hiện dịch phải các ký tự trên màn hình.

Câu lệnh cần quan tâm là: lcd.scrollDisplayRight();

 Chương trình con thứ 7: cursorDemo()

Ở phần này chúng ta sẽ tìm hiểu các câu lệnh điều khiển con trỏ bật, tắt và nhấp nháy.

lcd.cursor() : câu lệnh này cho phép chúng ta bật con trỏ.

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 45

lcd.noCursor(): tắt con trỏ lcd.blink(): nhấp nháy con trỏ

 Chương trình con thứ 8: createGlyphDemo()

Bây giờ chúng ta sẽ tìm hiều cách tự tạo ra một ký tự không thuộc hệ thống mã ASCII, chẳng hạn như các chữ cái có dấu trong hệ thống chữ cái tiếng việt như ă, â, ô,ơ ….

Đối với LCD 16x2 cứ mỗi ký tự trong một ô sẽ được tạo thành từ 5x8 ô nhỏ ( 5 cột, 8 dòng)

Để tạo một ký tự thì chúng ta dùng một mãng gồm 8 phần tử, mỗi phần tử là 1 byte, nhưng chỉ sử dụng 5 bit thấp của 1 byte để biểu diễn ký tự đó.

byte happy[8] = { //tạo chữ “ô” B01110, B10001, B00000, B01110, B10001, B10001, B01110, B00000 };

byte sad[8] = { tạo chữ “ơ” B01110,

B00001, B00010, B01110, B10001,

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 46

B10001, B01110, B00000 };

Sau khi đã tạo được ký tự mong muốn ta sử dụng câu lệnh:

lcd.createchar(num,data);

Trong đó:

num: là các chữ số tứ 0 đến 7.

data: là các mãng chứa ký tự của chúng ta. Câu lệnh này sẽ gán ký tự ta đã tạo vào một chữ số.

lcd.createChar(0, happy); lcd.createChar(1, sad);

Để hiển thị một ký tự ra màn hình ta dùng câu lệnh lcd.write(data).

Hiển thị chữ “ô” ra màn hình LCD.

lcd.write(byte(0));

Hiển thị chữ “ơ” ra màn hình LCD

HỌC VIỆN HÀNG KHÔNG SV: NGUYỄN TRUNG TÍN 47

Từ khóa » Sử Dụng Lcd 16x2