4. Wyświetlacz LCD
EasyWeb2 pracuje na procesorze z serii 1xx i nie zawiera wbudowanego sterownika
wyświetlacza. Wykorzystuje on do wyświetlania specjalizowany układ wyświetlacza LCD z
własnym sterownikiem. Rolę sterownika pełni układ firmy Hitach HD 44780. Do sterownika
mikrokontroler wysyła tylko dane (które mają być wyświetlane) i instrukcje (w jaki sposób
mają być wyświetlane).
Funkcje pinów układu HD44780
Wyświetlacz mo\e pracować z ośmio- bądz cztero- bitową magistralą danych.
Zazwyczaj w systemach mikroprocesorowych stosuje się tryb pracy z czterobitową
magistralą danych. Oprócz linii danych DB4-DB7, do wyświetlacza podłączone są trzy linie
sterujące E,RS,R/W oraz zasilanie.
Sprawdzmy, w jaki sposób odbywa się komunikacja mikrokontrolera z układem HD44780.
Układ ma 2 8-bitowe rejestry rejestr instrukcji IR, wybierany przy stanie 0 na wejściu RS,
oraz rejestr danych DR, wybierany przy stanie 1 na wejściu RS.
Rejestr IR przyjmuje kody instrukcji (np. ustawienie stanu wyświetlacza, czyszczenie
wyświetlacza, przesunięcie kursora). Rejestr DR przyjmuje dane do przesłania na
wyświetlacz.
HD44780U mo\e pracować w jednym z 2 trybów 4 i 8 bitowym. W układzie easyWeb mamy
podłączone wyjścia P2.4 do P2.7 do lini danych DB0 do DB3 kontrolera wyświetlacza.
Wobec tego układ nale\y ustawić do pracy w trybie 4 bitowym.
Linia RS odpowiada za interpretowanie danych przychodzących do sterownika
wyświetlacza. Gdy linia RS jest w stanie niskim to dane są interpretowane jako
instrukcje, gdy natomiast jest w stanie wysokim to dane są interpretowane jako adres
znaku z tablicy znaków zapisanej w pamięci ROM wyświetlacza. I na wyświetlaczu
pojawia się znak z tej właśnie tablicy.
Linia R/W informuje sterownik wyświetlacza czy mamy zamiar czytać, czy te\ pisać
do wyświetlacza. W EasyWeb linia ta jest na stałe podłączona do masy, czyli
mo\liwy jest tylko zapis. Takie rozwiązanie powoduje niewielkie zmniejszenie
funkcjonalności wyświetlacza, ale sprawia, \e odchodzi nam problem sterowania tą
linią.
Linia E słu\y do aktywowania zapisu danych do układu i powinno być aktywna po podaniu
danych na linie danych.
Wysłanie instrukcji do układu powoduje ustawienie flagi BF, która jest aktywna a\ do
przetworzenia bie\ącej instrukcji i w tym czasie inne instrukcje nie są akceptowane.
Kiedy RS = 0 i R/S = 1 , BF jest podłączona do wyjścia DB7. Następna instrukcja mo\e być
wysłana po sprawdzeniu, \e BF jest równa 0.
Komendy Wyświetlacza
Na podstawie tabeli mo\emy zdefiniować komendy wyświetlacza.
#define CLR_DISP 0x01 // clear display
#define CUR_HOME 0x02 // return home
#define ENTRY_INC 0x06 // entry mode increment
#define ENTRY_INC_ROL 0x07 // entry mode increment with rol
data
#define ENTRY_DEC 0x04 // entry mode decrement
#define ENTRY_DEC_ROL 0x05 // entry mode decrement witch rol
dat
#define DISP_OFF 0x08 // all display off
#define DISP_ON 0x0c // all display on
#define DATA_ROL_LEFT 0x18 // rol data left
#define DATA_ROL_RIGHT 0x1c // rol data right
#define CUR_SHIFT_LEFT 0x10 // shift coursor left
#define CUR_SHIFT_RIGHT 0x14 // shift coursor right
#define DD_RAM_ADDR 0x80 // set DD_RAM
#define DD_RAM_ADDR2 0xc0 // set CG_RAM
#define DD_RAM_ADDR3 0x28 //
#define CG_RAM_ADDR 0x40 //
INICJALIZACJA Wyświetlacza
Wiemy ju\ jak przesyłać dane do sterownika. Jednak zanim zaczniemy to robić
trzeba jeszcze zainicjować sterownik wyświetlacza. Po pierwsze musi być ustalony
tryb pracy magistrali. W tym przypadku trzeba ustalić tryb 4-bitowy. Poniewa\ po
włączeniu zasilania występują stany nieustalone, nie wiadomo, w jakim trybie jest
ustawiony interfejs. W tym celu trzykrotnie wysyła się do sterownika komendę
inicjującą tryb ośmiobitowy a następnie komendę inicjującą tryb czterobitowy
(pamiętamy, Se RS jest w stanie niskim). Sprawia to, \e przechodzimy w tryb
czterobitowy. Następnie trzeba włączyć wyświetlacz, ustawić parametry wyświetlacza,
a po dokonaniu tego wyczyścić wyświetlacz. Opis wszystkich rozkazów wyświetlacza
znajduje się w tabeli.
Zalecenia producenta dotyczące sposobu inicjalizacji układu są następujące:
Na podstawie schematu mo\emy napisać kod inicjacji układu:
void InitLCD(void)
{
bitclr(P2OUT,RS);
Delay100ms(); //Delay 100ms
LCD_Data |= BIT4 | BIT5; //D7-D4 = 0011
LCD_Data &= ~BIT6 & ~BIT7;
_E(); //toggle E for LCD
Delayx10ms(); //10ms
_E(); //toggle E for LCD
Delayx10ms(); //10ms
_E(); //toggle E for LCD
Delayx10ms(); //10ms
LCD_Data &= ~BIT4;
_E(); //toggle E for LCD
SEND_CMD(DISP_ON);
SEND_CMD(CLR_DISP);
Delay100ms();
}
Opis podstawowych funkcji w powy\szym kodzie:
bitclr(P2OUT,RS);
Wyzerowanie bitu RS w porcie P2
Delay100ms();
Pętla opózniająca 100ms
_E();
Wysłanie impulsu na wyjście E wyświetlacza w celu aktywacji danych
ustawionych na liniach DB4-DB7
SEND_CMD(DISP_ON);
Wysłanie komendy do wyświetlacza DISP_ON
Podstawowe procedury obsługi wyświetlacza
Podstawowe funkcje obsługi wyświetlacza stanowią dwie procedury: SEND_CMD i
SEND_CHAR
void SEND_CMD (unsigned char e)
{
int temp;
Delayx100us(10); //10ms
temp = e & 0xf0; //get upper nibble
LCD_Data &= 0x0f;
LCD_Data |= temp; //send CMD to LCD
bitclr(P2OUT,RS); //set LCD to CMD mode
_E(); //toggle E for LCD
temp = e & 0x0f;
temp = temp << 4; //get down nibble
LCD_Data &= 0x0f;
LCD_Data |= temp;
bitclr(P2OUT,RS); //set LCD to CMD mode
_E(); //toggle E for LCD
}
void SEND_CHAR (unsigned char d)
{
int temp;
Delayx100us(5); //.5ms
temp = d & 0xf0; //get upper nibble
LCD_Data &= 0x0f;
LCD_Data |= temp;
bitset(P2OUT,RS); //set LCD to data mode
_E(); //toggle E for LCD
temp = d & 0x0f;
temp = temp << 4; //get down nibble
LCD_Data &= 0x0f;
LCD_Data |= temp;
bitset(P2OUT,RS); //set LCD to data mode
_E(); //toggle E for LCD
}
Napisy na wyświetlaczu
Mimo, \e na wyświetlaczu jednocześnie mo\emy wyświetlać dwie linie danych po
16 znaków, to w pamięci danych wyświetlacza DD_RAM dla ka\dej z linii
wyświetlacza przyporządkowanych jest 40 znaków (00h-27h -górna linia , 40h-67h
dolna linia).
Przyporządkowanie adresów w DD_RAM dla pozycji na wyświetlaczu
Pozycja 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Linia 1 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Linia 2 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
Sprawia to, \e mo\emy przesuwać dane na wyświetlaczu. Przesuwnie danych odbywa
się jednocześnie dla obu linii, ale dzieje się to niezale\nie, co oznacza, Se dane nie
przesuwają się pomiędzy liniami.
Adresy DD_RAM po obrocie w lewo
Pozycja 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Linia 1 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
Linia 2 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50
Po obrocie danych w prawo bądz w lewo zmianie ulegają adresy znaków w pamięci
DD_RAM. W ten sposób mo\na uzyskać tzw. efekt baneru .
Adresy DD_RAM po obrocie w prawo
Pozycja 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Linia 1 27 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E
Linia 2 67 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E
Definicje własnych znaków
W pamięci CG_RAM mo\na zdefiniować 8 własnych. Na ka\dy znak przeznaczonych
jest 8 bajtów w pamięci CG_RAM. Znaki definiuje się po przez odpowiednie ustawianie
bitów D4-D0 (bity D7-D5 są nieistotne) w wysyłanym bajcie.
Zadania
1. Napisać funkcję wyświetlającą napis na ekranie wyświetlacza.
2. Napisać funkcję wyświetlającą napis na ekranie wyświetlacza z mo\liwością
zdefiniowania przewijania tekstu w prawo i lewo.
3. Napisać funkcję wyświetlającą napis na ekranie wyświetlacza z mo\liwością
zdefiniowania przewijania z pierwszej do drugiej linii wyświetlacza.
4. Napisać funkcję wyświetlającą na ekranie wyświetlacza liczbę 32 bitową.
5. Napisać funkcję wyświetlającą na ekranie wyświetlacza liczbę szesnastkową i binarną.
6. Napisać program wyświetlający na ekranie napis podany przez prowadzącego zajęcia
7. Napisać program wyświetlający na ekranie napis podany przez prowadzącego zajęcia,
u\ywający zdefiniowanych w pamięci wyświetlacza własnych znaków (np. ąęz\ó)
Wyszukiwarka
Podobne podstrony:
MSP430 DirectivesKlawisze lcdWyświetlacz LCDMSP430 Opcodesflash nokia 3310 lcd analyzer audioBEKO LCD 1512MSP430 2dMacrosLCD test lpcMSP430 2dDependentMSP430x13x, MSP430F14x, MSP430F15x, MSP430F16x Code Examples TI COM ?T140?molist CPodswietlanie LCDLCD blueLCD L170E1MSP430 2dCharswięcej podobnych podstron