Witam jestem poczatkującym jeśli chodzi o jezyk C i ogólnie jeśli chodzi o programowanie. Mam taki problem .Chcę żeby po naciśnięciu odpowiedniego klawisz na klawiaturze zapalała się inna dioda led na porcie D (bądz sekwencja kilku diod).
Na początku próbowałem z funkcja switch ale dałem spokój bo było jeszcze gorzej. Prosze o pomoc w poprawieniu teg listingu bądź może ktoś ma napisany inaczej też chętnie zobacze ..Jednak tylko w jezyku C..mogą zostać zastosowane przerwania zewnętrzne INT0...
Na początku próbowałem z funkcja switch ale dałem spokój bo było jeszcze gorzej. Prosze o pomoc w poprawieniu teg listingu bądź może ktoś ma napisany inaczej też chętnie zobacze ..Jednak tylko w jezyku C..mogą zostać zastosowane przerwania zewnętrzne INT0...
#define F_CPU 1000000L
#include <avr/io.h>
#include <avr/interrupt.h>
int main(void)
{
//high nibble for output(columns) low for input(rows);
DDRB=0x0F;
//enable internal pullups for PB0-PB3
PORTB=0xF0;
//Port D for indication only
DDRD=0xFF;
while (1) //loop key check forever
{
//first column
PORTB =0b01111111;
//check for rows and send key number to portD
//instead sending key number to PORTD you can use
// any function that serves pressed button
if (PINB, 3) PORTD =0b00000001;
if (PINB, 2) PORTD =0b00000011;
if (bit_is_set(PINB, 1)) PORTD =0b00000111;
if (bit_is_set(PINB, 0)) PORTD =0b00001111;
asm("nop");
//second column
PORTB =0b10111111;
if (bit_is_set(PINB, 3)) PORTD =0b00011111;
if (bit_is_set(PINB, 2)) PORTD =0b00111111;
if (bit_is_set(PINB, 1)) PORTD =0b00111111;
if (bit_is_set(PINB, 0)) PORTD =0b01111111;
asm("nop");
//third column
PORTB =0b11011111;
if (bit_is_set(PINB, 3)) PORTD =0b11111111;
if (bit_is_set(PINB, 2)) PORTD =0b11111110;
if (bit_is_set(PINB, 1)) PORTD =0b11111100;
if (bit_is_set(PINB, 0)) PORTD =0b11111000;
asm("nop");
//fourth column
PORTB =0b11101111;
if (bit_is_set(PINB, 3)) PORTD =0b11110000;
if (bit_is_set(PINB, 2)) PORTD =0b11100000;
if (bit_is_set(PINB, 1)) PORTD =0b11000000;
if (bit_is_set(PINB, 0)) PORTD =0b10000000;
asm("nop");
}
}