Ir al contenido

Tutorial — Práctica 2: Teclado y LCD

Aprende programando: sigue cada paso, escribe tu propio codigo y valida con las preguntas y el examen del laboratorio. Adapta pines y rutinas a tu placa cuando haga falta.

Lo que vas a construir

Leer un teclado matricial 4x4 y mostrar las teclas pulsadas en un LCD 16x2 por bus de 4 bits.

Diagrama electronico de la Practica 2 con PIC18F4550, LCD y teclado matricial
Diagrama electronico: LCD en bus 4 bit (RD2-RD7), teclado 4x4 en RB0-RB7 con pull-ups. — Practica 2 — Teclado y LCD · UNEXPO
  1. 1

    Proyecto, CONFIG y pines digitales

    Crea el proyecto MPASM para PIC18F4550 (20 MHz HS). Configura `ADCON1 = 0x0F` para que PORTB y PORTD sean digitales. Reserva variables RAM para la tecla detectada, índices de fila/columna y temporizadores de retardo.
    
    								        MOVLW   0x0F
            MOVWF   ADCON1
            CLRF    nueva_tecla
    							
  2. 2

    Configura el bus LCD en 4 bits

    PORTD lleva datos D4–D7 (RD4–RD7), RS en RD2 y E en RD3. Pon `TRISD = 0` (todo salida). Escribe rutinas `lcd_nibble`, `lcd_cmd` y `lcd_dat` que envíen nibble alto, luego nibble bajo, con pulso en E.
    
    								        CLRF    LATD
            CLRF    TRISD        ; LCD salidas
    
    ; Pulso E: sube, pequeño retardo, baja
    lcd_strobe:
            BSF     LATD, 3      ; E = 1
            CALL    retardo_corto
            BCF     LATD, 3      ; E = 0
            RETURN
    							

    Consejo: Tema de referencia: /comunicacion/lcd-teclado/

  3. 3

    Inicializa el HD44780

    Secuencia típica en 4 bits: retardo >40 ms tras encender, luego comandos `0x33`, `0x32`, `0x28` (2 líneas, 4 bits), `0x0C` (display on, cursor off), `0x06` (incremento). Prueba escribiendo TECLA: en la primera línea antes del teclado.
    
    								lcd_init:
            CALL    retardo_largo
            MOVLW   0x33
            CALL    lcd_cmd
            MOVLW   0x32
            CALL    lcd_cmd
            MOVLW   0x28
            CALL    lcd_cmd
            MOVLW   0x0C
            CALL    lcd_cmd
            RETURN
    							
  4. 4

    Escanea el teclado 4×4 por filas

    Filas RB0–RB3 como salidas, columnas RB4–RB7 como entradas con pull-up interno desactivado y resistencias externas. Para cada fila: pon esa fila en 0, lee PORTB. Si una columna lee 0, calcula el índice y busca el carácter en una tabla 4×4 (`1`–`9`, `A`–`D`, `*`, `#`).
    
    								        MOVLW   0xF0
            MOVWF   TRISB        ; cols in, rows out
    
    tabla_teclas:
            DB      '1','2','3','A'
            DB      '4','5','6','B'
            DB      '7','8','9','C'
            DB      '*','0','#','D'
    							
  5. 5

    Habilita interrupción RB4–RB7

    Activa RBIE y GIE. En la ISR: verifica RBIF, llama al escaneo, aplica antirrebote (20–50 ms), guarda la tecla y limpia RBIF leyendo PORTB. En el bucle principal, si hay tecla nueva, escríbela en la segunda línea del LCD con `lcd_dat`.
    
    								        BCF     INTCON2, RBPU
            BSF     INTCON, RBIE
            BSF     INTCON, GIE
    
    isr_alta:
            ; guardar contexto ...
            BTFSC   INTCON, RBIF
            CALL    escanear_tecla
            ; leer PORTB limpia RBIF
            ; restaurar contexto / RETFIE
    							
  6. 6

    Simula y prueba cada tecla

    En Proteus verifica que cada tecla muestre el carácter correcto sin duplicados. Si ves rebotes, aumenta el retardo de debounce. Adapta pines si tu sección usa otro mapa de filas/columnas — cambia `TRISB`, la tabla y las máscaras de escaneo.

Antes de programar — pre-laboratorio

Pre-laboratorio — investigación de referencia

Respuestas orientadas al PDF de la Práctica 2 (Teclado y LCD, UNEXPO). Úsalas para investigar antes del laboratorio y redactar el informe con tus propias palabras.

P 1 ¿Qué es el controlador HD44780 y cómo se comunica con el PIC?

El HD44780 es el controlador estándar de displays LCD alfanuméricos (16×2, 20×4, etc.). Se comunica por un bus paralelo:

- RS (Register Select): 0 = comando, 1 = dato de carácter.
- E (Enable): pulso de habilitación para latch de datos.
- Datos: modo 4 bits (nibble alto + nibble bajo) o 8 bits.

En la Práctica 2 el bus de datos usa RD4–RD7, RS = RD2 y E = RD3. El PIC envía comandos de inicialización (función 4 bits, 2 líneas, cursor off) y luego escribe caracteres en la DDRAM del LCD.

P 2 ¿Cómo funciona un teclado matricial 4×4?

Un teclado matricial conecta 4 filas y 4 columnas formando una matriz de 16 teclas. Para detectar una tecla:

