Witam.
Chciałbym prosić o pomoc w uporaniu się z problemem. Posiadam kod, który świeci "na sucho" Diodą D0, Diodą D1 po wciśnięciu klawisza na klawiaturze (zablokowane zworką na jedną kolumnę), Diodą D2 po wciśnięciu drugiego klawisza i diodą D3 po wciśnięciu 2 klawiszy na raz. Zależałoby mi na dodaniu linijki kodu, który przy pomocy 3 klawisza zaświeci 2 diody na raz, każdą o innej częstotliwości. Pozdrawiam. Mój kod poniżej:
Płytka:
Z pinów E idzie wyprowadzenie na diody, z B na klawiaturę.
Chciałbym prosić o pomoc w uporaniu się z problemem. Posiadam kod, który świeci "na sucho" Diodą D0, Diodą D1 po wciśnięciu klawisza na klawiaturze (zablokowane zworką na jedną kolumnę), Diodą D2 po wciśnięciu drugiego klawisza i diodą D3 po wciśnięciu 2 klawiszy na raz. Zależałoby mi na dodaniu linijki kodu, który przy pomocy 3 klawisza zaświeci 2 diody na raz, każdą o innej częstotliwości. Pozdrawiam. Mój kod poniżej:
Spoiler:
/ Main program
void system_init(void){
DDRB = 0x00; //definiowanie wejscia
PORTB = 0xFF;
}
int main(void) {
system_init();
DDRE = 0xFF; //definiowanie wyjscia
PORTE = 0xFF; //co do podlaczenia to 4 kabelki z B dajemy do "rows" klawiatury, a z E do diod (albo na odwrot, //ale na 99% tak)
//program mial wygladac tak: nie wcisniete nic - mruga D0, wcisniety jeden klawisz - mruga D1, Wcisniety drugi klawisz - //mruga D2, wcisniete oba - mruga D3
while(1) {
if((bit_is_set(PINB,0))&&(bit_is_set(PINB,1))){ //jesli zaden z przyciskow nie jest wcisniety
PORTE = 0xff; //zgaszenie wszystkich diod
_delay_ms(200); //opoznienie
PORTE ^=0x01; //zapalenie D0
_delay_ms(200); //opoznienie
PORTE ^=0x00; //zgaszenie D0
}
if((bit_is_clear(PINB,0))&&(bit_is_set(PINB,1))){ //jesli pierwszy klawisz jest wcisniety, a drugi nie
PORTE = 0xff; //identycznie jak wyzej
_delay_ms(200);
PORTE ^= 0x02;
_delay_ms(200);
PORTE ^= 0x00;
}
if((bit_is_clear(PINB,1))&&(bit_is_set(PINB,0))){
PORTE = 0xff;
_delay_ms(200);
PORTE ^=0x04;
_delay_ms(200);
PORTE ^=0x00;
}
if((bit_is_clear(PINB,0))&&(bit_is_clear(PINB,1))){
PORTE = 0xff;
_delay_ms(200);
PORTE ^=0x08;
_delay_ms(200);
PORTE ^=0x00;
} // system behaviour
}
}
void system_init(void){
DDRB = 0x00; //definiowanie wejscia
PORTB = 0xFF;
}
int main(void) {
system_init();
DDRE = 0xFF; //definiowanie wyjscia
PORTE = 0xFF; //co do podlaczenia to 4 kabelki z B dajemy do "rows" klawiatury, a z E do diod (albo na odwrot, //ale na 99% tak)
//program mial wygladac tak: nie wcisniete nic - mruga D0, wcisniety jeden klawisz - mruga D1, Wcisniety drugi klawisz - //mruga D2, wcisniete oba - mruga D3
while(1) {
if((bit_is_set(PINB,0))&&(bit_is_set(PINB,1))){ //jesli zaden z przyciskow nie jest wcisniety
PORTE = 0xff; //zgaszenie wszystkich diod
_delay_ms(200); //opoznienie
PORTE ^=0x01; //zapalenie D0
_delay_ms(200); //opoznienie
PORTE ^=0x00; //zgaszenie D0
}
if((bit_is_clear(PINB,0))&&(bit_is_set(PINB,1))){ //jesli pierwszy klawisz jest wcisniety, a drugi nie
PORTE = 0xff; //identycznie jak wyzej
_delay_ms(200);
PORTE ^= 0x02;
_delay_ms(200);
PORTE ^= 0x00;
}
if((bit_is_clear(PINB,1))&&(bit_is_set(PINB,0))){
PORTE = 0xff;
_delay_ms(200);
PORTE ^=0x04;
_delay_ms(200);
PORTE ^=0x00;
}
if((bit_is_clear(PINB,0))&&(bit_is_clear(PINB,1))){
PORTE = 0xff;
_delay_ms(200);
PORTE ^=0x08;
_delay_ms(200);
PORTE ^=0x00;
} // system behaviour
}
}
Płytka:
Z pinów E idzie wyprowadzenie na diody, z B na klawiaturę.