Witam.
Jestem nowy na forum i mam do was pytanie. Mam taki program:
main.c
#include <avr/io.h>
#include "keys.h"
#define LED1 (1<<PD7)
#define LED1_TOG PORTD ^= LED1
void moje_miganie_led(void) {
LED1_TOG;
}
int main(void) {
DDRD |= LED1;
key_init();
while(1) {
moj_klawisz( moje_miganie_led ); // TU ZASZŁA ZMIANA !!!
}
}
keys.c
#include <avr/io.h>
#include "keys.h"
// inicjalizacja biblioteki
void key_init(void) {
PORTC |= KEY1;
}
// obsługa klawisza
void moj_klawisz( void (*fun_wsk)(void) ) { // TU ZASZŁA ZMIANA !!!
static uint16_t key_lock;
if( !key_lock && !(PINC & KEY1 ) ) {
key_lock=50000;
// reakcja na PRESS (wcinięcie przycisku)
//LED1_TOG;
//PORTD ^= (1<<PD7);
if( fun_wsk ) fun_wsk(); // TU ZASZŁA ZMIANA !!!
} else if( key_lock && (PINC & KEY1 ) ) key_lock++;
}
keys.h
#ifndef KEYS_H_
#define KEYS_H_
#define KEY1 (1<<PC7)
void key_init(void);
void moj_klawisz( void (*fun_wsk)(void) );
#endif /* KEYS_H_ */
Możecie koledzy wytłumaczyć mi o co chodzi z linjką:
void moj_klawisz( void (*fun_wsk)(void) );
Pozdrawiam