#define rs 23
#define en 22
#define d4 19
#define d5 18
#define d6 5
#define d7 17
// Fungsi untuk mengatur data 4-bit yang dikirim ke port data LCD
void lcd_port(char a) {
digitalWrite(d4, LOW);
digitalWrite(d5, LOW);
digitalWrite(d6, LOW);
digitalWrite(d7, LOW);
if (a & 0x01) digitalWrite(d4, HIGH);
if (a & 0x02) digitalWrite(d5, HIGH);
if (a & 0b0100) digitalWrite(d6, HIGH);
if (a & 0b1000) digitalWrite(d7, HIGH);
}
void lcd_disableCursor() {
lcd_cmd(0b0000);
lcd_cmd(0b1100); // Display ON, cursor OFF, blinking OFF
}
// Fungsi pengiriman perintah ke LCD
void lcd_cmd(char b) {
digitalWrite(rs, LOW);
lcd_port(b);
delayMicroseconds(40);
digitalWrite(en, HIGH);
delayMicroseconds(40);
digitalWrite(en, LOW);
}
// Fungsi membersihkan tampilan
void lcd_clear() {
lcd_cmd(0x00);
lcd_cmd(0x01);
}
// Fungsi untuk inisialisasi LCD
void lcd_init() {
pinMode(rs, OUTPUT);
pinMode(en, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(d5, OUTPUT);
pinMode(d6, OUTPUT);
pinMode(d7, OUTPUT);
lcd_cmd(0b0010);
lcd_cmd(0b0010);
lcd_cmd(0b1000);
lcd_cmd(0b0000);
lcd_cmd(0b1110);
lcd_cmd(0b0000);
lcd_cmd(0b0110);
}
// Fungsi untuk mengatur posisi kursor di LCD
void lcd_setCursor(char baris, char kolom) {
char x, y;
if (baris == 0) {
x = 0x80 + kolom; // Baris pertama
} else {
x = 0xC0 + kolom; // Baris kedua
}
lcd_cmd(x >> 4); // Kirim bagian 4-bit tinggi
lcd_cmd(x & 0x0F); // Kirim bagian 4-bit rendah
}
// Fungsi menulis satu karakter ke LCD
void writeChar(char c) {
digitalWrite(rs, HIGH);
lcd_port(c >> 4);
delayMicroseconds(40);
digitalWrite(en, HIGH);
delayMicroseconds(40);
digitalWrite(en, LOW);
lcd_port(c & 0x0F);
delayMicroseconds(40);
digitalWrite(en, HIGH);
delayMicroseconds(40);
digitalWrite(en, LOW);
}
// Fungsi menulis string ke LCD
void writeString(const char* str) {
while (*str) {
writeChar(*str);
str++;
}
}
// Fungsi untuk membuat efek teks berjalan
void lcd_scrollText(const char* text, int delayTime) {
lcd_clear();
int length = strlen(text);
for (int i = 0; i < length - 15; i++) {
lcd_setCursor(0, 0);
for (int j = 0; j < 16 && (i + j) < length; j++) {
writeChar(text[i + j]);
}
delay(delayTime);
lcd_clear();
}
}
// Fungsi untuk membuat efek teks berkedip
void lcd_blinkText(const char* text, int baris, int kolom, int delayTime, int blinkCount) {
for (int i = 0; i < blinkCount; i++) {
lcd_setCursor(baris, kolom);
writeString(text);
delay(delayTime);
lcd_setCursor(baris, kolom);
for (int j = 0; j < strlen(text); j++) writeChar(' ');
delay(delayTime);
}
}
void setup() {
lcd_init();
lcd_disableCursor();
lcd_setCursor(1, 11);
writeChar('R');
lcd_setCursor(0, 0);
writeString("Halo Aku Yapa!");
lcd_setCursor(1, 0);
writeString("Inisial : ");
// Contoh penggunaan scroll text
lcd_scrollText("Ini adalah contoh teks berjalan!", 300);
// Contoh penggunaan blink text
lcd_blinkText("Blink!", 1, 10, 500, 3);
}
void loop() {
// Tidak ada kode dalam loop
}