Lời kết
Qua bài hôm nay các bạn biết cách làm thế nào để hiển thị các ký tự và chuỗi ký tự lên LCD 16×2 và biết cách giao tiếp I2C.
Để nhận được nhiều kiến thức mới các bạn Đăng ký để nhận được thông báo sớm nhất.
Tham gia Cộng đồng Arduino KIT để cùng nhau thảo luận và chia sẽ kiến thức về lập trình Arduino.
Nếu các bạn thấy bài viết bổ ích nhớ Like và Share cho mọi người cùng đọc nhé.
Chúc các bạn thành công.
Trân trọng.
Liquid Crystal Displays (LCD) with Arduino
Find out how to wire an LCD to an Arduino, and how to use the LiquidCrystal library through a set of useful examples.
This article was revised on 2021/11/18 by Karl Söderby.
The LiquidCrystal library allows you to control 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.
The LCDs have a parallel interface, meaning that the microcontroller has to manipulate several interface pins at once to control the display. The interface consists of the following pins:
- A register select (RS) pin that controls where in the LCD’s memory you’re writing data to. You can select either the data register, which holds what goes on the screen, or an instruction register, which is where the LCD’s controller looks for instructions on what to do next.
- A Read/Write (R/W) pin that selects reading mode or writing mode
- An Enable pin that enables writing to the registers
- 8 data pins (D0 -D7). The states of these pins (high or low) are the bits that you’re writing to a register when you write, or the values you’re reading when you read.
There’s also a display contrast pin (Vo), power supply pins (+5V and GND) and LED Backlight (Bklt+ and BKlt-) pins that you can use to power the LCD, control the display contrast, and turn on and off the LED backlight, respectively.
The process of controlling the display involves putting the data that form the image of what you want to display into the data registers, then putting instructions in the instruction register. The LiquidCrystal Library simplifies this for you so you don’t need to know the low-level instructions.
The Hitachi-compatible LCDs can be controlled in two modes: 4-bit or 8-bit. The 4-bit mode requires seven I/O pins from the Arduino, while the 8-bit mode requires 11 pins. For displaying text on the screen, you can do most everything in 4-bit mode, so example shows how to control a 16×2 LCD in 4-bit mode.
Chương trình hiển thị ký tự lên LCD
Để giao tiếp LCD với Arduino, sử dụng thư viện tích hợp sẵn thư viện của Arduino. Chương trình bên dưới giúp hiển thị các ký tự trên LCD.
#include//Khai báo thư viện LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//Khai báo các chân RS, E, D4-D7 kết nối với Arduino void setup() { lcd.begin(16, 2);//Khởi tạo màn hình LCD và xác định kích thước màn hình LCD là 16x2 } void loop() { lcd.clear();//Xóa màn hình và đặt con trỏ về vị trí đầu tiên (0, 0) lcd.setCursor(6,0);//Di chuyển con trỏ đến cột tương ứng lcd.print("HELLO");//Xuất ra màn hình từ vị trí con trỏ lcd.setCursor(5,1); lcd.print("ARDUINO"); delay(1000); }
Schematic
Hello World Example
This example sketch prints
to the LCD and shows the time in seconds since the Arduino was reset.
Hello World!
1/*2 LiquidCrystal Library – Hello World34 Demonstrates the use a 16×2 LCD display. The LiquidCrystal5 library works with all LCD displays that are compatible with the6 Hitachi HD44780 driver. There are many of them out there, and you7 can usually tell them by the 16-pin interface.89 This sketch prints “Hello World!” to the LCD10 and shows the time.1112 The circuit:13 * LCD RS pin to digital pin 1214 * LCD Enable pin to digital pin 1115 * LCD D4 pin to digital pin 516 * LCD D5 pin to digital pin 417 * LCD D6 pin to digital pin 318 * LCD D7 pin to digital pin 219 * LCD R/W pin to ground20 * LCD VSS pin to ground21 * LCD VCC pin to 5V22 * 10K resistor:23 * ends to +5V and ground24 * wiper to LCD VO pin (pin 3)2526 Library originally added 18 Apr 200827 by David A. Mellis28 library modified 5 Jul 200929 by Limor Fried (http://www.ladyada.net)30 example added 9 Jul 200931 by Tom Igoe32 modified 22 Nov 201033 by Tom Igoe34 modified 7 Nov 201635 by Arturo Guadalupi3637 This example code is in the public domain.3839 https://docs.arduino.cc/learn/electronics/lcd-displays4041*/4243// include the library code:44#include
4546// initialize the library by associating any needed LCD interface pin47// with the arduino pin number it is connected to48const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;49LiquidCrystal lcd(rs, en, d4, d5, d6, d7);5051void setup() {52 // set up the LCD’s number of columns and rows:53 lcd.begin(16, 2);54 // Print a message to the LCD.55 lcd.print(“hello, world!”);56}5758void loop() {59 // set the cursor to column 0, line 160 // (note: line 1 is the second row, since counting begins with 0):61 lcd.setCursor(0, 1);62 // print the number of seconds since reset:63 lcd.print(millis() / 1000);64}
Autoscroll Example
This example sketch shows how to use the
and
autoscroll()
methods to move all the text on the display left or right.
noAutoscroll()
-
moves all the text one space to the left each time a letter is added
autoscroll()
-
turns scrolling off
noAutoscroll()
This sketch prints the characters
to
with autoscroll off, then moves the cursor to the bottom right, turns autoscroll on, and prints them again.
1/*23 LiquidCrystal Library – Autoscroll45 Demonstrates the use a 16×2 LCD display. The LiquidCrystal67 library works with all LCD displays that are compatible with the89 Hitachi HD44780 driver. There are many of them out there, and you1011 can usually tell them by the 16-pin interface.1213 This sketch demonstrates the use of the autoscroll()1415 and noAutoscroll() functions to make new text scroll or not.1617 The circuit:1819 * LCD RS pin to digital pin 122021 * LCD Enable pin to digital pin 112223 * LCD D4 pin to digital pin 52425 * LCD D5 pin to digital pin 42627 * LCD D6 pin to digital pin 32829 * LCD D7 pin to digital pin 23031 * LCD R/W pin to ground3233 * 10K resistor:3435 * ends to +5V and ground3637 * wiper to LCD VO pin (pin 3)3839 Library originally added 18 Apr 20084041 by David A. Mellis4243 library modified 5 Jul 20094445 by Limor Fried (http://www.ladyada.net)4647 example added 9 Jul 20094849 by Tom Igoe5051 modified 22 Nov 20105253 by Tom Igoe5455 modified 7 Nov 20165657 by Arturo Guadalupi5859 This example code is in the public domain.6061 http://www.arduino.cc/en/Tutorial/LiquidCrystalAutoscroll6263*/6465// include the library code:66#include
6768// initialize the library by associating any needed LCD interface pin69// with the arduino pin number it is connected to7071const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;7273LiquidCrystal lcd(rs, en, d4, d5, d6, d7);7475void setup() {7677 // set up the LCD’s number of columns and rows:7879 lcd.begin(16, 2);80}8182void loop() {8384 // set the cursor to (0,0):8586 lcd.setCursor(0, 0);8788 // print from 0 to 9:8990 for (int thisChar = 0; thisChar < 10; thisChar++) {9192 lcd.print(thisChar);9394 delay(500);9596 }9798 // set the cursor to (16,1):99100 lcd.setCursor(16, 1);101102 // set the display to automatically scroll:103104 lcd.autoscroll();105106 // print from 0 to 9:107108 for (int thisChar = 0; thisChar < 10; thisChar++) {109110 lcd.print(thisChar);111112 delay(500);113114 }115116 // turn off automatic scrolling117118 lcd.noAutoscroll();119120 // clear screen for the next loop:121122 lcd.clear();123}
Blink Example
This example sketch shows how to use the
and
blink()
methods to blink a block-style cursor.
noBlink()
1/*23 LiquidCrystal Library – Blink45 Demonstrates the use a 16×2 LCD display. The LiquidCrystal67 library works with all LCD displays that are compatible with the89 Hitachi HD44780 driver. There are many of them out there, and you1011 can usually tell them by the 16-pin interface.1213 This sketch prints “Hello World!” to the LCD and makes the1415 cursor block blink.1617 The circuit:1819 * LCD RS pin to digital pin 122021 * LCD Enable pin to digital pin 112223 * LCD D4 pin to digital pin 52425 * LCD D5 pin to digital pin 42627 * LCD D6 pin to digital pin 32829 * LCD D7 pin to digital pin 23031 * LCD R/W pin to ground3233 * 10K resistor:3435 * ends to +5V and ground3637 * wiper to LCD VO pin (pin 3)3839 Library originally added 18 Apr 20084041 by David A. Mellis4243 library modified 5 Jul 20094445 by Limor Fried (http://www.ladyada.net)4647 example added 9 Jul 20094849 by Tom Igoe5051 modified 22 Nov 20105253 by Tom Igoe5455 modified 7 Nov 20165657 by Arturo Guadalupi5859 This example code is in the public domain.6061 http://www.arduino.cc/en/Tutorial/LiquidCrystalBlink6263*/6465// include the library code:66#include
6768// initialize the library by associating any needed LCD interface pin69// with the arduino pin number it is connected to7071const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;7273LiquidCrystal lcd(rs, en, d4, d5, d6, d7);7475void setup() {7677 // set up the LCD’s number of columns and rows:7879 lcd.begin(16, 2);8081 // Print a message to the LCD.8283 lcd.print(“hello, world!”);84}8586void loop() {8788 // Turn off the blinking cursor:8990 lcd.noBlink();9192 delay(3000);9394 // Turn on the blinking cursor:9596 lcd.blink();9798 delay(3000);99}
Cursor
This example sketch shows how to use the
and
cursor()
methods to control an underscore-style cursor.
noCursor()
1/*23 LiquidCrystal Library – Cursor45 Demonstrates the use a 16×2 LCD display. The LiquidCrystal67 library works with all LCD displays that are compatible with the89 Hitachi HD44780 driver. There are many of them out there, and you1011 can usually tell them by the 16-pin interface.1213 This sketch prints “Hello World!” to the LCD and1415 uses the cursor() and noCursor() methods to turn1617 on and off the cursor.1819 The circuit:2021 * LCD RS pin to digital pin 122223 * LCD Enable pin to digital pin 112425 * LCD D4 pin to digital pin 52627 * LCD D5 pin to digital pin 42829 * LCD D6 pin to digital pin 33031 * LCD D7 pin to digital pin 23233 * LCD R/W pin to ground3435 * 10K resistor:3637 * ends to +5V and ground3839 * wiper to LCD VO pin (pin 3)4041 Library originally added 18 Apr 20084243 by David A. Mellis4445 library modified 5 Jul 20094647 by Limor Fried (http://www.ladyada.net)4849 example added 9 Jul 20095051 by Tom Igoe5253 modified 22 Nov 20105455 by Tom Igoe5657 modified 7 Nov 20165859 by Arturo Guadalupi6061 This example code is in the public domain.6263 http://www.arduino.cc/en/Tutorial/LiquidCrystalCursor6465*/6667// include the library code:68#include
6970// initialize the library by associating any needed LCD interface pin71// with the arduino pin number it is connected to7273const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;7475LiquidCrystal lcd(rs, en, d4, d5, d6, d7);7677void setup() {7879 // set up the LCD’s number of columns and rows:8081 lcd.begin(16, 2);8283 // Print a message to the LCD.8485 lcd.print(“hello, world!”);86}8788void loop() {8990 // Turn off the cursor:9192 lcd.noCursor();9394 delay(500);9596 // Turn on the cursor:9798 lcd.cursor();99100 delay(500);101}
Display Example
This example sketch shows how to use the
and
display()
methods to turn on and off the display. The text to be displayed will still be preserved when you use noDisplay() so it’s a quick way to blank the display without losing everything on it.
noDisplay()
1/*2 LiquidCrystal Library – display() and noDisplay()34 Demonstrates the use a 16×2 LCD display. The LiquidCrystal5 library works with all LCD displays that are compatible with the6 Hitachi HD44780 driver. There are many of them out there, and you7 can usually tell them by the 16-pin interface.89 This sketch prints “Hello World!” to the LCD and uses the10 display() and noDisplay() functions to turn on and off11 the display.1213 The circuit:14 * LCD RS pin to digital pin 1215 * LCD Enable pin to digital pin 1116 * LCD D4 pin to digital pin 517 * LCD D5 pin to digital pin 418 * LCD D6 pin to digital pin 319 * LCD D7 pin to digital pin 220 * LCD R/W pin to ground21 * 10K resistor:22 * ends to +5V and ground23 * wiper to LCD VO pin (pin 3)2425 Library originally added 18 Apr 200826 by David A. Mellis27 library modified 5 Jul 200928 by Limor Fried (http://www.ladyada.net)29 example added 9 Jul 200930 by Tom Igoe31 modified 22 Nov 201032 by Tom Igoe33 modified 7 Nov 201634 by Arturo Guadalupi3536 This example code is in the public domain.3738 http://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay3940*/4142// include the library code:43#include
4445// initialize the library by associating any needed LCD interface pin46// with the arduino pin number it is connected to47const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;48LiquidCrystal lcd(rs, en, d4, d5, d6, d7);4950void setup() {51 // set up the LCD’s number of columns and rows:52 lcd.begin(16, 2);53 // Print a message to the LCD.54 lcd.print(“hello, world!”);55}5657void loop() {58 // Turn off the display:59 lcd.noDisplay();60 delay(500);61 // Turn on the display:62 lcd.display();63 delay(500);64}
Scroll Example
This example sketch shows how to use the
and
scrollDisplayLeft()
methods to reverse the direction the text is flowing. It prints “Hello World!”, scrolls it offscreen to the left, then offscreen to the right, then back to home.
scrollDisplayRight()
1/*2 LiquidCrystal Library – scrollDisplayLeft() and scrollDisplayRight()34 Demonstrates the use a 16×2 LCD display. The LiquidCrystal5 library works with all LCD displays that are compatible with the6 Hitachi HD44780 driver. There are many of them out there, and you7 can usually tell them by the 16-pin interface.89 This sketch prints “Hello World!” to the LCD and uses the10 scrollDisplayLeft() and scrollDisplayRight() methods to scroll11 the text.1213 The circuit:14 * LCD RS pin to digital pin 1215 * LCD Enable pin to digital pin 1116 * LCD D4 pin to digital pin 517 * LCD D5 pin to digital pin 418 * LCD D6 pin to digital pin 319 * LCD D7 pin to digital pin 220 * LCD R/W pin to ground21 * 10K resistor:22 * ends to +5V and ground23 * wiper to LCD VO pin (pin 3)2425 Library originally added 18 Apr 200826 by David A. Mellis27 library modified 5 Jul 200928 by Limor Fried (http://www.ladyada.net)29 example added 9 Jul 200930 by Tom Igoe31 modified 22 Nov 201032 by Tom Igoe33 modified 7 Nov 201634 by Arturo Guadalupi3536 This example code is in the public domain.3738 http://www.arduino.cc/en/Tutorial/LiquidCrystalScroll3940*/4142// include the library code:43#include
4445// initialize the library by associating any needed LCD interface pin46// with the arduino pin number it is connected to47const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;48LiquidCrystal lcd(rs, en, d4, d5, d6, d7);4950void setup() {51 // set up the LCD’s number of columns and rows:52 lcd.begin(16, 2);53 // Print a message to the LCD.54 lcd.print(“hello, world!”);55 delay(1000);56}5758void loop() {59 // scroll 13 positions (string length) to the left60 // to move it offscreen left:61 for (int positionCounter = 0; positionCounter < 13; positionCounter++) {62 // scroll one position left:63 lcd.scrollDisplayLeft();64 // wait a bit:65 delay(150);66 }6768 // scroll 29 positions (string length + display length) to the right69 // to move it offscreen right:70 for (int positionCounter = 0; positionCounter < 29; positionCounter++) {71 // scroll one position right:72 lcd.scrollDisplayRight();73 // wait a bit:74 delay(150);75 }7677 // scroll 16 positions (display length + string length) to the left78 // to move it back to center:79 for (int positionCounter = 0; positionCounter < 16; positionCounter++) {80 // scroll one position left:81 lcd.scrollDisplayLeft();82 // wait a bit:83 delay(150);84 }8586 // delay at the end of the full loop:87 delay(1000);8889}
Serial to Display Example
This example sketch accepts serial input from a host computer and displays it on the LCD. To use it, upload the sketch, then open the Serial Monitor and type some characters and click Send. The text will appear on your LCD.
1/*2 LiquidCrystal Library – Serial Input34 Demonstrates the use a 16×2 LCD display. The LiquidCrystal5 library works with all LCD displays that are compatible with the6 Hitachi HD44780 driver. There are many of them out there, and you7 can usually tell them by the 16-pin interface.89 This sketch displays text sent over the serial port10 (e.g. from the Serial Monitor) on an attached LCD.1112 The circuit:13 * LCD RS pin to digital pin 1214 * LCD Enable pin to digital pin 1115 * LCD D4 pin to digital pin 516 * LCD D5 pin to digital pin 417 * LCD D6 pin to digital pin 318 * LCD D7 pin to digital pin 219 * LCD R/W pin to ground20 * 10K resistor:21 * ends to +5V and ground22 * wiper to LCD VO pin (pin 3)2324 Library originally added 18 Apr 200825 by David A. Mellis26 library modified 5 Jul 200927 by Limor Fried (http://www.ladyada.net)28 example added 9 Jul 200929 by Tom Igoe30 modified 22 Nov 201031 by Tom Igoe32 modified 7 Nov 201633 by Arturo Guadalupi3435 This example code is in the public domain.3637 http://www.arduino.cc/en/Tutorial/LiquidCrystalSerialDisplay3839*/4041// include the library code:42#include
4344// initialize the library by associating any needed LCD interface pin45// with the arduino pin number it is connected to46const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;47LiquidCrystal lcd(rs, en, d4, d5, d6, d7);4849void setup() {50 // set up the LCD’s number of columns and rows:51 lcd.begin(16, 2);52 // initialize the serial communications:53 Serial.begin(9600);54}5556void loop() {57 // when characters arrive over the serial port…58 if (Serial.available()) {59 // wait a bit for the entire message to arrive60 delay(100);61 // clear the screen62 lcd.clear();63 // read all the available characters64 while (Serial.available() > 0) {65 // display each character to the LCD66 lcd.write(Serial.read());67 }68 }69}
Set Cursor Example
This example sketch shows how to use the
method to reposition the cursor. To move the cursor, just call
setCursor()
with a row and column position. For example, for a 2×16 display:
setCursor()
1lcd.setCursor(0, 0); // top left2lcd.setCursor(15, 0); // top right3lcd.setCursor(0, 1); // bottom left4lcd.setCursor(15, 1); // bottom right
Here is the full example:
1/*23 LiquidCrystal Library – setCursor45 Demonstrates the use a 16×2 LCD display. The LiquidCrystal67 library works with all LCD displays that are compatible with the89 Hitachi HD44780 driver. There are many of them out there, and you1011 can usually tell them by the 16-pin interface.1213 This sketch prints to all the positions of the LCD using the1415 setCursor() method:1617 The circuit:1819 * LCD RS pin to digital pin 122021 * LCD Enable pin to digital pin 112223 * LCD D4 pin to digital pin 52425 * LCD D5 pin to digital pin 42627 * LCD D6 pin to digital pin 32829 * LCD D7 pin to digital pin 23031 * LCD R/W pin to ground3233 * 10K resistor:3435 * ends to +5V and ground3637 * wiper to LCD VO pin (pin 3)3839 Library originally added 18 Apr 20084041 by David A. Mellis4243 library modified 5 Jul 20094445 by Limor Fried (http://www.ladyada.net)4647 example added 9 Jul 20094849 by Tom Igoe5051 modified 22 Nov 20105253 by Tom Igoe5455 modified 7 Nov 20165657 by Arturo Guadalupi5859 This example code is in the public domain.6061 http://www.arduino.cc/en/Tutorial/LiquidCrystalSetCursor6263*/6465// include the library code:66#include
6768// initialize the library by associating any needed LCD interface pin69// with the arduino pin number it is connected to7071const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;7273LiquidCrystal lcd(rs, en, d4, d5, d6, d7);7475// these constants won’t change. But you can change the size of76// your LCD using them:7778const int numRows = 2;7980const int numCols = 16;8182void setup() {8384 // set up the LCD’s number of columns and rows:8586 lcd.begin(numCols, numRows);87}8889void loop() {9091 // loop from ASCII ‘a’ to ASCII ‘z’:9293 for (int thisLetter = ‘a’; thisLetter <= ‘z’; thisLetter++) {9495 // loop over the columns:9697 for (int thisRow = 0; thisRow < numRows; thisRow++) {9899 // loop over the rows:100101 for (int thisCol = 0; thisCol < numCols; thisCol++) {102103 // set the cursor position:104105 lcd.setCursor(thisCol, thisRow);106107 // print the letter:108109 lcd.write(thisLetter);110111 delay(200);112113 }114115 }116117 }118}
Text Direction Example
This example sketch shows how to use the
and
leftToRight()
methods. These methods control which way text flows from the cursor.
rightToLeft()
-
causes text to flow to the left from the cursor, as if the display is right-justified.
rightToLeft()
-
causes text to flow to the right from the cursor, as if the display is left-justified.
leftToRight()
This sketch prints
through
right to left, then
through
left to right, then
through
right to left again.
1/*23 LiquidCrystal Library – TextDirection45 Demonstrates the use a 16×2 LCD display. The LiquidCrystal67 library works with all LCD displays that are compatible with the89 Hitachi HD44780 driver. There are many of them out there, and you1011 can usually tell them by the 16-pin interface.1213 This sketch demonstrates how to use leftToRight() and rightToLeft()1415 to move the cursor.1617 The circuit:1819 * LCD RS pin to digital pin 122021 * LCD Enable pin to digital pin 112223 * LCD D4 pin to digital pin 52425 * LCD D5 pin to digital pin 42627 * LCD D6 pin to digital pin 32829 * LCD D7 pin to digital pin 23031 * LCD R/W pin to ground3233 * 10K resistor:3435 * ends to +5V and ground3637 * wiper to LCD VO pin (pin 3)3839 Library originally added 18 Apr 20084041 by David A. Mellis4243 library modified 5 Jul 20094445 by Limor Fried (http://www.ladyada.net)4647 example added 9 Jul 20094849 by Tom Igoe5051 modified 22 Nov 20105253 by Tom Igoe5455 modified 7 Nov 20165657 by Arturo Guadalupi5859 This example code is in the public domain.6061 http://www.arduino.cc/en/Tutorial/LiquidCrystalTextDirection6263*/6465// include the library code:66#include
6768// initialize the library by associating any needed LCD interface pin69// with the arduino pin number it is connected to7071const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;7273LiquidCrystal lcd(rs, en, d4, d5, d6, d7);7475int thisChar = ‘a’;7677void setup() {7879 // set up the LCD’s number of columns and rows:8081 lcd.begin(16, 2);8283 // turn on the cursor:8485 lcd.cursor();86}8788void loop() {8990 // reverse directions at ‘m’:9192 if (thisChar == ‘m’) {9394 // go right for the next letter9596 lcd.rightToLeft();9798 }99100 // reverse again at ‘s’:101102 if (thisChar == ‘s’) {103104 // go left for the next letter105106 lcd.leftToRight();107108 }109110 // reset at ‘z’:111112 if (thisChar > ‘z’) {113114 // go to (0,0):115116 lcd.home();117118 // start again at 0119120 thisChar = ‘a’;121122 }123124 // print the character125126 lcd.write(thisChar);127128 // wait a second:129130 delay(1000);131132 // increment the letter:133134 thisChar++;135}
Custom Character
This example demonstrates how to add custom characters on an LCD display.
Note that this example requires an additional potentiometer:
- Outer pins connected to 5V and GND.
- Inner pin (wiper) connected to A0.
This potentiometer controls the
variable.
delayTime
1/*2 LiquidCrystal Library – Custom Characters34 Demonstrates how to add custom characters on an LCD display.5 The LiquidCrystal library works with all LCD displays that are6 compatible with the Hitachi HD44780 driver. There are many of7 them out there, and you can usually tell them by the 16-pin interface.89 This sketch prints “I
Arduino!” and a little dancing man10 to the LCD.1112 The circuit:13 * LCD RS pin to digital pin 1214 * LCD Enable pin to digital pin 1115 * LCD D4 pin to digital pin 516 * LCD D5 pin to digital pin 417 * LCD D6 pin to digital pin 318 * LCD D7 pin to digital pin 219 * LCD R/W pin to ground20 * 10K potentiometer:21 * ends to +5V and ground22 * wiper to LCD VO pin (pin 3)23 * 10K poterntiometer on pin A02425 created 21 Mar 201126 by Tom Igoe27 modified 11 Nov 201328 by Scott Fitzgerald29 modified 7 Nov 201630 by Arturo Guadalupi3132 Based on Adafruit’s example at33 https://github.com/adafruit/SPI_VFD/blob/master/examples/createChar/createChar.pde3435 This example code is in the public domain.36 https://docs.arduino.cc/learn/electronics/lcd-displays#custom-character3738 Also useful:39 http://icontexto.com/charactercreator/4041*/4243// include the library code:44#include4546// initialize the library by associating any needed LCD interface pin47// with the arduino pin number it is connected to48const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;49LiquidCrystal lcd(rs, en, d4, d5, d6, d7);5051// make some custom characters:52byte heart[8] = {53 0b00000,54 0b01010,55 0b11111,56 0b11111,57 0b11111,58 0b01110,59 0b00100,60 0b0000061};6263byte smiley[8] = {64 0b00000,65 0b00000,66 0b01010,67 0b00000,68 0b00000,69 0b10001,70 0b01110,71 0b0000072};7374byte frownie[8] = {75 0b00000,76 0b00000,77 0b01010,78 0b00000,79 0b00000,80 0b00000,81 0b01110,82 0b1000183};8485byte armsDown[8] = {86 0b00100,87 0b01010,88 0b00100,89 0b00100,90 0b01110,91 0b10101,92 0b00100,93 0b0101094};9596byte armsUp[8] = {97 0b00100,98 0b01010,99 0b00100,100 0b10101,101 0b01110,102 0b00100,103 0b00100,104 0b01010105};106107void setup() {108 // initialize LCD and set up the number of columns and rows:109 lcd.begin(16, 2);110111 // create a new character112 lcd.createChar(0, heart);113 // create a new character114 lcd.createChar(1, smiley);115 // create a new character116 lcd.createChar(2, frownie);117 // create a new character118 lcd.createChar(3, armsDown);119 // create a new character120 lcd.createChar(4, armsUp);121122 // set the cursor to the top left123 lcd.setCursor(0, 0);124125 // Print a message to the lcd.126 lcd.print(“I “);127 lcd.write(byte(0)); // when calling lcd.write() ‘0’ must be cast as a byte128 lcd.print(” Arduino! “);129 lcd.write((byte)1);130131}132133void loop() {134 // read the potentiometer on A0:135 int sensorReading = analogRead(A0);136 // map the result to 200 – 1000:137 int delayTime = map(sensorReading, 0, 1023, 200, 1000);138 // set the cursor to the bottom row, 5th position:139 lcd.setCursor(4, 1);140 // draw the little man, arms down:141 lcd.write(3);142 delay(delayTime);143 lcd.setCursor(4, 1);144 // draw him arms up:145 lcd.write(4);146 delay(delayTime);147}
Suggested changes
The content on docs.arduino.cc is facilitated through a public GitHub repository. You can read more on how to contribute in the contribution policy.
License
The Arduino documentation is licensed under the Creative Commons Attribution-Share Alike 4.0 license.
Tư vấn: 0979.466.469 / 0938.128.290 Email: [email protected]
Giao tiếp module LCD 16×2 với Arduino, bài viết sẽ nói rõ chức năng từng chân của LCD và cách kết nối module LCD với LCD
GIAO TIẾP MODULE LCD VỚI ARDUINO
Trên thị trường có rất nhiều loại module LCD, các loại màn hình LCD được sử dụng phổ biến có thể bạn biết là LCD 16×2 ký tự, LCD 20×4 ký tự, module LCD Nokia 5110, Màn hình LCD đồ họa 128 × 64 và màn hình LCD cảm ứng LCD 2,4 inch. Bài viết này sẽ tập trung vào đối tượng LCD 16×2, là loại LCD gồm 2 hàng hiển thị, có thể hiển thị tổng cộng 32 ký tự trong mã ASCII lên màn hình, nghĩa là một hàng có thể hiển thị tối đa 16 ký tự. Tương tự với loại LCD 20×4, sẽ có 4 hàng hiển thị, mỗi hàng hiển thị được 20 ký tự
Sơ đồ các chân của LCD 16×2:
Module LCD JHD162A có 16 chân và có thể được vận hành ở chế độ 4 bit hoặc 8 bit. Ở đây chúng ta đang sử dụng module LCD ở chế độ 4 bit. Các chân của module bao gồm các chân được đánh số từ 1 đến 16 theo chiều từ trái sang phải, chúng ta lần lượt quan sát các chân từ trái sang phải nhé:
– Vss: Chân nối mass (GND)
– Vcc: Chân nối nguồn cấp điện (5VDC)
– Vee: Là chân điều chỉnh độ tương phản, độ tương phản sẽ thay đổi tương ứng với các giá trị điện áp được cấp vào trong này, thường thì mức cài đặt chuẩn là 0.4V đến 0.9V
– RS: Chân chọn thanh ghi, module này có 2 thanh ghi để lựa chọn (thanh ghi lệnh và thanh ghi giữ liệu), mức logic cao (mức 1) là tín hiệu chọn thanh ghi dữ liệu, mức thấp (mức 0) là tín hiệu chọn thanh ghi lệnh. Ví dụ nếu chân RS ở mức cao và các chân dữ liệu của module LCD từ DB0 đến DB7 đồng thời được truyền tín hiệu kỹ thuật số (tín hiệu mức logic 0 và 1) thì dữ liệu tương ứng từ các chân tín hiệu sẽ được lập tức hiển thị trên màn hình LCD. Còn nếu RS ở mức 0 và ta truyền tín hiệu vào các chân tín hiệu thì đồng nghĩa chúng ta đang ra lệnh cho LCD thực thi một lệnh nào đó (lệnh này sẽ được ghi vào bộ điều khiển của LCD, ví dụ như lệnh sắp đặt vị trí con trỏ, lệnh xoá màn hình,…)
– R/W: lựa chọn chế độ đọc hoặc ghi, R/W ở mức cao sẽ kích hoạt chế độ đọc, R/W ở mức thấp thì kích hoạt chế độ ghi
– E: cấp vào chân tín hiệu tích cực cạnh xuống (tín hiệu mức cao chuyển về mức thấp) sẽ kích hoạt và cho phép module LCD hoạt động
– Các chân từ DB0 đến DB7: là các chân tín hiệu ngõ vào LCD
– LED+: Chân anode của các đèn led hiển thị của LCD, khi cấp nguồn vào chân này nên mắc kèm theo điện trở để hạn dòng
– LED- : Chân cathode của các đèn led hiển thị của LCD
Sơ đồ giao tiếp giữa LCD với Arduino
Chân RS của module LCD được kết nối với chân số 12 (chân Digital) của arduino. Chân R / W của LCD được nối đất. Chân E của module LCD được kết nối với chân số 11 (là chân Digital) của arduino. Trong mạch này, module LCD và arduino được giao tiếp ở chế độ 4 bit. Điều này có nghĩa là chỉ có bốn trong số chân Digital đầu vào hay còn gọi chân tín hiệu số (DB4 đến DB7) của LCD được sử dụng. Phương pháp này rất đơn giản, yêu cầu ít kết nối hơn và bạn gần như có thể sử dụng toàn bộ các chức năng của module LCD. Các chân tín hiệu số DB4, DB5, DB6 và DB7 được giao tiếp (kết nối) với các chân tín hiệu số (Digital) số 5, 4, 3 và 2 của Arduino. Chân Vee được mắc với mạch chiết áp 10K, biến trở 10K được sử dụng để điều chỉnh độ tương phản của màn hình. Điện trở 560 ohm R1 giới hạn dòng điện đi qua đèn LED phía sau màn hình LCD. Chương trình đầy đủ để giao tiếp LCD với arduino được hiển thị bên dưới:
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // khai báo các chân giao tiếp của Arduino
void setup()
lcd.begin(16, 2); // khởi tạo module 16×2 LCD
void loop()
lcd.setCursor(0,0); //đặt con trỏ ở hàng 0 cột 0
lcd.print(“16×2 LCD MODULE”); // in ra chuỗi ký tự 16×2 LCD MODULE
lcd.setCursor(2,1); //đặt con trỏ ở hàng 1 cột 2
lcd.print(“HELLO WORLD”); // in ra màn hình lcd chuỗi ký tự HELLO WORLD
Để thuận tiện cho việc giao tiếp giữa module Arduino và LCD, chúng ta sử dụng thư viện tích hợp trong Arduino là – được viết cho các module LCD sử dụng chipset Hitachi HD44780 (hoặc chipset tương thích). Thư viện này có thể xử lý cả chế độ 4 bit và hệ thống dây 8 bit của LCD.
Tham khảo – tài liệu của Thư viện LiquidCrystal – trước khi bạn tiếp tục!
Thư viện Liquid LiquidCrystal.h được sử dụng để dễ dàng điều khiển module LCD bằng Arduino nhờ sự trợ giúp của các lệnh đã được định nghĩa sẵn trong thư viện. Ví dụ, chuỗi dữ liệu có thể được in trên module LCD chỉ bằng cách gọi một lệnh lcd.print ();. Nếu bạn muốn in ra Hello Hello World ở hàng 1, bắt đầu từ cột 3; đầu tiên đặt con trỏ ở vị trí mong muốn bằng lệnh lcd.setCoder (1,3); và sau đó viết lệnh để in các ký tự dưới dạng lcd.print (“Hello World”); .Thư viện có hỗ trợ Arduino IDE (vì đây là thư viện chuẩn được cài đặt sẵn.
Thư viện LiquidCstall.h cung cấp các chức năng / lệnh cho hầu hết tất cả các thao tác như in chuỗi, đặt con trỏ, khởi tạo LCD, cuộn màn hình, cuộn tự động, xóa LCD, nhấp nháy v.v.
Code: 8302-023 Còn hàng
Code: 8300-010 Còn hàng
Code: 8302-025 Còn hàng
Code: 8304-004 Còn hàng
Hotline: 0979 466 469
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách giao diện I2C LCD với Arduino và cách hiển thị các ký tự tĩnh, cuộn và tùy chỉnh trên I2C LCD. Màn hình LCD I2C này là một thiết bị 16×2 có nghĩa là nó có thể hiển thị 16 cột bằng hai hàng ký tự. Các ký tự là chữ và số, nhưng bạn có thể tạo các ký tự tùy chỉnh cho đồ họa cơ bản, biểu đồ thanh loại đó. Màn hình LCD có loại bộ điều khiển hd44780 thông thường và nó cũng có mạch I2C được kết nối với nó giúp dễ dàng kết nối với bảng Arduino. Màn hình LCD 16X2 không có mạch I2C có mười sáu chân.
Nhưng nếu chúng ta muốn kết nối bảng này trực tiếp với Arduino, chúng ta phải sử dụng ít nhất tám chân của Arduino, điều này sẽ rất lãng phí. Vì vậy, giải pháp tốt hơn là sử dụng màn hình LCD I2C thay vì màn hình LCD 16×2 thông thường. Trong hướng dẫn này, chúng tôi đang sử dụng 16×2 I2C LCD, nhưng LCD có kích thước bất kỳ cũng sẽ hoạt động giống như cách chúng ta sẽ học trong hướng dẫn này. Ưu điểm của việc sử dụng màn hình LCD I2C là chúng ta chỉ cần sử dụng bốn chân (bao gồm cả chân VCC và GND) của Arduino để kết nối với màn hình này.
Ở mặt sau của màn hình tinh thể lỏng này, bạn cũng có thể thấy một điện trở thay đổi. Biến trở này được sử dụng để sửa đổi độ sáng của màn hình LCD. Chiết áp này rất tiện dụng khi bạn đang sử dụng mô-đun hiển thị này trong các điều kiện ánh sáng khác nhau.
Vì vậy, bây giờ hãy bắt đầu với sơ đồ chân của màn hình này. Màn hình này có bốn chân:
Pin nối đất
Chân Vcc
SDA
SCL
Bây giờ hãy xem cách kết nối màn hình LCD này với Arduino UNO.
Bây giờ chúng ta sẽ thấy sơ đồ nối dây của I2C LCD với Arduino UNO. Sơ đồ nối dây rất đơn giản.
Trong mạch này, chúng tôi đang sử dụng các chân giao tiếp I2C mặc định của Arduino UNO. Trong bo mạch này, A5 là chân SCL mặc định và A4 là chân SDA mặc định cho giao tiếp I2C. Vì vậy, bạn cần kết nối A5 với chân SCL của LCD và A4 với chân SDA của màn hình tinh thể lỏng. Bạn cũng có thể kiểm tra bảng này để biết các kết nối dây.
Arduino UNO |
I2C LCD |
A5 · |
SCL |
A4 · |
SDA |
GND · |
GND · |
5V |
VIN |
Vì vậy, chúng tôi sẽ chuyển sang phần mã hóa. Trước khi viết code, chúng ta cần chuẩn bị Arduino IDE để viết code.
Chúng tôi sẽ giới thiệu thư viện màn hình LCD I2C trong Arduino IDE. Thư viện này không có sẵn trong trình biên dịch. Vì vậy, chúng ta cần cài đặt một thư viện bên ngoài. Có rất nhiều thư viện LCD I2C có sẵn. Bạn có thể sử dụng các thư viện khác nhau nếu muốn. Nhưng trong hướng dẫn này, chúng tôi đang sử dụng thư viện được phát triển bởi johnrickman. Bây giờ thêm thư viện này bằng cách làm theo các bước sau:
Truy cập liên kết và tải xuống thư viện LCD I2C.
Tệp mà bạn tải xuống ở bước cuối cùng sẽ là tệp nén hoặc tệp zip. Bây giờ giải nén tập tin này.
Sau khi giải nén tệp, bạn sẽ nhận được một thư mục có tên LiquidCrystal_I2C-master.
Đổi tên thư mục này LiquidCrystal_I2C-master thành LiquidCrystal_I2C.
Bây giờ hãy đóng phần mềm Arduino, nếu bạn đã mở nó.
Bây giờ sao chép thư mục này bên trong thư mục thư viện của Arduino IDE của bạn.
Bây giờ hãy mở phần mềm Arduino của bạn. Thư viện của bạn sẽ được đưa vào thành công.
Cho đến bây giờ bạn đã cài đặt thành công thư viện và tạo sơ đồ mạch.
Khi bạn kết nối màn hình I2C của mình với Arduino, bạn cần kiểm tra địa chỉ của nó. Bởi vì mọi thiết bị I2C đều có một địa chỉ được liên kết với nó. Đối với nhiều thiết bị của I2C LCD, địa chỉ mặc định được 0x27 trong đó 0x hiển thị định dạng hex của các số. Nhưng địa chỉ có thể khác nhau trong một số trường hợp. Địa chỉ này phụ thuộc vào vị trí của miếng đệm A0, A1 và A2 trên bộ điều khiển I2C trên thiết bị này. Như bạn có thể thấy, chúng tôi có ba miếng hàn, vì vậy chúng tôi có thể có 8 giá trị địa chỉ khác nhau tùy thuộc vào kết nối của miếng đệm.
Pad A0 |
Pad A1 |
Pad A2 |
Địa chỉ HEX |
0x27 |
|||
0x26 |
|||
0x25 |
|||
0x24 |
|||
0x23 |
|||
0x22 |
|||
0x21 |
|||
0x20 |
Nhưng bạn không cần phải lo lắng về các kết nối bên trong của thiết bị này; Chúng tôi sẽ sử dụng mã được cung cấp bên dưới để kiểm tra địa chỉ của bộ điều khiển. Bây giờ sao chép mã này và tải nó lên bảng của bạn.
#include
// This library includes I2C communication functions
void setup() {
Wire.begin();
Serial.begin(115200);
Serial.println("Scanning for I2C devices");
void loop() {
byte error_i2c, address_i2c;
int I2C_Devices;
Serial.println("Scanning started");
I2C_Devices = 0;
for(address_i2c = 1; address_i2c < 127; address_i2c++ )
Wire.beginTransmission(address_i2c);
error_i2c = Wire.endTransmission();
if (error_i2c == 0) {
Serial.print("I2C device found at address_i2c 0x");
if (address_i2c<16)
Serial.print("0");
Serial.println(address_i2c,HEX);
I2C_Devices++;
else if (error_i2c==4)
Serial.print("Unknow error_i2c at address_i2c 0x");
if (address_i2c<16)
Serial.print("0");
Serial.println(address_i2c,HEX);
if (I2C_Devices == 0)
Serial.println("No I2C device connected \n");
else {
Serial.println("done I2C device searching\n");
delay(2000);
Mã này sẽ tìm kiếm các thiết bị được kết nối bằng chân A4 và A5 và hiển thị kết quả của nó trên màn hình nối tiếp. Sau khi kết nối thiết bị với Arduino đúng cách, bạn sẽ nhận được thông báo này trên màn hình nối tiếp. Thông báo này hiển thị địa chỉ của màn hình tinh thể lỏng được 0x27. Rất có thể bạn sẽ nhận được cùng một địa chỉ cho LCD với 16 cột và 2 hàng.
Trong phần này, chúng ta sẽ hiển thị một thông báo tĩnh trên màn hình.
#include
int totalColumns = 16;
int totalRows = 2;
LiquidCrystal_I2C lcd(0x27, totalColumns, totalRows);
void setup(){
lcd.init();
lcd.backlight(); // use to turn on and turn off LCD back light
void loop()
lcd.setCursor(0, 0);
lcd.print("Microcontrollers");
lcd.setCursor(0,1);
lcd.print("I2C LCD tutorial");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Static text");
delay(1000);
lcd.setCursor(0,1);
lcd.print("I2C LCD tutorial");
delay(1000);
lcd.clear();
Mã này sẽ hiển thị thông báo “Vi điều khiển” ở hàng đầu tiên và “Hướng dẫn LCD I2C” ở hàng thứ hai trong một giây. Sau đó, nó sẽ xóa màn hình LCD và hiển thị “Văn bản tĩnh” ở hàng đầu tiên và “Hướng dẫn LCD I2C” ở hàng thứ hai như hình dưới đây.
Bây giờ chúng ta sẽ thấy hoạt động của code. Dòng này sẽ thêm thư viện trong mã.
#include
Hai biến này xác định tên của tổng số hàng và cột của màn hình mà trong trường hợp của chúng tôi là 16×2. Nếu bạn muốn sử dụng màn hình có kích thước khác, bạn cần thay đổi số ở đây cho phù hợp, ví dụ: màn hình 20×4.
int totalColumns = 16;
int totalRows = 2;
Dòng này được sử dụng để khởi tạo thư viện với địa chỉ LCD, tổng số cột và hàng. Đối số đầu tiên của hàm này là một địa chỉ mà chúng ta đã tìm thấy trong ví dụ trước. Đối số thứ hai và thứ ba là kích thước tính theo số cột và số hàng.
LiquidCrystal_I2C lcd(0x27, totalColumns, totalRows);
Bên trong setup(), đầu tiên chúng ta khởi tạo màn hình LCD với các tham số nêu trên.
lcd.init();
Chức năng backlight() này được sử dụng để bật hoặc tắt đèn nền. Mỗi màn hình LCD đều có đèn nền tích hợp bên trong, vì vậy bạn có thể điều khiển nó thông qua chức năng này.
lcd.backlight();
Trong phần loop(), code được sử dụng để hiển thị thông báo và cũng để xóa thông báo cho LCD. Để hiển thị bất kỳ văn bản nào trên LCD, trước tiên, bạn cần đặt vị trí con trỏ. Vị trí con trỏ xác định nơi bạn muốn hiển thị văn bản. Hàm setCursor() được sử dụng để thiết lập vị trí. Ví dụ: nếu bạn muốn đặt con trỏ thành hàng đầu tiên và cột đầu tiên, bạn sẽ sử dụng chức năng này như sau:
lcd.setCursor(0,0);
Nếu bạn muốn đặt con trỏ thành cột đầu tiên và hàng thứ hai, bạn sẽ sử dụng chức năng này như sau:
lcd.setCursor(0,1);
Giá trị đầu tiên bên trong hàm này xác định số cột và giá trị thứ hai xác định số hàng. Vì vậy, bên trong vòng lặp (), đầu tiên chúng ta đặt con trỏ thành hàng đầu tiên và cột thứ hai. Sau đó lcd.print() sẽ hiển thị thông báo “Microcontrollers” ở hàng đầu tiên.
lcd.setCursor(0, 0);
lcd.print("Microcontrollers");
Tương tự, hai dòng này sẽ đặt con trỏ đến hàng thứ hai và hiển thị văn bản “Hướng dẫn LCD I2C” trên hàng thứ hai. Trong một giây, cùng một văn bản sẽ được hiển thị ở hàng thứ nhất và thứ hai. Độ trễ() được sử dụng để thêm độ trễ của một giây.
lcd.setCursor(0,1);
lcd.print("I2C LCD tutorial");
delay(1000);
Sau khi đợi một giây, clear() sẽ xóa văn bản.
lcd.clear();
Bây giờ phần khác của mã cũng hoạt động theo cách tương tự.
lcd.setCursor(0, 0); // move cursor to starting position
lcd.print("Static text"); // display text " Static text"
lcd.setCursor(0,1); // move the curos to second row
lcd.print("I2C LCD tutorial"); //display a string
delay(1000); // add delay of 1 second
lcd.clear(); // clear the screen
Để xem trình diễn của dự án này, hãy tải mã lên bảng của bạn. Tuy nhiên, trước khi tải mã lên, hãy đảm bảo chọn Arduino Uno từ Tools > Board và cũng chọn đúng cổng COM mà bo mạch được kết nối từ Tools > Port.
Sau khi mã được tải lên bảng, hãy điều chỉnh độ sáng của màn hình thông qua chiết áp cho đến khi LCD bắt đầu hiển thị các thông báo:
Mở Arduino IDE của bạn và đi tới Tệp > Mới. Một tệp mới sẽ mở ra. Sao chép mã được cung cấp bên dưới trong tệp đó và lưu nó.
Trong phần này, chúng ta sẽ hiển thị thông báo cuộn trên màn hình.
#include
int totalColumns = 16;
int totalRows = 2;
LiquidCrystal_I2C lcd(0x27, totalColumns, totalRows);
String staticMessage = "I2C LCD Tutorial";
String scrollingMessage = "Welcome to Microcontrollerslab! This is a scrolling message.";
void scrollMessage(int row, String message, int delayTime, int totalColumns) {
for (int i=0; i < totalColumns; i++) {
message = " " + message;
message = message + " ";
for (int position = 0; position < message.length(); position++) {
lcd.setCursor(0, row);
lcd.print(message.substring(position, position + totalColumns));
delay(delayTime);
void setup(){
lcd.init();
lcd.backlight();
void loop(){
lcd.setCursor(0, 0);
lcd.print(staticMessage);
scrollMessage(1, scrollingMessage, 250, totalColumns);
Dòng này sẽ thêm thư viện trong mã.
#include
Hai biến này xác định tên của tổng số hàng và cột của màn hình mà trong trường hợp của chúng tôi là 16×2. Nếu bạn muốn sử dụng màn hình có kích thước khác, bạn cần thay đổi số ở đây cho phù hợp, ví dụ: hiển thị 20×4.
int totalColumns = 16;
int totalRows = 2;
Dòng này được sử dụng để khởi tạo thư viện với địa chỉ LCD, tổng số cột và hàng. Đối số đầu tiên của hàm này là một địa chỉ mà chúng ta đã tìm thấy trong ví dụ trước. Đối số thứ hai và thứ ba là kích thước tính theo số cột và số hàng.
LiquidCrystal_I2C lcd(0x27, totalColumns, totalRows);
Tiếp theo, chúng ta sẽ định nghĩa hai biến chuỗi sẽ giữ tĩnh và thông báo cuộn mà chúng ta sẽ hiển thị trên màn hình LCD.
String staticMessage = "I2C LCD Tutorial";
String scrollingMessage = "Welcome to Microcontrollerslab! This is a scrolling message.";
Hàm scrollMessage() do người dùng xác định sẽ được sử dụng để cuộn văn bản trên màn hình LCD. Nó có bốn lập luận. Đầu tiên là hàng mà chúng ta sẽ hiển thị thông điệp của mình. Thứ hai là thông báo sẽ được hiển thị. Thứ ba là thời gian trễ sẽ kiểm soát tốc độ của văn bản cuộn. Cuối cùng, đối số thứ tư là tổng số cột của LCD.
void scrollMessage(int row, String message, int delayTime, int totalColumns) {
for (int i=0; i < totalColumns; i++) {
message = " " + message;
message = message + " ";
for (int position = 0; position < message.length(); position++) {
lcd.setCursor(0, row);
lcd.print(message.substring(position, position + totalColumns));
delay(delayTime);
Bên trong setup(), đầu tiên chúng ta khởi tạo màn hình LCD với các tham số nêu trên.
lcd.init();
Chức năng backlight() này được sử dụng để bật hoặc tắt đèn nền. Mỗi màn hình LCD đều có đèn nền tích hợp bên trong, vì vậy bạn có thể điều khiển nó thông qua chức năng này.
lcd.backlight();
Trong phần loop(), trước tiên chúng ta sẽ thiết lập con trỏ và sau đó in thông điệp tĩnh bằng cách sử dụng lcd.print() và truyền staticMessage như một argyment bên trong nó. Sau đó gọi hàm scrollMessage () và chuyển ‘1’ làm hàng bắt đầu, ‘scrollingMessage’ làm thông báo sẽ được hiển thị, thời gian trễ 250ms và chỉ định ‘totalColumns’ của màn hình LCD.
void loop(){
lcd.setCursor(0, 0);
lcd.print(staticMessage);
scrollMessage(1, scrollingMessage, 250, totalColumns);
Để xem trình diễn của dự án này, hãy tải mã lên bảng. Tuy nhiên, trước khi tải mã lên, hãy đảm bảo chọn Arduino Uno từ Bảng > Công cụ và cũng chọn đúng cổng COM mà bo mạch được kết nối từ Công cụ > Cổng.
Sau khi mã được tải lên bảng, hãy điều chỉnh độ sáng của màn hình thông qua chiết áp cho đến khi LCD bắt đầu hiển thị các thông báo:
Trong phần này, chúng tôi sẽ hiển thị các ký tự tùy chỉnh trên màn hình LCD.
Đối với màn hình LCD 16×2 mà chúng tôi đang sử dụng, chúng tôi cũng có tùy chọn hiển thị các ký tự tùy chỉnh. Trong màn hình LCD cụ thể này, mỗi khối bao gồm 5×8 pixel. Chúng có thể được sử dụng để hiển thị các ký tự tùy chỉnh bằng cách đặt trạng thái của mỗi pixel bằng cách bên trong một biến byte.
Có một cách rất đơn giản để tạo biến byte của ký tự tùy chỉnh của riêng bạn. Đi tới trình tạo ký tự tùy chỉnh sau:
Chỉ định ký tự tùy chỉnh bạn muốn hiển thị bằng cách nhấp vào các pixel trong khối 5×8 pixel và biến byte tương ứng sẽ được tạo.
Trong trường hợp của chúng tôi, chúng tôi sẽ hiển thị ký tự ‘+’ trên màn hình. Đây là biến byte mà chúng tôi sẽ sử dụng trong mã chương trình của mình để hiển thị ký tự cụ thể này trên màn hình LCD.
Mở Arduino IDE của bạn và đi tới Tệp > Mới. Một tệp mới sẽ mở ra. Sao chép mã được cung cấp bên dưới trong tệp đó và lưu nó.
Trong bản phác thảo này, chúng tôi sẽ hiển thị một ký tự tùy chỉnh trên màn hình LCD.
#include
int totalColumns = 16;
int totalRows = 2;
LiquidCrystal_I2C lcd(0x27, totalColumns, totalRows);
byte customChar[8] = {
0b00000,
0b00100,
0b00100,
0b11111,
0b00100,
0b00100,
0b00000,
0b00000
};
void setup()
lcd.init();
lcd.backlight();
lcd.createChar(0, customChar);
void loop()
lcd.setCursor(0, 0);
lcd.write(0);
Bao gồm biến byte mà chúng tôi thu được từ trình tạo ký tự tùy chỉnh. Đây là biến byte cho ký tự ‘+’.
byte customChar[8] = {
0b00000,
0b00100,
0b00100,
0b11111,
0b00100,
0b00100,
0b00000,
0b00000
};
Bên trong hàm setup(), chúng ta sẽ tạo ký tự tùy chỉnh bằng cách gọi lcd.createChar() và truyền một số từ 0-7 (vị trí được phân bổ) và biến byte làm tham số bên trong nó.
lcd.createChar(0, customChar);
Bên trong hàm loop(), chúng ta sẽ hiển thị ký tự của mình bằng cách sử dụng lcd.write() và truyền vị trí được phân bổ làm tham số.
void loop()
lcd.setCursor(0, 0);
lcd.write(0);
Để xem trình diễn của dự án này, hãy tải mã lên bảng. Tuy nhiên, trước khi tải mã lên, hãy đảm bảo chọn Arduino Uno từ Tools > Board và cũng chọn đúng cổng COM mà bo mạch được kết nối từ Tools > Port.
Sau khi mã được tải lên bảng, hãy điều chỉnh độ sáng của màn hình thông qua chiết áp cho đến khi LCD bắt đầu hiển thị ký tự:
>>> 100+ Mã Sản Phẩm Dây Rút: https://mecsu.vn/san-pham/day-rut-nhua.5op
>>> 1000+ Mã Sản Phẩm Đầu Cosse: https://mecsu.vn/san-pham/dau-cosse.Q1j
Circuit
Note that this circuit was originally designed for the Arduino UNO. As the Arduino is communicating with the display using SPI, pin 11 & 12 will change depending on what board you are using. For example, on a MKR WiFi 1010, the SPI bus is attached to pin 8 & 11.
Before wiring the LCD screen to your Arduino board we suggest to solder a pin header strip to the 14 (or 16) pin count connector of the LCD screen, as you can see in the image further up.
To wire your LCD screen to your board, connect the following pins:
- LCD RS pin to digital pin 12
- LCD Enable pin to digital pin 11
- LCD D4 pin to digital pin 5
- LCD D5 pin to digital pin 4
- LCD D6 pin to digital pin 3
- LCD D7 pin to digital pin 2
- LCD R/W pin to GND
- LCD VSS pin to GND
- LCD VCC pin to 5V
- LCD LED+ to 5V through a 220 ohm resistor
- LCD LED- to GND
Additionally, wire a 10k potentiometer to +5V and GND, with it’s wiper (output) to LCD screens VO pin (pin3).
Ý nghĩa các chân kết nối của màn hình LCD
LCD (Liquid Crystal Display) là màn hình tinh thể lỏng. LCD là loại thiết bị để hiển thị các ký tự, có cấu tạo bởi các điểm ảnh chứa các tinh thể lỏng (liquid crystal).
Màn hình LCD có ưu điểm là phẳng, cho hình ảnh sáng, chân thật và tiết kiệm năng lượng. Với Arduino, chúng ta có thể sử dụng LCD 16×2, gồm 2 dòng, mỗi dòng 16 ô ký tự. Vị trí các ô ký tự được đánh từ 0, 1, 2, 3, 4, 5,…,15.
Các chân của màn hình LCD 16×2
VSS: Tương đương với GND – cực âm.
VDD: Tương đương với VCC – cực dương (5V).
Constrast Voltage (VE hoặc VEE): Điều khiển độ sáng màn hình.
Register Select (RS): Lựa chọn thanh ghi trong LCD để xử lý chương trình (RS=0 chọn thanh ghi lệnh, RS=1 chọn thanh ghi dữ liệu).
Read/Write (RW): RW=0 ghi dữ liệu , RW=1 đọc dữ liệu.
Enable (E): Cho phép ghi vào LCD.
D0 – D7: 8 chân nhận dữ liệu.
Backlight Anode (+) và Backlight Cathode (-): Nguồn dương và nguồn âm của đèn màn hình LCD.
Code mẫu
#include
#includeLiquidCrystal_I2C lcd(0x3F,16,2); void setup() { lcd.init(); lcd.backlight(); lcd.setCursor(2,0); lcd.print(“Arduinokit.vn”); lcd.setCursor(0,1); lcd.print(“Xin chao cac ban”); } void loop() { }
Giải thích code
LiquidCrystal_I2C lcd(0x3F,16,2);
- Đặt địa chỉ LCD là 0x3F cho màn hình LCD 16×2.
- 16 là số cột của màn hình (nếu dùng loại màn hình 20×4) thì thay bằng 20.
- 2 là số dòng của màn hình (nếu dùng loại màn hình 20×4) thì thay bằng 4.
lcd.init();
Khởi động màn hình LCD, bắt đầu cho phép Arduino sử dụng màn hình.
lcd.backlight();
Bật đèn nền LCD 16×2.
lcd.setCursor(2,0);
Đưa con trỏ tới hàng 1, cột 3.
Lưu ý: giá trị hàng và cột bắt đầu từ số 0 có nghĩa 0 là hàng(cột) 1.
lcd.print(“Arduinokit.vn”);
Xuất ra dòng chữ Arduinokit.vn tại vị trí con trỏ ở hàng 1, cột 3.
lcd.setCursor(0,1); lcd.print(“Xin chao cac ban”);
Đoạn code này thì tương tự như trên, xuất ra dòng chữ “Xin chao cac ban” tại vị trí con trỏ ở hàng 2, cột 1.
Bây giờ thì các bạn upload chương trình và xem kết quả nhé.
Thiết kế mạch giao tiếp với LCD của Arduino
Để LCD hoạt động thì:
-
- Cần cấp nguồn dương (+) vào chân VDD của LCD, cấp nguồn âm (-) vào chân VSS.
- Kết nối chân Baclight Anode với nguồn dương (+) và Backlight Cathode với nguồn âm (-) để điều khiển bật đèn màn hình.
- Kết nối chân VEE với biến trở để điều khiển độ sáng màn hình.
- Chân R/W kết nối với GND (R/W=0) để ghi dữ liệu vào LCD.
- Kết nối chân RS và Enable với board mạch Arduino để giao tiếp với Arduino.
- Điều khiển LCD ở chế độ 4 bit, kết nối 4 chân D4, D5, D6, D7 với board mạch Arduino.
Có thể sử dụng Proteus để giả lập mạch giao tiếp với LCD như hình bên dưới.
Khi sử dụng mạch giả lập giao tiếp LCD với Arduino thì có thể không cần sử dụng chân VDD, VSS, VEE cũng như Backlight Anode (+) và Backlight Cathode (-).
Giới thiệu LCD 16×2
Thông số kỹ thuật LCD 16×2
LCD 16×2 được sử dụng để hiển thị trạng thái hoặc các thông số.
- LCD 16×2 có 16 chân trong đó 8 chân dữ liệu (D0 – D7) và 3 chân điều khiển (RS, RW, EN).
- 5 chân còn lại dùng để cấp nguồn và đèn nền cho LCD 16×2.
- Các chân điều khiển giúp ta dễ dàng cấu hình LCD ở chế độ lệnh hoặc chế độ dữ liệu.
- Chúng còn giúp ta cấu hình ở chế độ đọc hoặc ghi.
LCD 16×2 có thể sử dụng ở chế độ 4 bit hoặc 8 bit tùy theo ứng dụng ta đang làm.
Code màn hình LCD 16×2 Arduino
// include the library code: #include
// Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7) LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // set up the LCD’s number of columns and rows: lcd.begin(16, 2); // Clears the LCD screen lcd.clear(); } void loop() { // Print a message to the LCD. lcd.print(” Hello world!”); // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 1); // Print a message to the LCD. lcd.print(” LCD Tutorial”); }
Giải thích code
// include the library code: #include
Khai báo để sử dụng thư viện LiquidCrystal, cho phép tương tác với màn hình LCD 16×2.
// Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7) LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
khởi tạo đối tượng lcd từ lớp LiquidCrystal. Các tham số truyền vào định nghĩa các chân kết nối giữa Arduino và màn hình LCD. Cụ thể, chân RS (Register Select) của LCD được kết nối với chân 12 của Arduino, chân Enable được kết nối với chân 11, các chân dữ liệu D4 đến D7 được kết nối tương ứng với chân 5, 4, 3, 2 của Arduino.
// set up the LCD’s number of columns and rows: lcd.begin(16, 2); // Clears the LCD screen lcd.clear();
lcd.begin(16, 2);
Thiết lập số cột và số hàng của màn hình LCD 16×2. Trong trường hợp này, màn hình LCD có 16 cột và 2 hàng.
lcd.clear();
Xóa nội dung trên màn hình LCD Arduino.
// Print a message to the LCD. lcd.print(” Hello world!”);
lcd.print(" Hello world!");
Hiển thị chuỗi “Hello world!” lên màn hình LCD 1602. Chuỗi này sẽ được hiển thị trên dòng 0 (hàng đầu tiên) và từ cột 0 trở đi.
// set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 1);
lcd.setCursor(0, 1);
Đặt vị trí con trỏ của LCD 16×2 tới cột 0, dòng 1 (hàng thứ hai).
Các chức năng chính của thư viện LiquidCrystal
Dưới đây là một số chức năng hữu ích mà bạn có thể sử dụng với đối tượng LiquidCrystal:
-
lcd.home()
: Định vị con trỏ ở góc trên bên trái của màn hình LCD 16×2 mà không xóa nội dung hiện tại trên màn hình.
-
lcd.blink()
: Hiển thị một khối nhấp nháy 5×8 pixel tại vị trí mà ký tự tiếp theo sẽ được viết.
-
lcd.noBlink()
: Tắt chế độ nhấp nháy của con trỏ trên LCD 1602.
-
lcd.cursor()
: Hiển thị một dấu gạch dưới (dòng) tại vị trí mà ký tự tiếp theo sẽ được viết.
-
lcd.noCursor()
: Ẩn con trỏ trên LCD Arduino.
-
lcd.scrollDisplayRight()
: Cuộn nội dung của màn hình sang phải một khoảng trống. Nếu bạn muốn văn bản cuộn liên tục, bạn có thể sử dụng chức năng này trong một vòng lặp.
-
lcd.scrollDisplayLeft()
: Cuộn nội dung của màn hình sang trái một khoảng trống. Tương tự như chức năng trên, bạn có thể sử dụng chức năng này trong một vòng lặp để cuộn liên tục.
-
lcd.noDisplay()
: Tắt màn hình LCD 16×2 mà không làm mất nội dung hiện đang hiển thị trên đó.
-
lcd.display()
: Bật màn hình LCD Arduino sau khi nó đã được tắt bằng noDisplay(). Thao tác này sẽ khôi phục hiển thị nội dung (và con trỏ) trên màn hình.
-
- Tổng tiền thanh toán:
|
#include void loop() |
|
#include void loop() |
|
#include void loop() |
|
#include void loop() |
Xin chào các bạn!
Nay mình xin share ít bộ code để tạo các hiệu ứng mới cho LCD 16X2 với Arduino Uno
Các bạn cắm mạch kết nối giữa Arduino với LCD16x2 như phía dưới hình .
Hướng dẫn sử dụng màn hình LCD 16×2 với Arduino
Trong hướng dẫn này, các bạn sẽ tìm hiểu cách sử dụng màn hình LCD 16×2 với Arduino, bằng cách sử dụng thư viện LiquidCrystal để điều khiển màn hình.
Qua đó sẽ khám phá các chức năng cơ bản của màn hình LCD 1602 như hiển thị văn bản, di chuyển con trỏ, xóa màn hình và điều chỉnh độ sáng. Bên cạnh đó, các bạn sẽ tìm hiểu cách tạo các ký tự tùy chỉnh trên màn hình LCD arduino.
Để tạo động lực cho Team Arduino KIT ra nhiều bài viết chất lượng hơn, các bạn có thể ủng hộ mình bằng cách Donate qua MoMo, Ngân hàng, Paypal…Nhấn vào link bên dưới nhé.
Linh kiện cần thiết cho dự án
TÊN LINH KIỆN | SỐ LƯỢNG | NƠI BÁN |
Arduino Uno R3 | Shopee | Cytron | |
Màn hình LCD 16×2 | Shopee | Cytron | |
Biến trở vuông 10K | Shopee | Cytron | |
Điện trở 220R | Shopee | Cytron | |
Dây cắm | 10-20 | Shopee | Cytron |
Breadboard | Shopee | Cytron |
I.Một số bộ code
1.1.Blink
Nhấp nháy chữ trên LCD:
//Thêm thư viện LiquidCrystal – nó có sẵn vì vậy bạn không cần cài thêm gì cả #include
//Khởi tạo với các chân LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2);//Thông báo đây là LCD 1602 lcd.print(“Hello World!”);//In ra dòng chữ, bạn có thể chỉnh chữ lại tuỳ ý lcd.setCursor(0 , 1); lcd.print(“arduino.vn”); } void loop() { lcd.noDisplay();//Xoá màn hình hiển thị delay(500);//chờ 0,5 giây lcd.Display();//Hiển thị trở lại delay(500); }
Kết quả:
1.2.Tự động cuộn chữ
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:
// Thêm thư viện #include
//Khai báo các chân LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 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(); }
Kết quả:
1.3.Blink con trỏ
Chương trình chớp tắt con trỏ cuối dòng:
// Thêm thư viện #include
//Khai báo các chân LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 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); }
Kết quả:
1.4.Blink con trỏ dưới dạng dấu gạch nối
Chương trình chớp tắt con trỏ cuối dòng dưới dạng gạch nối:
// Thêm thư viện #include
//Khai báo các chân LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 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); }
Kết quả:
1.5.Chạy chữ
Cho tất cả chữ chạy từ trái sang phải và ngược lại.
// Thêm thư viện #include
//Khai báo các chân LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 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); }
Kết quả:
1.6.In chữ và tự xuống dòng
Chương trình tự xuống dòng khi vượt quá số ký tự trong 1 dòng:
// Thêm thư viện #include
// 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(12, 11, 5, 4, 3, 2); 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); } } } }
Kết quả :
1.7.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:
// Thêm thư viện #include
//Khai báo các chân LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 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++; }
Kết quả:
Mình đã chỉ các bạn cách sử dụng các hiệu ứng khác nhau, cơ bản nhất của Text LCD 16×2.Chúc các bạn may mắn với các hiệu ứng này và ứng dụng được vào nhiều project hay hơn.
Tổng quan LCD 16×2 và giao tiếp I2C LCD sử dụng Arduino
Sơ đồ đấu nối màn hình LCD 16×2 với Arduino
Arduino Uno R3 | LCD 16X2 | Biến trở |
5V | 2, 15 | Chân ngoài |
GND | 1, 16 | Chân ngoài |
D7 | ||
D6 | ||
D5 | ||
D4 | ||
11 | EN | |
12 | RS | |
Vo | Chân giữa |
Hướng dẫn kiểm tra màn hình LCD Arduino
Tiếp theo của bài viết mình sẽ hướng cho các bạn cách thực hiện bước kiểm tra màn hình LCD 16×2 với các bước sau:
Bước 1: Kết nối chân nguồn
- Kết nối chân 5V của Arduino với đường nguồn dương (+) trên breadboard.
- Kết nối chân GND của Arduino với đường nguồn âm (-) trên breadboard.
- Cắm màn hình LCD vào breadboard.
Bước 2: Kết nối nguồn cho LCD
- Kết nối chân 1 và 16 của LCD 16×2 với đường nguồn âm (-) trên breadboard.
- Kết nối chân 2 và 15 của LCD 16×2 với đường nguồn dương (+) trên breadboard.
Bước 3: Thêm điện trở hạn dòng cho đèn nền (nếu cần)
- Nếu màn hình LCD 1602 có điện trở hạn dòng cho đèn nền, hãy kiểm tra mặt sau của màn hình gần chân 15.
- Nếu không có điện trở, hoặc các bạn không chắc chắn, hãy thêm một điện trở 220 ohm giữa chân 15 và đường nguồn dương (+).
Bước 4: Kết nối biến trở để điều chỉnh độ tương phản:
- Kết nối một bên của biến trở 10K vào đường nguồn dương (+) trên breadboard.
- Kết nối bên còn lại của biến trở vào đường nguồn âm (-) trên breadboard.
- Kết nối nối giữa chân wiper của biến trở với chân 3 của màn hình LCD 16×2.
Bước 5: Bật Arduino và kiểm tra:
- Bật Arduino để cấp nguồn cho màn hình LCD arduino.
- Bạn sẽ thấy đèn nền của màn hình sáng lên.
- Xoay núm biến trở, bạn sẽ thấy các hình chữ nhật đầu tiên xuất hiện.
- Nếu bạn đã làm theo các bước trên và màn hình LCD hiển thị đúng, chúc mừng! Màn hình LCD 1602 của bạn hoạt động bình thường.
Module I2C Arduino
LCD có quá nhiều nhiều chân gây khó khăn trong quá trình đấu nối và chiếm dụng nhiều chân trên vi điều khiển.
Module I2C LCD ra đời và giải quyết vấn để này cho bạn.
Thay vì phải mất 6 chân vi điều khiển để kết nối với LCD 16×2 (RS, EN, D7, D6, D5 và D4) thì module IC2 bạn chỉ cần tốn 2 chân (SCL, SDA) để kết nối.
Module I2C hỗ trợ các loại LCD sử dụng driver HD44780(LCD 16×2, LCD 20×4, …) và tương thích với hầu hết các vi điều khiển hiện nay.
Ưu điểm
- Tiết kiệm chân cho vi điều khiển.
- Dễ dàng kết nối với LCD.
Thông số kĩ thuật
- Điện áp hoạt động: 2.5-6V DC.
- Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780).
- Giao tiếp: I2C.
- Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2).
- Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt.
- Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD.
Để sử dụng màn hình LCD giao tiếp I2C sử dụng Arduino thì ta cần cài đặt thư viện Liquidcrystal_I2C. Tại đây
Giao tiếp I2C LCD Arduino
Module I2C LCD 16×2 | Arduino UNO |
GND | GND |
VCC | 5V |
SDA | A4/SDA |
SCL | A5/SCL |
Sơ đồ đấu nối
Các linh kiện cần thiết cho dự án:
Tên linh kiện | Số lượng | Shopee |
Arduino UNO R3 | Mua ngay | |
Dây cáp nạp | Mua ngay | |
Màn hình LCD 16×2 | Mua ngay | |
Module I2C LCD 16×2 | Mua ngay | |
Dây cắm (Đực – Cái) | Mua ngay |
Bạn sẽ học được gì
- Có kiến thức cơ bản về Robotics
- Chế tạo Robot dò đường thông minh
- Đánh thức nhà khoa học bên trong bạn
- Tìm hiểu thêm về Robotics, các thuật toán Robot tự động
- Kiến thức nền tảng để chế tạo các máy móc tự động phục vụ đời sống sinh hoạt, lao động sản xuất
- Kiến thức để chế tạo sản phẩm, tham gia các cuộc thi khoa học công nghệ trong nước và quốc tế
Các lỗi thường gặp khi sử dụng I2C LCD
- Hiển thị một dãy ô vuông.
- Màn hình chỉ in ra một ký tự đầu.
- Màn hình nhấp nháy.
Các lỗi này chủ yếu là do sai địa chỉ bus, để fix lỗi các bạn thay địa chỉ mặc định là “0x27” thành “0x3F.
Trong trường hợp vẫn không được các bạn fix lỗi bằng cách nạp code tìm địa chỉ bus của I2C.
Sau khi tìm xong các bạn thay địa chỉ vừa tìm được vào vị trí “0x27” là xong.
- Các bạn có thể tải code tìm địa chỉ bus ở đây. Tải ngay.
Tổng quan về màn hình LCD 16×2
Màn hình LCD 16×2 là một loại màn hình ký tự thông dụng trong các dự án điện tử. Nó có khả năng hiển thị 16 cột và 2 hàng của các ký tự.
Màn hình này sử dụng công nghệ hiển thị Liquid Crystal Display (LCD) để hiển thị thông tin. Nó có thể hiển thị các ký tự từ bảng mã ASCII và có thể hiển thị các ký tự chữ cái, chữ số, ký tự đặc biệt và các biểu tượng khác.
Màn hình LCD 16×2 có một lưới pixel 5×8 cho mỗi ký tự. Điều này có nghĩa là mỗi ký tự được hiển thị bằng một ma trận 5×8 điểm ảnh. Nó cũng có thể hiển thị các ký tự tiếng Việt nhưng có giới hạn một số ký tự đặc biệt.
Keywords searched by users: code lcd 16×2 arduino
Categories: Có được 88 Code Lcd 16X2 Arduino
See more here: kientrucannam.vn
See more: https://kientrucannam.vn/vn/