Estoy intentando hacer lo siguiente:
Si se oprime el pulsador 1 aparece L, pulsador 2 aparece D, pulsador 3 aparece R, pulsador 4 aparece .
Además de esto se prende un el LED por cada pulsador, parpadeando con intervalos de 200ms (los LED permanecen parpadeando a medida que se oprime el siguiente pulsador, es decir, si se han oprimido tres pulsadores debe haber tres LED parpadeando).
Debe existir un quinto pulsador que, al oprimirlo 5 veces debe comenzar un conteo de uno en uno desde 0 hasta 19 (tiempos de 0.7 segundos), luego reinicia (apaga los LED y pone el display en cero), el punto decimal representa las decenas.
Si se activan 2 o tres pulsadores al tiempo se prenden todos los LED durante 1 segundo y luego se apagan, el display queda en cero.
Sin embargo no sé cómo puedo detectar el pulsador cinco presionado cinco veces y si se activan 2 o 3 pulsadores al tiempo.
¿Alguien sabe cómo se puede conectar con el código?
Este es el código que tengo, gracias.
Si se oprime el pulsador 1 aparece L, pulsador 2 aparece D, pulsador 3 aparece R, pulsador 4 aparece .
Además de esto se prende un el LED por cada pulsador, parpadeando con intervalos de 200ms (los LED permanecen parpadeando a medida que se oprime el siguiente pulsador, es decir, si se han oprimido tres pulsadores debe haber tres LED parpadeando).
Debe existir un quinto pulsador que, al oprimirlo 5 veces debe comenzar un conteo de uno en uno desde 0 hasta 19 (tiempos de 0.7 segundos), luego reinicia (apaga los LED y pone el display en cero), el punto decimal representa las decenas.
Si se activan 2 o tres pulsadores al tiempo se prenden todos los LED durante 1 segundo y luego se apagan, el display queda en cero.
Sin embargo no sé cómo puedo detectar el pulsador cinco presionado cinco veces y si se activan 2 o 3 pulsadores al tiempo.
¿Alguien sabe cómo se puede conectar con el código?
Este es el código que tengo, gracias.
Código:
INICIO:
LDI R21, 0x00
OUT DDRB, R21 ; Configura el puerto B como entrada (pulsadores)
LDI R20, 0xFF
OUT DDRC, R20 ; Configura el puerto C como salida (LEDs)
OUT DDRD, R20 ; Configura el puerto D como salida (display)
LDI R25,0X00
CICLO:
IN R21,PINB
BST R21,0
BRTS PULSADOR1
IN R21,PINB
BST R21,1
BRTS PULSADOR2
IN R21,PINB
BST R21,2
BRTS PULSADOR3
IN R21,PINB
BST R21,3
BRTS PULSADOR4
CALL PARPADEO
RJMP CICLO
; Rutinas para cada pulsador
PULSADOR1:
LDI R20, 0xC7 ; Mostrar "L" en el display
OUT PORTD, R20
ORI R25,0X01
RJMP CICLO
PULSADOR2:
LDI R20, 0x21 ; Mostrar "D" en el display (binario: 00100001)
OUT PORTD, R20
ORI R25,0X02
RJMP CICLO
PULSADOR3:
LDI R20, 0x2F ; Mostrar "R" en el display (binario: 00101111)
OUT PORTD, R20
ORI R25,0X04
RJMP CICLO
PULSADOR4:
LDI R20, 0x92 ; Mostrar "S" en el display (binario: 10010010)
OUT PORTD, R20
ORI R25,0X08
RJMP CICLO
PARPADEO:
OUT PORTC,R25
CALL RETARDO1
LDI R28,0X00
OUT PORTC,R28
CALL RETARDO1
RJMP CICLO
PULSADOR5:
INC R26 ; Incrementar el contador de pulsos
CPI R26, 5 ; Comparar el contador con 5
BRNE CICLO ; Saltar si el contador no es igual a 5
LDI R20,0XC0
OUT PORTD, R20
CALL RETARDO2
LDI R20,0XF9
OUT PORTD, R20
CALL RETARDO2
LDI R20,0XA4
OUT PORTD, R20
CALL RETARDO2
LDI R20,0XB0
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X99
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X92
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X82
OUT PORTD, R20
CALL RETARDO2
LDI R20,0XF8
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X80
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X90
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X40
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X79
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X24
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X30
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X19
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X12
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X02
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X78
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X00
OUT PORTD, R20
CALL RETARDO2
LDI R20,0X10
OUT PORTD, R20
CALL RETARDO2
RJMP FIN_PULSADOR
FIN_PULSADOR:
LDI R20, 0xC0
OUT PORTD, R20
LDI R20, 0x00
OUT PORTC, R20
RJMP CICLO
; Rutina para detectar múltiples pulsadores presionados
MULTIPULSADOR:
LDI R21, 0xFF ; Encender los LEDs
OUT PORTC, R21
CALL RETARDO3 ; Retardo de 200ms
LDI R21, 0x00 ; Apagar los LEDs
OUT PORTC, R21
CALL RETARDO3 ; Retardo de 200ms
RJMP CICLO ; Vuelve al inicio del ciclo
; Rutinas de retardo
RETARDO1: ; Retardo de 200 ms
ldi r18, 9
ldi r19, 30
ldi r20, 229
L1: dec r20
brne L1
dec r19
brne L1
dec r18
brne L1
nop
ret
RETARDO2: ; Retardo de 0,7 segundos
ldi r18, 29
ldi r19, 105
ldi r20, 166
L4: dec r20
brne L4
dec r19
brne L4
dec r18
brne L4
ret
RETARDO3: ; Retardo de 1 segundo
ldi r18, 41
ldi r19, 150
ldi r20, 128
L7: dec r20
brne L7
dec r19
brne L7
dec r18
brne L7
ret
Última edición por un moderador: