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.
-
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 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 RETURNConsejo: Tema de referencia: /comunicacion/lcd-teclado/
-
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 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 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 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. Pseudocódigo
- 2. Diagrama de flujo
- 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)
Describe tu diagrama de flujo
En papel o aquí: lista cada símbolo en orden. Tu informe necesita óvalos, rectángulos, rombos y el bucle principal.
0 caracteres (mínimo 60)
Mi borrador de pseudocódigo
Mi borrador de diagrama de flujo
Pseudocódigo de referencia
INICIO
Inicializar LCD (4 bits, 2 líneas)
Configurar RB0-RB3 salidas, RB4-RB7 entradas
Habilitar interrupción RB4-RB7
buffer ← "", pos ← 1
REPITIR SIEMPRE
SI nueva_tecla ENTONCES
SI tecla = '#' ENTONCES mostrar buffer en LCD
SINO buffer ← buffer + tecla; escribir tecla en LCD
FIN SI
FIN REPITIR
ISR_PORTB:
escanear matriz → tecla
debounce 30 ms
marcar nueva_tecla
limpiar RBIF
FIN ISR Diagrama de flujo de referencia
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.
Conexiones
Sección titulada «Conexiones»| Dispositivo | Pines PIC |
|---|---|
| LCD datos (4 bit) | RD4-RD7 |
| LCD RS, E | RD2, RD3 |
| Teclado filas | RB0-RB3 |
| Teclado columnas | RB4-RB7 |
Requisitos del programa
Sección titulada «Requisitos del programa»- 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
Código fuente de referencia
Sección titulada «Código fuente de referencia»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
Inicia sesion en CALETAS para sincronizar este resultado entre dispositivos.
Iniciar sesion en CALETASIntermedio Nivel intermedio — HD44780 e interrupciones 4 preguntas
Controlador LCD, escaneo matricial y RB4–RB7.
0 de 0 respondidas
Inicia sesion en CALETAS para sincronizar este resultado entre dispositivos.
Iniciar sesion en CALETASUNEXPO Nivel UNEXPO — Oral e informe 4 preguntas
Preguntas de exposición: algoritmo, debounce y librería LCD.INC.
0 de 0 respondidas
Inicia sesion en CALETAS para sincronizar este resultado entre dispositivos.
Iniciar sesion en CALETAS