Encender 3 LED con dos pulsadores.

Estoy intentando realizar el siguiente programa que consiste en:
Se necesita de dos pulsadores.
Primero tengo que pulsar el pulsador 1 y luego el pulsador 2 para hacer que los led se prendan del 1 al 3 y se queden encendidos.
Después sería a la inversa, es decir, tengo que pulsar primero el pulsador 2 y luego el pulsador 1
Esto haría que mis led se vayan apagando del led3 al led1.

He intentado hacer este programa pero solo he conseguido hacer que los led enciendan, pero la otra parte del apagado no he podido.
¿Alguien con conocimiento que me ayude con el código?

Aquí les dejo el código que realicé:
C:
#include <16f628.h>
#use DELAY(CLOCK=4000000)
#FUSES XT,NOPROTECT, NOWDT,NOBROWNOUT,PUT,NOLVP
#DEFINE LED1 PORTB,0
#DEFINE LED2 PORTB,1
#DEFINE LED3 PORTB,2
#DEFINE LED4 PORTB,3
#DEFINE LED5 PORTB,4
#DEFINE LED6 PORTB,5

#BYTE PORTB=6
#BYTE PORTA=5
#define pulsante2 porta,2
#define pulsante portb,7

int i=0;
int b;
int a;
int pulsos=0;
int pulsos2=0;

void main()
{
set_tris_b(0b10000000);
set_tris_a(0b00000100);
while(1)
{
//..............................
if(bit_test(pulsante))
{
pulsos++;
delay_ms(150);
if(pulsos>1){
pulsos=0;
}
}

if(pulsos==1)//pregunta si pulsos2 es igual a 1 para ejecutar lo siguiente
{
if(bit_test(pulsante2))
{
b=1;
delay_ms(150);
while(b==1)
{
for(i=0;i<=2;i++)//prende los leds del 1 al 3
{
bit_set(portb,i);
delay_ms(100);


if(bit_test(pulsante2))//apaga los leds y sale del while
{
b=0;

delay_ms(150);

break;
}
}
  }
   }
    }
}
}
 
Última edición por un moderador:
Se necesita de dos pulsadores.
Primero tengo que pulsar el pulsador 1 y luego el pulsador 2 para hacer que los led se prendan del 1 al 3 y se queden encendidos.
Después sería a la inversa, es decir, tengo que pulsar primero el pulsador 2 y luego el pulsador 1
Esto haría que mis led se vayan apagando del led3 al led1.
El código que adjunto es una forma sencilla de hacer lo que pretendes.
 

Adjuntos

  • 16F628A LEDS Test.rar
    16.3 KB · Visitas: 27
hola de nuevo. ..necesito hacer un programa en pic c compiler el cual consta de lo siguiente:
se necesita de dos pulsantes y tres leds.. Si pulsos el primer pulsante se enciende el led1 durante un segundo y se apaga, si pulso el segundo pulsante se enciende el led2 durante un segundo y se apaga.
y si pulso los dos al "mismo tiempo" se enciende el led3 y parpadea 5 veces con intervalos de 300ms..
he conseguido que los led1 y led2 se enciendan pero no logro hacer un codigo para cuando se pulsen los dos al mismo tiempo y parpadee el led3.


espero que no sea de molestia ayudarme con el codigo:
este es el codigo que hice.

#include <16f628.h>
#use DELAY(CLOCK=4000000)
#FUSES XT,NOPROTECT, NOWDT,NOBROWNOUT,PUT,NOLVP
#DEFINE LED1 PORTB,2
#DEFINE LED2 PORTB,1
#DEFINE LED3 PORTB,0
#BYTE PORTB=6
#BYTE PORTA=5
#define pulsante porta,2
#define pulsante2 portb,7


main()
{
set_tris_b(0b10000000);
set_tris_a(0b00000100);
while(1)
{
if(bit_test(pulsante))
{
bit_set(led1);
delay_ms(1000);
bit_clear(led1);

}
if(bit_test(pulsante2))
{
bit_set(led2);
delay_ms(1000);
bit_clear(led2);

}

if(bit_test(pulsante)&&(pulsante2))
{
bit_set(led3);
delay_ms(300);
bit_clear(led3);
delay_ms(300);
bit_set(led3);
delay_ms(300);
bit_clear(led3);
delay_ms(300);
bit_set(led3);
delay_ms(300);
bit_clear(led3);
delay_ms(300);
bit_set(led3);
delay_ms(300);
bit_clear(led3);
delay_ms(300);
bit_set(led3);
delay_ms(300);
bit_clear(led3);
delay_ms(300);
}



}
}
 
Ya completé el código pero al momento de pulsar los dos al mismo tiempo primero se prende el led 1 y después el led 2 y de ahí pasa a parpadear las 5 veces el led 3 . ¿ Cómo puedo corregir ésto , es decir que cuando pulse los dos al mismo tiempo pase directamente al parpadeo del led 3 ?
 
Hola, sucede que no están condicionados los pulsadores por separado.
Deben condicionarse uno del otro, por ejem.
Para el 1er. pulsador
if(bit_test(pulsante)&&(bit_test(!pulsante2))
Y para el otro pulsador
if(bit_test(!pulsante)&&(bit_test(pulsante2))
 
Atrás
Arriba