//lcd_write_str(2, 3, "SENAI");
void lcd_write_str(char linha, char coluna, char * texto) {
switch(linha){
case 1: lcd_write_byte(0x80-1+coluna, 0); break;
case 2: lcd_write_byte(0xC0-1+coluna, 0); break;
}
for(int i = 0; texto[i] != '\0'; i++) { //caractere NULL ('\0')
lcd_write_byte(texto[i], 1); //Escreve cada byte contido em texto[], rs=1
}
}
void lcd_write_byte(unsigned char chr, unsigned char rs) { //
digitalWrite(9, rs); //rs = 0 -> comando (clear lcd); rs = 1 -> dado ('A');
digitalWrite(4, (((chr>>4)&0B00000001)==0B00000001)); //TRUE or FALSE
digitalWrite(5, (((chr>>4)&0B00000010)==0B00000010));
digitalWrite(6, (((chr>>4)&0B00000100)==0B00000100));
digitalWrite(7, (((chr>>4)&0B00001000)==0B00001000));
enable();
digitalWrite(4, (((chr)&0B00000001)==0B00000001)); //TRUE or FALSE
digitalWrite(5, (((chr)&0B00000010)==0B00000010));
digitalWrite(6, (((chr)&0B00000100)==0B00000100));
digitalWrite(7, (((chr)&0B00001000)==0B00001000));
enable();
}
void enable(void){
digitalWrite(8, HIGH);
delayMicroseconds(10); //mínimo > 1.2us
digitalWrite(8, LOW);
delayMicroseconds(10); //mínimo > 1.2us
}
void lcd_config(void) {
char pino[] = {4, 5, 6, 7, 8, 9};
for(int i = 0; i < sizeof(pino); i++) {
pinMode(pino[i], OUTPUT); //Configura cada pino da matriz como saída;
digitalWrite(pino[i], LOW); //Garante que cada pino inicie com zero;
}
delay(100); //mínimo > 40 ms
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
enable(); //clock
delayMicroseconds(100); //mínimo > 39us
digitalWrite(4, LOW);
enable();
delayMicroseconds(100); //mínimo > 39us
digitalWrite(5, LOW);
enable();
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
enable();
delayMicroseconds(100); //mínimo > 37us
digitalWrite(7, LOW);
digitalWrite(6, LOW);
enable();
digitalWrite(4, HIGH);
enable();
delay(2); //mínimo > 1.53ms
}
void setup() {
lcd_config();
lcd_write_byte('A', 1); //Escreve 'A' no LCD, RS=1
lcd_write_str(2, 3, "SENAI");
}
void loop() {
// put your main code here, to run repeatedly:
}