Skoro zaproponowałem uporządkowanie plików w tym kursie to na początek pokażę jak to powinno wyglądać, może na przykładzie wyświetlacza LCD. Nowa biblioteka sklada się z dwóch plików:
- pliku źródłowego alfa_lcd.c;
- pliku nagłówkowego alfa_lcd.h
Plik nagłówkowy musi być wczytany w każdym module, który chce korzystać z funkcji napisanych dla wyświetlacza. Plik zawiera definicję nazw pinów do obsługi wyświetlacza oraz prototypy funkcji które będą dostępne w innych modułach. Do zabezpieczenia przed wielokrotnym wczytywaniem pliku nagłówkowego w wielu modułach służą dyrektywy kompilatora do warunkowej definicji ( #ifndef, #endif ).
Kod:
/* Plik naglowkowy dla wyswietlacza alfanumerycznego LCD
----------------------------------------------------------------
dyrektyw kompilatora do podlaczenia pliku naglowkowego
#include "alfa_lcd.h" //plik noglowkowy dla alfa. LCD
----------------------------------------------------------------*/
#ifndef alfa_lcd_h
#define alfa_lcd_h //definicja warunkowa
//Konfiguracja - na którym porcie i na wyprowadzeniach puszczamy sterowanie LCD
//Pamiętajcie że numeracja wyprowadzeń PORTU zaczyna sie od "0"
#define DEF_PORT DDRD // DDRA, DDRB, DDRC, DDRD - port do obsługi wyświetlacza
#define LCD_PORT PORTD //wpisujemy, który port ma wysyłać dane do wyświetlacza
//podłączamy odpowiednio do wyjść D7, D6, D5, D4 wyświetlacza
#define LCD_RS 3 //które wyprowadzenie PORTU będzie linią RS
#define LCD_E 2 //które wyprowadzenie portu ma być linią E
//Prototypy funkcji
void init_lcd(void);
void bajt_lcd(unsigned char znak);
void napis_lcd(char tab[]);
#endif
//--------------------------------------------------------------
Plik źródłowy na początku wczytuje własny plik nagłówkowy aby mieć te same definicje pinów, wcześniejsze wczytanie prototypów funkcji też nie przeszkadza a czasem przy skomplikowanych powiązaniach pomiędzy funkcjami nawet się przydaje.
W tym pliku umieszczamy kod źródłowy funkcji wyświetlacza. Bywa tak, że znajdują się tu również pomocnicze funkcje, nazw których nie umieszczamy w pliku nagłówkowym ponieważ są one potrzebne tylko w module wyświetlacza.
Na załączonym obrazku ekran z AVRstudio, na liście plików źródłowych widzimy dodatkowy plik do kompilacji alfa_lcd.c a na liście wczytanych plikow nagłówkowych alfa_lcd_h. Analogicznie należy przerobić plik z funkcjami do obsługi AD9951.
Zmodyfikowane pliki w załączniku, kompilacja poprawna, nie mam w tej chwili modułu do sprawdzenia w układzie.