1. Se configuran las filas como salidas (o se activan en bajo) y las columnas como entradas con pull-up.
2. Se barre fila por fila poniendo una fila en 0 y leyendo columnas.
3. Si una columna lee 0, hay una tecla presionada en la intersección (fila, columna).
4. Se usa una tabla de correspondencia fila/columna → carácter ('0'–'9', 'A'–'D', '*', '#').

En el montaje UNEXPO: filas RB0–RB3, columnas RB4–RB7 con pull-up de 10 kΩ.

P 3 Interrupción por cambio en RB4–RB7 (PORTB)

El PIC18 puede generar interrupción cuando cambia el nivel en RB4–RB7 (pines configurados como entradas):

- INTCON.RBIF — flag de interrupción PORTB.
- INTCON.RBIE — habilitar interrupción.
- INTCON.RBIP — prioridad (si aplica).

Al presionar una tecla, una columna cambia de estado y dispara la ISR. En la rutina de interrupción se escanea el teclado, se debouncea (retardo corto) y se guarda la tecla. Se debe limpiar RBIF leyendo PORTB antes de salir de la ISR para evitar rebotes falsos.

P 4 Librería LCD.INC y macros MPASM

La práctica pide usar la librería LCD.INC del curso (Tema 7.1) en modo 4 bits. Típicamente incluye macros como:

- `LCDinit` — secuencia de inicialización HD44780.
- `LCDcmd` — envía comando.
- `LCDchar` — escribe un carácter ASCII.
- `LCDlinea1` / `LCDlinea2` — posiciona cursor.

Las macros expanden en ensamblador en tiempo de compilación, evitando repetir la secuencia nibble-alto/nibble-bajo en cada byte. En el informe explica qué hace cada macro que uses.

No copies textualmente. El informe debe incluir tu pseudocódigo, diagrama de flujo y explicación del escaneo del teclado.

Disena tu solucion

Diseño antes del código

La guía oficial pide pseudocódigo y diagrama de flujo antes del .ASM. Escribe los tuyos primero; después desbloqueas la guía de referencia.

  1. 1. Pseudocódigo
  2. 2. Diagrama de flujo
  3. 3. Guía de referencia

Escribe tu pseudocódigo

Incluye: init LCD 4 bits, escaneo matricial, tabla de teclas, ISR PORTB, debounce y actualización del display.

0 caracteres (mínimo 80)

Construye y adapta el codigo

Practica · UNEXPO

Práctica 2 de Laboratorio

Gobernar LCD 16x2 y teclado matricial 4x4. Mostrar en pantalla los valores introducidos desde el teclado.

DispositivoPines PIC
LCD datos (4 bit)RD4-RD7
LCD RS, ERD2, RD3
Teclado filasRB0-RB3
Teclado columnasRB4-RB7
  • Ensamblador MPASM, modular y comentado
  • Interrupciones RB4-RB7 para teclado
  • Librería LCD.INC (bus 4 bit) según Tema 7.1
  • Pseudocódigo y diagrama de flujo en el informe

Despues de programar — post-laboratorio

Post-laboratorio — investigación de referencia

Preguntas de cierre típicas del informe de la Práctica 2.

P 1 ¿Por qué el LCD usa modo 4 bits en lugar de 8?

El modo 4 bits reduce el número de pines del PIC: solo se usan 4 líneas de datos (RD4–RD7) más RS y E, en lugar de 8 datos + control. El HD44780 recibe cada byte en dos nibbles consecutivos (alto, luego bajo). Es el estándar en laboratorio cuando hay limitación de pines.

P 2 ¿Qué problemas puede causar no hacer debounce en el teclado?

Sin antirrebote, un solo pulsado mecánico puede generar varias interrupciones o lecturas múltiples del mismo carácter en el LCD. Soluciones comunes: retardo de 20–50 ms tras detectar tecla, ignorar lecturas repetidas hasta soltar, o filtrar en software en la ISR principal.

Incluye capturas de Proteus o fotos del montaje y explica el antirrebote que implementaste.

Comprueba lo aprendido

Exámenes por nivel de dificultad

Abre cada nivel cuando estés listo. El básico es público; intermedio y UNEXPO requieren cuenta CALETAS para calificar respuestas.

Básico Nivel básico — Diagrama y conexiones 4 preguntas

Preguntas sobre el montaje LCD 4 bits y teclado 4×4.

0 de 0 respondidas

El bus de datos del LCD en Práctica 2 usa…
Las filas del teclado 4×4 van a…
RS y E del LCD en el montaje UNEXPO están en…
Las columnas del teclado (con pull-up) usan…
Intermedio Nivel intermedio — HD44780 e interrupciones 4 preguntas

Controlador LCD, escaneo matricial y RB4–RB7.

0 de 0 respondidas

En el HD44780, RS = 0 significa que se envía…
La interrupción PORTB por cambio en RB4–RB7 se habilita con…
Para limpiar RBIF tras una interrupción de teclado se suele…
Modo 4 bits del LCD envía cada byte como…
UNEXPO Nivel UNEXPO — Oral e informe 4 preguntas

Preguntas de exposición: algoritmo, debounce y librería LCD.INC.

0 de 0 respondidas

Si el profesor pide explicar el escaneo matricial, la respuesta correcta es…
¿Por qué es necesario el debounce en el teclado?
La macro LCD.INC en modo 4 bits debe…
En oral: ¿qué pasa si no inicializas el LCD antes de escribir caracteres?

Panel de tutoriales · Ejercicios