Mình xin chia sẻ với các bạn cách lập trình để hiển thị thông tin lên LCD 16×2. Việc hiển thị thông tin để quan sát trực tiếp luôn là một yêu cầu cần thiết phải có của một thiết bị, vậy làm sao để hiển thị được thông tin lên LCD 16×2 và các hiệu ứng chúng ta có thể sử dụng trên LCD này là gì ?
Chuẩn bị
Phần cứng
- Kit TIVA C Launchpad
- Dây nối
- LCD 16×2
Phần mềm
Lưu ý 1:Bạn cần giải nén và copy thư viện LCD vào thư mục libraries của Energia. Ví dụ như của mình là D:/energia-1.6.10E18/librarie
Lưu ý 2:Ở đây mình dùng thư viện LCD 16×2 lấy từ Arduino (thư viện LiquidCrystal) đã chỉnh sửa cho phù hợp với TIVA C, sơ đồ chân của LCD và TIVA mình sẽ đăng bên dưới, phần nối dây và giải thích chương trình mình sẽ chú thích ở trong Code luôn cho các bạn dễ theo dõi
Sơ đồ chân TIVA C Launchpad
Sơ đồ chân LCD 16×2
Autoscroll
Chương trình tự dịch chuyển chữ ở dòng thứ 1 trên LCD khi bắt đầu có kí tự ở dòng thứ 2.
/*
LiquidCrystal Library - Autoscroll
Chương trình sử dụng hàm autoscroll()
và noAutoscroll() để cuộn text
Kết nối:
* LCD VCC - 5V
* LCD GND - GND
* LCD R/W - GND
* LCD RS - PD1
* LCD EN - PD2
* LCD D4 - PD3
* LCD D5 - PE1
* LCD D6 - PE2
* LCD D7 - PE3
* Biến trở 10K:
* 1 chân nối với LCD VEE,2 chân nối với +5V và GND
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 17 Jan 2017 for TIVA Launchpad
by HocARM
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystalAutoscroll
*/
// Thêm thư viện
#include <LiquidCrystal.h>
//Khai báo các chân LCD
LiquidCrystal lcd(PD_1, PD_2, PD_3, PE_1, PE_2, PE_3);
void setup() {
// Cấu hình hàng và cột LCD
lcd.begin(16, 2);
}
void loop() {
// Đưa con trỏ về vị trí (0,0):
lcd.setCursor(0, 0);
// In ra giá trị từ 0 - 9:
for (int thisChar = 0; thisChar < 10; thisChar++) {
lcd.print(thisChar);
delay(500);
}
// Đặt con trỏ tới vị trí (16,1):
lcd.setCursor(16, 1);
// Cấu hình hiển thị tự cuộn chữ:
lcd.autoscroll();
//IN giá trị từ 0 - 9:
for (int thisChar = 0; thisChar < 10; thisChar++) {
lcd.print(thisChar);
delay(500);
}
// Tắt chức năng tự động cuộn
lcd.noAutoscroll();
// Xóa màn hình cho vòng lặp kế tiếp
lcd.clear();
}
Blink con trỏ
Chương chình chớp tắt con trỏ cuối dòng
/*
LiquidCrystal Library - Blink
Demonstrates the use a 16x2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.
This sketch prints "Hello World!" to the LCD and makes the
cursor block blink.
Kết nối:
* LCD VCC - 5V
* LCD GND - GND
* LCD R/W - GND
* LCD RS - PD1
* LCD EN - PD2
* LCD D4 - PD3
* LCD D5 - PE1
* LCD D6 - PE2
* LCD D7 - PE3
* Biến trở 10K:
* 1 chân nối với LCD VEE,2 chân nối với +5V và GND
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 17 Jan 2017 for TIVA Launchpad
by HocARM
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystalBlink
*/
// Thêm thư viện
#include <LiquidCrystal.h>
//Khai báo các chân LCD
LiquidCrystal lcd(PD_1, PD_2, PD_3, PE_1, PE_2, PE_3);
void setup() {
// Cấu hình hàng và cột:
lcd.begin(16, 2);
// In thông báo hello ra LCD.
lcd.print("hello, world!");
}
void loop() {
// Tắt blink con trỏ
lcd.noBlink();
delay(3000);
// Bật blink con trỏ
lcd.blink();
delay(3000);
}
Cursor
Chương trình chớp tắt con trỏ cuối dòng dưới dạng gạch nối
/*
LiquidCrystal Library - Cursor
This sketch prints "Hello World!" to the LCD and
uses the cursor() and noCursor() methods to turn
on and off the cursor.
Kết nối:
* LCD VCC - 5V
* LCD GND - GND
* LCD R/W - GND
* LCD RS - PD1
* LCD EN - PD2
* LCD D4 - PD3
* LCD D5 - PE1
* LCD D6 - PE2
* LCD D7 - PE3
* Biến trở 10K:
* 1 chân nối với LCD VEE,2 chân nối với +5V và GND
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 17 Jan 2017 for TIVA Launchpad
by HocARM
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystalCursor
*/
// Thêm thư viện
#include <LiquidCrystal.h>
//Khai báo các chân LCD
LiquidCrystal lcd(PD_1, PD_2, PD_3, PE_1, PE_2, PE_3);
void setup() {
// Khởi tạo LCD:
lcd.begin(16, 2);
// In thông báo trên LCD.
lcd.print("hello, world!");
}
void loop() {
// Tắt con trỏ:
lcd.noCursor();
delay(500);
// Hiện con trỏ:
lcd.cursor();
delay(500);
}
display
Chương trình hiển thị ký tự lên LCD và xóa hiển thị.
/*
LiquidCrystal Library - display() and noDisplay()
Kết nối:
* LCD VCC - 5V
* LCD GND - GND
* LCD R/W - GND
* LCD RS - PD1
* LCD EN - PD2
* LCD D4 - PD3
* LCD D5 - PE1
* LCD D6 - PE2
* LCD D7 - PE3
* Biến trở 10K:
* 1 chân nối với LCD VEE,2 chân nối với +5V và GND
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 17 Jan 2017 for TIVA Launchpad
by HocARM
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay
*/
// Thêm thư viện
#include <LiquidCrystal.h>
//Khai báo các chân LCD
LiquidCrystal lcd(PD_1, PD_2, PD_3, PE_1, PE_2, PE_3);
void setup() {
// Cấu hình LCD:
lcd.begin(16, 2);
// In thông báo lên LCD.
lcd.print("hello, world!");
}
void loop() {
// Tắt hiển thị:
lcd.noDisplay();
delay(500);
// Bật hiên thị:
lcd.display();
delay(500);
}
Hello World
Hiển thị dòng chữ Hello World ở dòng thứ nhất và đếm thời gian ở dòng thứ 2
/*
LiquidCrystal Library - Hello World
Kết nối:
* LCD VCC - 5V
* LCD GND - GND
* LCD R/W - GND
* LCD RS - PD1
* LCD EN - PD2
* LCD D4 - PD3
* LCD D5 - PE1
* LCD D6 - PE2
* LCD D7 - PE3
* Biến trở 10K:
* 1 chân nối với LCD VEE,2 chân nối với +5V và GND
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 17 Jan 2017 for TIVA Launchpad
by HocAR
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/
// Thêm thư viện
#include <LiquidCrystal.h>
//Khai báo các chân LCD
LiquidCrystal lcd(PD_1, PD_2, PD_3, PE_1, PE_2, PE_3);
void setup() {
// Cấu hình LCD:
lcd.begin(16, 2);
// In hello lên LCD.
lcd.print("hello, world!");
}
void loop() {
// Đặt con trỏ ở hàng 1 (hàng 1 tương ứng với hàng số 2 của LCD)
lcd.setCursor(0, 1);
//In thời gian từ lúc bắt đầu:
lcd.print(millis() / 1000);
}
ScrollDisplay
Cho tất cả chữ chạy từ trái sang phải và ngược lại
/*
LiquidCrystal Library - scrollDisplayLeft() và scrollDisplayRight()
Kết nối:
* LCD VCC - 5V
* LCD GND - GND
* LCD R/W - GND
* LCD RS - PD1
* LCD EN - PD2
* LCD D4 - PD3
* LCD D5 - PE1
* LCD D6 - PE2
* LCD D7 - PE3
* Biến trở 10K:
* 1 chân nối với LCD VEE,2 chân nối với +5V và GND
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 17 Jan 2017 for TIVA Launchpad
by HocARM
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystalScroll
*/
// Thêm thư viện
#include <LiquidCrystal.h>
//Khai báo các chân LCD
LiquidCrystal lcd(PD_1, PD_2, PD_3, PE_1, PE_2, PE_3);
void setup() {
// Cấu hình LCD
lcd.begin(16, 2);
// In hello ra LCD.
lcd.print("hello, world!");
delay(1000);
}
void loop() {
// Cuộn 13 vị trí sang trái
for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
// Cuộn 1 vị trí sang trái:
lcd.scrollDisplayLeft();
// delay:
delay(150);
}
// Cuộn 29 vị trí sang phải:
for (int positionCounter = 0; positionCounter < 29; positionCounter++) {
// Cuộn 1 vị trí sang phải:
lcd.scrollDisplayRight();
// wdelay:
delay(150);
}
// Cuộn 16 vị trí sang trái
for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
// Cuộn 1 vị trí sang trái:
lcd.scrollDisplayLeft();
// delay:
delay(150);
}
// delay:
delay(1000);
}
Serial Input
Nhận dữ liệu được gửi từ máy tính, sau đó hiển thị lên LCD, lưu ý ở đây tốc độ baud là 9600
/*
LiquidCrystal Library - Serial Input
Kết nối:
* LCD VCC - 5V
* LCD GND - GND
* LCD R/W - GND
* LCD RS - PD1
* LCD EN - PD2
* LCD D4 - PD3
* LCD D5 - PE1
* LCD D6 - PE2
* LCD D7 - PE3
* Biến trở 10K:
* 1 chân nối với LCD VEE,2 chân nối với +5V và GND
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 17 Jan 2017 for TIVA Launchpad
by HocARM
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystalSerial
*/
// Thêm thư viện
#include <LiquidCrystal.h>
//Khai báo các chân LCD
LiquidCrystal lcd(PD_1, PD_2, PD_3, PE_1, PE_2, PE_3);
void setup() {
// Khởi tạo LCD:
lcd.begin(16, 2);
// Cấu hình giao tiếp Serial:
Serial.begin(9600);
}
void loop() {
// Chờ kí tự gửi từ máy tính...
if (Serial.available()) {
// Đợi cho nhận hết
delay(100);
// Xóa màn hình
lcd.clear();
// Đọc các giá trị nhận được
while (Serial.available() > 0) {
// hiển thị lên LCD
lcd.write(Serial.read());
}
}
}
setCursor
Chương trình tự xuống dòng khi vượt quá số ký tự trong 1 dòng
/*
LiquidCrystal Library - setCursor
Kết nối:
* LCD VCC - 5V
* LCD GND - GND
* LCD R/W - GND
* LCD RS - PD1
* LCD EN - PD2
* LCD D4 - PD3
* LCD D5 - PE1
* LCD D6 - PE2
* LCD D7 - PE3
* Biến trở 10K:
* 1 chân nối với LCD VEE,2 chân nối với +5V và GND
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 17 Jan 2017 for TIVA Launchpad
by HocARM
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystalSetCursor
*/
// Thêm thư viện
#include <LiquidCrystal.h>
// Khai báo 2 biến lưu hàng và cột LCD
const int numRows = 2;
const int numCols = 16;
//Khai báo các chân LCD
LiquidCrystal lcd(PD_1, PD_2, PD_3, PE_1, PE_2, PE_3);
void setup() {
// Cấu hình LCD:
lcd.begin(numCols, numRows);
}
void loop() {
// Hiển thị ký tự từ a - z:
for (int thisLetter = 'a'; thisLetter <= 'z'; thisLetter++) {
// Lặp lại trên cột:
for (int thisRow = 0; thisRow < numRows; thisRow++) {
// lặp lại trên hàng:
for (int thisCol = 0; thisCol < numCols; thisCol++) {
// Đặt giá trị con trỏ hiện tại:
lcd.setCursor(thisCol, thisRow);
// In các ký tự lên LCD:
lcd.write(thisLetter);
delay(200);
}
}
}
}
Text Direction
Kiểm soát vị trí con trỏ, ví dụ này phù hợp cho các ứng dụng điều khiển chọn menu dùng nút bấm.
/*
LiquidCrystal Library - TextDirection
Kết nối:
* LCD VCC - 5V
* LCD GND - GND
* LCD R/W - GND
* LCD RS - PD1
* LCD EN - PD2
* LCD D4 - PD3
* LCD D5 - PE1
* LCD D6 - PE2
* LCD D7 - PE3
* Biến trở 10K:
* 1 chân nối với LCD VEE,2 chân nối với +5V và GND
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 17 Jan 2017 for TIVA Launchpad
by HocARM
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystalTextDirection
*/
// Thêm thư viện
#include <LiquidCrystal.h>
//Khai báo các chân LCD
LiquidCrystal lcd(PD_1, PD_2, PD_3, PE_1, PE_2, PE_3);
int thisChar = 'a';
void setup() {
// Cấu hình LCD:
lcd.begin(16, 2);
// Bật con trỏ:
lcd.cursor();
}
void loop() {
// Đảo chiều tại 'm':
if (thisChar == 'm') {
// Dịch phải cho ký tự kế tiếp
lcd.rightToLeft();
}
// Đảo chiều tiếp tục tại 's':
if (thisChar == 's') {
// Dịch trái cho ký tự kế tiếp
lcd.leftToRight();
}
// reset tại 'z':
if (thisChar > 'z') {
// Tới vị trí (0,0):
lcd.home();
// Bắt đầu in a tại 0
thisChar = 'a';
}
// In ký tự
lcd.write(thisChar);
// delay:
delay(1000);
// Tăng ký tự tiếp theo:
thisChar++;
}
Tạm kết
Mình đã chỉ ra các cách hiển thị với LCD 16×2. Các bạn chỉ cần lưu ý cắm dây, nối biến trở và nguồn chính xác thì sẽ hiển thị được chính xác như hình kết quả của mình thôi. Giờ thì bạn có thể hiển thị bất kỳ thông tin gì lên LCD để quan sát rồi.