char Mensaje[17]; //Aqui se guarda el mensaje, tiene 16 lugares + 1 caracter nulo necesario para la string, 16 lugares para el LCD 2x16
char BotonActual; // Mantiene el valor del boton que se esta procesando
char BotonAnterior; // Mantiene el valor del boton que se leyo antes, evita que entre cuando se mantiene presionado
unsigned char IndiceMensaje=0; // Es el indice para saber que posicion de letra estoy modificando
void Teclado(void)
{
while(1) //Loop infinito, siempre debe existir un solo loop infinito
{
BotonActual=kbd_getc(); //Tomo valor de boton
if((BotonActual != 0) && (BotonAnterior != BotonActual)) //Si hay algo presionado y ademas no se mantuvo presionado el boton. Es decir se debe presionar otra cosa o soltar
{
switch(BotonActual) // Actuo segun el boton presionado
{
case '2':
if(Mensaje[IndiceMensaje] >= 'A' && Mensaje[IndiceMensaje] < 'C') // Caso que sea 'A' o 'B', asi pasa a 'B' o 'C'
{
Mensaje[IndiceMensaje]++;
}
else if(Mensaje[IndiceMensaje] == 'C')
{
Mensaje[indiceMensaje] = '2'; // Si era una C, entonces pasa al 1
}
else
{
Mensaje[IndiceMensaje] = 'A'; // Caso que sea cualquier otro valor, ejemplo que se presiono antes un 4 y luego el 1, o en caso que este vacio el array, pone la primer letra del boton que es 'A'
}
break;
case '#':
// Tecla de Borrar, Podria haber puesto un ' ' o un '\0', esto depende de luego que necesitas hacer, recorda que para C una string termina con un '\0'
if(IndiceMensaje!=0) // Me aseguro que no este en el comienzo, no puedo ir para atras
{
Mensaje[IndiceMensaje] = '\0'; // Caracter nulo
--IndiceMensaje; // Voy al valor anterior
}
break;
case '0':
// Espacio, escribe el espacio y avanza un lugar, como si hubieras presionado el * tambien, si no queres esto, agrega un break luego de poner el espacio
Mensaje[IndiceMensaje] = ' ';
case '*':
//Insertar letra, es decir avanza el puntero, y unicamente lo hace para cuando es menor de 16, 16 seria lo maximo que deberia llegar, para volver usar el borrar
if(IndiceMensaje<16) { IndiceMensaje++; }
break;
}
lcd_gotoxy(0,0); // Finalmente escribo en el LCD todo el mensaje, no se si es correcto, no uso CCS
printf(lcd_putc
,"%s",Mensaje
); }
BotonAnterior = BotonActual; // Actualizo BotonAnterior, con el ultimo boton leido, asi de esa forma no acepta mientras se mantiene presionado.
}
}