Teclado Matricial 4×4

June 13, 2007 at 7:02 pm | Posted in Ensamblador, HowTo, Rutinas | 51 Comments

Un teclado matricial es un simple arreglo de botones conectados en filas y colúmnas, de modo que se pueden leer varios botones con el mínimo número de pines requeridos. Un teclado matricial 4×4 solamente ocupa 4 lineas de un puerto para las filas y otras 4 lineas para las colúmnas, de este modo se pueden leer 16 teclas utilizando solamente 8 líneas de un microcontrolador. Si asumimos que todas las columnas y filas inicialmente están en alto (1 lógico), la pulsación de un botón se puede detectar al poner cada fila a en bajo (0 lógico) y checar cada columna en busca de un cero, si ninguna columna está en bajo entonces el 0 de las filas se recorre hacia la siguiente y así secuencialmente.

Un modo simple de detectar la tecla presionada es incrementar una variable con la cuenta de las teclas revisadas, de este modo al detectaruna pulsación el valor de la cuenta será el valor de la tecla presionada. Si al final no se presionó ninguna tecla la variable se pone a cero y la cuenta vuelve a comenzar. El puerto B del microcontrolador 16f628 (así como en el 16f877) viene preparado especialmente para el control de un teclado matricial 4×4. Para tener siempre un valor de 1 lógico en las colúmnas del teclado (parte alta del puerto B del pic) es necesario conectar resistencias de pull-up, sin embargo el puerto B cuenta con resistencias de pull-up integradas, de ese modo es posible trabajar con un teclado matricial sin necesidad de ningún componente externo.

Lea el artículo completo en el blog Circuitos electronicos.

51 Comments »

RSS feed for comments on this post. TrackBack URI

  1. interensantes temas

  2. Gracias por el comentario, si te interesa algún tema en especial y dilo y trataré de hacer un tutorial al respecto.

  3. Hola, muy bueno el tutorial que se viene desarrollando, me gustaría que siga con otros temas. porque veo que en algunos meses no hubo aportes y ahora lo último es junio
    Tengo en mente construir un reloj, me gustaría saber la lógica del organigrama por ej.:
    declarar pic
    etiquetas,
    salto del vector reset,
    cambiar de banco al 0
    cambiar de banco al 1
    programa
    al encender que me muestre todo cero(hh,mm)
    decirle que cuente 1 segundo
    decirle que cuente 60 segundos vaya sumando
    decirle que me muestre el nº 1 en minutos y siga sumando
    decirle que cuente 10 veces 60 segundos y vaya sumando los minutos
    que me muestre el nº en decenas de minutos
    que cuente 10 veces 60 segundos y lo multiplique por 6 y sume las unidades de hora
    que me muestre el número de las unidades de hora
    que cuente 10 veces 60 que lo multiplique por 60 y multiplique por 24 para las decenas de hora
    que me muestre las decenas de hora.
    bueno si esto es mas o menos así y si me podrían ayudar gracias y siga adelante muy bueno su aporte

  4. Muy bueno el ejemplo. Resulta que quice implementarlo en un 876A, para un teclado de 3×4,
    escribiendo en un display de lcd. Pero tengo un problema, siempre me devuelve “0”.

    Saludos

  5. Modificarlo para que funcione en un teclado 3×4 no debe ser muy complicado. Por ahora estoy algo ocupado (se nota porque no he actualizado la página) pero este fin de semana puedo ayudarte.

  6. […] matricial 4×3 con un pic 16F628A. Esta rutina es una adaptación de la rutina original del Teclado Matricial 4×4 hecha por petición popular (ok, un solo comentario, pero alguien lo pidió). La lógica del manejo […]

  7. Mamu ya he puesto una rutina para el manejo de un teclado matricial 4×3, igual que esta está hecha para un pic 16f628a pero adaptarla para un 16f876a no tiene mayor complicación. Checala

    Teclado Matricial 4×3

  8. podria a asesorarme como configuarar el lcd a 4 bit, conectado con el teclado matricial de 4 x 4 y que el lcd haga un recorrido de ventana

  9. homobre como se encuetra, espero que bien.
    la presente es para pedirle un coloboracion con el teclado matrisial de 4×4, de alguna manera, le agradeceria si tubiese algun tutorial, o el codigo completo en relidad es que el codigo que se encuentra el pag no lo emos podido hacer funcionar entonsses para ver si no colabora gracias .

  10. nestor, cual es el problema del código? ¿por qué no han podido hacerlo funcionar? ese código es el que yo siempre he utilizado, tal vez el problema este en la conexión del display de 7 segmentos ya que la conexión del display de la figura simplemente es de simulación, revisa la conexión (que será distinta si es de ánodo común o de cátodo común) pero te aseguro que este código funciona.

  11. Chingón, mai. Me salvates la vida.

  12. hola esta muy bueno tu blog yo apenas me ando iniciando en esto de los pics pues lo quiero hacer desde linux ( uso ubuntu desde hace unos meses) y ando viendo como instalar todos los programas requeridos en ubuntu (gnome), todavia no encuentro bien como hacerlo pero por lo pronto tengo una duda.

    Sobre el teclado matricial como hacer para que lo reconozca linux ? (algo asi como si fuera un teclado numerico externo de esos que vende en las tiendas de computacion) muchas gracias por tu blog. Saludos.

  13. Hola!! no saben como puedo construir una calculadora digital con un teclado matricial de 4×4, PIC 16f84, y un Lcd, que tipo de Lcd es compatible?

  14. excelente rutina, ahora me podrias decir como poder realizar la conexion del teclado y el pic a una computadora por medio del puerto serial, solo quiero que por la hyperterminal se observe el digito pulsado en el teclado, gracias.

  15. ALEJANDRO para lograr eso se debe utilizar el módulo USART del pic y alguna interfaz RS232 para conectarlo a la PC, tal vez después haga un tutorial sobre eso.

  16. hola si quiero mostrar el dato no es un solo display, sino en 4 displays y que el dato permanesca y que dato nuevo (tecla pulsada) reemplase dato anterior (dato en primer display). COmo lo hago ? estuve leyendo sobre multiplexacion de teclado y display pero no entiendo muy bn. Yo hice mi propio codigo de exploracion de teclado , EL teclado lo tengo al puerto B (RB0-RB3=in=columnas ) y RB4-RB7=out=filas

    Escaneo el teclado poniendo un 0 en las filas (nibble alto del puerto B) y la tecla presionada me devuelve el cero en la respectiva columna.

    en el display muestro del 0 al F usando en el codigo una tabla que maneja los segmentos del display. PEro ahora quiero visualizar 4 numeros en 4 Display (0000 – ffff) . Me podrian ayudar de como hago la multiplexacion o que otros metodos hay?

  17. Hola, para realizar la multiplexación puedes basarte en este ejemplo

    Cómo multiplexar una matriz de leds

  18. Hola a todos

    Si alguien me puede ayudar

    Necesito programa hex para una tarea de mi hijo y es la siguiente,

    Se necesita controlar un teclado de 4*3, que la primera tecla pulsada se visualice en el primer 7 segmentos, la segunda en el segundo 7 segmentos sin borrar la informacion del primer 7 segmentos y asi sucesivamente hasta llegar a seis teclas oprimidas. La idea es hacerlo en un 16f628 si se puede. La verdad soy novato en este tema y no se como ayudar a mi hijo con este tema excepto por este medio de ayuda.

    Les agradeceria la ayuda que me puedan dar

    Oscar

  19. exelente rutina..
    me pregunto si tienes una rutina identica para el manejo de teclado 4×3 pero que el lenguaje de programacion sea “C” estoy usando un pic18f4520. gracias..

  20. Oye tengo un problemas para implementar en un microcontrolador MC9S08QG8 un teclado de 4X4 en el compilador funciona a la perfeccion pero a la hora de probarlo fisicamente es como si no le introdujera ningun dato al micro te dejo el codigo para que lo veas
    mainLoop:
    ; Insert your code here
    LDA #$0F
    STA PTBDD
    STA PTBD
    ET1 STA SRS
    LDA PTBD
    AND #$F0
    CMP #$00
    BEQ ET1
    STA $0070
    LDA #$F0
    STA PTBDD
    STA PTBD
    LDA PTBD
    AND #$0F
    ADD $0070
    STA $0070 ;Guardar cordenada
    LDA #$00 ;ciclo antirebote
    STA $0082
    CIC5 LDA #$00
    STA $0081
    CIC4 INC $0081
    STA SRS ; feed the watchdog
    LDA $0081
    CMP #$F1
    BLO CIC4
    INC $0082
    LDA $0082
    CMP #$F3
    BLO CIC5
    ZZZ LDA PTBD
    CMP #$F0
    BNE ZZZ
    LDA #$00 ;ciclo antirrebote
    STA $0082
    CIC7 LDA #$00
    STA $0081
    CIC6 INC $0081
    STA SRS ; feed the watchdog
    LDA $0081
    CMP #$F1
    BLO CIC6
    INC $0082
    LDA $0082
    CMP #$F3
    BLO CIC7 ;No hacer nada hasta que suelte tecla

    feed_watchdog
    BRA mainLoop

  21. hola viejo nesecito ayuda alo referente teclado y pantalla lcd necito toda la inf que puedas enviarme “tengo una expo” y ademas tengo que montar este cto para q asi la expo sea completa
    mil gracias

  22. hermano me falto comentarte q un teclado de 4×4
    la progamacion

  23. hola, como andas?
    bueno leimos tu tutorial y la verdad nos sirve, pero no tenemos mucha idea, necesitamos hacer una calculadora con un microcontrolador at89s51 con un teclado matricial de 4 x 4 y mostrar los resultados en un lcd de 16 digitos x una linea, programa en assembler, si sabs algo me interesaria, sea lo q sea, muchas gracias

  24. Hola, te felicito por tu programa. Realmente está bien sintetizado y muchas gracias por haberlo subido al foro.

    Al realizar su carta ASM me surgieron un par de preguntas:

    En las lineas del código

    bsf STATUS ,C
    rlf PORTB ,f

    Que es lo que estás haciendo? De antemano muchas gracias

    Miguel

  25. hola,tengo un problema el teclado matricail de 4×4 no puedo simularlo en proteus en conjunto con el pic 16f877a y la pantalla lcd….. necesito ayuda

  26. hola a todos probè el progama del teclado matricial y me funcinò, estuvo bueno el tutorial, tengo q hacer un proyecto con teclado matricial, y con lcd con el pic 16f877a, y me falta la parte de la lcd, sòlo tengo un archivo de lcd en pdf, pero no tengo programas con lcd ni ejemplos, les agradecerìa si pueden subir un programa se lo agradezco

  27. a ver si me explico –

    Bsf status,c esta seteando “1” , el bit CARRY del registro ESTADO

    RLF PORTB,F DESPLAZA HACIA LA IZQUIERDA Y INTRODUCE EL BIT CARRY
    ANTERIORMENTE PUESTO EN SET, LO GUARDA EN EL MISMO
    REGISTRO

  28. necessito saber como puedo acceder a una casa por medio de una clave de acceso con un teclado….ayudame.-
    graciass-

  29. hola buenas, tengo que entregar con urgencia un proyecto, y necesitaba ayuda.

    PIC 18F4520 EN C

    USAMOS EL PUERTO B PARA EL LCD Y NECESITAMS USAR EL TECLADO MATRICIAL Y POR LO QUE E LEIDO TB TIENE COMO PREDETERMINADO EL PUERTO B, HABER SI ME PUEDE ECHAR ALGUIEN UNA MANO CON EL CODIGO O ALGUN ENLACE DE INTERES, QUE RECOMENDAIS CAMBIO EL LCD A OTRO PUERTO??? GRACIASSSSS

  30. Hola Disculpa, yo apenas voy empezando con esto de los sistemas digitales, estoy trabajando con el PIC16F84A (Caballito de batalla), deseo hacer una tarjeta basica con el PIC16F877…

    Queria saber si de igual forma el programa que redactas en este foro me sirve para utilizar un teclado matricial con el PIC a utilizar, y tambien queria saber como es que codificas las teclas para ke te salgan en el Display de siete segmentos.. SALUDOS gracias espero y em puedas ayudar..

  31. hola, yo necesito hacer una especie de teclado matricial, que se conecte a un pic, y luego pueda visualizar lo que corresponde cuando se presiona una tecla, enviar estos valores atraves de un emisor infrarojo, para que luego, unos 20 o 30 metros mas adelante un receptor coja la señal y poderle dar una aplicacion, como prender un bombillo o una lampara. se algo de electronica, muy poco de microcontroladores (esttudio mecatronica pero apenas estoy empezando)si me puedes ayudar te lo agradeceria enormemente, o si me puedes remitir a un enlace donde esto todo bien esplicadito, un tutorial o algo por el estilo donde pueda comenzar a aprender.

  32. muy bueno, estoy por hacerme un teclado para mis practicas y esto me ayudo mucho, gracias!!

    y para zurdo… usar infrarrojo para tal distancia, para empezar no se si sea posible tal vez si, pero con equipo de muy buena calidad (mas que nada el receptor) el problema con los receptores es que algunos tambien detectan luz visible, y al estar tan lejos no detecta el infrarrojo; mejor busca por via radiofrecuencia, esta si alcanza facilmente 30 metros, sobre informacion no tengo, pero ya vez que en el internet se encuentra de todo hoy en dia =P
    busca palabras como:
    “transmisor receptor FM”
    “circuito FM”
    “comunicacion radiofrecuencia”

  33. Le modifique algunas cosas pero me funciono quiesiera me podiras enviar algun tutorial a mi correo para entender PIC`S mas facil t agradeceria mucho.

  34. hola me gustaria si tendrias un ejemplo de un contador mediante con un pulsador q lea hasta 15 pero con el programa = como la ejemplo q hicistes espero su ayuda

  35. hola me podrias colaborar con la configuracion del teclado para el pic 16f887
    el progama que tengo funciona con el 877 pero con este no me funcina
    gracias por tu colaboracion

  36. buenas noches!
    cheque la explicacion del tema teclado 4×4 y te Felicito! me quedo bien claro de como funciona, dime como me puedo comunicar contigo para ver si me puedes ayudar con un proyecto que tengo en mente; muchas gracias!

  37. Hola a todos. Me llamo Jorge, y soy totalmente nuevo en esto de los PICs y controladores. Tengo una bronquilla. Resulta que quiero hacer un organo de varios teclados en un mueble. Para ello se pueden enchufar varios teclados con MIDI a una computadora, pero la bronca es que hay que comprar un chorro de triques y software, además de que obvio el asunto jamas dejara de parecer un mueble con dos teclados de plastico atornillados. Lo que yo quiero es hacer un mueble donde yo ponga unos teclados hechos con telcas de madera asi bien y todo y que las teclas controlen contactos que despues pueda yo ponen a un conversor MIDI. En general lo unico que quiero es un aparato que cuando yo toque envie por MIDI la señal del numero de nota que esta encendido, y para ello necesito un teclado matricial (obviamente no va a lucir como un teclado matricial, pero internamente asi estaría conectado) que sea posible presionar hasta 10 teclas a la vez y que el PIC mande una señal a una computadora de cuales teclas estan encendidas. En general la idea esta muy en pañales, el problema es que no tengo idea de donde empezar a buscar informacion pues no puedo buscar en interntet si no se siquiera como se llama a un teclado donde se pueden presionar varias teclas juntas. ¿Alguien podria darme un empujoncito? Se agradece lo que sea que ayude.

  38. Hola igualmente soy nueva en esto y me cuesta entenderlo, sobretodo combinarlo con la programacion, debo hacer un proyecto que emule un juguete o una actividad educativa la cual se basa en un teclado matricial, unos botones,una pantalla lcd y un microcontrolador (pic 16f876a el cual es el que tengo) y me permita seleccionar un pais el cual una vez de presionarlo, desplegando informacion referente a ese pais como: idioma, moneda…, el teclado podria omitirse y en su lugar usar otra cosa que sea mas sencilla de emplear. Se que debo programar tanto el micro como la pantalla lcd pero como transfiero el codigo al pic? y alguien tendra el codigo en alto nivel o bajo nivel de lo que necesito? escucho sugerencias y agradezco enormemente su ayuda!!!

  39. Hola igualmente soy nueva en esto y me cuesta entenderlo, sobretodo combinarlo con la programacion, debo hacer un proyecto que emule un juguete o una actividad educativa la cual se basa en un teclado matricial, unos botones,una pantalla lcd y un microcontrolador (pic 16f876a el cual es el que tengo) y me permita seleccionar un pais el cual una vez de presionarlo, despliegue una informacion referente a ese pais como: idioma, moneda…, el teclado podria omitirse y en su lugar usar otra cosa que sea mas sencilla de emplear. Se que debo programar tanto el micro como la pantalla lcd pero como transfiero el codigo al pic? y alguien tendra el codigo en alto nivel o bajo nivel de lo que necesito? escucho sugerencias y agradezco enormemente su ayuda!!!
    disculpen lo reevio porque no redacte bien una parte, je je!
    es algo libre y yo escogi esto de hecho la asignacion es una actividad educativa y se me ocurrio esto que parece ser sencillo en su aplicacion pero no en llegar al mismo, si alguien me puede guiae, explicar o cree que tiene algo que me sirva y es mucho mas sencillo y facil de implementar, lo agradezco. Soy nueva en el foro, no se si debo dejar mi correo? es margotgarrido123456@gmail.com

  40. me gusto la explicacion sobre teclado matricial que tienen en esta pagina, los felicito, lo detallan con facilidad

  41. Hola de nuevo, acabo de revisar y el microcontrolador que tengo es el 19f877a no el q señale anteriormente

  42. Hola de nuevo, acabo de revisar y el microcontrolador que tengo es el 16f877a no el q señale anteriormente

  43. Hola,

    solo una pregunta cambia mucho el codigo para un pic16f873A?
    saludos y muchisimas gracias por este tan valioso aporte.

  44. Hola tu tuto esta muy bueno

    una pregunta esta instruccion btfss esta disponible para un DSPIC30f4013

    gracias

  45. hola me gustaria que me explicaras el funcionamiento del teclado matricial en el pic16f628a no logro comprender por que en las salida del RB0 al RB3 se manda un 0 y como es que en las entradas hay puros 1 porfavor aver sime pueden explicar se los agradesco… gracias…
    este es mi correo gilram_90@hotmail.com

  46. Ctrl+C Ctrl+V

    😀

  47. hola. Porfa ayudenme tengo problemas con el teclado ya modifique la libreria que viene en C css para un teclado de 4×4 y no funciona, y tambien lo modifique para usar el PORTB el teclado asi como viene de 4×3 pero aun asi no funciona noce porque. la simulacion de proteus no funciona probe con el pic16f876 y si funciona pero el que uso es el PIC18F4550.

  48. quien me puede ayudar con el programa para el pic 16f628a para el teclado matricial para q muestre los valores en un display

  49. UNA CONSULTA URGENTE, ME HAN DEJADO UN TRABAJO EN LA UNIVERSIDAD PARA PROGRAMAR EL SIGUIENTE SISTEMA EN C18 MPLAB , CON UN PIC 18F4550. QUISIERA UNA IDEA DE CÓMO PROGRAMAR DICHO SISTEMA, POR FAVOR, MUCHAS GRACIAS
    El sistema en general es una representación de un sistema de domótica de
    control de luces (de una casa, un edificio, etc.) en el cual existen usuarios predeterminados
    (ustedes, los alumnos) identificados con un usuario y una contraseña de acceso. Estos usuarios
    podrán encender las luces y revisar el estado de las mismas (estado: encendido o apagado).
    Esta información de usuario debe ser mostrada en una pantalla LCD, así como la información
    del estado de las luces también. Esta pantalla debe estar configurada por defecto para estar
    bloqueada, permitiendo el acceso a ella luego de mantener pulsado el botón “*” durante un
    segundo. Una vez efectuada toda operación, la pantalla debe bloquearse nuevamente.
    Adicionalmente, ante el intento de acceso de un usuario no registrado, el sistema mostrar un
    mensaje de “ACCESO DENEGEADO” y volver a bloquearse.

  50. […] Anteriormente vimos los arreglos como una lista simple. Pero también podemos tener arreglos de dos dimensiones. Veamos este ejemplo que especifica un arreglo que representa un teclado matricial: […]

  51. 4 reasons why… a solo gamer is never alone


Leave a reply to micropic Cancel reply

Blog at WordPress.com.
Entries and comments feeds.