Graphic LCD sim

DF Graphic LCD Sim

A project to simulate a dot matrix graphic LCD display:

Based on the LCD Number Display Engine at LCD hexa panel


 ### Graphic LCD DISPLAY ENGINE ###

 #The shape of individual pixel
 # 1 +--+ 3
 #   |  |
 # 2 +--+ 4
 # [list X4 Y4 X3 Y3 X1 Y1 X2 Y2]
 set varPixelSize [list 5 6 5 0 0 0 0 6]
 #The space between pixels
 set varPixelSpace 2
 #The number of pixels in Row, Column
 set varLCDSize [list 32 122]
 #LCD colours
 #Pixel On Rim Colour, Pixel On Fill Colour, Pixel Off Rim Colour, Pixel Off Fill Colour
 set varColours [list #404040 #303030 #32CD32 #7CFC00]

 #Standard Characters
 #Build by 7 x 5 pixels (Last 3 Rows and 1 Column should be blank)
 array set varStdFont_8 {
     0 { {0 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 1 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     1 { {0 0 0 1 0 0} \
         {0 0 1 1 0 0} \
         {0 0 0 1 0 0} \
         {0 0 0 1 0 0} \
         {0 0 0 1 0 0} \
         {0 0 0 1 0 0} \
         {0 0 1 1 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     2 { {0 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {0 0 0 0 1 0} \
         {0 0 0 1 0 0} \
         {0 0 1 0 0 0} \
         {0 1 0 0 0 0} \
         {1 1 1 1 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     3 { {0 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {0 0 0 0 1 0} \
         {0 0   1 0 0} \
         {0 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 1 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     4 { {0 0 0 1 0 0} \
         {0 0 1 1 0 0} \
         {0 1 0 1 0 0} \
         {1 0 0 1 0 0} \
         {1 1 1 1 1 0} \
         {0 0 0 1 0 0} \
         {0 0 0 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     5 { {1 1 1 1 1 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 1 1 1 0 0} \
         {0 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 1 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     6 { {0 0 1 1 0 0} \
         {0 1 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 1 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     7 { {1 1 1 1 1 0} \
         {1 0 0 0 1 0} \
         {0 0 0 0 1 0} \
         {0 0 0 1 0 0} \
         {0 0 0 1 0 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     8 { {0 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 1 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     9 { {0 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 1 1 1 0} \
         {0 0 0 0 1 0} \
         {0 0 0 1 0 0} \
         {0 1 1 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     ? { {0 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {0 0 0 0 1 0} \
         {0 0 0 1 0 0} \
         {0 0 1 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     { } {{0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    A   {{0 0 1 0 0 0} \
         {0 1 0 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 1 1 1 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    B   {{1 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 1 1 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    C   {{0 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 1 0} \
         {0 1 1 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    D   {{1 1 1 0 0 0} \
         {1 0 0 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 1 0 0} \
         {1 1 1 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     E  {{1 1 1 1 1 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 1 1 0 0 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 1 1 1 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    F   {{1 1 1 1 1 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 1 1 0 0 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    G   {{0 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 0 0} \
         {1 0 1 1 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 1 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     H  {{1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 1 1 1 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    I   {{1 1 1 0} \
         {0 1 0 0} \
         {0 1 0 0} \
         {0 1 0 0} \
         {0 1 0 0} \
         {0 1 0 0} \
         {1 1 1 0} \
         {0 0 0 0} \
         {0 0 0 0} \
         {0 0 0 0}}
    J   {{0 0 1 1 1 0} \
         {0 0 0 1 0 0} \
         {0 0 0 1 0 0} \
         {0 0 0 1 0 0} \
         {0 0 0 1 0 0} \
         {1 0 0 1 0 0} \
         {0 1 1 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    K   {{1 0 0 0 1 0} \
         {1 0 0 1 0 0} \
         {1 0 1 0 0 0} \
         {1 1 0 0 0 0} \
         {1 0 1 0 0 0} \
         {1 0 0 1 0 0} \
         {1 0 0 0 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     L  {{1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 1 1 1 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     M  {{1 0 0 0 1 0} \
         {1 1 0 1 1 0} \
         {1 0 1 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    N   {{1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 1 0 0 1 0} \
         {1 0 1 0 1 0} \
         {1 0 0 1 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    O   {{0 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 1 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    P   {{1 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 1 1 1 0 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     Q  {{0 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 1 0 1 0} \
         {1 0 0 1 1 0} \
         {0 1 1 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    R   {{1 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 1 1 1 0 0} \
         {1 0 1 0 0 0} \
         {1 0 0 1 0 0} \
         {1 0 0 0 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    S   {{0 1 1 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 0 0} \
         {0 1 1 1 0 0} \
         {0 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 1 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     T  {{1 1 1 1 1 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     U  {{1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 1 1 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    V   {{1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 0 1 0 0} \
         {0 0 1 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     W  {{1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {1 0 1 0 1 0} \
         {1 1 0 1 1 0} \
         {1 0 0 0 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    X   {{1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 0 1 0 0} \
         {0 0 1 0 0 0} \
         {0 1 0 1 0 0} \
         {1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     Y  {{1 0 0 0 1 0} \
         {1 0 0 0 1 0} \
         {0 1 0 1 0 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    Z   {{1 1 1 1 1 0} \
         {0 0 0 0 1 0} \
         {0 0 0 1 0 0} \
         {0 0 1 0 0 0} \
         {0 1 0 0 0 0} \
         {1 0 0 0 0 0} \
         {1 1 1 1 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    {+} {{0 0 0 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {1 1 1 1 1 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    {-} {{0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {1 1 1 1 1 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    {/} {{0 0 0 0 1 0} \
         {0 0 0 1 0 0} \
         {0 0 0 1 0 0} \
         {0 0 1 0 0 0} \
         {0 1 0 0 0 0} \
         {0 1 0 0 0 0} \
         {1 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
    <   {{0 0 1 0 0 0} \
         {0 1 1 1 0 0} \
         {1 0 1 0 1 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 1 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0} \
         {0 0 0 0 0 0}}
     : { {0 0} \
         {0 0} \
         {1 0} \
         {0 0} \
         {0 0} \
         {1 0} \
         {0 0} \
         {0 0} \
         {0 0} \
         {0 0} }
     . { {0 0} \
         {0 0} \
         {0 0} \
         {0 0} \
         {0 0} \
         {0 0} \
         {1 0} \
         {0 0} \
         {0 0} \
         {0 0} }

 }

 #Build by 13 x 10 pixels (Last 3 Rows and 1 Column should be blank)
 array set varStdFont_16 {
     0   {{0 0 1 1 1 1 1 1 0 0 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {0 0 1 1 1 1 1 1 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0}}
     1   {{0 0 0 0 1 1 1 0 0 0 0} \
          {0 0 0 1 1 1 1 0 0 0 0} \
          {0 0 1 1 1 1 1 0 0 0 0} \
          {0 1 1 1 0 1 1 0 0 0 0} \
          {0 0 0 0 0 1 1 0 0 0 0} \
          {0 0 0 0 0 1 1 0 0 0 0} \
          {0 0 0 0 0 1 1 0 0 0 0} \
          {0 0 0 0 0 1 1 0 0 0 0} \
          {0 0 0 0 0 1 1 0 0 0 0} \
          {0 0 0 0 0 1 1 0 0 0 0} \
          {0 0 0 0 0 1 1 0 0 0 0} \
          {0 0 0 1 1 1 1 1 1 0 0} \
          {0 0 0 1 1 1 1 1 1 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0}}
     2   {{0 0 1 1 1 1 1 1 0 0 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {0 0 0 0 0 0 0 0 1 1 0} \
          {0 0 0 0 0 0 0 1 1 1 0} \
          {0 0 0 0 0 0 1 1 1 0 0} \
          {0 0 0 0 0 1 1 1 0 0 0} \
          {0 0 0 0 1 1 1 0 0 0 0} \
          {0 0 0 1 1 1 0 0 0 0 0} \
          {0 0 1 1 1 0 0 0 0 0 0} \
          {0 1 1 1 0 0 0 0 0 0 0} \
          {1 1 1 1 1 1 1 1 1 1 0} \
          {1 1 1 1 1 1 1 1 1 1 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0}}
     3   {{0 0 1 1 1 1 1 1 0 0 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {0 0 0 0 0 0 0 1 1 1 0} \
          {0 0 0 0 0 0 1 1 1 0 0} \
          {0 0 0 0 0 1 1 1 0 0 0} \
          {0 0 0 0 0 0 1 1 1 0 0} \
          {0 0 0 0 0 0 0 1 1 1 0} \
          {0 0 0 0 0 0 0 0 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {0 0 1 1 1 1 1 1 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0}}
     4   {{0 0 0 0 0 1 1 1 0 0 0} \
          {0 0 0 0 1 1 1 1 0 0 0} \
          {0 0 0 1 1 1 1 1 0 0 0} \
          {0 0 0 1 1 0 1 1 0 0 0} \
          {0 0 1 1 1 0 1 1 0 0 0} \
          {0 0 1 1 0 0 1 1 0 0 0} \
          {0 1 1 1 0 0 1 1 0 0 0} \
          {0 1 1 0 0 0 1 1 0 0 0} \
          {1 1 1 0 0 0 1 1 0 0 0} \
          {1 1 1 1 1 1 1 1 1 1 0} \
          {1 1 1 1 1 1 1 1 1 1 0} \
          {0 0 0 0 0 0 1 1 0 0 0} \
          {0 0 0 0 0 0 1 1 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0}}
     5   {{1 1 1 1 1 1 1 1 1 1 0} \
          {1 1 1 1 1 1 1 1 1 1 0} \
          {1 1 0 0 0 0 0 0 0 0 0} \
          {1 1 0 0 0 0 0 0 0 0 0} \
          {1 1 1 1 1 1 1 1 0 0 0} \
          {1 1 1 1 1 1 1 1 1 0 0} \
          {0 0 0 0 0 0 0 1 1 1 0} \
          {0 0 0 0 0 0 0 0 1 1 0} \
          {0 0 0 0 0 0 0 0 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {0 0 1 1 1 1 1 1 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0}}
     6   {{0 0 0 0 1 1 1 1 1 0 0} \
          {0 0 0 1 1 1 1 1 1 0 0} \
          {0 0 1 1 1 0 0 0 0 0 0} \
          {0 1 1 1 0 0 0 0 0 0 0} \
          {0 1 1 1 0 0 0 0 0 0 0} \
          {1 1 1 1 1 1 1 1 0 0 0} \
          {1 1 1 1 1 1 1 1 1 0 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {0 0 1 1 1 1 1 1 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0}}
     7   {{1 1 1 1 1 1 1 1 1 1 0} \
          {1 1 1 1 1 1 1 1 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {0 0 0 0 0 0 0 1 1 1 0} \
          {0 0 0 0 0 0 0 1 1 0 0} \
          {0 0 0 0 0 0 1 1 1 0 0} \
          {0 0 0 0 0 0 1 1 0 0 0} \
          {0 0 0 0 0 1 1 1 0 0 0} \
          {0 0 0 0 0 1 1 0 0 0 0} \
          {0 0 0 0 1 1 1 0 0 0 0} \
          {0 0 0 0 1 1 0 0 0 0 0} \
          {0 0 0 0 1 1 0 0 0 0 0} \
          {0 0 0 0 1 1 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0}}
     8   {{0 0 1 1 1 1 1 1 0 0 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {0 0 1 1 1 1 1 1 0 0 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {0 0 1 1 1 1 1 1 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0}}
     9   {{0 0 1 1 1 1 1 1 0 0 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {0 1 1 1 1 1 1 1 1 1 0} \
          {0 0 1 1 1 1 1 1 1 1 0} \
          {0 0 0 0 0 0 0 1 1 1 0} \
          {0 0 0 0 0 0 1 1 1 0 0} \
          {0 0 0 0 0 1 1 1 0 0 0} \
          {0 0 0 0 1 1 1 0 0 0 0} \
          {0 1 1 1 1 1 0 0 0 0 0} \
          {0 1 1 1 1 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0}}
     ?   {{0 0 1 1 1 1 1 1 0 0 0} \
          {0 1 1 1 1 1 1 1 1 0 0} \
          {1 1 1 0 0 0 0 1 1 1 0} \
          {1 1 0 0 0 0 0 0 1 1 0} \
          {1 1 0 0 0 0 0 1 1 1 0} \
          {0 0 0 0 0 0 1 1 1 0 0} \
          {0 0 0 0 0 1 1 1 0 0 0} \
          {0 0 0 0 1 1 1 0 0 0 0} \
          {0 0 0 0 1 1 0 0 0 0 0} \
          {0 0 0 0 1 1 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 1 1 0 0 0 0 0} \
          {0 0 0 0 1 1 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0}}
     { } {{0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0} \
          {0 0 0 0 0 0 0 0 0 0 0}}
      :  {{0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {1 1 0} \
          {1 1 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {1 1 0} \
          {1 1 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0}}
     .   {{0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0} \
          {1 1 0} \
          {1 1 0} \
          {0 0 0} \
          {0 0 0} \
          {0 0 0}}
  }

 set varFonts [list varStdFont_8 varStdFont_16]

 # *********************************************************************************
 # Create the LCD pixels and tag them
 # *********************************************************************************
 proc CreateLCD {}  {
     global varPixelSize varLCDSize varPixelSpace varColours

     pack [canvas .cvsLCD -background #ADFF2F ] -expand 1 -fill both
    #Add same padding
     set varLCDx 5
     set varLCDy 5

     #Set the colours
     foreach {varOnRim varOnFill varOffRim varOffFill} $varColours  {}

     for {set varRow 0} {$varRow < [lindex $varLCDSize 0]} {incr varRow}  {
         #Reset Column position
         set varLCDx 5
         for {set varCol 0} {$varCol < [lindex $varLCDSize 1]} {incr varCol}  {
             #Create the pixel
             set varPixel [.cvsLCD create polygon $varPixelSize -tags "Pixel_$varRow,$varCol" \
                 -outline $varOffRim -fill $varOffFill]
             #Put it in its place
             .cvsLCD move $varPixel $varLCDx $varLCDy
             #Next column position
             incr varLCDx [lindex $varPixelSize 0]
             incr varLCDx $varPixelSpace
         }
         #Next row position
         incr varLCDy [lindex $varPixelSize 1]
         incr varLCDy $varPixelSpace
     }

    #Add same padding
     incr varLCDy 5
     incr varLCDx 5
     wm geometry . "[set varLCDx]x[set varLCDy]"
 }

 # *********************************************************************************
 # Display
 # varFont - Index into font list
 # varStartRow, varStartCol - Where to start the message display (as pixels)
 # *********************************************************************************
 proc Display {varMessage {varFont {0}} {varStartRow {0}} {varStartCol {0}}}  {
     global varFonts

     set varRow $varStartRow
     set varCol $varStartCol
     for {set I 0} {$I < [string length $varMessage]} {incr I}  {
         set varChar [string index $varMessage $I]
         switch -regexp -- $varChar {
             [0-9]|[:\.+-/<]|[\ ]|[A-Z] {
                     upvar #0 [lindex $varFonts $varFont] varLCDFont
                    if {[info exist varLCDFont($varChar)]}  {
                        foreach "varRow varCol" [SetPixels $varRow $varCol $varLCDFont($varChar)] {}
                    } else {
                        foreach "varRow varCol" [SetPixels $varRow $varCol $varLCDFont(?)] {}
                    }
             }

             default {
                     foreach "varRow varCol" [SetPixels $varRow $varCol $varLCDFont(?)] {}
             }
         }
     }
 }

 # *********************************************************************************
 # SetPixels
 # varChar - List of pixels to set
 # varRow, varCol - Where to start (as pixels)
 # Returns the next available position
 # *********************************************************************************
 proc SetPixels {varRow varCol varChar}  {
     global varColours varLCDSize

     #Set the colours
     foreach {varOnRim varOnFill varOffRim varOffFill} $varColours  {}

     set varStartCol $varCol
     set varStartRow $varRow
     foreach varPixelRow $varChar {
         set varCol $varStartCol
         set varPixelCol [split $varPixelRow]
         foreach varPixel $varPixelCol {
             if {$varPixel == 0}  {
                 .cvsLCD itemconfigure "Pixel_$varRow,$varCol" -outline $varOffRim
                 .cvsLCD itemconfigure "Pixel_$varRow,$varCol" -fill $varOffFill
             } else {
                 .cvsLCD itemconfigure "Pixel_$varRow,$varCol" -outline $varOnRim
                 .cvsLCD itemconfigure "Pixel_$varRow,$varCol" -fill $varOnFill
             }
             incr varCol
         }
         incr varRow
     }
     #Try to implement autowrap, but is is to late because the character
     #may already fallen off the LCD
    if {$varCol > [lindex $varLCDSize 1]}  {
         set varStartRow $varRow
        set varCol 0
     }
     return [list $varStartRow $varCol]
 }


 # *********************************************************************************
 # main
 # *********************************************************************************
 catch { console show }
 CreateLCD

 Display "TESTING 123..."
 Display "0:00:00.000" 1 10 0
 Display "ABCDEFGHIJKLMNOPQRSTU" 0 25 0

Look at Color pickers to get the values for more colours for pixels


The fonts aren't complete, only created what was needed.

Here is a utility to 'draw' a character, press 'p' to puts the charachter pixel list on stdout.


 ### Font Draw Utility ###

 #The shape of individual pixel
 # 1 +--+ 3
 #   |  |
 # 2 +--+ 4
 # [list X4 Y4 X3 Y3 X1 Y1 X2 Y2]
 set varPixelSize [list 10 12 10 0 0 0 0 12]
 #The space between pixels
 set varPixelSpace 2
 #The number of pixels in Row, Column
 #set varLCDSize [list 13 10]
 set varLCDSize [list 7 5]
 #LCD colours
 #Pixel On Rim Colour, Pixel On Fill Colour, Pixel Off Rim Colour, Pixel Off Fill Colour
 set varColours [list #404040 #303030 #32CD32 #7CFC00]

 # *********************************************************************************
 # Create the LCD pixels
 # *********************************************************************************
 proc CreateLCD {}  {
    global varPixelSize varLCDSize varPixelSpace varColours

    pack [canvas .cvsLCD -background #ADFF2F ] -expand 1 -fill both
    set varLCDx 10
    set varLCDy 10

    #Set the colours
    foreach {varOnRim varOnFill varOffRim varOffFill} $varColours  {}

    for {set varRow 0} {$varRow < [lindex $varLCDSize 0]} {incr varRow}  {
        #Reset Column position
        set varLCDx 10
        for {set varCol 0} {$varCol < [lindex $varLCDSize 1]} {incr varCol}  {
            #Create the pixel
            set varPixel [.cvsLCD create polygon $varPixelSize -tags "Pixel_$varRow,$varCol" \
                -outline $varOffRim -fill $varOffFill]
            #Put it in its place
            .cvsLCD move $varPixel $varLCDx $varLCDy
            #Next column position
            incr varLCDx [lindex $varPixelSize 0]
            incr varLCDx $varPixelSpace
        }
        #Next row position
        incr varLCDy [lindex $varPixelSize 1]
        incr varLCDy $varPixelSpace
    }

    #Add same padding
     incr varLCDy 10
     incr varLCDx 10
     wm geometry . "[set varLCDx]x[set varLCDy]"

    #Bindings
    #Mouse button 1
     bind .cvsLCD <1>         {MouseDown %W %x %y 1}
 }


 # ********************************************************************
 # MouseDown - Toggles the pixel
 # ********************************************************************
 proc MouseDown {varCanvas varX varY varButton} {
    global varColours

    #Set the colours
    foreach {varOnRim varOnFill varOffRim varOffFill} $varColours  {}

    set varID [$varCanvas find withtag current]
     if {$varID != ""} {
        if {[.cvsLCD itemcget $varID -fill] == $varOnFill} {
            .cvsLCD itemconfigure $varID -outline $varOffRim
            .cvsLCD itemconfigure $varID -fill $varOffFill
        } else {
            .cvsLCD itemconfigure $varID -outline $varOnRim
            .cvsLCD itemconfigure $varID -fill $varOnFill
        }
    }
 }

 # ********************************************************************
 # Clear
 # ********************************************************************
 proc Clear {}  {
    global varLCDSize varColours

    #Set the colours
    foreach {varOnRim varOnFill varOffRim varOffFill} $varColours  {}

    for {set varRow 0} {$varRow < [lindex $varLCDSize 0]} {incr varRow}  {
        for {set varCol 0} {$varCol < [lindex $varLCDSize 1]} {incr varCol}  {
            set varID "Pixel_$varRow,$varCol"
            .cvsLCD itemconfigure $varID -outline $varOffRim
            .cvsLCD itemconfigure $varID -fill $varOffFill
        }
    }
 }

 # ********************************************************************
 # Prints (to stdout) all the pixels as 0 or 1 in a List style to
 # by copy and past
 # Adds 1 extra Column and 3 extra Rows
 # ********************************************************************
 proc GetPixels {} {
    global varColours varLCDSize

    #Set the colours
    foreach {varOnRim varOnFill varOffRim varOffFill} $varColours  {}

    for {set varRow 0} {$varRow < [lindex $varLCDSize 0]} {incr varRow}  {
        if {$varRow != 0}  {
            puts " \\"
            puts -nonewline " \{"
        } else {
            puts -nonewline "\{\{"
        }
        for {set varCol 0} {$varCol < [lindex $varLCDSize 1]} {incr varCol}  {
            set varID "Pixel_$varRow,$varCol"
            if {[.cvsLCD itemcget $varID -fill] == $varOnFill} {
                puts -nonewline "1 "
            } else {
                puts -nonewline "0 "
            }
        }
        puts -nonewline "0\}"
    }

    for {set varRow 0} {$varRow < 3} {incr varRow}  {
        puts " \\"
        puts -nonewline " \{"
        for {set varCol 0} {$varCol < [lindex $varLCDSize 1]} {incr varCol}  {
            puts -nonewline "0 "
        }
        puts -nonewline "0\}"
    }
    puts "\}"
 }

 # *********************************************************************************
 # main
 # *********************************************************************************
 catch { console show }
 CreateLCD
 bind . <p> {GetPixels}
 bind . <c> {Clear}

see also lcd editor