The LL, LT, UB, ect... are just abbreviations to help me designate which segment was which when referencing the large '0'.
LT= left top
UB= upper bar
RT= right top
LL= lower left
LB= lower bar
LR= lower right
UMB= upper middle bars(upper middle section of the '8')
LMB= lower middle bars(lower middle section of the '8')
Any label can go there. Then with
lcd.createChar(0,LT);
It takes that array and stores it as one of the 8 available custom characters. Then you use the
lcd.write(0);
to display that custom character on the LCD.
Here is the updated scrolling characters code. It will span 2 posts.
/*
A set of custom made large numbers for a 16x2 LCD using the
LiquidCrystal librabry. Works with displays compatible with the
Hitachi HD44780 driver.
The Cuicuit:
LCD RS pin to D12
LCD Enable pin to D11
LCD D4 pin to D5
LCD D5 pin to D4
LCD D6 pin to D3
LCD D7 pin to D2
LCD Vee tied to a pot to control brightness
LCD Vss and R/W tied to ground
LCD Vcc to +5V
LCD pin 15 tied to pushbutton for control of backlight
Made by Michael Pilcher
2/9/2010
*/
// include the library
#include <LiquidCrystal.h>
// initialize the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int x = 0;
// the 8 arrays that form each segment of the custom numbers
byte LT[8] =
{
B00111,
B01111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
};
byte UB[8] =
{
B11111,
B11111,
B11111,
B00000,
B00000,
B00000,
B00000,
B00000
};
byte RT[8] =
{
B11100,
B11110,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
};
byte LL[8] =
{
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B01111,
B00111
};
byte LB[8] =
{
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B11111
};
byte LR[8] =
{
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11110,
B11100
};
byte UMB[8] =
{
B11111,
B11111,
B11111,
B00000,
B00000,
B00000,
B11111,
B11111
};
byte LMB[8] =
{
B11111,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B11111
};
void setup()
{
// assignes each segment a write number
lcd.createChar(0,LT);
lcd.createChar(1,UB);
lcd.createChar(2,RT);
lcd.createChar(3,LL);
lcd.createChar(4,LB);
lcd.createChar(5,LR);
lcd.createChar(6,UMB);
lcd.createChar(7,LMB);
// sets the LCD's rows and colums:
lcd.begin(16, 2);
}
void custom0O()
{ // uses segments to build the number 0
lcd.setCursor(x, 0);
lcd.write(0);
lcd.write(1);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(3);
lcd.write(4);
lcd.write(5);
}
void custom1()
{
lcd.setCursor(x,0);
lcd.write(1);
lcd.write(2);
lcd.setCursor(x+1,1);
lcd.write(5);
}
void custom2()
{
lcd.setCursor(x,0);
lcd.write(6);
lcd.write(6);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(3);
lcd.write(7);
lcd.write(7);
}
void custom3()
{
lcd.setCursor(x,0);
lcd.write(6);
lcd.write(6);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(7);
lcd.write(7);
lcd.write(5);
}
void custom4()
{
lcd.setCursor(x,0);
lcd.write(3);
lcd.write(4);
lcd.write(2);
lcd.setCursor(x+2, 1);
lcd.write(5);
}
void custom5()
{
lcd.setCursor(x,0);
lcd.write(255);
lcd.write(6);
lcd.write(6);
lcd.setCursor(x, 1);
lcd.write(7);
lcd.write(7);
lcd.write(5);
}
void custom6()
{
lcd.setCursor(x,0);
lcd.write(0);
lcd.write(6);
lcd.write(6);
lcd.setCursor(x, 1);
lcd.write(3);
lcd.write(7);
lcd.write(5);
}
void custom7()
{
lcd.setCursor(x,0);
lcd.write(1);
lcd.write(1);
lcd.write(2);
lcd.setCursor(x+1, 1);
lcd.write(0);
}
void custom8()
{
lcd.setCursor(x,0);
lcd.write(0);
lcd.write(6);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(3);
lcd.write(7);
lcd.write(5);
}
void custom9()
{
lcd.setCursor(x,0);
lcd.write(0);
lcd.write(6);
lcd.write(2);
lcd.setCursor(x+2, 1);
lcd.write(5);
}
void customA()
{
lcd.setCursor(x,0);
lcd.write(0);
lcd.write(6);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(255);
lcd.write(254);
lcd.write(255);
}
void customB()
{
lcd.setCursor(x,0);
lcd.write(255);
lcd.write(6);
lcd.write(5);
lcd.setCursor(x, 1);
lcd.write(255);
lcd.write(7);
lcd.write(2);
}
void customC()
{
lcd.setCursor(x,0);
lcd.write(0);
lcd.write(1);
lcd.write(1);
lcd.setCursor(x,1);
lcd.write(3);
lcd.write(4);
lcd.write(4);
}
void customD()
{
lcd.setCursor(x, 0);
lcd.write(255);
lcd.write(1);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(255);
lcd.write(4);
lcd.write(5);
}
void customE()
{
lcd.setCursor(x,0);
lcd.write(255);
lcd.write(6);
lcd.write(6);
lcd.setCursor(x, 1);
lcd.write(255);
lcd.write(7);
lcd.write(7);
}
void customF()
{
lcd.setCursor(x,0);
lcd.write(255);
lcd.write(6);
lcd.write(6);
lcd.setCursor(x, 1);
lcd.write(255);
}
void customG()
{
lcd.setCursor(x,0);
lcd.write(0);
lcd.write(1);
lcd.write(1);
lcd.setCursor(x,1);
lcd.write(3);
lcd.write(4);
lcd.write(2);
}
void customH()
{
lcd.setCursor(x,0);
lcd.write(255);
lcd.write(4);
lcd.write(255);
lcd.setCursor(x, 1);
lcd.write(255);
lcd.write(254);
lcd.write(255);
}
void customI()
{
lcd.setCursor(x,0);
lcd.write(1);
lcd.write(255);
lcd.write(1);
lcd.setCursor(x,1);
lcd.write(4);
lcd.write(255);
lcd.write(4);
}
void customJ()
{
lcd.setCursor(x+2,0);
lcd.write(255);
lcd.setCursor(x,1);
lcd.write(4);
lcd.write(4);
lcd.write(5);
}
void customK()
{
lcd.setCursor(x,0);
lcd.write(255);
lcd.write(4);
lcd.write(5);
lcd.setCursor(x,1);
lcd.write(255);
lcd.write(254);
lcd.write(2);
}
void customL()
{
lcd.setCursor(x,0);
lcd.write(255);
lcd.setCursor(x,1);
lcd.write(255);
lcd.write(4);
lcd.write(4);
}
void customM()
{
lcd.setCursor(x,0);
lcd.write(0);
lcd.write(3);
lcd.write(5);
lcd.write(2);
lcd.setCursor(x,1);
lcd.write(255);
lcd.write(254);
lcd.write(254);
lcd.write(255);
}
void customN()
{
lcd.setCursor(x,0);
lcd.write(0);
lcd.write(2);
lcd.write(254);
lcd.write(255);
lcd.setCursor(x,1);
lcd.write(255);
lcd.write(254);
lcd.write(3);
lcd.write(5);
}
void customP()
{
lcd.setCursor(x,0);
lcd.write(255);
lcd.write(6);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(255);
}
void customQ()
{
lcd.setCursor(x,0);
lcd.write(0);
lcd.write(1);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(3);
lcd.write(4);
lcd.write(255);
lcd.write(4);
}
void customR()
{
lcd.setCursor(x,0);
lcd.write(255);
lcd.write(6);
lcd.write(2);
lcd.setCursor(x,1);
lcd.write(255);
lcd.write(254);
lcd.write(2);
}
void customS()
{
lcd.setCursor(x,0);
lcd.write(0);
lcd.write(6);
lcd.write(6);
lcd.setCursor(x, 1);
lcd.write(7);
lcd.write(7);
lcd.write(5);
}
void customT()
{
lcd.setCursor(x,0);
lcd.write(1);
lcd.write(255);
lcd.write(1);
lcd.setCursor(x,1);
lcd.write(254);
lcd.write(255);
}
void customU()
{
lcd.setCursor(x, 0);
lcd.write(255);
lcd.write(254);
lcd.write(255);
lcd.setCursor(x, 1);
lcd.write(3);
lcd.write(4);
lcd.write(5);
}
void customV()
{
lcd.setCursor(x, 0);
lcd.write(3);
lcd.write(254);
lcd.write(254);
lcd.write(5);
lcd.setCursor(x+1, 1);
lcd.write(2);
lcd.write(0);
}
void customW()
{
lcd.setCursor(x,0);
lcd.write(255);
lcd.write(254);
lcd.write(254);
lcd.write(255);
lcd.setCursor(x,1);
lcd.write(3);
lcd.write(0);
lcd.write(2);
lcd.write(5);
}
void customX()
{
lcd.setCursor(x,0);
lcd.write(3);
lcd.write(4);
lcd.write(5);
lcd.setCursor(x,1);
lcd.write(0);
lcd.write(254);
lcd.write(2);
}
void customY()
{
lcd.setCursor(x,0);
lcd.write(3);
lcd.write(4);
lcd.write(5);
lcd.setCursor(x+1,1);
lcd.write(255);
}
void customZ()
{
lcd.setCursor(x,0);
lcd.write(1);
lcd.write(6);
lcd.write(5);
lcd.setCursor(x, 1);
lcd.write(0);
lcd.write(7);
lcd.write(4);
}
void customqm()
{
lcd.setCursor(x,0);
lcd.write(1);
lcd.write(6);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(254);
lcd.write(7);
}
void customsm()
{
lcd.setCursor(x,0);
lcd.write(255);
lcd.setCursor(x, 1);
lcd.write(7);
}