LCD (I2C)

Library:    LiquidCrystal_I2C.zip


I2C :Inter Integrated Circuit
LCD: Liquid Crystal Display

HD44780U.pdf(pdf)
Character Codes A00(pdf)
Character Codes A02(pdf)


short : L

open: H

default address:0x27

(不同公司產品Address可能不同)

0 0 1 0 0 A2 A1 A0


0 0 1 1 1 A2 A1 A0


 

SDA-->A4

SCL-->A5

 


svg


//1.

//先以此程式確定 Address

//Address Scanner

#include <Wire.h>

void setup()
{
Wire.begin();

Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}

void loop()
{
byte error, address;
int nDevices;

Serial.println("Scanning...");

nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();

if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");

nDevices++;
}
else if (error==4)
{
Serial.print("Unknow 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(5000); // wait 5 seconds for next scan
}

 

//2.a

//0x3F

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
   lcd.init();
   lcd.backlight();
 }

void loop()
{
}

//2.b
//0x3F

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
   lcd.init();
   lcd.noBacklight();//(預設)
 }

void loop()
{
}


//3.a
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.cursor();
  lcd.setCursor(0,0);
  lcd.print("0123456789");
  }
void loop()
{
  }
//3.b
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.noCursor();//預設
  lcd.setCursor(0,0);
  lcd.print("0123456789");
  }
void loop()
{
  }




//4.a

//0x3F

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
   lcd.init();
   lcd.backlight();
   lcd.setCursor(0,0);
   lcd.print("Hello, world!");
   lcd.setCursor(0,1);
   lcd.print("JAMES");
   lcd.noBlink();//游標位置不閃爍 (預設)

}

void loop()
{
}

//4.b
//0x3F


#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
   lcd.init();
   lcd.backlight();
   lcd.setCursor(0,0);
   lcd.print("Hello, world!");
   lcd.setCursor(0,1);
   lcd.print("JAMES");
   lcd.blink();//游標位置閃爍

}

void loop()
{
}

 

//5.a

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("0123");
  lcd.setCursor(0,0);
  lcd.print("AB");
 
 }
void loop()
{
  }
//5.b

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("0123");
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("AB");
 
 }
void loop()
{
  }




//6

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
   lcd.init();
   lcd.backlight();
   lcd.setCursor(0,0);
   lcd.print("Hello, world!");
   lcd.setCursor(0,1);
   lcd.print("JAMES");
   lcd.blink();
}

void loop()
{
   lcd.display();//顯示
   delay(1000);
   lcd.noDisplay();//不顯示
   delay(1000);
}


//7

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  //lcd.leftToRight();   //預設
  lcd.print("0123456789");
  lcd.setCursor(15,1);
  lcd.rightToLeft();
  lcd.print("0123456789");
  }
void loop()
{
}











//8

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.blink();
  lcd.setCursor(0,0);
  lcd.print("0123456789ABCDEF01");
  lcd.setCursor(0,1);
  lcd.print("0123456789ABCDEF01");
 }
void loop()
{}

//9

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.blink();
  lcd.setCursor(0,0);
  lcd.print("0123456789ABCDEF01");
  lcd.setCursor(0,1);
  lcd.print("0123456789ABCDEF01");
  lcd.scrollDisplayLeft();//記憶體往左移1位
 }
void loop()
{}


//10

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.blink();
  lcd.setCursor(0,0);
  lcd.print("0123456789ABCDEF01");
  lcd.setCursor(0,1);
  lcd.print("0123456789ABCDEF01");
 
 }
void loop()
{
lcd.scrollDisplayLeft();//記憶體往左移1位
delay(1000);
lcd.scrollDisplayRight();//記憶體往右移1位
delay(1000);

}


//11

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("0123456789");
  lcd.setCursor(39,0);
  lcd.print("A");
  delay(1000);
  lcd.scrollDisplayRight();//記憶體往右移1位
  delay(1000);
}
void loop()
{
}

//12

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("0123456789");
  lcd.scrollDisplayRight();
  lcd.scrollDisplayRight();
  delay(3000);
  lcd.blink();
  lcd.home();
}
void loop()
{
}




//13

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.blink();
  lcd.setCursor(15,0);
  lcd.autoscroll(); //記憶體自動左捲
  lcd.print("0");
 }
