Ontem estava trabalhando na parte final do projeto da biblioteca LCD para pinguino, e deparei com a tarefa de criar caracteres do usuário, bom a tarefa apesar de simples é um pouco tediosa e resolvi automatizar o processo.
Assim nasceu o Easy LCD CGRAM, desenvolvi em Java usando o NetBeans, não é a melhor opção mas tenho de estudar Java para a faculdade... :-(
A ideia é simples, são 64 botões que representam os pixels do display LCD, você clica nestes e depois gera o código para uso com a biblioteca pinguino que postei antes, o processo todo é muito fácil.
Screenshot:
Fontes e programa:
easy_LCD_CGRAM.zip
Como usar?
Basta colocar o código dos caracteres após o comando begin(), no setup{...}, e usa-los no loop{...} com o comando write():
Apenas, lembrem-se de usar o restante do código .pde e arquivo .h do post anterior...
/*
*************************************************************************
***************************************************************************
** LCD pratical use! PINGUINO CLOCK! **
***************************************************************************
*************************************************************************
*/
// Remove line above if you using a pinguino with PIC18F2550
#define PIC18F4550
#define HOUR 20
#define MIN 19
//global vars
uchar counter = 0;
uchar sec = 0;
uchar min = 0;
uchar hour = 0;
uchar num = 0;
void setup(){
//8 bits mode
//lcd(8, 9, 0, 1, 2, 3, 4, 5, 6, 7); // RS, E, D0 ~ D7
//4 bits mode, dont use last four pins ...
lcd(8, 9, 4, 5, 6, 7, 0, 0, 0, 0); // RS, E, D4 ~ D8
//LCD format
begin(2, 0);
//Creating user chars
//Set AC register to initial CGRAM position
command(0x40);
//Write character code
write(0x3);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x8);
write(0x18);
//Write character code
write(0x6);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x4);
write(0x0);
write(0xc);
//Write character code
write(0x6);
write(0x0);
write(0x0);
write(0x2);
write(0x0);
write(0x0);
write(0x0);
write(0xc);
//Write character code
write(0xc);
write(0x0);
write(0x1);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x6);
//Write character code
write(0x6);
write(0x2);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x3);
//Write character code
write(0xc);
write(0x0);
write(0x4);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x6);
//Write character code
write(0x6);
write(0x0);
write(0x0);
write(0x0);
write(0x8);
write(0x0);
write(0x0);
write(0xc);
//Write character code
write(0x3);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x10);
write(0x0);
write(0x18);
/* Debug */
pinMode(13, OUTPUT); // LED on pin 12
//Setup buttons
pinMode(20, INPUT);
pinMode(19, INPUT);
}
void loop()
{
// Output string
home();
lcdPrint("Pinguino Clock!"); // Output char
setCursor(15, 1);
//Using user chars, a very small pong game! :P
if(counter % 2){
num++;
if(num > 8){
num = 0;
}
write(num);
}
if (counter>9){
counter = 0;
sec++;
}
if (sec>59){
sec = 0;
min++;
}
if (min>59){
min = 0;
hour++;
}
if (hour>23){
hour = 0;
}
setCursor(0, 1);
if (hour < 10)
lcdPrint("0");
printNumber(hour, 10);
if (min < 10)
lcdPrint(":0");
else
lcdPrint(":");
printNumber(min, 10);
if (sec < 10)
lcdPrint(":0");
else
lcdPrint(":");
printNumber(sec, 10);
//set hour and min
if(digitalRead(HOUR) == LOW){
hour++;
}
if(digitalRead(MIN) == LOW){
min++;
}
counter++;
delay(52); //Need two delays by 52ms, crystal/clock/PIC18F code? DSO give me 100.1ms with this!
digitalWrite(13, LOW);
delay(52);
digitalWrite(13, HIGH);
}
