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 varsuchar 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); }