// LCD AC-204 or HD44780, SED1278 compatinle cyllic driver
// ivanspirit@mail.bg

// trans literation for lower case
//                                     a-à  b-á   c-ö   d-ä   e-å  f-ô   g-ã   h-õ  i-è   j-é 
const    char  ac204_trlit_lc [30] = {'a' , 0xb2, 0xe5, 0xe3, 'e', 0xe4, 0xb4, 'x', 0xb8, 0xb9,
//                                     k-ê l-ë   m-ì    n-í  o-î  p-ï   q-ÿ   r-ð  s-ñ  t-ò
                                      'k', 0xbb, 0xbc, 0xbd, 'o', 0xbe, 0xc7, 'p', 'c', 0xbf,
//                                     u-ó   v-æ   w-â   x-÷   y-þ   z-ç   {-ø   |-ù  }-ü  ~-ú                    
                                      'y', 0xb6, 0xb3, 0xc0, 0xc6, 0xb7, 0xc1, 0xe6, 0xc4, 0xc2};

// trans literation for upper case
//                                     A-À  B-Á   C-Ö   D-Ä   E-Å  F-Ô   G-Ã   H-Õ  I-È   J-É 
const    char  ac204_trlit_uc [30] = {'A' , 0xa0, 0xe1, 0xe0, 'E', 0xaa, 0xa1, 'X', 0xa5, 0xa6,
//                                     K-Ê L-Ë   M-Ì  N-Í  O-Î  P-Ï   Q-ß   R-Ð  S-Ñ  T-Ò
                                      'K', 0xa7, 'M', 'H', 'O', 0xa8, 0xb1, 'P', 'C', 'T',
//                                     U-Ó   V-Æ   W-Â  X-×   Y-Þ   Z-Ç   [-Ø   \-Ù  ]-Ú  ^-Ú                    
                                      0xa9, 0xa3, 'B', 0xab, 0xb0, 0xa4, 0xac, 0xe2, 0xad, 0xad};

// LCD Cyr lower and upper case
char  lcd_cyr (char ch)
{
   if( ( ch >= 0x61 ) && ( ch <= 0x7e ) ) return( ac204_trlit_lc[ ch - 0x61 ] ); // lower case
   if( ( ch >= 0x41 ) && ( ch <= 0x5e ) ) return( ac204_trlit_uc[ ch - 0x41 ] ); // upper case
}


// Demo routine for testing LCD cyrillic characters 
// prints whole cyrillic alphabet 
void  print_cyrillic_aphabet()
{
         lcd_init();
         lcd_gotoxy(1 , 1);
         lcd_putc(lcd_cyr('a'));lcd_putc(lcd_cyr('b'));lcd_putc(lcd_cyr('w'));lcd_putc(lcd_cyr('g'));lcd_putc(lcd_cyr('d'));
         lcd_putc(lcd_cyr('e'));lcd_putc(lcd_cyr('v'));lcd_putc(lcd_cyr('z'));lcd_putc(lcd_cyr('i'));lcd_putc(lcd_cyr('j'));
         lcd_putc(lcd_cyr('k'));lcd_putc(lcd_cyr('l'));lcd_putc(lcd_cyr('m'));lcd_putc(lcd_cyr('n'));lcd_putc(lcd_cyr('o'));
         lcd_putc(lcd_cyr('p'));lcd_putc(lcd_cyr('r'));lcd_putc(lcd_cyr('s'));lcd_putc(lcd_cyr('t'));lcd_putc(lcd_cyr('u'));

         lcd_gotoxy(1 , 2);
         lcd_putc(lcd_cyr('f'));lcd_putc(lcd_cyr('h'));lcd_putc(lcd_cyr('c'));lcd_putc(lcd_cyr('x'));lcd_putc(lcd_cyr('}'));
         lcd_putc(lcd_cyr('{'));lcd_putc(lcd_cyr('|'));lcd_putc(lcd_cyr('y'));lcd_putc(lcd_cyr('q'));lcd_putc(lcd_cyr('~'));

         lcd_gotoxy(1 , 3);
         lcd_putc(lcd_cyr('A'));lcd_putc(lcd_cyr('B'));lcd_putc(lcd_cyr('W'));lcd_putc(lcd_cyr('G'));lcd_putc(lcd_cyr('D'));
         lcd_putc(lcd_cyr('E'));lcd_putc(lcd_cyr('V'));lcd_putc(lcd_cyr('Z'));lcd_putc(lcd_cyr('I'));lcd_putc(lcd_cyr('J'));
         lcd_putc(lcd_cyr('K'));lcd_putc(lcd_cyr('L'));lcd_putc(lcd_cyr('M'));lcd_putc(lcd_cyr('N'));lcd_putc(lcd_cyr('O'));
         lcd_putc(lcd_cyr('P'));lcd_putc(lcd_cyr('R'));lcd_putc(lcd_cyr('S'));lcd_putc(lcd_cyr('T'));lcd_putc(lcd_cyr('U'));

         lcd_gotoxy(1 , 4);
         lcd_putc(lcd_cyr('F'));lcd_putc(lcd_cyr('H'));lcd_putc(lcd_cyr('C'));lcd_putc(lcd_cyr('X'));lcd_putc(lcd_cyr('['));
         lcd_putc(lcd_cyr('\\'));lcd_putc(lcd_cyr(']'));lcd_putc(lcd_cyr('^'));lcd_putc(lcd_cyr('Y'));lcd_putc(lcd_cyr('Q'));
}
