Zdravím, nezkoušel tu někdo definovat vlastní znaky na alfanumerickém displayi? Jak se dají zapsat do paměti displaye a jak je volat? Děkuji
24.06.2013 (12:45:43)
# IP X
RayeR
:
Radic HD44780 umoznuje nastavit 8 uzivatelsky definovanych znaku (tzn. pokud potrebujeme treba kompletni cestinu, tak je treba ten znakovej generator upravovat podle potreby aktualniho textu a i tak to nemusi nekdy stacit).
Nahrava se tam normalne prikazem do CGRAM takova mala bitmapa, kde kazdej bit definuje 1 bod toho znaku. Kdysi sem si pro to psal knihovnu, tak pro inspiraci:
//***************** nastavi 1 z 8 uzivatelskych znaku v generatoru - ASCII 0-7 z prog. pameti
void lcd_set_user_char_P(Byte asciicode, PGM_P chardata)
{
Byte i;
CLRB(LCD_CTRL, LCD_RS); // RS=0 (posilame ridici prikazy)
lcd_outb4(0x40+asciicode*8); // posli adresu v CGRAM
SETB(LCD_CTRL, LCD_RS);
for (i=0; i<8; i++) // posli 8 Bajtu znaku
lcd_outb4(pgm_read_byte(chardata+i));
lcd_move_cursor(LCD_CURHOME); // vrat kurzor na zacatek
delay_ms(2); // pockej na navrat kurzoru min 1,52ms
}
//***************** definice ruznych znaku pro pouziti s lcd_set_user_char()
#define LCD_CHAR_HEART {0x00,0x0A,0x1F,0x1F,0x0E,0x04,0x00,0x00} // znak srdce
#define LCD_CHAR_DIAMOND {0x00,0x04,0x0E,0x1F,0x0E,0x04,0x00,0x00} // znak kosoctverce
#define LCD_CHAR_CLUB {0x04,0x0E,0x04,0x1B,0x1B,0x04,0x0E,0x00} // znak stromecku
#define LCD_CHAR_SPADE {0x04,0x0E,0x0E,0x1F,0x1F,0x04,0x0E,0x00} // znak listu
#define LCD_CHAR_PACMANR {0x00,0x0E,0x1B,0x1F,0x1C,0x1F,0x0E,0x00} // PACMAN xichtik s otevrenou pusou, doprava
#define LCD_CHAR_PACMANC {0x00,0x0E,0x1B,0x1F,0x1F,0x1F,0x0E,0x00} // PACMAN xichtik se zavrenou pusou
#define LCD_CHAR_PACMANL {0x00,0x0E,0x1B,0x1F,0x17,0x1F,0x0E,0x00} // PACMAN xichtik s otevrenou pusou, doleva
#define LCD_CHAR_DELTA {0x00,0x04,0x04,0x0A,0x0A,0x11,0x1F,0x00} // delta (trojuhelnicek)
#define LCD_CHAR_BAR1 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F} // sloupec - 1 carka pod urovni
#define LCD_CHAR_BAR2 {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F} // sloupec - 2 carky
#define LCD_CHAR_BAR3 {0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F} // sloupec - 3 carky
#define LCD_CHAR_BAR4 {0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F} // sloupec - 4 carky
#define LCD_CHAR_BAR5 {0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F} // sloupec - 5 carek
#define LCD_CHAR_BAR6 {0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F} // sloupec - 6 carek
#define LCD_CHAR_BAR7 {0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F} // sloupec - 7 carek
#define LCD_CHAR_BAR8 {0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F} // sloupec - 8 carek