az lcd kijelző programozása
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 PresentationTRANSCRIPT
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
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:
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ó
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.
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.
/***************************************************************************//* *//* 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*/
/*-----------------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
/*----------------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
/*---------------------------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
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"
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
}
• Feladatok:• Mozgassunk egy karaktert az LCD-n.• Az lcd-n írjuk ki, ha a futófény balra vagy jobbra megy.