2010-08-14

Gerador de caracteres para LCD/Pinguino

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);    
}
Postar um comentário