Encendido de leds con un microcontrolador avr

hola , quisiera saber como puedo programar 3 leds los cuales un tiene que prender y apar cada 5 seg otro cada 7 y el ultimo prender solamente y cuando se pulse un push boton , tengo la idea de como hacerlo de manera individual pero ya en conjunto la programacion se me empieza a enrredar. espero que me puedan ayudar ¡¡
 
Acá hay un ejemplo de lo que yo hice:

Código:
/*************************************************
 PROGRAMAS DE EJEMPLO PARA EL ATtiny2313 - 20PU.
 EJERCICIO Nº 5: juego de luces 3
 PROGRAMADOR: Moyano Jonathan.
 Fecha: 2011.
 Programa: Juego de luces según sea presionado o no un pulsador 
           conectado al puerto D del microcontrolador.
 Cristal:  12Mhz.
 Programador: USBtinyISP.
 ************************************************/
#include <avr/io.h>       // Definiciones de hardware.
#include <util/delay.h>   // Librería para generar retardos.
#include <avr/pgmspace.h> // Librería para trabajar con la memoria flash
                          // del microcontrolador.

// Secuencias programadas en la memoria de programa del microcontrolador.
const int a[5] PROGMEM= {0x01,0x02,0x03,0x04};
const int b[5] PROGMEM= {0x04,0x03,0x02,0x01};
const int c[5] PROGMEM= {0x03,0x06,0x0C,0x18};

// Pulsador conectado al pin PD3 del micro.
#define PULSADOR 3

int main(void) { 

    DDRD &= ~(_BV(PULSADOR)); // PIND3 como entrada.
    DDRB = 0x0F;               // PB0-PB3 salidas.
	PORTB = 0x00;              // Ponemos todas las salidas a 0. 

uint8_t i; // Variable auxiliar.

  while(1) {

 if(bit_is_clear(PIND, PULSADOR)) {

   for(i=0;i<=4;i++) {

      PORTB = pgm_read_byte(&a[i]);

	  _delay_ms(50);
    
	 }

	  for(i=0; i<=4; i++) {

       PORTB = pgm_read_byte(&c[i]);

	  _delay_ms(50);
    
	 }  
	}
	else

	   for(i=0; i<=4; i++) {

       PORTB = pgm_read_byte(&b[i]);

	  _delay_ms(50);
    
	 }

    }
}
 

Adjuntos

  • Secuencia 3.rar
    17 KB · Visitas: 16
Atrás
Arriba