const int RS = 23, EN = 22, D4 = 19, D5 = 18, D6 = 5, D7 = 4;
// Fungsi untuk set binner yang dikirim ke port data
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 setting di awal
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);
}
void lcd_setCursor(char baris, char kolom){
char x,y;
if(baris == 0){
x = 0x08;
y = kolom;
}
else{
x = 0x0C;
y = kolom;
}
lcd_cmd(x);
lcd_cmd(y);
}
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);
}
void writeString(const char* str){
while (*str) {
writeChar(*str);
str++;
}
}
void setup() {
// put your setup code here, to run once:
lcd_init();
lcd_disableCursor();
lcd_setCursor(1,12);
writeChar('F');
lcd_setCursor(0,3);
writeString("ELEKTRONIKA");
lcd_setCursor(1,4);
writeString("KELAS : ");
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}
// Tugas:
// Kembangkan fungsi writeChar dan writeString sehingga memudahkan untuk menampilkan tulisan di LCD