#include <avr/io.h>
#include <util/delay.h>
int main(void) {
// set PORTB5 as a output
DDRB = DDRB | B11111111;
DDRD = DDRD | B00000000;
PINB = 0x00;
while(1)
{
if (PIND & 0x80)
{
PORTB = 0x20;
if ((PIND & 0x04) && (PIND & 0x08) && (PIND & 0x10) && (PIND & 0x20) && (PIND & 0x40)) //All input is HIGH ; alternative statement --> (PIND & B00000100) or (PIND & 0b00000100)
{
PORTB = 0x1F; // sets digital pins 7,5,3 HIGH alternative ---> PORTB = 0b00100000 or PORTB = B001000000
// wait
// _delay_ms(1000);
//PORTB = 0x00; // sets digital pins 7,5,3 HIGHS1, S2, S4, S5
// wait some more
// _delay_ms(1000);
}
else if ((PIND & 0x04) && !(PIND & 0x08) && !(PIND & 0x10) && !(PIND & 0x20) && !(PIND & 0x40)) //S1 only
{
// _delay_ms(10);
PORTB = 0xC1;
}
else if (!(PIND & 0x04) && (PIND & 0x08) && !(PIND & 0x10) && !(PIND & 0x20) && !(PIND & 0x40)) // S2 only
{
//_delay_ms(10);
PORTB = 0xC2;
}
else if (!(PIND & 0x04) && !(PIND & 0x08) && (PIND & 0x10) && !(PIND & 0x20) && !(PIND & 0x40)) // S3 only
{
//_delay_ms(10);
PORTB = 0xC4;
}
else if (!(PIND & 0x04) && !(PIND & 0x08) && !(PIND & 0x10) && (PIND & 0x20) && !(PIND & 0x40)) // S4 only
{
//_delay_ms(10);
PORTB = 0xC8;
}
else if (!(PIND & 0x04) && !(PIND & 0x08) && !(PIND & 0x10) && !(PIND & 0x20) && (PIND & 0x40)) // S5 only
{
//_delay_ms(10);
PORTB = 0xD0;
}
else if ((PIND & 0x04) && (PIND & 0x08) && !(PIND & 0x10) && !(PIND & 0x20) && !(PIND & 0x40)) // S1, S2
{
//_delay_ms(10);
PORTB = 0x03;
}
else if ((PIND & 0x04) && !(PIND & 0x08) && (PIND & 0x10) && !(PIND & 0x20) && !(PIND & 0x40)) // S1, S3
{
//_delay_ms(10);
PORTB = 0x05;
}
else if ((PIND & 0x04) && !(PIND & 0x08) && !(PIND & 0x10) && (PIND & 0x20) && !(PIND & 0x40)) // S1, S4
{
//_delay_ms(10);
PORTB = 0x09;
}
else if ((PIND & 0x04) && !(PIND & 0x08) && !(PIND & 0x10) && !(PIND & 0x20) && (PIND & 0x40)) // S1, S5
{
//_delay_ms(10);
PORTB = 0x11;
}
else if (!(PIND & 0x04) && (PIND & 0x08) && (PIND & 0x10) && !(PIND & 0x20) && !(PIND & 0x40)) // S2, S3
{
//_delay_ms(10);
PORTB = 0x06;
}
else if (!(PIND & 0x04) && (PIND & 0x08) && !(PIND & 0x10) && (PIND & 0x20) && !(PIND & 0x40)) // S2, S4
{
//_delay_ms(10);
PORTB = 0x0A;
}
else if (!(PIND & 0x04) && (PIND & 0x08) && !(PIND & 0x10) && !(PIND & 0x20) && (PIND & 0x40)) // S2, S5
{
//_delay_ms(10);
PORTB = 0x12;
}
else if (!(PIND & 0x04) && !(PIND & 0x08) && (PIND & 0x10) && (PIND & 0x20) && !(PIND & 0x40)) // S3, S4
{
//_delay_ms(10);
PORTB = 0x0C;
}
else if (!(PIND & 0x04) && !(PIND & 0x08) && (PIND & 0x10) && !(PIND & 0x20) && (PIND & 0x40)) // S3, S5
{
//_delay_ms(10);
PORTB = 0x14;
}
else if (!(PIND & 0x04) && !(PIND & 0x08) && !(PIND & 0x10) && (PIND & 0x20) && (PIND & 0x40)) //S4, S5
{
//_delay_ms(10);
PORTB = 0x18;
}
else if ((PIND & 0x04) && (PIND & 0x08) && (PIND & 0x10) && !(PIND & 0x20) && !(PIND & 0x40)) // S1, S2, S3
{
//_delay_ms(10);
PORTB = 0x07;
}
else if ((PIND & 0x04) && (PIND & 0x08) && !(PIND & 0x10) && (PIND & 0x20) && !(PIND & 0x40)) // S1, S2, S4
{
//_delay_ms(10);
PORTB = 0x0B;
}
else if ((PIND & 0x04) && (PIND & 0x08) && !(PIND & 0x10) && !(PIND & 0x20) && (PIND & 0x40)) // S1, S2, S5
{
//_delay_ms(10);
PORTB = 0x13;
}
else if (!(PIND & 0x04) && (PIND & 0x08) && (PIND & 0x10) && (PIND & 0x20) && !(PIND & 0x40)) // S2, S3, S4
{
//_delay_ms(10);
PORTB = 0x0E;
}
else if (!(PIND & 0x04) && (PIND & 0x08) && (PIND & 0x10) && !(PIND & 0x20) && (PIND & 0x40)) // S2, S3, S5
{
//_delay_ms(10);
PORTB = 0x16;
}
else if (!(PIND & 0x04) && (PIND & 0x08) && !(PIND & 0x10) && (PIND & 0x20) && (PIND & 0x40)) // S2, S4, S5
{
//_delay_ms(10);
PORTB = 0x1A;
}
else if (!(PIND & 0x04) && !(PIND & 0x08) && (PIND & 0x10) && (PIND & 0x20) && (PIND & 0x40)) // S3, S4, S5
{
//_delay_ms(10);
PORTB = 0x1C;
}
else if ((PIND & 0x04) && (PIND & 0x08) && (PIND & 0x10) && (PIND & 0x20) && !(PIND & 0x40)) // S1, S2, S3, S4
{
//_delay_ms(10);
PORTB = 0x0F;
}
else if ((PIND & 0x04) && (PIND & 0x08) && (PIND & 0x10) && !(PIND & 0x20) && (PIND & 0x40)) // S1, S2, S3, S5
{
//_delay_ms(10);
PORTB = 0x17;
}
else if ((PIND & 0x04) && (PIND & 0x08) && !(PIND & 0x10) && (PIND & 0x20) && (PIND & 0x40)) // S1, S2, S4, S5
{
//_delay_ms(10);
PORTB = 0x1B;
}
else if ((PIND & 0x04) && !(PIND & 0x08) && (PIND & 0x10) && (PIND & 0x20) && (PIND & 0x40)) // S1, S3, S4, S5
{
//_delay_ms(10);
PORTB = 0x1D;
}
else if (!(PIND & 0x04) && (PIND & 0x08) && (PIND & 0x10) && (PIND & 0x20) && (PIND & 0x40)) // S2, S3, S4, S5
{
//_delay_ms(10);
PORTB = 0x1E;
}
else{
// unset PORTB5
PORTB = 0x00; // sets digital pins 7,5,3 HIGH
}
}
else{
// unset PORTB5
PORTB = 0x00; // sets digital pins 7,5,3 HIGH
}
}
}