ใ ํ ์คํธ LCD ใ
[ ํ ์คํธ LCD ]
- ์ก์ (Liquid Crystal)์ ์ด์ฉํ์ฌ ๊ณ ์ ๋ ์์น์ ๋ฌธ์ ๋จ์์ ์๋ฌธ์, ์ซ์ ๋ฑ์ ํํ ๊ฐ๋ฅ
- ๊ทธ๋ํฝ์ด๋ ํ๊ธ ํ์์ ์ ํฉํ์ง ์๊ณ , ํ์ํ ์ ์๋ ๋ฌธ์์ ์๊ฐ ํ์ ์ ์.
- ๋์ฒด๋ก 16(ํ) x 2(์ด) = 32 ๊ธ์๋ฅผ ํ์ํ ์ ์๋ ํ ์คํธ LCD๊ฐ ์ฃผ๋ก ์ฌ์ฉ๋จ.
[ 16๊ฐ์ ์ฐ๊ฒฐ ํ์ ๊ฐ์ง ํ ์คํธ LCD์ ํ์ ๊ตฌ์ฑ ]
- ์ ์ ๊ด๋ จ ํ 5๊ฐ(Vss, Vcc, Vo, LED+, LED-)
- ์ ์ด ์ ํธ ํ 3๊ฐ(Rs, R/W, E)
- ๋ฐ์ดํฐ ์ ํธ ํ 8๊ฐ(DB0 ~ DB7)
- 4๋นํธ ๋ชจ๋ : 4๊ฐ์ ๋ฐ์ดํฐ ํ๋ง ์ฌ์ฉ
- 8๋นํธ ๋ชจ๋ : 8๊ฐ์ ๋ฐ์ดํฐ ํ ๋ชจ๋ ์ฌ์ฉ
[ ํ ์คํธ LCD์ ์ ์ด ์ ํธ ํ ]
์ ์ด ์ ํธ ํ | ์ค๋ช |
RS (Register Select) |
- ํ
์คํธ LCD๋ฅผ ์ ์ดํ๊ธฐ ์ํด ์ ์ด ๋ ์ค์งํฐ&๋ฐ์ดํฐ ๋ ์ง์คํฐ ์ฌ์ฉ - RS ์ ํธ๋ ๋ช ๋ น์ ๋ด๊ณ ์๋ ๋ ์ง์คํฐ(RS=LOW)์ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ๋ ์ง์คํฐ(RS=HIGH) ์ค ํ๋๋ฅผ ์ ํํ๊ธฐ ์ํด ์ฌ์ฉ |
R/W (Read/Write) |
- ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ (R/W = HiGH || LOW) ๋ชจ๋ ์ ํ์ ์ํด ์ฌ์ฉ |
E (Enable) | - ํ๊ฐ ์ฃ์ง(falling edge)์์ LCD ๋๋ผ์ด๋ฒ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์์ํ๋๋ก ์ง์ํ๊ธฐ ์ํ ์ ํธ๋ก ์ฌ์ฉ |
[ ํ ์คํธ LCD์ 16๊ฐ ์ฐ๊ฒฐํ ๊ตฌ์ฑํ ]
ใ ํ ์คํธ LCD ์ฐ๊ฒฐ ํ๋ก ์ฌ์ฉ (16ํ / 4๋นํธ ๋ชจ๋) ใ
- ํ ์คํธ LCD๋ฅผ ์ฐ๊ธฐ ์ฉ๋๋ก๋ง ์ฌ์ฉํ๋ฏ๋ก R/W ์ ์ด ์ ํธํ GND ์ฐ๊ฒฐ
[ LiquidCrystal ๋ผ์ด๋ธ๋ฌ๋ฆฌ ]
- 16ํ ํ ์คํธ LCD ์ฌ์ฉ์ ์ด์ฉ
- ์๋์ด๋ ธ IDE ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ LiquidCrystal ์ฌ์ฉ, 4๋นํธ/8๋นํธ ๋ชจ๋ ์ง์
- ์๋์ด๋ ธ IDE์์ '์ค์ผ์น -> ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌํจํ๊ธฐ -> LiquidCrystal' ์ ํํ์ฌ ํค๋ํ์ผ ์ถ๊ฐ
[ LiquidCrystal ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฃผ์ ํจ์ ]
Function | Description | Syntax | Parameters |
LiquidCrystal( ) | - LiquidCrystal ํ์
์ ๊ฐ์ฒด ์์ฑ - 4๊ฐ, 8๊ฐ์ ๋ฐ์ดํฐ ๋ผ์ธ์ ์ฌ์ฉํ์ฌ ์ ์ด - 4๋นํธ ๋ชจ๋ [ DB0 ~ DB3 ํ ๋ฒํธ ์๋ต ] - 8๋นํธ ๋ชจ๋ [ DB0 ~ DB7 ํ ๋ชจ๋ ์ฐ๊ฒฐ ] |
LiquidCrystal(rs, enable, d4~d7) LiquidCrystal(rs, rw, enable, d4~d7) LiquidCrystal(rs, enable, d0~d7) LuquidCrystal(rs, rw, enable, d0~d7) |
rs - LCD์ RS ํ์ ์ฐ๊ฒฐ๋ ํ ๋ฒํธ rw[์ ํ] - LCD์ RW ํ์ ์ฐ๊ฒฐ๋ ํ ๋ฒํธ enable - LCD์ enable ํ์ ์ฐ๊ฒฐ๋ ํ๋ฒํธ d0~d7 - LCD์ ํด๋น ๋ฐ์ดํฐ ํ์ ์ฐ๊ฒฐ๋ ํ ๋ฒํธ |
begin( ) | - LCD ํ๋ฉด์ ๋ํ ์ธํฐํ์ด์ค ์ด๊ธฐํ - ๋์คํ๋ ์ด์ ์น์(ํ ์ด) ์ง์ - ๋ค๋ฅธ ๋ช ๋ น๋ณด๋ค ์ฐ์ ํธ์ถ |
lcd.begin(cols, rows) | cols - ํ์ ๊ฐ์ rows - ์ด์ ๊ฐ์ |
clear( ) | - LCD ํ๋ฉด์ ์ง์ฐ๊ณ , ์ปค์ ์์น ์ด๊ธฐํ | lcd.clear() lcd.clear() |
lcd - LiquidCrystal ํ์ ๊ฐ์ฒด |
setCursor( ) | - LCD ์ปค์ ์์น ์ค์ (ํ์ํ ํ ์คํธ ์์น) | lcd.setCursor(col, row) | col - ํ ์์น (0~1) rows - ์ด ์์น (0~15) |
write() | - LCD์ ๋ฌธ์ ์ถ๋ ฅ | lcd.write(data) | data - ํ์ํ ๋ฌธ์ |
print() | - LCD์ ํ ์คํธ ์ถ๋ ฅ | lcd.print(data) lcd.print(data, BASE) |
data - ์ถ๋ ฅํ ๋ฐ์ดํฐ - char, byte, int, long or string BASE[์ ํ] - ์ซ์ ์ถ๋ ฅ ๊ธฐ์ค - BIN, DEC, OCT, HEX |
[ (1) ํ ์คํธ LCD ๊ธฐ๋ณธ ์ถ๋ ฅ ์์ ]
// C++ code
// (1) ํ
์คํธ LCD ๊ธฐ๋ณธ ์ถ๋ ฅ ์์
#include <LiquidCrystal.h>
// ํ ๋ฒํธ (RS, E, DB4, DB5, DB6, DB7)
LiquidCrystal lcd(13, 12, 7, 6, 5, 4); // lcd ๊ฐ์ฒด ์์ฑ
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2); // lcd ๊ฐ์ฒด ์ด๊ธฐํ
lcd.setCursor(1, 0);
lcd.print("Hellow World!!");
lcd.setCursor(1, 1);
lcd.print(" -Coding Gym- ");
}
void loop(){
}
[ (2) ํ ์คํธ LCD ๊ธฐ๋ณธ ์ถ๋ ฅ ์์ ]
// C++ code
// (2) ํ
์คํธ LCD ๊ธฐ๋ณธ ์ถ๋ ฅ ์์
// setCursor() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ 2ํ์ผ๋ก ์ซ์ ์ถ๋ ฅ
#include <LiquidCrystal.h>
// ํ ๋ฒํธ (RS, E, DB4, DB5, DB6, DB7)
LiquidCrystal lcd(13, 12, 7, 6, 5, 4); // LCD ์ฐ๊ฒฐ
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2); // LCD ์ด๊ธฐํ
lcd.setCursor(0, 0); // ์ปค์ ์์น 0ํ 0์ด
lcd.write('1');
lcd.setCursor(5, 0); // ์ปค์ ์์น 5ํ 0์ด
lcd.write('2');
lcd.setCursor(0, 1); // ์ปค์ ์์น 0ํ 1์ด
lcd.write('3');
lcd.setCursor(5, 1); // ์ปค์ ์์น 5ํ 1์ด
lcd.write('4');
}
void loop(){
}
[ (3) ํ ์คํธ LCD ๊ธฐ๋ณธ ์ถ๋ ฅ ์์ ]
// C++ code
// ๋์ ์์ฑ์ ํตํด ๋๋ค ๋๋ฌธ์ ๋๋ค ์์น ์ถ๋ ฅ
// ๋์๊ฐ 0์ผ ๊ฒฝ์ฐ ๊ณต๋ฐฑ๋ฌธ์ ์ถ๋ ฅ์ผ๋ก ๋์ฒด
#include <LiquidCrystal.h>
// ํ ๋ฒํธ (RS, E, DB4, DB5, DB6, DB7)
LiquidCrystal lcd(13, 12, 7, 6, 5, 4); // LCD ์ฐ๊ฒฐ
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2); // LCD ์ด๊ธฐํ
lcd.clear(); // LCD ๋์คํ๋ ์ด ์ด๊ธฐํ
// ์ธ๋ถ ํ๋ก๊ฐ ์ฐ๊ฒฐ๋์ง ์์ ์๋ ๋ก๊ทธ ํ์ผ๋ก๋ถํฐ ๋ฌด์์ ๊ฐ ์
๋ ฅ๋ฐ์ ์ฌ์ฉ
randomSeed(analogRead(A5)); // ๋์ ์์ฑ ์ด๊ธฐํ
}
void loop(){
int row = random(0, 2); // ์ปค์์ ํ ๋์(0-2) ์์ฑ
int col = random(0, 17); // ์ปค์์ ์ด ๋์(0-17) ์์ฑ
char ch = random(0, 27); // ์ถ๋ ฅ ๋ฌธ์ ๋์(์์คํค ์ฝ๋ 0-27 ํด๋น) ์์ฑ
if(ch==0) // ch๊ฐ์ด 0์ผ ๊ฒฝ์ฐ ๊ณต๋ฐฑ ์ถ๋ ฅ
ch = ' ';
else
ch = ch + 'A'-1; // ๋์ ๊ฐ์ ์์คํค์ฝ๋ ๋๋ฌธ์๋ก ๋ณํ
lcd.setCursor(col, row);
lcd.write(ch);
Serial.println(String("(") + row + ", " + col + ")" + ch);
delay(200);
}
[ (4) ํ ์คํธ LCD ๊ธฐ๋ณธ ์ถ๋ ฅ ์์ ]
// C++ code
// ์ฌ์ฉ์ ์ ์ ๋ฌธ์ ์ ์ ๋ฐ ๋์คํ๋ ์ด ์ถ๋ ฅ
#include <LiquidCrystal.h>
// ํ ๋ฒํธ (RS, E, DB4, DB5, DB6, DB7)
LiquidCrystal lcd(13, 12, 7, 6, 5, 4); // LCD ๊ฐ์ฒด ์์ฑ
// ์ฌ์ฉ์ ์ ์ ๋ฌธ์ ๋ฐ์ดํฐ(๋นํธ ์ฌ์ฉ)
byte user1[8] = {
B00000, B10001, B00000, B00000, B10001, B01110, B00000, B00000
};
byte user2[8] = {
B00000, B10001, B01010, B10001, B00000, B10001, B01110, B00000
};
void setup()
{
Serial.begin(9600);
lcd.createChar(1, user1); // ์ฌ์ฉ์ ์ ์ ๋ฌธ์1 ์์ฑ
lcd.createChar(2, user2); // ์ฌ์ฉ์ ์ ์ ๋ฌธ์2 ์์ฑ
lcd.begin(16, 2);
lcd.clear();
lcd.write(byte(1));
lcd.setCursor(6, 0);
lcd.write(byte(2));
}
void loop(){
}
ใ ํ ์คํธ LCD ์ฐ๊ฒฐ ํ๋ก (I2C) ใ
[ LiquidCrystal_I2C ๋ผ์ด๋ธ๋ฌ๋ฆฌ ]
- I2C ํต์ ๋ชจ๋ ํ ์คํธ LCD ์ฌ์ฉ์ ์ด์ฉ
- ์๋์ด๋ ธ IDE ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ LiquidCrystal_I2C ์ฌ์ฉ
↓๊ณต์ ์ค์น ๋งํฌ ↓
https://github.com/johnrickman/LiquidCrystal_I2C
GitHub - johnrickman/LiquidCrystal_I2C: LiquidCrystal Arduino library for the DFRobot I2C LCD displays
LiquidCrystal Arduino library for the DFRobot I2C LCD displays - GitHub - johnrickman/LiquidCrystal_I2C: LiquidCrystal Arduino library for the DFRobot I2C LCD displays
github.com
- ๋งํฌ ์ ์ ํ 'Code -> Download ZIP' ํด๋ฆญ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ถ ํ์ผ ๋ค์ด
- LiquidCrystal_I2C.zip ํ์ผ ์์ถ ํด์ ํ ํด๋๋ฅผ
- '๋ด PC-> IDE ์ค์น ๋์คํฌ -> Program Files(x86) -> Arduino -> libraries'์ ์ ์ฅ
- ์๋์ด๋ ธ IDE์์ '์ค์ผ์น -> ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌํจํ๊ธฐ -> LiquidCrystal_I2C' ์ ํํ์ฌ ํค๋ํ์ผ ์ถ๊ฐ
// C++ code
// ํ
์คํธ LCD(I2C ํต์ ๋ชจ๋) ์ฃผ์ ์ค์บ ํ๊ธฐ
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
void setup(){
Wire.begin();
Serial.begin(9600);
while(!Serial);
Serial.println("\n<< I2C Scanner >>");
}
void loop(){
byte error, address;
int nDevices;
nDevices = 0;
for(address = 1; address<127; address++){
Wire.beginTransmission(address);
error = Wire.endTransmission();
if(error == 0){
Serial.print("I2C device address : 0x");
if(address<16)
Serial.print("0");
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
}
else if(error == 4){
Serial.print("Unknown error at address 0x");
if(address<16)
Serial.print("0");
Serial.println(address, HEX);
}
}
if(nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(3000);
}
[ ํ ์คํธ LCD ๊ธฐ๋ณธ ์ถ๋ ฅ ์์ [I2C ํต์ ] ]
// C++ code
// ํ
์คํธ LCD ๊ธฐ๋ณธ ์ถ๋ ฅ ์์ [I2C ํต์ ๋ชจ๋]
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C ํต์ lcd ๊ฐ์ฒด ์์ฑ
void setup(){
Serial.begin(9600);
// lcd.init(); // lcd ์ด๊ธฐํ
lcd.begin(); // lcd ์ด๊ธฐํ
lcd.backlight(); // lcd backlight Turn On
lcd.print(" -Coding Gym- ");
delay(1000);
}
void loop(){
}