Você está na página 1de 2

#include <avr/io.

h>
#include <util/delay.h>

#define btn1 PD1


#define btn2 PD2
#define btn3 PD3
#define pwm1 PD5

int main() {

// Configura��o dos pinos como entrada ou sa�da


DDRD &= ~(1 << btn1) & ~(1 << btn2) & ~(1 << btn3);
DDRD |= (1 << pwm1);
DDRB |= 0B00001111;

// Configura��o do PWM
TCCR0A = 0xA3; // Configura��o do modo de opera��o Fast PWM
TCCR0B = 0x04; // Configura��o do prescaler para 64

while(1) {

// Verifica se o bot�o 1 foi pressionado


if(!(PIND & (1<<btn1))) {
_delay_ms(500); // Debouncing

// L�gica de mudan�a de estado do bot�o


if(TCCR0B == 0x04) {
TCCR0B = 0x05;
} else {
TCCR0B = 0x04;
OCR0B = 0;
PORTB &= ~(0B00001111);
}
}

// Verifica se o bot�o 2 foi pressionado


if(!(PIND & (1<<btn2))) {
_delay_ms(500); // Debouncing

// L�gica de mudan�a de estado do bot�o


if(OCR0B == 0) {
OCR0B = 80;
PORTD = 0x08;
PORTB = (PORTB & ~(0B00001111)) | 0B00000110;
} else {
OCR0B = 0;
PORTD = 0x00;
PORTB &= ~(0B00001111);
PORTB |= 0B00000001;
}
}

// Verifica se o bot�o 3 foi pressionado


if(!(PIND & (1<<btn3))) {
_delay_ms(500); // Debouncing

// L�gica de mudan�a de estado do bot�o


OCR0B = 0;
TCCR0B = 0x04;
PORTD = 0x00;
PORTB &= ~(0B00001111);
PORTB |= 0B00001010;
}
}
}

Você também pode gostar