void loop()
{


//14

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.blink();
  lcd.noAutoscroll();//記憶體不自動左捲(預設)
  lcd.setCursor(0,0);
  lcd.print("0123456789");
  delay(3000);
  lcd.setCursor(15,1);
  lcd.autoscroll(); //記憶體自動左捲
  lcd.print("0");
 }
void loop()
{
}


//15

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("0123456789");
  delay(3000);
  lcd.setCursor(16,1);
  lcd.autoscroll();
  lcd.print("0");
  delay(1000);
  lcd.print("1");
  delay(3000);
  lcd.noAutoscroll();
  lcd.setCursor(2,1);
  lcd.print("2");
  delay(1000);
  lcd.print("3");
}
void loop()
{
}



//16

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(40,0);//等於(0,1)
  lcd.print("AB");
  }
void loop()
{
}


//17

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(80,0);//並不等於(0,0)
  lcd.print("AB");
  }
void loop()
{
}



// 陣列

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
char* myNotes[  ]={"Do ", "Re ", "Mi ","Fa ", "So "};
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  for(int i=0;i<5;i++){
  lcd.print(myNotes[i]);
  delay(1000);
  }
  }
void loop()
{
  }


//Serial Monitor -->LCD
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.cursor();
  lcd.setCursor(0,0);
 
  }
void loop()
{
if (Serial.available()) {
    // 等待一小段時間,確認資料都接收下來了
    delay(100);
    // 清除舊訊息
    lcd.clear();
    // 讀取新訊息
    while (Serial.available() > 0) {
      // 將訊息顯示在 LCD 上
      lcd.write(Serial.read());
    }
   }
}


//AnalogRead -->LCD
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
int val;
void setup()
{
 
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.cursor();
  lcd.setCursor(0,0);
 
  }
void loop()
{
val=analogRead(A1);
lcd.clear();
lcd.print(val);
delay(100);
}














自訂自型(只能訂8個)




//18

/*

createChar()

Create a custom character (gylph) for use on the LCD. Up to eight characters of 5x8 pixels are supported (numbered 0 to 7).

*/


#include "LiquidCrystal_I2C.h"

LiquidCrystal_I2C lcd(0x3F,16,2);
byte charYear[8] = {
0x10,
0x1F,
0x02,
0x0F,
0x0A,
0x1F,
0x02,
0x00
};

void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.createChar(0, charYear);
lcd.home();
lcd.write(0);

}

void loop()
{

}

 





//19


#include "LiquidCrystal_I2C.h"

LiquidCrystal_I2C lcd(0x3F,16,2);
byte charYear[8] = {
0x10,
0x1F,
0x02,
0x0F,
0x0A,
0x1F,
0x02,
0x00
};

byte heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0,0x0};
void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.createChar(0, charYear);
lcd.createChar(1, heart);
lcd.home();
lcd.print("Hello world...");


lcd.setCursor(0,1);//Change to 2nd row
lcd.write(0);
lcd.write(1);

}

void loop()
{
lcd.scrollDisplayRight();
delay(500);
lcd.scrollDisplayLeft();
delay(500);
}


//20


#include "LiquidCrystal_I2C.h"

byte bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4};
byte note[8] = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0};
byte clock1[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0};
byte heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0};
byte duck[8] = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0};
byte check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0};
byte cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0};
byte retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4};

LiquidCrystal_I2C lcd(0x3F,16,2);

void setup()
{
lcd.init();
lcd.backlight();

lcd.createChar(0, bell);
lcd.createChar(1, note);
lcd.createChar(2, clock1);
lcd.createChar(3, heart);
lcd.createChar(4, duck);
lcd.createChar(5, check);
lcd.createChar(6, cross);
lcd.createChar(7, retarrow);
lcd.home();
for (int j=0; j<8; j++) {
   lcd.write(j);
}
}
void loop(){}

 






//21
//  A     0x41      65


#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.write(65);
 //lcd.write(0x41);
//lcd.print("A");
}

void loop()
{
 
  }


//22
// 打開Serial monitor  選擇沒有行結尾    傳送 A
//  A     0x41      65

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
  lcd.init();
  lcd.backlight();
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available()) {
    lcd.write(Serial.read());  //A
   // lcd.print(Serial.read());    //65
  //lcd.print(Serial.read(),HEX);  //41
  }
}




LCD Functions