Go Down

Topic: Large Alphanumeric on LCD (Read 31 times) previous topic - next topic

Mark S

And this is the routine that calls the above routine

Code: [Select]

//************************************************************************
static boolean      LCD_ProcessChar(char theChar)
{
boolean      echoTheChar;

     //*      this is so all 4 lines get used, when a CR comes in, we will wait
     //*      until the next char to actually do the scrolling
     if (gNeedToScroll && (theChar != 0x0A))
     {
           LCD_BumpToNextLine(true);
           gNeedToScroll      =      false;
     }
     echoTheChar      =      false;
     switch(theChar)
     {
           case 0x07:                                    //*      Bell
                 TurnBellOn_Off(true);
                 break;
                 
           case 0x08:                                    //*      back space
                 gLCD_currentColumn--;
                 if (gLCD_currentColumn < 0)
                 {
                       gLCD_currentColumn      =      0;
                 }
                 gLCD.setCursor(gLCD_currentColumn, gLCD_currentRow);
                 echoTheChar      =      true;
                 break;

           case 0x09:                                    //*      tab
                 LCD_DisplayPrintableChar(0x20);
                 while (gLCD_currentColumn % 4)
                 {
                       LCD_DisplayPrintableChar(0x20);
                 }
                 break;

           case 0x0A:                                    //*      Line feed
                 echoTheChar      =      true;
                 break;

           case 0x0B:                                    //*      Vertical tab (the opposite of line feed)
                 gLCD_currentRow--;
                 if (gLCD_currentRow < 0)
                 {
                       gLCD_currentRow      =      0;
                 }
                 gLCD.setCursor(gLCD_currentColumn, gLCD_currentRow);
                 break;

           case 0x0C:                                    //*      form feed
                 LCD_ClearScreen();
                 echoTheChar      =      true;
                 break;
           
           case 0x0D:                                    //*      Carriage return
           #ifdef _ENABLE_BIG_FONTS_
                 if (gCurrentFont == kFont_Large)
                 {
                       gLCD_currentColumn      =      0;
                       gLCD_currentRow            +=      2;
                       if (gLCD_currentRow >= gLCD_MaxLines)
                       {
                             LCD_ClearScreen();
                       }
                       else
                       {
                             gLCD.clearLine(2);
                             gLCD.clearLine(3);
                       }
                 }
                 else
           #endif
                 {
                       if (gLCD_ScrollEnabled && (gLCD_currentRow == (gLCD_MaxLines - 1)))
                       {
                             //*      we dont want to do the CR if we just forced a bump because of line overflow
                             if (gWrapHasOccured == false)
                             {
                                   gNeedToScroll      =      true;
                             }
                       }
                       else
                       {
                             LCD_BumpToNextLine(true);
                       }
                 }
                 gWrapHasOccured      =      false;
                 echoTheChar            =      true;
                 break;
           
           case 0x0e:                                    //*      ^N SHIFT OUT - use alternate character set
                 SetFont(kFont_Alternate);
                 break;

           case 0x0f:                                    //*      ^O SHIFT IN, resume default character set
                 SetFont(kFont_Normal);
                 break;

           
           case 0x1B:                                    //*      ESCAPE
                 gEscapeSequenceActive      =      true;
                 break;
                 
           default:                              // display each character to the LCD
                 if (theChar >= 0x20)
                 {
                       echoTheChar      =      true;
                       switch(gCurrentFont)
                       {
                             case kFont_Alternate:
                                   LCD_DisplayPrintableChar(theChar + 0x80);
                                   break;
                             
                       #ifdef _ENABLE_BIG_FONTS_
                             case kFont_Large:
                                   if (gLCD_currentColumn >= (gLCD_MaxColumns - 2))
                                   {
                                         gLCD_currentColumn      =      0;
                                         gLCD_currentRow            +=      2;
                                         if (gLCD_currentRow >= gLCD_MaxLines)
                                         {
                                               gLCD_currentRow      =      0;
                                               gLCD.clearLine(0);
                                               gLCD.clearLine(1);
                                         }
                                         else
                                         {
                                               gLCD.clearLine(2);
                                               gLCD.clearLine(3);
                                         }
                                   }
                                   gLCD_currentColumn      +=      DrawBigChar(gLCD_currentColumn, gLCD_currentRow, theChar);
                                   break;
                       #endif

                             case kFont_Normal:
                             default:
                                   LCD_DisplayPrintableChar(theChar);
                                   break;
                       
                       }
                 }
                 break;
     }
#ifdef _ENABLE_MORSE_CODE_
     if (gEnableMorseCode)
     {
           SendMorseCode(theChar, gMorseCodeWPM);
     }
#endif
     return(echoTheChar);
}


nico765

guys,

very cool work; could you give some clues on how to use it? would be nice to see a sample sketch.
I got lost once this 'table driven' code appeared.
I am trying to use it on a 4x20 display.

Regards,
Nico

royco

Anybody has an example code using the lookup tables?
Panucatt Devices

Genedefect

#48
Nov 20, 2010, 12:18 pm Last Edit: Nov 20, 2010, 03:21 pm by genedefect Reason: 1
What i have made with this characters.

its using 1/3 of the arduino memory,  ik can't easy translate the DEC output from te DS1307 to the new characters, i have made a whole list of possible time's to do this.

Youtube link can not be posten in first post

Genedefect

http://www.youtube.com/watch?v=GEwKS_0ZxWg

so here it is :)

DE8MSH

Hi,

this LCD font is awesome! I'l use it for a temperatur logging projekt. Until now it uses DS1307 for displaying time and date:

http://www.youtube.com/watch?v=qIBtUGEr5R8

Keep up the good work!
Look at
http://de8msh.blogspot.com/
and
http://www.youtube.com/user/de8msharduino

Go Up