Updated 2008-11-12 04:36:08 by Stu

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