Selamlar,
Karakter LCD de en fazla 8 karakter tanımlayabilliyoruz.8 den fazla karakter tanımlamak için herhangi bir yöntem, teknik var mı?
Sanıyorum aynı ekranda görünecek karakter
adedi 8, başka ekran için yeni karakter
düzeni yapılabilir. Ancak ekran değişmeden
karakter dizisi değişmemesi gerekli...
Saygılar...
zaman probleminiz yok ise yeni bir karakter yükleyip onu bastırabilirsiniz,
Yani lcd içine max 8 tane koyabiliyoruz, fakat program içinde lazım olan özel karakteri o 8 li register a istediğimiz zaman atabiliriz.
İlk 8 karakteri tanımlayıp ekrana yazdırıyorum.
2. 8'liyi tanımladığım zaman ekranda son tanımladığım karakterler ilk 8'linin üstüne yazılıyor.
Yani en son ne tanımlıysa o ekrana yazılıyor.
Fakat istediğim hepsini yan yana yazdırabilmek.
avr'ler için yazılmış procyon-avr-lib'de lcd kütüphanesinde 16 adet karakter tanımlanmış
// custom LCD characters
unsigned char __attribute__ ((progmem)) LcdCustomChar[] =
{
0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, // 0. 0/5 full progress block
0x00, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x00, // 1. 1/5 full progress block
0x00, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, // 2. 2/5 full progress block
0x00, 0x1F, 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0x00, // 3. 3/5 full progress block
0x00, 0x1F, 0x1E, 0x1E, 0x1E, 0x1E, 0x1F, 0x00, // 4. 4/5 full progress block
0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, // 5. 5/5 full progress block
0x03, 0x07, 0x0F, 0x1F, 0x0F, 0x07, 0x03, 0x00, // 6. rewind arrow
0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, // 7. stop block
0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, // 8. pause bars
0x18, 0x1C, 0x1E, 0x1F, 0x1E, 0x1C, 0x18, 0x00, // 9. fast-forward arrow
0x00, 0x04, 0x04, 0x0E, 0x0E, 0x1F, 0x1F, 0x00, // 10. scroll up arrow
0x00, 0x1F, 0x1F, 0x0E, 0x0E, 0x04, 0x04, 0x00, // 11. scroll down arrow
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 12. blank character
0x00, 0x0E, 0x19, 0x15, 0x13, 0x0E, 0x00, 0x00, // 13. animated play icon frame 0
0x00, 0x0E, 0x15, 0x15, 0x15, 0x0E, 0x00, 0x00, // 14. animated play icon frame 1
0x00, 0x0E, 0x13, 0x15, 0x19, 0x0E, 0x00, 0x00, // 15. animated play icon frame 2
0x00, 0x0E, 0x11, 0x1F, 0x11, 0x0E, 0x00, 0x00, // 16. animated play icon frame 3
};
karakterleri çağırmak için de aşağıdaki fonksiyon yazılmış
void lcdLoadCustomChar(u08* lcdCustomCharArray, u08 romCharNum, u08 lcdCharNum)
{
register u08 i;
u08 saveDDRAMAddr;
// backup the current cursor position
saveDDRAMAddr = lcdControlRead() & 0x7F;
// multiply the character index by 8
lcdCharNum = (lcdCharNum<<3); // each character occupies 8 bytes
romCharNum = (romCharNum<<3); // each character occupies 8 bytes
// copy the 8 bytes into CG (character generator) RAM
for(i=0; i<8; i++)
{
// set CG RAM address
lcdControlWrite((1<<LCD_CGRAM) | (lcdCharNum+i));
// write character data
lcdDataWrite( pgm_read_byte(lcdCustomCharArray+romCharNum+i) );
}
// restore the previous cursor position
lcdControlWrite(1<<LCD_DDRAM | saveDDRAMAddr);
}
fonksiyonda geçen LCD_DDRAM ve LCD_CGRAM da şu şekilde tanımlanmış
#define LCD_CGRAM 6 // DB6: set CG RAM address
#define LCD_DDRAM 7 // DB7: set DD RAM address
görüleceği gibi yeni tanımlanan karakterleri ekrana basmadan önce o anki kursor pozisyonunu saklıyor.
// backup the current cursor position
saveDDRAMAddr = lcdControlRead() & 0x7F;
sonra istenen karakteri yükleyip kursoru eski yerine koyuyor.
bunlar belki senin sorununu çözmende yardımcı olur.