Buenas!!! al final me he puesto manos a la obra y he realizado la animacion de carga de una bateria....jeje, para ello se diseña los caracteres de la bateria(al 0%, al 20%, al 40%, al 60%, al 80% y al 100%), decir que solamente he utilizado una posicion de memoria de la GCRAM(aunque cada animacion ocupa 8 posiciones), he ido machacando valores.......aqui el codigo:
////////////////////////////////////////////////////////////////////////////////////
// VsZeNeR"05
// 30/Septiembre/05
//
// Programa: Bateria
// Version: 0.0
//
// Dispositivo: PIC 16F648A Compilador: CCS vs3.227
// Entorno IDE: MPLAB IDE v7.21 Simulador: Proteus 6.7sp3
//
// Notas: Se muestra por pantalla de lcd(LM016L) la animacion de carga de
// una bateria, para ello se han diseñado nuevos caracteres y almacenados
// en la memoria GCRAM de la lcd, solo se ha usado una posicion de memoria
// de dicha GCRAM. Tener en cuenta que hay que poner la directiva NOLVP para
// que el pin B4 sea de salida.
//
// Conexiones: B0 -> E
// B1 -> RS
// B2 -> RW
// B4 -> D4
// B5 -> D5
// B6 -> D6
// B7 -> D7
//////////////////////////////////////////////////////////////////////////////////
#include <16f648a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#define use_portb_lcd TRUE
#include <lcd.c> //libreria manejo de la lcd
///DECLARACION DE FUNCIONES
void recarga(void); //funcion que crea el nuevo caracter
///DECLARACION DE VARIABLES GLOBALES
char cont=0; //contador que apunta al nuevo caracter diseñado
int8 bat0[]={0b00001110,0b00001010,0b00010001,0b00010001,0b00010001,0b000010001,0b00010001,0b00011111},
bat20[]={0b00001110,0b00001010,0b00010001,0b00010001,0b00010001,0b00010001,0b00011111,0b00011111},
bat40[]={0b00001110,0b00001010,0b00010001,0b00010001,0b00010001,0b00011111,0b00011111,0b00011111},
bat60[]={0b00001110,0b00001010,0b00010001,0b00010001,0b00011111,0b00011111,0b00011111,0b00011111},
bat80[]={0b00001110,0b00001010,0b00010001,0b00011111,0b00011111,0b00011111,0b00011111,0b00011111},
bat100[]={0b00001110,0b00001010,0b00011111,0b00011111,0b00011111,0b00011111,0b00011111,0b00011111};
///PROGRAMA
void main(void)
{
lcd_init(); //inicializa lcd
recarga(); //crea 1 animacion
lcd_gotoxy(5,1); //presentacion...
lcd_putc("Cargando
VsZeNeR"05" ); //...inicial
for( ; ; ){ //bucle...
lcd_gotoxy(2,1); //donde se va a mostrar la animacion de la bateria
lcd_send_byte(1,0); //muestra animacion
delay_ms(250);
cont++; //apunta a siguiente animacion
recarga(); //crea animacion
} //...infinito
}
///FUNCION ENCARGADA DE CREAR ANIMACION
void recarga(void){
char i; //indice para for
lcd_send_byte(0,0x40); // se escribe en la GCRAM posicion 0x40
switch(cont){ //selecciona animacion
case 0: for(i=0;i<8;i++) //bateria al 0%
lcd_send_byte(1,bat0[ i ]);
break;
case 1: for(i=0;i<8;i++) //bateria al 20%
lcd_send_byte(1,bat20[ i ]);
break;
case 2: for(i=0;i<8;i++) //bateria al 40%
lcd_send_byte(1,bat40[ i ]);
break;
case 3: for(i=0;i<8;i++) //bateria al 60%
lcd_send_byte(1,bat60[ i ]);
break;
case 4: for(i=0;i<8;i++) //bateria al 80%
lcd_send_byte(1,bat80[ i ]);
break;
case 5: for(i=0;i<8;i++) //bateria al 100%
lcd_send_byte(1,bat100[ i ]);
cont=0; //restaura indice de crear animacion
}
}
Bueno ya sabemos como dibujar en una lcd no grafica 2x16!!!
PD: monopic el coche de formula 1 te lo dejo ati jeje por cierto eso de los controladores PID esta wai!!!