18
Az LCD kijelző programozása

Az LCD kijelző programozása

  • Upload
    melina

  • View
    29

  • Download
    0

Embed Size (px)

DESCRIPTION

Az LCD kijelző programozása. Az ismeretszerzés menete. 2X16 karakter Lábkiosztás: Interface Pin Function. Mikroprocesszor. A data lábakon ami megjelenik az adat? Vagy utasítás? Adat jön: RS High, azaz logikai 1 Utasítás jön: RS Low, azaz logikai 0 Hogyan jeleníti meg a karaktereket: - PowerPoint PPT Presentation

Citation preview

Page 1: Az LCD kijelző programozása

Az LCD kijelző programozása

Page 2: Az LCD kijelző programozása

Az ismeretszerzés menete

Az eszköz dokumentációjának tanulmányozása:Mi a felépítése?

Hogyan működik?

A próbapanel tanulmányozása:Fizikailag hogyan kapcsolódik az eszköz az AVR-hez?

A mások által írt

vezérlőprogramok lcd.c ill. lcd.h tanulmányozása,Beillesztése a saját projektbe

Az AVR dokumentációjának tanulmányozása

Page 3: Az LCD kijelző programozása

2X16 karakter

Lábkiosztás:

Interface Pin Function

Page 4: Az LCD kijelző programozása
Page 5: Az LCD kijelző programozása

Mikroprocesszor

Page 6: Az LCD kijelző programozása
Page 7: Az LCD kijelző programozása

A data lábakon ami megjelenik az adat? Vagy utasítás?

Adat jön: RS High, azaz logikai 1

Utasítás jön: RS Low, azaz logikai 0

Hogyan jeleníti meg a karaktereket:

2X16 bd karakter: ennyi memóriacím a DisplayDataRAM-ban. Képernyő memória.

AC regiszter: A DDRAM egy címére mutat.

Pld: bal felső karakter kezdőcíme: 00

Baloldali szomszéd: 01 (látszik, hogy egy karakter 8 bitből van felépítve.)

Alsó sor kezdete balról: 40, jobb alsó sarok 4F

Hogyan lesz a 8 bites kódból karakter?

CGROM – beépített karakterek

CGRAM - átprogramozható

Page 8: Az LCD kijelző programozása
Page 9: Az LCD kijelző programozása

Ha adat érkezik (RS bit H vagy L) és R/W akkor az adat a DDRAM megfelelő helyére (ahol a kurzor éppen áll) kerül és az adatnak megfelelő karakter megjelenik.

Ha utasítás érkezik akkor valami történik a kurzorral, a képernyővel stb.

Page 10: Az LCD kijelző programozása
Page 11: Az LCD kijelző programozása

A próbapanel kapcsolási rajzán megnézzük, hol az LCD

A föld és a logikai áramköröknek az 5V be van kötve, elvileg.

Az A i/O porthoz van kötve az LCD.

R/W földelve van. Csak írhatunk az LCD-re.

PA0 és PA1 a vezérlő bitek, PA2,3,4,5 a 4 bites adatátvitelre használható. Egy karaktert (8 bit) két részletben kell küldeni.

PA 6,7 nem használt.

Van egy poti ami a fényerőt szabályozza, (PT1) de lehet, hogy jumperelni kell.

Page 12: Az LCD kijelző programozása

/***************************************************************************//* *//* LCD kijelzo kezelo fuggvenyei *//* *//***************************************************************************/

/* PA0 - az LCD kijelzo RS (Reset / Torlo) laba (4 lab) *//* Fold - R/~W (Read / ~Write) csak irni tudunk az LCD kijelzobe(5 lab) *//* PA1 - E (Enable / Engedelyezo) lab (6 lab) */

/* PA2-PA5 - az LCD kijelzo DB4-DB7 adatbemenetei */

/***************************************************************************/

#include <avr/io.h>#include <util/delay.h>#include "lcd.h"

/*#define RS PA0 //Az LCD kijelzo RS jelenek az azonositoja#define EN PA1 //Az LCD kijelzo E jelenek az azonositoja#define TIME 5 //Alapkesleltetes az MCU (1 * 8) MHz-es orajelnel*/

Page 13: Az LCD kijelző programozása

/*-----------------Az LCD kijelzo adatbeirasanak fuggvenye-----------------*/void lcd4_dat(unsigned char p) //"p" az adat byte-ja{ PORTA |= _BV(RS) | _BV(EN); //RS = EN = 1 jel PORTA &= 0xC3;

//A 8 bites adat felso nibble-jenek kiadasa a DB4-DB7 adatsinre PORTA |= ((p & 0xF0) >> 2); _delay_ms(TIME / 2); //Az EN jel idotartartamanak megadasa

