10/2005 kurs C, LCD

Jeżeli masz jakieś uwagi dotyczące bieżącego lub archiwalnych numerów "Elektroniki dla wszystkich" lub zauważyłeś błędy czy nieścisłości to jest to odpowiednie miejsce aby o tym napisać.
ODPOWIEDZ
jareks91
Użytkownik
Posty: 157
Rejestracja: 15 kwie 2005, 13:30

10/2005 kurs C, LCD

Post autor: jareks91 » 26 gru 2005, 13:57

Witam,
w obsłudze LCD było podane polecenie przejscia do następnej lini typu:
#define LCDC_DDA 0x80

Ja posiadam wyświetlacz z 4 liniami i to polecenie dziala tylko do drugiej lini.
Jakim poleceniem można przejść do 3 i 4 lini??
Pozdrawiam

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 26 gru 2005, 14:31

Konieczne jest włączenie w pierwszym rzędzie trybu dwuliniowego (to trochę mylące, ale tak właśnie jest). Do linii wszystkich linii dostajemy się za pomocą wymienionej komendy. Konieczne jest jedynie poznanie adresów ich początków. Na przykład dla wyświetlacza 4x20 będzie to:
1: 00h
2: 40h
3: 14h
4: 54h

Analiza wykazuje, że linia 3 zaczyna się zaraz po linii 1, 4 zaczyna się zaraz po 2. Tak wiec jeśli posiada Pan moduł 4x16, albo 4x40 adresy początków linii 2 i 4 będą odpowiednio przesunięte.

jareks91
Użytkownik
Posty: 157
Rejestracja: 15 kwie 2005, 13:30

Post autor: jareks91 » 20 mar 2006, 19:53

Wystarczy więc (jesli ktoś korzysta z kursu C) wpisać:
lcd_command(LCDC_DDA | 64); //przejście do drugiej linii
lcd_command(LCDC_DDA | 20); //przejście do trzeciej linii
lcd_command(LCDC_DDA | 84); // przejscie do czwartej linii
Pozdrawiam i dziekuje za pomoc.

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 20 mar 2006, 20:09

jareks91 pisze:Wystarczy więc (jesli ktoś korzysta z kursu C) wpisać:
lcd_command(LCDC_DDA | 64); //przejście do drugiej linii
lcd_command(LCDC_DDA | 20); //przejście do trzeciej linii
lcd_command(LCDC_DDA | 84); // przejscie do czwartej linii
Pozdrawiam i dziekuje za pomoc.
Proponuję Ci także taką sztuczkę:
Do pliku harddef.h dodać następujące linie:

Kod: Zaznacz cały

#define LCD_LINE1 0
#define LCD_LINE2 64
#define LCD_LINE3 20
#define LCD_LINE4 84
Póżniej stałych tych możesz używać normalnie w programie, na przykład:

Kod: Zaznacz cały

lcd_command(LCDC_DDA | LCD_LINE2);
lub

Kod: Zaznacz cały

lcd_command(LCDC_DDA + LCD_LINE2);
(oba ostatnie kody dadzą identyczny efekt - jedynie zapis jest inny)

Zaletą takiej definicji jest bardzo proste dostosowanie programu do zmiany wyświetlacza - polecam takie podejście zamiast używania adresów w sposób jawny.
Koppel pisze:...albo 4x40 adresy początków linii 2 i 4 będą odpowiednio przesunięte.
Tu się trochę zagalopowałem. Z tego co pamiętam wyświetlacz 4x40 znaków ma dwa kontrolery i oddzielne wejścia ENABLE (reszta wyprowadzeń sterujących jest połączona wewnątrz modułu). W związku z tym jego sterowanie trochę różni się od innych modułów.

ODPOWIEDZ