| ??? 03/16/05 10:10 Read: times |
#89767 - Lookup Table Character Generator Responding to: ???'s previous message |
Rahul Sadagopan said:
http://www.8052.com/forum/read.phtml?id=89755
I've made my own character generater...and thus made my list of pins to be fired and made the functions... I have written a function called fire...where i give in the pin numbers...and the function fires them for the required ontime... so for the char 'H' my funtion is like H()
{
fire( pin1,pin2,pin3,pin4,pin5,pin6,pin7);
fire( oo, oo, oo, pin4,oo, oo, oo ); //oo means pin not fired
fire( oo, oo, oo, pin4,oo, oo, oo );
fire( oo, oo, oo, pin4,oo, oo, oo );
fire( pin1,pin2,pin3,pin4,pin5,pin6,pin7);
}I really dont get how to go about doing this look up table.For a start, that's a very inefficient way of passing the required pins to your 'fire' function! Think about it: each pin can either be fired, or not fired - that should suggest something to you... Yes, it's a Binary system! Therefore each pin can be represented by a single bit - say, '1' to fire it, '0' not to fire. You have only 7 pins, so you can fit all those pins into a single byte: void fire( unsigned char pins_to_fire );and your 'H' function becomes H()
{
fire( 0x7F ); // 01111111
fire( 0x08 ); // 00001000
fire( 0x08 ); // 00001000
fire( 0x08 ); // 00001000
fire( 0x7F ); // 01111111
}Now we can make a simple lookup table for the columns of this one character, and your 'H' function becomes:H()
{
// LOOKUP TABLE
// Each entry in the table (ie, each element of the array)
// contains the bitmap of pins to be fired for the particular column;
// ie, pins_to_fire[x] contains the bitmap of pins to be fired for the column 'x'.
unsigned char pins_to_fire[] =
{
0x7F, // 01111111 - the pins to fire for column 0
0x08, // 00001000 - the pins to fire for column 1
0x08, // 00001000 - the pins to fire for column 2
0x08, // 00001000 - the pins to fire for column 3
0x7F, // 01111111 - the pins to fire for column 4
} // pins_to_fire
fire( pins_to_fire[0] ); // Fire the pins for column 0
fire( pins_to_fire[1] ); // Fire the pins for column 1
fire( pins_to_fire[2] ); // Fire the pins for column 2
fire( pins_to_fire[3] ); // Fire the pins for column 3
fire( pins_to_fire[4] ); // Fire the pins for column 4
}OK, so we haven't actually gained much yet, but you should now be able to see the principle of using a lookup table.
The next step is to make a big lookup table that defines all of the characters in your character set. This will need to be a two-dimensional array - each character has 5 columns of dots: unsigned char pins_to_fire[NUMBER_OF_CHARACTERS][] =
{
{ // Character 0 - 'A'
0x7C, // 01111100 - the pins to fire for column 0 of an 'A'
0x12, // 00010010 - the pins to fire for column 1 of an 'A'
0x11, // 00010001 - the pins to fire for column 2 of an 'A'
0x12, // 00010010 - the pins to fire for column 3 of an 'A'
0x7C // 01111100 - the pins to fire for column 4 of an 'A'
},
{ // Character 1 - 'B'
0x7F, // 01111111 - the pins to fire for column 0 of an 'B'
0x49, // 01001001 - the pins to fire for column 1 of an 'B'
0x49, // 01001001 - the pins to fire for column 2 of an 'B'
0x49, // 01001001 - the pins to fire for column 3 of an 'B'
0x36 // 00110110 - the pins to fire for column 4 of an 'B'
},
etc, etc,...
} // pins_to_fireand now you can write a simple, generic function to print any character from your defined character set:void print_character( unsigned char character_number )
{
fire( pins_to_fire[character_number][0] ); // Fire pins for column 0 of required character
fire( pins_to_fire[character_number][1] ); // Fire pins for column 1 of required character
fire( pins_to_fire[character_number][2] ); // Fire pins for column 2 of required character
fire( pins_to_fire[character_number][3] ); // Fire pins for column 3 of required character
fire( pins_to_fire[character_number][4] ); // Fire pins for column 4 of required character
}
You will probably want your lookup table to be stored in your code ROM - you will need to read the Manual for your particular compiler (SDCC?) to find out how it does that. |