PORTA &= ~_BV(EN); //EN = 0. Az LCD kijelzo-utasitas beirasanak frontja _delay_ms(5 * TIME / 2); //A kijelzo-utasitas vegrehajtasi idonek megadasa PORTA |= _BV(EN); //EN = 1 jel PORTA &= 0xC3;

//A 8 bites adat also nibble-jenek kiadasa a DB4-DB7 adatsinre PORTA |= ((p & 0x0F) << 2); _delay_ms(TIME / 2); //Az EN jel idotartartamanak megadasa PORTA &= ~_BV(EN); //EN = 0. Az LCD kijelzo-utasitas beirasanak frontja _delay_ms(5 * TIME / 2); //A kijelzo-utasitas vegrehajtasi idonek megadasa

} //Az "lcd4_dat" fuggveny vege

Page 14: Az LCD kijelző programozása

/*----------------Az LCD kijelzo utasitasbeirasanak fuggvenye--------------*/void lcd4_com(unsigned char p) //"p" az utasitas byte-ja{ PORTA &= ~_BV(RS); //RS = 0 jel PORTA |= _BV(EN); //EN = 1 jel PORTA &= 0xC2;

//A 8 bites LCD kijelzo-utasitas felso nibble-jenek kiadasa a//DB4-DB7 adatsinre PORTA |= ((p & 0xF0) >> 2); _delay_ms(TIME); //Az EN jel idotartartamanak megadasa

PORTA &= ~_BV(EN); //EN = 0. Az LCD kijelzo-utasitas beirasanak frontja _delay_ms(5 * TIME); //A kijelzo-utasitas vegrehajtasi idonek megadasa PORTA |= _BV(EN); //EN = 1 jel PORTA &= 0xC2;

//A 8 bites LCD kijelzo-utasitas also nibble-jenek kiadasa a//DB4-DB7 adatsinre PORTA |= ((p & 0x0F) << 2); _delay_ms(TIME); //Az EN jel idotartartamanak megadasa PORTA &= ~_BV(EN); //EN = 0. Az LCD kijelzo-utasitas beirasanak frontja _delay_ms(5 * TIME); //A kijelzo-utasitas vegrehajtasi idonek megadasa

} //Az "lcd4_com" fuggveny vege

Page 15: Az LCD kijelző programozása

/*---------------------------Az LCD kijelzo inicializalasa----------------*/void lcd4_init(void) //4 bites uzemmod, villogo kurzor{ lcd4_com(0x33); //Elokeszites _delay_ms(10 * TIME); lcd4_com(0x32); //4 bit, 2 sor lcd4_com(0x28);

lcd4_com(0x08); //Az LCD kijelzo teljes kikapcsolasa

lcd4_com(0x01); //Az LCD kijelzo torlese _delay_ms(10 * TIME); lcd4_com(0x06); //A kurzor eltolasa jobbra lcd4_com(0x0D); //Az LCD kijelzo bekapcsolasa, villogo kurzor

} //Az "lcd4_init" fuggveny vege

Page 16: Az LCD kijelző programozása

MintaprojektAz lcd.c kerüljön a makefile SRC sorába!

#include <avr/io.h> //Az I/O konyvtar#include <util/delay.h> //A kesleltetes-beallitas konyvtar#include <avr/sleep.h>#include "lcd.h"

Page 17: Az LCD kijelző programozása

int main(void) //A foprogram kezdete{ DDRA = 0xFF; //A PORT A kimenet PORTA = 0xC0; //A PORT A (PA0-PA5) kimeneteit 0-ra allitjuk, a (PA6-PA7) - 1-re lcd4_init(); //Az LCD kijelzo inicializalasa (4 bit, 2 sor)

//A szoveg kezdete lcd4_dat('H'); lcd4_dat('e'); lcd4_dat('l'); lcd4_dat('l'); lcd4_dat('o'); lcd4_dat(','); lcd4_dat(' '); lcd4_dat('v'); lcd4_dat('i'); lcd4_dat('l'); lcd4_dat('a'); lcd4_dat('g'); lcd4_dat('!');//A szoveg vege

lcd4_com(0xC0); //Beiras az LCD kijelzo masodik soraba lcd4_dat('H'); lcd4_dat('e'); lcd4_dat('l'); lcd4_dat('l'); lcd4_dat('o'); lcd4_dat(','); lcd4_dat(' '); lcd4_dat('v'); lcd4_dat('i'); lcd4_dat('l'); lcd4_dat('a'); lcd4_dat('g'); lcd4_dat('!');

sleep_cpu(); //A MPU "elaltatasa" return(0); //A "main" program sikeres befejezese

}

Page 18: Az LCD kijelző programozása

• Feladatok:• Mozgassunk egy karaktert az LCD-n.• Az lcd-n írjuk ki, ha a futófény balra vagy jobbra megy.