Académique Documents
Professionnel Documents
Culture Documents
LED dot matrix and its interface with a microcontroller to display static characters
and symbols. Todays lab is its continuation, and we will be discussing on
displaying a scrolling text message on a 168 LED dot matrix. The microcontroller
used is again the same PIC18F2550 from StartUSB for PICboard. The 16
columns of the LED matrix are driven individually by two shift registers
(74HC595), whereas the eight combined rows are driven by the decoded outputs
from a decade counter (CD4017). In Lab 12, columns were scanned, but here we
will be scanning across the rows and feed the column lines with appropriate logic
levels. An analog input from a potentiometer is read by the microcontroller to
determine the speed of the scrolling message. The technique will be demonstrated
for right to left scroll, but can be easily implemented for scrolling in other
directions. The program for PIC18F2550 is developed with mikroC Pro for PIC
compiler.
Circuit Diagram
The internal structure of LED dot matrix displays have already been discussed
in Lab 12 and is not going to be repeated here. Two 88 LED matrices are used in
this experiment. The similar rows (cathodes) of both are connected together so that
there are 8 combined rows in total, whereas the columns are driven separately, and
hence there are 16 columns altogether. The combined current of all the LEDs in
each row sinks through a darlington-pair transistor array inside an ULN2803 IC.
The 16 column lines (anodes) are driven by the outputs of two shift registers
(74HC595) with current limiting resistors (220 ) in series, as shown below.
pins of microcontroller, however, with the use of two 74HC595 ICs, this number is
reduced to 3. 74HC595 is an 8-stage serial-in, serial or parallel-out shift register,
with a storage register. The shift register and storage register have separate clocks:
SH_CP (pin 11) and ST_CP (pin 12). Data is fed serially into the register through
DS pin (14) and is shifted on the positive-going transitions of the SH_CP input.
However, the data in each register does not appear at the output pin of 74HC595
unless it is transferred to the storage register. This happens on a positive-going
transition of the ST_CP input. 74HC595 also provides a serial standard output,
Q7 (pin 9) for cascading, which is needed in this experiment. The serial output of
the first shift register is connected to the serial input (DS pin) of the second shift
register, so that the 16-bit column data can be transferred serially through the DS
pin of the first shift register. This requires 16 clock pulses on SH_CP followed by a
clock pulse on ST_CP. The asynchronous reset pin (MR) is always pulled high
(deactivated) whereas the output enable (OE) pin is permanently grounded (always
enabled).
Role of counter (CD4017)
As mentioned in the beginning of this article, this time the rows will be fastscanned from the top to the bottom, unlike the columns like we did in Lab 12.
Eight I/O pins are required to scan 8 rows in sequence. You can use the PORTB
pins of PIC18F2550 for this purpose. But if you think you will need them for some
other purpose (some of PORTB pins have interrupt-on- change feature), you can
use a port expander, such as CD4017, that will serve the purpose and require only
two I/O pins of microcontroller. CD4017 is a 5-stage divide-by-10 Johnson counter
with 10 decoded outputs and a carry out bit. The counter is cleared to zero count by
a logical 1 on its reset line (15). The counter is advanced on the positive edge of
the clock signal (pin 14), when the clock inhibit pin (13) is grounded. The 10
decoded outputs are normally in the logical 0 state and go to the logical 1 state
only at their respective time slot. Each decoded output remains high for 1 full clock
cycle. The carry-out signal completes a full cycle for every 10 clock input cycles
and is used as a ripple carry signal to any succeeding stages. The 8 rows of LED
matrix are sequentially connected to the decoded outputs, Q0- Q7, of CD4017
through ULN2803 IC that has eight Darlington pairs, each of which provides a
ground path to sink the combined current of all LEDs in a row. At the end of every
8th clock cycle, the microcontroller will reset the counter by issuing a logical 1
to its Reset pin (15).
The microcontroller pins used for driving these signals for 74HC595 and CD4017
are shown below. A 10K pot is connected to RA0 pin of PIC18F2550
microcontroller that will control the speed of the scrolling message on the LED
matrix display.
Software
If you are unfamiliar with how static characters are displayed on a LED dot matrix,
I would recommend to read Lab 12 first. In row scanning, each row is selected for
a very short time (about 1 ms) and the columns are fed with appropriate logic
levels. By quickly scanning across the rows (> 100 times per second), and turning
on the respective LEDs in each column of that row, the persistence of vision comes
in to play, and we perceive the display image as still. The picture below shows the
active LEDs in each row to display the character A on a 88 dot-matrix format.
This information for all printable ASCII characters (0-9, A-Z, a-z, etc) will be
stored in a two-dimensional constant array CharData[][8] in the program memory
of PIC18F2550.
Defining the column values for printable ASCII characters in 8x8 format
One question: How would you find the right index of a particular character in this
array? The answer is simple. This array is created sequentially for ASCII
characters starting from Space (decimal value, 32) to ~ (decimal value 126). So
you need to subtract 32 from the ASCII value of the character itself to get the
corresponding row index of CharData array. For example, if you want to display a
dollar sign, $, its ASCII value is 36 (decimal). If you subtract 32, you get 4, which
in fact, is the right row index of $ in CharData array (see above).
Now lets talk about the scrolling effect. We will also define a display buffer for
storing the bit information of 168 LEDs in the matrix. It would be an integer
array (16-bit) of size 8 (for 8 rows). The content of this array is what displays on
the matrix. The picture below shows the bit values of the buffer for blank display,
i.e., all LEDs are turned off.
00000111. If you bit-OR this with the new DisplayBuffer[1], you will get
00000000 00000111.
The value of ShiftAmount must be increased sequentially up to 8, after which the
88 character is fully loaded in to the display buffer. Then, ShiftAmount restarts
from 1 again and starts loading the next character from the right, while the display
buffer itself shifts left. This continues until all the characters in the message are
loaded.
SH_Clk = 0;
Mask = Mask << 1;
}
// Apply clock on ST_Clk
ST_Clk = 1;
ST_Clk = 0;
}
And, the following code does the scrolling of message on to the matrix display.
The value ofshift_step determines how many columns you want to shift at a time. I
set it to 1.
for (k=0; k<StringLength; k++){
for (scroll=0; scroll<(8/shift_step); scroll++) {
for (ShiftAmount=0; ShiftAmount<8; ShiftAmount++){
index = message[k];
temp = CharData[index-32][ShiftAmount];
DisplayBuffer[ShiftAmount] = (DisplayBuffer[ShiftAmount] << shift_step)|
(temp >> ((8-shift_step)-scroll*shift_step));
}
speed = 10+ADC_Read(0)/10;
for(l=0; l<speed;l++){
for (i=0; i<8; i++) {
send_data(DisplayBuffer[i]);
CD4017_Clk = 1;
CD4017_Clk = 0;
Delay_ms(1);
} // i
CD4017_Rst = 1;
CD4017_Rst = 0;
} // l
} // scroll
}
You can download the complete mikroC project files for this tutorial from the link
below.
Download mikroC project files
References:
Re: 8x8 Dot Matrix Display with '595 shift register problem
The ULN2003 controls the rows and the 74HC595 controls the columns.
To do the multiplexing you follow these steps
turn off all row
send to 74HC595 data of the column data
turn on first row and wait for a while
turn off all row
send to 74HC595 data of the column data
turn on second row and wait for a while
turn off all row
send to 74HC595 data of the column data
turn on third row and wait for a while
.....
turn off all row
send to 74HC595 data of the column data
turn on eighth row and wait for a while
restart from the top
Is this what you are asking?
/*
Project: Scrolling message on LED dot matrix display
MCU: PIC18F2550 @ 48.0 MHz (StartUSB for PIC board)
Copyright @ Rajendra Bhatt
May 16, 2011
*/
// Define LCD module connections.
/* sbit Serial_Data at LATC2_bit;
sbit SH_Clk at LATC6_bit;
sbit ST_Clk at LATC7_bit;
sbit CD4017_Clk at LATA2_bit;
sbit CD4017_RST at LATA1_bit;
*/
sbit Serial_Data at RC2_bit;
sbit SH_Clk at RC6_bit;
sbit ST_Clk at RC7_bit;
sbit CD4017_Clk at RA2_bit;
sbit CD4017_RST at RA1_bit;
{0b00010000,
0b00000100},
{0b00011111,
0b00011110},
{0b00000111,
0b00001110},
{0b00011111,
0b00010000},
{0b00001110,
0b00001110},
{0b00001110,
0b00000001},
{0b00000000,
0b00000000},
{0b00000000,
0b00001000},
{0b00000001,
0b00000001},
{0b00000000,
0b00000000},
{0b00010000,
0b00010000},
{0b00001110,
0b00000100},
{0b00001110,
0b00011110},
{0b00001110,
0b00010001},
{0b00011110,
0b00011110},
{0b00000111,
0b00000111},
{0b00011100,
0b00011100},
{0b00011111,
0b00011111},
{0b00011111,
0b00010000},
{0b00001110,
0b00001110},
{0b00010001,
0b00010001},
{0b00011111,
0b00011111},
{0b00011111,
0b00001000},
{0b00010001,
0b00010001},
{0b00010000,
0b00011111},
{0b00010001,
0b00010001},
{0b00010001,
0b00010001},
{0b00001110,
0b00001110},
{0b00011110,
0b00010000},
{0b00001110,
0b00001111},
{0b00011110,
0b00010001},
{0b00001110,
0b00001110},
{0b00011111,
0b00000100},
{0b00010001,
0b00001110},
{0b00010001,
0b00000100},
{0b00010001,
0b00001010},
{0b00010001,
0b00010001},
{0b00010001,
0b00000100},
{0b00011111,
0b00011111},
{0b00001110,
0b00001110},
{0b00010000,
0b00000001},
{0b00001110,
0b00001110},
{0b00000100,
0b00000000},
{0b00000000,
0b00011111},
{0b00001000,
0b00000000},
{0b00000000,
0b00001111},
{0b00000000,
0b00011100},
{0b00000000,
0b00001110},
{0b00000000,
0b00000111},
{0b00000000,
0b00001110},
{0b00000000,
0b00000100},
{0b00000000,
0b00001100},
{0b00000000,
0b00010010},
{0b00000000,
0b00000100},
{0b00000000,
0b00001100},
{0b00000000,
0b00010000},
{0b00000000,
0b00001100},
{0b00000000,
0b00010001},
{0b00000000,
0b00010010},
{0b00000000,
0b00001100},
{0b00000000,
0b00010000},
{0b00000000,
0b00000001},
{0b00000000,
0b00001000},
{0b00000000,
0b00011110},
{0b00000000,
0b00001100},
{0b00000000,
0b00001100},
{0b00000000,
0b00000100},
{0b00000000,
0b00001010},
{0b00000000,
0b00010001},
{0b00000000,
0b00010000},
{0b00000000,
0b00011111},
{0b00000010,
0b00000010},
{0b00000100,
0b00000100},
{0b00001000,
0b00001000},
{0b00000000,
0b00000000}
};
CD4017_Rst = 1;
CD4017_Rst = 0;
} // l
} // scroll
} // k
} while(1);
}
Problem
The problem here is that I don't know how to send the individual bits on the 1st array's row
(letter A) which is 0b00000000(this is for 0x00) to my_data then followed by
0b11111110(this is for 0xFE) and so on until 0x00. There's no problem sending values to
my_data if I'm using array that is composed of binaries but when I use hexadecimals I can't
make it work.
Code:
//LED dot matrix display
//columns used for scanning
//rows used for generating patterns
// Definitions
sbit my_data at RC2_bit;
sbit clock at RC6_bit;
sbit latch at RC7_bit;
const unsigned short one[2][8] = {{0x00, 0xFE, 0x11, 0x11, 0x11, 0xFE, 0x00, 0x00},
//A
{0x00, 0xFF, 0x89, 0x89, 0x89, 0x76, 0x00, 0x00}
//B
};
unsigned int row, column, scanner, repeat;
void main() {
CMCON = 0x07;
ADCON0 = 0x00;
ADCON1 = 0x0F;
TRISC = 0x00;
TRISD = 0x00;
my_data = 1;
scanner = 1;
row = 0;
column = 0;
// Disable comparators
while(1){
for (column = 0; column < 2; column++){
for (row = 0; row < 8; row++){
my_data = one[column][row];
clock = 1;
clock = 0;
scanner = 1;
for (repeat = 0; repeat < 8; repeat++){
latd = scanner;
scanner = scanner << 1;
}
}
latch = 1;
latch = 0;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
I hope someone can explain this to me regarding about the process involved here. I'm
trying to understand every line in the code so please bare with me.
Pointing at this statement:
Code:
temp = CharData[index-32][ShiftAmount];
assuming that the letter to be shifted is letter A and it's array is composed of this:
Code:
{0b00001110, 0b00010001, 0b00010001, 0b00010001, 0b00011111, 0b00010001, 0b00010001,
0b00010001} //A
I hope someone can explain this to me regarding about the process involved here. I'm trying to
understand every line in the code so please bare with me.
Pointing at this statement:
Code:
temp = CharData[index-32][ShiftAmount];
assuming that the letter to be shifted is letter A and it's array is composed of this:
Code:
{0b00001110, 0b00010001, 0b00010001, 0b00010001, 0b00011111, 0b00010001, 0b00010001,
0b00010001} //A
<<<<<<<<-
this
this
this
this
this
this
this
this
will
will
will
will
will
will
will
will
be
be
be
be
be
be
be
be
shown
shown
shown
shown
shown
shown
shown
shown
in
in
in
in
in
in
in
in
row
row
row
row
row
row
row
row
1
2
3
4
5
6
7
8
(CharData[index-32][0])
(CharData[index-32][1])
(CharData[index-32][2])
(CharData[index-32][3])
(CharData[index-32][4])
(CharData[index-32][5])
(CharData[index-32][6])
(CharData[index-32][7])
Alex
////////////////////////////////////////////////////////////////////////////////////////
Re: 8x8 Dot Matrix Display with '595 shift register problem
The head-exploding-code just presents a window on a "Picture" to an area in memory (Framebuffer) that
can then be sent to whatever we got as a display!!!
You will see hopefully that this bit just gets cutand-pasted once we've got your LED's displaying the framebuffer contents to start...
You'll see, dont worry... I'll add comments in one day but I know every line at the mo... Here's something,
the output of a progrette developed through EDA links that makes life easier... It'll give you best way of
coding in text...
// Output from MakeMultiDisplayBitmapHungarian(NealAndZsoltSoft20 11)v3.
// Neal-S & Zsolt-K. Paste into DisplayData.H
// Hello Gilbert..!
// How are you?
// ABCDEFGHIJKLMNOP
// 0123456789ABCDEF
const char bmap[128][4] =
{
{0b01111111,0b00000000,0b01111100,0b00011100},//,,,,000,,,00000,,,,,,,,,,,0000000
{0b01111111,0b00000000,0b01111110,0b00111110},//,,,00000,,000000,,,,,,,,,,0000000
{0b00001000,0b00000000,0b00001011,0b01100011},//,,00,,,00,,,,0,00,,,,,,,,,,,,0,,,
{0b00001000,0b00000000,0b00001001,0b01001001},//,,0,,0,,0,,,,0,,0,,,,,,,,,,,,0,,,
{0b00001000,0b00000000,0b00001011,0b01100011},//,,00,,,00,,,,0,00,,,,,,,,,,,,0,,,
{0b01111111,0b00000000,0b01111110,0b00111110},//,,,00000,,000000,,,,,,,,,,0000000
{0b01111111,0b00000000,0b01111100,0b00011100},//,,,,000,,,00000,,,,,,,,,,,0000000
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00111000,0b01111111,0b01000001,0b00000000},//,,,,,,,,,,0,,,,,0,0000000,,000,,,
{0b01111100,0b01111111,0b01111111,0b01000000},//,,0,,,,,,,0000000,0000000,00000,,
{0b01010100,0b00001000,0b01111111,0b01000010},//,,0,,,,0,,0000000,,,,0,,,,0,0,0,,
{0b01010100,0b00001000,0b01001001,0b01111111},//,,0000000,0,,0,,0,,,,0,,,,0,0,0,,
{0b01010100,0b00001000,0b01001001,0b01111111},//,,0000000,0,,0,,0,,,,0,,,,0,0,0,,
{0b01011100,0b01111111,0b01111111,0b01000000},//,,0,,,,,,,0000000,0000000,0,000,,
{0b00011000,0b01111111,0b00110110,0b01000000},//,,0,,,,,,,,00,00,,0000000,,,00,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00000000,0b00111000,0b00011100,0b01000010},//,,0,,,,0,,,,000,,,,000,,,,,,,,,,,
{0b00000000,0b01111100,0b00111110,0b01100011},//,,00,,,00,,00000,,00000,,,,,,,,,,
{0b01000001,0b01000100,0b01100011,0b01110001},//,,000,,,0,00,,,00,0,,,0,,,0,,,,,0
{0b01111111,0b01000100,0b01000001,0b01011001},//,,0,00,,0,0,,,,,0,0,,,0,,,0000000
{0b01111111,0b01000100,0b01000001,0b01001001},//,,0,,0,,0,0,,,,,0,0,,,0,,,0000000
{0b01000000,0b01111100,0b01100011,0b01101111},//,,00,0000,00,,,00,00000,,,0,,,,,,
{0b00000000,0b00111000,0b00100010,0b01100110},//,,00,,00,,,0,,,0,,,000,,,,,,,,,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00000000,0b00111100,0b01000001,0b00100010},//,,,0,,,0,,0,,,,,0,,0000,,,,,,,,,,
{0b00000000,0b01111100,0b01111111,0b01100011},//,,00,,,00,0000000,00000,,,,,,,,,,
{0b01000001,0b01100000,0b01111111,0b01001001},//,,0,,0,,0,0000000,00,,,,,,0,,,,,0
{0b01111111,0b00111000,0b01000001,0b01001001},//,,0,,0,,0,0,,,,,0,,000,,,,0000000
{0b01111111,0b01100000,0b01100011,0b01001001},//,,0,,0,,0,00,,,00,00,,,,,,0000000
{0b01000000,0b01111100,0b00111110,0b01111111},//,,0000000,,00000,,00000,,,0,,,,,,
{0b00000000,0b00111100,0b00011100,0b00110110},//,,,00,00,,,,000,,,,0000,,,,,,,,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00111000,0b00000000,0b01000001,0b00011000},//,,,,00,,,,0,,,,,0,,,,,,,,,,000,,,
{0b01111100,0b00000000,0b01111111,0b00011100},//,,,,000,,,0000000,,,,,,,,,00000,,
{0b01000100,0b00000000,0b01111111,0b00010110},//,,,,0,00,,0000000,,,,,,,,,0,,,0,,
{0b01000100,0b00000000,0b01001001,0b01010011},//,,0,0,,00,0,,0,,0,,,,,,,,,0,,,0,,
{0b01000100,0b00000000,0b01011101,0b01111111},//,,0000000,0,000,0,,,,,,,,,0,,,0,,
{0b01111100,0b00000000,0b01000001,0b01111111},//,,0000000,0,,,,,0,,,,,,,,,00000,,
{0b00111000,0b00000000,0b01100011,0b01010000},//,,0,0,,,,,00,,,00,,,,,,,,,,000,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00000000,0b00000000,0b01000001,0b00101111},//,,,0,0000,0,,,,,0,,,,,,,,,,,,,,,,
{0b00000000,0b00000000,0b01111111,0b01101111},//,,00,0000,0000000,,,,,,,,,,,,,,,,
{0b00000000,0b00000000,0b01111111,0b01001001},//,,0,,0,,0,0000000,,,,,,,,,,,,,,,,
{0b00000000,0b00000000,0b01001001,0b01001001},//,,0,,0,,0,0,,0,,0,,,,,,,,,,,,,,,,
{0b00000000,0b00000000,0b00011101,0b01001001},//,,0,,0,,0,,,000,0,,,,,,,,,,,,,,,,
{0b00000000,0b00000000,0b00000001,0b01111001},//,,0000,,0,,,,,,,0,,,,,,,,,,,,,,,,
{0b00000000,0b00000000,0b00000011,0b00110001},//,,,00,,,0,,,,,,00,,,,,,,,,,,,,,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00011100,0b00100000,0b00011100,0b00111100},//,,,0000,,,,,000,,,,0,,,,,,,,000,,
{0b00111110,0b01110100,0b00111110,0b01111110},//,,000000,,,00000,,000,0,,,,00000,
{0b01100011,0b01010100,0b01100011,0b01001011},//,,0,,0,00,00,,,00,0,0,0,,,00,,,00
{0b01000001,0b01010100,0b01000001,0b01001001},//,,0,,0,,0,0,,,,,0,0,0,0,,,0,,,,,0
{0b01010001,0b00111100,0b01010001,0b01001001},//,,0,,0,,0,0,0,,,0,,0000,,,0,0,,,0
{0b00110011,0b01111000,0b00110011,0b01111000},//,,0000,,,,,00,,00,0000,,,,,00,,00
{0b01110010,0b01000000,0b01110010,0b00110000},//,,,00,,,,,000,,0,,0,,,,,,,000,,0,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00000000,0b01000100,0b01111111,0b00000011},//,,,,,,,00,0000000,0,,,0,,,,,,,,,,
{0b00000000,0b01111100,0b01111111,0b00000011},//,,,,,,,00,0000000,00000,,,,,,,,,,
{0b01000100,0b01111000,0b00001000,0b01110001},//,,000,,,0,,,,0,,,,0000,,,,0,,,0,,
{0b01111101,0b01001100,0b00001000,0b01111001},//,,0000,,0,,,,0,,,,0,,00,,,00000,0
{0b01111101,0b00000100,0b00001000,0b00001101},//,,,,,00,0,,,,0,,,,,,,,0,,,00000,0
{0b01000000,0b00001100,0b01111111,0b00000111},//,,,,,,000,0000000,,,,00,,,0,,,,,,
{0b00000000,0b00001000,0b01111111,0b00000011},//,,,,,,,00,0000000,,,,0,,,,,,,,,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00000000,0b00111000,0b00000000,0b00110110},//,,,00,00,,,,,,,,,,,000,,,,,,,,,,,
{0b00000000,0b01111100,0b00000000,0b01111111},//,,0000000,,,,,,,,,00000,,,,,,,,,,
{0b01000001,0b01010100,0b01000001,0b01001001},//,,0,,0,,0,0,,,,,0,0,0,0,,,0,,,,,0
{0b01111111,0b01010100,0b01111111,0b01001001},//,,0,,0,,0,0000000,0,0,0,,,0000000
{0b01111111,0b01010100,0b01111111,0b01001001},//,,0,,0,,0,0000000,0,0,0,,,0000000
{0b01000000,0b01011100,0b01000001,0b01111111},//,,0000000,0,,,,,0,0,000,,,0,,,,,,
{0b00000000,0b00011000,0b00000000,0b00110110},//,,,00,00,,,,,,,,,,,,00,,,,,,,,,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b01000001,0b00000000,0b00110000,0b00000110},//,,,,,,00,,,00,,,,,,,,,,,,,0,,,,,0
{0b01111111,0b00000000,0b01110000,0b01001111},//,,0,,0000,000,,,,,,,,,,,,,0000000
{0b00111111,0b00000000,0b01000000,0b01001001},//,,0,,0,,0,0,,,,,,,,,,,,,,,,000000
{0b01000100,0b00000000,0b01000001,0b01001001},//,,0,,0,,0,0,,,,,0,,,,,,,,,0,,,0,,
{0b01000100,0b00000000,0b01111111,0b01101001},//,,00,0,,0,0000000,,,,,,,,,0,,,0,,
{0b01111100,0b00000000,0b00111111,0b00111111},//,,,000000,,000000,,,,,,,,,00000,,
{0b00111000,0b00000000,0b00000001,0b00011110},//,,,,0000,,,,,,,,0,,,,,,,,,,000,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00111000,0b00000000,0b01000001,0b01111100},//,,00000,,,0,,,,,0,,,,,,,,,,000,,,
{0b01111100,0b00000000,0b01111111,0b01111110},//,,000000,,0000000,,,,,,,,,00000,,
{0b01010100,0b00000000,0b01111111,0b00001011},//,,,,,0,00,0000000,,,,,,,,,0,0,0,,
{0b01010100,0b00000000,0b00001000,0b00001001},//,,,,,0,,0,,,,0,,,,,,,,,,,,0,0,0,,
{0b01010100,0b00000000,0b00011100,0b00001011},//,,,,,0,00,,,000,,,,,,,,,,,0,0,0,,
{0b01011100,0b00000000,0b01110111,0b01111110},//,,000000,,000,000,,,,,,,,,0,000,,
{0b00011000,0b00000000,0b01100011,0b01111100},//,,00000,,,00,,,00,,,,,,,,,,,00,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b01000100,0b10011100,0b01000001,0b01000001},//,,0,,,,,0,0,,,,,00,,000,,,0,,,0,,
{0b01111100,0b10111100,0b01111111,0b01111111},//,,0000000,00000000,0000,,,00000,,
{0b01111000,0b10100000,0b01111111,0b01111111},//,,0000000,00000000,0,,,,,,0000,,,
{0b01001100,0b10100000,0b01000001,0b01001001},//,,0,,0,,0,0,,,,,00,0,,,,,,0,,00,,
{0b00000100,0b10100000,0b01000000,0b01001001},//,,0,,0,,0,0,,,,,,0,0,,,,,,,,,,0,,
{0b00001100,0b11111100,0b01100000,0b01111111},//,,0000000,00,,,,,000000,,,,,,00,,
{0b00001000,0b01111100,0b01110000,0b00110110},//,,,00,00,,000,,,,,00000,,,,,,0,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00000100,0b00111000,0b01111111,0b00011100},//,,,,000,,,0000000,,000,,,,,,,,0,,
{0b00000100,0b01111100,0b01111111,0b00111110},//,,,00000,,0000000,00000,,,,,,,0,,
{0b00111111,0b01000100,0b00001110,0b01100011},//,,00,,,00,,,,000,,0,,,0,,,,000000
{0b01111111,0b01000100,0b00011100,0b01000001},//,,0,,,,,0,,,000,,,0,,,0,,,0000000
{0b01000100,0b01000100,0b00001110,0b01000001},//,,0,,,,,0,,,,000,,0,,,0,,,0,,,0,,
{0b01100100,0b01111100,0b01111111,0b01100011},//,,00,,,00,0000000,00000,,,00,,0,,
{0b00100000,0b00111000,0b01111111,0b00100010},//,,,0,,,0,,0000000,,000,,,,,0,,,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00000000,0b00111100,0b01111111,0b01000001},//,,0,,,,,0,0000000,,0000,,,,,,,,,,
{0b00000000,0b01111100,0b01111111,0b01111111},//,,0000000,0000000,00000,,,,,,,,,,
{0b00000000,0b01000000,0b00000110,0b01111111},//,,0000000,,,,,00,,0,,,,,,,,,,,,,,
{0b01100000,0b01000000,0b00001100,0b01000001},//,,0,,,,,0,,,,00,,,0,,,,,,,00,,,,,
{0b01100000,0b00111100,0b00011000,0b01100011},//,,00,,,00,,,00,,,,,0000,,,00,,,,,
{0b00000000,0b01111100,0b01111111,0b00111110},//,,,00000,,0000000,00000,,,,,,,,,,
{0b00000000,0b01000000,0b01111111,0b00011100},//,,,,000,,,0000000,0,,,,,,,,,,,,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00000000,0b00000010,0b00111110,0b01000001},//,,0,,,,,0,,00000,,,,,,,0,,,,,,,,,
{0b00000000,0b00000011,0b01111111,0b01111111},//,,0000000,0000000,,,,,,00,,,,,,,,
{0b00000000,0b00000001,0b01000001,0b01111111},//,,0000000,0,,,,,0,,,,,,,0,,,,,,,,
{0b01100000,0b01011001,0b01000001,0b01001001},//,,0,,0,,0,0,,,,,0,0,00,,0,00,,,,,
{0b01100000,0b01011101,0b01000001,0b01011101},//,,0,000,0,0,,,,,0,0,000,0,00,,,,,
{0b00000000,0b00000111,0b01111111,0b01000001},//,,0,,,,,0,0000000,,,,,000,,,,,,,,
{0b00000000,0b00000010,0b00111110,0b01100011},//,,00,,,00,,00000,,,,,,,0,,,,,,,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
{0b00000000,0b00000000,0b01000001,0b01000001},//,,0,,,,,0,0,,,,,0,,,,,,,,,,,,,,,,
{0b00000000,0b00000000,0b01111111,0b01111111},//,,0000000,0000000,,,,,,,,,,,,,,,,
{0b00000110,0b00000000,0b01111111,0b01111111},//,,0000000,0000000,,,,,,,,,,,,,00,
{0b01011111,0b00000000,0b01001001,0b01001001},//,,0,,0,,0,0,,0,,0,,,,,,,,,0,00000
{0b01011111,0b00000000,0b00001001,0b00011101},//,,,,000,0,,,,0,,0,,,,,,,,,0,00000
{0b00000110,0b00000000,0b00001111,0b00000001},//,,,,,,,,0,,,,0000,,,,,,,,,,,,,00,
{0b00000000,0b00000000,0b00000110,0b00000011},//,,,,,,,00,,,,,00,,,,,,,,,,,,,,,,,
{0b00000000,0b00000000,0b00000000,0b00000000},//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
};,,