13.2 Crystal Display 1602A
Last updated
Last updated
int DI = 12;
int RW = 11;
int DB[] = {3, 4, 5, 6, 7, 8, 9, 10};//Use an array to define all needed pins
int Enable = 2;
void LcdCommandWrite(int value) {
// define for all pins
int i = 0;
for (i=DB[0]; i <= DI; i++) //assign all data bus
{
digitalWrite(i,value & 01); // 1602 Crystal Display sequence: D7->D0, instead of D0->D7, this is used to revert the signal sequence.
value >>= 1;
}
digitalWrite(Enable,LOW);
delayMicroseconds(1);
digitalWrite(Enable,HIGH);
delayMicroseconds(1); // delay 1ms
digitalWrite(Enable,LOW);
delayMicroseconds(1); // delay 1ms
}
void LcdDataWrite(int value) {
// define for all pins
int i = 0;
digitalWrite(DI, HIGH);
digitalWrite(RW, LOW);
for (i=DB[0]; i <= DB[7]; i++) {
digitalWrite(i,value & 01);
value >>= 1;
}
digitalWrite(Enable,LOW);
delayMicroseconds(1);
digitalWrite(Enable,HIGH);
delayMicroseconds(1);
digitalWrite(Enable,LOW);
delayMicroseconds(1); // Deplay 1ms
}
void setup (void) {
int i = 0;
for (i=Enable; i <= DI; i++) {
pinMode(i,OUTPUT);
}
delay(100);
// Intialize LCD after a short-term detaly
// particularly for LCD control
LcdCommandWrite(0x38); // Setup 8-bit interface, 2-line display, 5x7 character size
delay(64);
LcdCommandWrite(0x38); // Setup 8-bit interface, 2-line display, 5x7 character size
delay(50);
LcdCommandWrite(0x38); // Setup 8-bit interface, 2-line display, 5x7 character size
delay(20);
LcdCommandWrite(0x06); // Setup input
// Automatic Increasement, no shift
delay(20);
LcdCommandWrite(0x0E); // Setup display
// Turn on screen, display cursor, no flashing
delay(20);
LcdCommandWrite(0x01); // Clear up screen, cursor's position -> 0
delay(100);
LcdCommandWrite(0x80); // Setup display
// Turn on screen, display cursor, no flashing
delay(20);
}
void loop (void) {
LcdCommandWrite(0x01); // Clear up screen, cursor's position -> 0
delay(10);
LcdCommandWrite(0x80+3);
delay(10);
// Write in the Welcome info
LcdDataWrite('W');
LcdDataWrite('e');
LcdDataWrite('l');
LcdDataWrite('c');
LcdDataWrite('o');
LcdDataWrite('m');
LcdDataWrite('e');
LcdDataWrite(' ');
LcdDataWrite('t');
LcdDataWrite('o');
delay(10);
LcdCommandWrite(0xc0+1); // Set the cursor's location: 2nd line, 2nd position
delay(10);
LcdDataWrite('l');
LcdDataWrite('o');
LcdDataWrite('n');
LcdDataWrite('g');
LcdDataWrite('e');
LcdDataWrite('r');
LcdDataWrite('-');
LcdDataWrite('v');
LcdDataWrite('i');
LcdDataWrite('s');
LcdDataWrite('i');
LcdDataWrite('o');
LcdDataWrite('n');
delay(5000);
LcdCommandWrite(0x01); // Clear up screen, cursor's position -> 0
delay(10);
LcdDataWrite('I');
LcdDataWrite(' ');
LcdDataWrite('a');
LcdDataWrite('m');
LcdDataWrite(' ');
LcdDataWrite('d');
LcdDataWrite('r');
LcdDataWrite('.');
LcdDataWrite('p');
LcdDataWrite('e');
LcdDataWrite('i');
delay(3000);
LcdCommandWrite(0x02); // Set the mode to: "New characters are used to replace old characters; No change where there is NO characters."
delay(10);
LcdCommandWrite(0x80+5); // Set the cursor's location: 1st line, 6th position
delay(10);
LcdDataWrite('t');
LcdDataWrite('h');
LcdDataWrite('e');
LcdDataWrite(' ');
LcdDataWrite('a');
LcdDataWrite('d');
LcdDataWrite('m');
LcdDataWrite('i');
LcdDataWrite('n');
delay(5000);
}