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