środa, 21 grudnia 2011

LCD 2x16 i LPC1768

Próbowałem przeportować swoją wspaniałą bibliotekę z AVRów na LPC1768, jednak mi się to nie udało. Napisałem własną od podstaw, posiada ona jednak pewne braki w porównaniu do tej z AVrów. Sterowanie LCD jest za pomocą na sztywno ustawionych czasów a nie przez odpytywanie wyświetlacza jak to miało miejsce. Jednak jak się zbiorę w sobie to poprawię ten błąd. Biblioteka składa się z dwóch plików lcd2x16.c oraz lcd2x16.h. Jedynie funkcja delay znajduje się w pliku głównym programu i w zasadzie też wymaga poprawy. Odmierza czas w ms a oparta jest o timer SysTick. Jej definicja wygląda tak:
void delay(uint32_t interval)
{
 uint32_t start = SysTickCnt;
 while (SysTickCnt - start < interval)
  ;
}
Ustawienie timera wygląda tak:
SysTick_Config(SystemCoreClock / 1000);
Natomiast przerwanie do SysTick:
void SysTick_Handler(void)
{
 SysTickCnt++;
}
LCD jest podpięty do LPC1768 w następujący sposób:
P1.24 - D4
P1.25 - D5
P1.26 - D6
P1.27 - D7
P1.28 - RS
P1.29 - RW
P1.31 - EN

Na chwilę obecną biblioteka posiada następujące funkcje:
 void LcdPinValue(uint32_t pin, uint8_t value)
Przy użyciu tej funkcji ustawia się wybraną wartość na konkretny jeden pin wyświetlacza a następnie wartość ta jest zabezpieczana za pomocą maski, więc nie można zmienić wartości tego pinu bez zdjęcia maski. Powstała ona z myślą o ustawianiu wartości dla pinów RS, RW oraz EN.
 void LcdWriteCmd(uint8_t command)
Fynkcja odpowiadająca za wysyłanie komend na wyświetlacz, dodatkowo w bibliotece znajdują się makra z dostępnymi komendami dla wyświetlacza.
 void LcdInit(void)
Standardowa funkcja inicjująca wyświetlacz. Na jej końcu znajdują się funkcje wysyłające komendy takie jak wyłączenie kursora, przesuwanie tekstu itp.
 void LcdPrint(const char *s)
Funkcja odpowiadająca za wyświetlenie stringu na LCD.
 void LcdPrintChar(char ch)
Ta wyświetla tylko pojedynczy znak.
 void LcdGoToXY(uint8_t x, uint8_t y)
Funkcja która przesuwa kursor do dowolnego miejsca na wyświetlaczu. Wiersz pierwszy to y=0;
 void LcdPrintXY(uint8_t x, uint8_t y, char *s)
Funkcja wyświetla string w wybranych współrzędnych. Zasady obowiązują tak jak wyżej.

Gdyby ktoś miał problem ze znalezieniem poprawnych plików startowych to je zamieszczam: LPC17xx.ld, Makefile, startup_LPC17xx.c, startup_LPC17xx.d.

Na koniec załączam jeszcze bibliotekę dla AVRów lcd2x16.clcd2x16.h.

Brak komentarzy:

Prześlij komentarz