Ovládání LCD
Ing. Josef Grosman
TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií
Tento materiál vznikl v rámci projektu ESF CZ.1.07/2.2.00/07.0247 Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření, který je spolufinancován Evropským sociálním fondem a státním rozpočtem ČR
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
LCD
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
AT89C51CC03
LCD
2 řádky po 16 znacích, znaky bodově, maticově
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
AT89C51CC03
Řadič LCD HD44780
LCD
2 řádky po 16 znacích, znaky bodově, maticově
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
Řízení, 3 bity
Řadič LCD HD44780
AT89C51CC03 Data, 4 bity
Ovládání LCD → ovládání řadiče
LCD
2 řádky po 16 znacích, znaky bodově, maticově
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
Řízení, 3 bity
Řadič LCD HD44780
AT89C51CC03 Data, 4 bity
Ovládání LCD → ovládání řadiče AT89C51CC03
HD44780
význam
P2.4
RS
0 – příkaz (povel, instrukce) 1 – data
P2.5
R/W
0 – zápis 1 – čtení
P2.6
EN
Po dobu EN=1 probíhá zápis/čtení
P2.0 - P2.3
Data 4..7
Data v čtyřbitovém režimu (nibble)
LCD
2 řádky po 16 znacích, znaky bodově, maticově
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
Řízení, 3 bity
Řadič LCD HD44780
AT89C51CC03
LCD
Data, 4 bity
2 řádky po 16 znacích, znaky bodově, maticově
Ovládání LCD → ovládání řadiče AT89C51CC03
HD44780
význam
P2.4
RS
0 – příkaz (povel, instrukce) 1 – data
P2.5
R/W
0 – zápis 1 – čtení
P2.6
EN
Po dobu EN=1 probíhá zápis/čtení
P2.0 - P2.3
Data 4..7
Data v čtyřbitovém režimu (nibble)
EN Data
4. – 7. bit
0. – 3. bit
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
HD44780 Display Data RAM - DDRAM 0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
.
.
.
.
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
.
.
.
.
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
HD44780 Display Data RAM - DDRAM 0
AC
40
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
.
.
.
.
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
.
.
.
.
adresa
41
42
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
HD44780 Display Data RAM - DDRAM 0
AC
1
2
3
5
6
7
8
9
A
B
C
D
E
F
.
.
.
.
46
47
48
49
4A
4B
4C
4D
4E
4F
.
.
.
.
adresa DR
40
4
41
42
43
data 44
45
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
HD44780 Display Data RAM - DDRAM 0
AC
1
2
3
5
6
7
8
9
A
B
C
D
E
F
.
.
.
.
46
47
48
49
4A
4B
4C
4D
4E
4F
.
.
.
.
adresa DR
40
4
41
42
43
data 44
45
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
HD44780 Display Data RAM - DDRAM 0
AC
1
2
3
5
6
7
8
9
A
B
C
D
E
F
.
.
.
.
46
47
48
49
4A
4B
4C
4D
4E
4F
.
.
.
.
adresa DR
40
4
41
42
43
IR
data 44
45
příkaz
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
HD44780 Display Data RAM - DDRAM 0
1
AC
2
3
5
6
7
8
9
A
B
C
D
E
F
.
.
.
.
46
47
48
49
4A
4B
4C
4D
4E
4F
.
.
.
.
adresa DR
40
4
41
42
43
IR
RS
data 44
45
příkaz
R/W význam
1
0
zápis dat – do DR a DDRAM
1
1
čtení dat - řídké
0
0
zápis příkazu – do IR
0
1
čtení stavu
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
HD44780 Display Data RAM - DDRAM 0
1
AC
2
3
5
6
7
8
9
A
B
C
D
E
F
.
.
.
.
46
47
48
49
4A
4B
4C
4D
4E
4F
.
.
.
.
BF
a
a
a
a
a
a
a
adresa DR
40
4
41
42
43
IR
RS
data 44
45
příkaz
R/W význam
1
0
zápis dat – do DR a DDRAM
1
1
čtení dat - řídké
0
0
zápis příkazu – do IR
0
1
čtení stavu
AC - adresa
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
HD44780 Display Data RAM - DDRAM 0
1
AC
2
3
5
6
7
8
9
A
B
C
D
E
F
.
.
.
.
46
47
48
49
4A
4B
4C
4D
4E
4F
.
.
.
.
BF
a
a
a
a
a
a
a
adresa DR
40
4
41
42
43
IR
RS
data 44
45
příkaz
R/W význam
1
0
zápis dat – do DR a DDRAM
1
1
čtení dat - řídké
1
Operace zápisu probíhá, nerušit
0
0
zápis příkazu – do IR
0
Volno pro další operaci
0
1
čtení stavu
AC - adresa
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
Příkaz 00000001
Nulování displeje, mezery (20H) → obsah DDRAM, 0 → AC
0000001x
Návrat kurzoru, 0 → AC, DDRAM se nemění
000001bb
Vstupní mod, posuv kurzoru/displeje při vkládání znaků - 00000110
00001bbb
Řízení displeje, zapnutí/vypnutí displeje a kurzoru (blikání)
0001bbbb
Pusuv kurzoru/displeje (bez vkládání znaků)
001bbbxx
Nastavení displeje, 8bitů/4bity, řádky LCD(1/2), matice znaku(5x7/5x10) 2 řádkový LCD, 4 bitový mód: 00101000
01aaaaaa
Speciální – pro generování znaků
1aaaaaaa
Změna adresy aaaaaaa → AC (11000000 – na 2. řádek)
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
Inicializace 1. Automatická inicializace – po připojení napájení (Power On) - nulování displeje - nastavení displeje na 8bitový mód, 1 řádkový LCD, 5x7 bodů (00110000) - displej a kurzor vypnut (00001000) - posuv kurzoru doprava při vkládání znaků (00000110)
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
Inicializace 1. Automatická inicializace – po připojení napájení (Power On) - nulování displeje - nastavení displeje na 8bitový mód, 1 řádkový LCD, 5x7 bodů (00110000) - displej a kurzor vypnut (00001000) - posuv kurzoru doprava při vkládání znaků (00000110)
2. SW inicializace - nezbytná pro 4 bitový mód a 2 řádkový LCD - minimálně 15 ms po připojení napájení - příkaz: 0011xxxx (pouze nibble) - čekání min. 4,1 ms - příkaz: 0011xxxx (pouze nibble) - čekání min. 100 s - příkaz: 0011xxxx (pouze nibble) - čekání až BF=0 (dále po každém přenosu) - příkaz: 0010xxxx (pouze nibble), přepnutí na 4 bitový mód - příkaz: 00101000 4 bitový mód, 2 řádkový displej - příkaz: 00000001 nulování displeje - příkaz: 00000110 posuv kurzoru doprava při vkládání znaků - příkaz: 00001100 zapnutí displeje (00001110 – i kurzoru)
Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
V souboru LCD.C funkce: void InitLcd(void) - pro inicializaci void putchar(char c) – využívá funkce printf
Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
V souboru LCD.C funkce: void InitLcd(void) - pro inicializaci void putchar(char c) – využívá funkce printf Poznámka: znak ‘\n’ nebo zápis 17. znaku na řádek: přechod na 2. řádek, je-li volný, jinak rolování 2. řádku na 1. a psaní na 2.řádek znak ‘\r’: za začátek 2. řádku a jeho následné přepisování funkce printf() má implementováno pouze zobrazení celých čísel – lze použít specifikátory %d,%x,%c nepoužívat specifikátory %f,%g,%e .
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
Příkládek - C Po spuštění se na displeji objeví informace: Program 1 stisk lib. klav. Po stisknutí klávesy na klávesnici se její znak zobrazí na LCD: stisknuto: h z h – hodnota (0 až 15) z – odpovídající znak (0 – 9, A – D, #,*) Znak zůstane zobrazen i po uvolnění klávesy až do stisknutí jiné klávesy Současně na sloupcových diodách svítí příslušná LED ( klávesa 0 až 9), nebo žádná nesvítí (ostatní klávesy) – viz příklad pro Ledbar.
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
#include
#include <stdio.h> #include "typy.h" void LBarInit(void); void LedBar(word); bit KeyHit(void); byte KeyByte(void); char KeyChar(void);
void LcdInit(void);
byte klav=0xFF;
void main(void) { LBarInit(); LcdInit(); printf("Program c.1\nstisk lib. klav."); while(1) { if(KeyHit()) { byte key = KeyByte(); if(key!=klav) { char znak=KeyChar(); LedBar(1<<(klav=key)); printf("\nstisknuto\n%3d %c",klav,znak); } } } }
Ovládání LCD Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření
#include #include <stdio.h> #include "typy.h" void LBarInit(void); void LedBar(word); bit KeyHit(void); byte KeyByte(void); char KeyChar(void);
void LcdInit(void); char ToChar(byte); byte klav=0xFF;
void main(void) { LBarInit(); LcdInit(); printf("Program c.1\nstisk lib. klav."); while(1) { if(KeyHit()) { byte key = KeyByte(); if(key!=klav) { char znak=ToChar(key); LedBar(1<<(klav=key)); printf("\nstisknuto\n%3d %c",klav,znak); } } } } char ToChar(byte b) { switch(b) { case 14: return ‘*’; case 15: return ‘#’; default: if(b<10) return (b+’0’); else return (b-10+’A’); } }