Energia – Bài 6: TIVA C và LCD16x2 qua các ví dụ

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();
}

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.