# pic 16f84 , pantalla LCD y teclado 4 x 4



## malu0212 (May 22, 2007)

Hola!!! 
Soy nueva en esto de los foros, pero tengo unas cuantas preguntillas y necesito de su ayuda Por Favor!!  Tengo q hacer un programa q se comporte como el teclado de los celulares, es decir, cada numero del teclado tiene tres letras, si por ejemplo se quiero escribir la letra 'c', entocnes tengo q oprimir el numero 1 tres veces y si me demoro un determinado tiempo, el cursor debe avanzar para escribir la otra letra, y la idea es escribir las palabras y mostrarlas en la pantalla.

Quisiera saber si alguno sabe cómo se debe hacer 

GRACIAS de antemano  

MAGDA


----------



## jjfonsecaz (May 24, 2007)

Hola Magda.

Pues esta un poco largo lo que tienes que hacer pero es pura talacha en realidad, aunque te recomendaria que cambiaras de pic a menos que quieras usar algunos circuitos adicionales.

Te recomiendo el PIC16F877 el cual tiene un puerto de interrupcion al cambio(puertoB del pin 4 al 7) el cual es ideal para manejar el teclado de 4*4 y cuenta con 33 pines de entrada salida para que puedas usar un LCD completamente con todos sus pines.

Claro que si es muy forzoso puedes usar el 16F84 pero tendras que conseguir un circuito manejador de teclado para hacerlo mas facil y un buffer triestado para controlar ambos con un mismo puerto.

Saludos.


----------



## malu0212 (May 25, 2007)

Hola jjfonsecaz...

Te agradezco la recomendación del cambio de PIC, pero debo usar el PIC16F84, y bueno... pues los circuitos adicionales ya sé cómo hacerlos...

Aunque aquello del buffer triestado para controlar ambos con un mismo puerto, me llama la atención, pero no sé manejarlo...me podrías asesorar un poco al respecto? porfa

Gracias!


----------



## Francisco Valdez (May 25, 2007)

Puedes utilzar el puerto B, como salida para los 8 bits del LCD, PTOA bit 0, 1 y 2 para la selección de instrucciones. El teclado como son entradas podrás meterlas por el mismo Puerto B. 
El bit 3 y 4 del PTO A los puedes usar para seleccionar los buffer que te comenta fonseca.

Cuando despliegas al LCD, pones en 1 el buffer que va a las salidas del LCD, configuras el puerto B como salidas y manadas información...

Cuando leas teclado, configuras PTO B como entrada, pones en 1 el otro buffer y lees dato...

Saludos


----------



## t_a_x_2 (May 26, 2007)

yo tambien teno el mismo proyecto, hola lu, no el problema en si es como lograr q el pic lea un retardo para q el pic detecte si se ha presionado mas de una vez el boton, lo otro es  corrimiento del cursor


----------



## Francisco Valdez (May 28, 2007)

A ver si les entendí bien cual es el problema, hazme ver si me explico con claridad,

de la rutina principal mandas llamar una subrutina de tiempo definida 250 microsegundos, usa un contador de "tiempo" en la rutina principal para contar cuantas veces se ha realizado la subrutina de tiempo, y defines las veces para cambio de letra, espacio, 

O bien, el cambio de letra haz un ciclo para esperar a que se haya soltado el botón

        btfsc pto,2 
        goto letra

letra btfsc pto,2         ;aqui espera hasta que se suelte el boton para continuar el programa
        goto $-1

Saludos


----------



## jjfonsecaz (May 30, 2007)

Hola amigos

La idea que les da el compañero Francisco es buena, pero tambien podrian hacer lo siguiente, configuran el timer del pic a no se 1 segundo(y digo no se por que con el 16F84 no se cuanto sea lo maximo que lo puedan configurar), en fin cuando llegue el pulso de la tecla inicializan el timer, entonces aparece la letra, ahora aqui viene lo interesante jejeje, si llega otro teclazo antes de que se termine el tiempo del timer, cambian la letra, resetean el timer y punto. Ahora bien si no detecta una tecla antes de que termine el tiempo pues simplemente avanza el cursor.

y tambien como realizar el avance del cursor, pues yo haria lo siguiente: imprimiria la tecla que corresponde y regresaria a la direccion anterior de nuevo, de esta forma es como estar a la espera de que ratifique que es el dato que quiero, en el caso que se termine el tiempo de espera simplemente vuelvo a imprimir el dato que ya habia puesto previamente.

saludos


----------

