lcd init
Papp Zoltán
zombi at c2.hu
Thu Sep 14 22:32:01 CEST 2006
2006.09.14. 21:35:20 dátumon Fekete Róbert <frobi at harden.hu> írta:
> üdv Mindenki
>
> van egy aprócska problemám, nem igazán tudom hogy a bascom hogy hova
> rakja
> az lcd initet, de nagy valószínűséggel fixen a progi elejére
> na mivel oda rakja így nem tudom akkor inicializálni amikor akarom
> ezért valamilyen úton módon utólag kell megtennem
> milyen szekvencia kell ahhoz hogy 4 bites módra állítsak egy lcdt ?
> egy 1x16karaktersről van szó amit 2x8-as ban kell kezelni
Hali, azt ugyan nem írtad, hogy milyen LCD-ről van szó, de feltételezem,
hogy HD 44780-as kompatibilis kütyüről.
Itt van egy C-forrás az inicializáláshoz, remélem érthető és át tudod
tenni BASIC-be (nem bonya):
// az alábbi részlet időzítéses alapon fut, ez a legegyszerűbb (nincs
handshaking)
// LcdPort: bit0-3: 4 data bits; bit4: E; bit5: RS
// __delay_cycles(x): x ciklust vár, itt 16MHz-es prociról volt szó, így
x=1-nél ez 62.5 nsec
// lcd_delay(x): x usec várakozás
// megjegyzésekben ott vannak az adatlap szerinti minimális időadatok
// ha már inicializálva van az lcd, akkor valószínűleg a "power on init"
rész már nem kell
void lcd_writedigit(unsigned char data, unsigned char RS)
{
LcdPort=RS<<4; //set RS
__delay_cycles(1); //wait min. 30 nsec
LcdPort=data | 0x20 | RS<<4; //set data, E (0x20) and RS again
__delay_cycles(4); //wait min. 150 nsec
LcdPort&=0xDF; //clear E
__delay_cycles(6); //wait min. 250 nsec
}
void lcd_writebyte(unsigned char data, unsigned char RS)
{
lcd_writedigit(data>>4,RS); //high digit
lcd_writedigit(data & 0x0F,RS); //low digit
}
void lcd_cls()
{
lcd_writebyte(0x01,0);
lcd_delay(1600); //min. 1.53ms
}
void lcd_init(void)
{
// === power on init ====
lcd_delay(10000);
lcd_delay(10000); //min 15ms
lcd_writedigit(0x03,0); lcd_delay(5000); //4.1ms - 8 bit fuction set
lcd_writedigit(0x03,0); lcd_delay(200); //100us - 8 bit function set
lcd_writedigit(0x03,0); lcd_delay(50); //39us - 8 bit functions set
// === init OK, change to 4 bit mode ===
lcd_writedigit(0x02,0); lcd_delay(50); //39us - 4 bit function set
// === setup ===
lcd_writebyte(0x28,0); //function set, set display
lcd_delay(50); //39us
lcd_writebyte(0x08,0); //display off
lcd_delay(50); //39us
lcd_writebyte(0x01,0); //display clear
lcd_delay(1600); //1,53ms
lcd_writebyte(0x06,0); //entry mode set - inc.cursor, disp.shift off
lcd_delay(50); //39us
lcd_cls();
}
--
Papp Zoltán
OneWay Electronics
More information about the Elektro
mailing list