### 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 0Look 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

