//PANTALLA LCD 8 BITS FUNCIONANDO
#define EN 18
#define RS 5
//D7,D6,D5,D4, D3,D2,D1 en 26 a 12,D0, EN,RS
byte Pines[] = {23,22,21,19, 27,14,12,13, 18,5};
void setup() {
for (byte i = 0; i < 10; i++) {
pinMode(Pines[i], OUTPUT);
}
digitalWrite(EN, LOW);
configuracion();
}
void loop() {
Limpiar();
Cursor(0x80);
Mensaje("Inicio de");
Cursor(0xc0);
Mensaje("Prueba en");
delay(1000);
Limpiar();
Cursor(0x80);
Mensaje("Display");
Cursor(0xc0);
Mensaje("LCD");
delay(1000);
}
void configuracion() {
char tiempos[] = {25, 5, 5, 5, 1, 1, 1, 1, 1, 1};
char conf[] = {0x30, 0x30, 0x30, 0x20, 0x30, 0x80, 0x00, 0x60, 0x00, 0xc0};
digitalWrite(RS, LOW);
for (byte i = 0; i <= 9; i++) { //tenia limite 7
delay(tiempos[i]);
digitalWrite(EN, HIGH);
salidas(conf[i]);
digitalWrite(EN, LOW);
}
}
void Cursor(int N) {
digitalWrite(RS, LOW);
//delay(10);
digitalWrite(EN, HIGH);
salidas(N);
digitalWrite(EN, LOW);
/* digitalWrite(EN, HIGH);
salidas(M);
digitalWrite(EN, LOW);*/
}
void SendData(char D) {
digitalWrite(RS, HIGH);
digitalWrite(EN, HIGH); //Flanco positivo
salidas(D);
digitalWrite(EN, LOW); //Flanco negativo
delay(1);
}
void Limpiar() {
digitalWrite(RS, LOW);
delay(1);
/*digitalWrite(EN, HIGH);
salidas(0x0);
digitalWrite(EN, LOW);
delay(1);*/
digitalWrite(EN, HIGH);
salidas(0x01);
digitalWrite(EN, LOW);
delay(2);
}
void Mensaje(char M[]) {
char D;
delay(10);
digitalWrite(RS, HIGH);
for (byte i = 0; M[i]!= '\0'; i++) {
D = M[i];
SendData(D);
/*D = M[i] & 0B00001111;
SendData(D);*/
}
}
void salidas(char N) {
char m, j;
m = 7;
for (byte k = 0; k <= 7; k++) {
j = pow(2, m);
digitalWrite(Pines[k], (N & j));
m--;
}
}