Autor Tema: Ejemplitos en C para 16F648A  (Leído 609420 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado monopic

  • PIC10
  • *
  • Mensajes: 25
RE: Ejemplitos en C para 16F648A
« Respuesta #135 en: 29 de Septiembre de 2005, 22:50:00 »
hola vzener estoy cursando 6 semestre de tec electronica tengo 19 años y de los pic se muchas cosas pero de las lcs graficas ni papa,, nunca he utilizado una lcd grafica he visto programas que convierten imagenes en una serie de datos para las glcd,, lo que quisiera es mostrar una especie de imagen muy sencilla en una lcd 2x16. el proyecto que tengo que realizar es controlar el nivel de liquido de un tanque y visualizar en una lcd diferentes valores pero por ejemplo me gustaria dibujar una especie de tanque y de forma que tambien se vaya llenando parecido a como se llena el dibujo de las baterias de celular dependiendo de cuanto les queda de carga.. pero en si mirar la lcd 2x16 como una graficadora de forma que yo pueda mostrar cualquier imagen sin importar que se corte por las diviciones que existen entre caracter y caracter...espero que me entiendas que es lo que quiero realizar y ver las posibilidades de hacerlo,, y cuando me refero al coche me imagino una especie de f1 moviendose de izquierda a derecha .. muchisimas gracias por dedicar de tu tiempo a mis inquietudes,, no se podriamos intercambiar mucha inf. nos estan enseñando en la universidad como hacer filtros digitales y control pid con pic... gracias.......Giño

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #136 en: 30 de Septiembre de 2005, 11:05:00 »
Ke tal monopic!!!haber como te dije anteriormente deberas crear los caracteres tu mismo y guardarlo en la zona de memoria de la lcd llamada CGRAM donde en el modelo HD44780(LM016L) puedes guardar hasta un maximo de 8, aqui te pongo un enlace donde hay un programa de como hacer esto en ensamblador y simulado en PROTEUS para la carga de una bateria.....la contraseña para abrirlo es D.P.E. mirate el codigo en asm y veras que estan declarados todos los caracteres nuevos para ver la bateria cargandose....aqui el enlace:
http://personales.ya.com/cepalacios/Proy_bateria_carga.htm

Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #137 en: 30 de Septiembre de 2005, 12:22:00 »
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!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #138 en: 30 de Septiembre de 2005, 12:25:00 »
Desde este enlace os podeis descargar los archivitos necesarios para el programa: Bateria


Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 11:00:23 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #139 en: 01 de Octubre de 2005, 11:02:00 »
Ke tal!!!bien siguiendo con lcd y escribir e su CGRAM aqui pongo la animacion del muñeco come-cocos controlado por PC via v.terminal,No es el juego! simplemente pulsamos la tecla 4 para desplazar el muñeco come-cocos hacia la izquierda y la tecla 6 para desplazarlo hacia la derecha de la 1º fila de lcd:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"05      
//                   30/Septiembre/05
//
//   Programa:   Animacion dibujo ComeCocos controlado por RS232
//   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) en la primera linea la
//         animacion del dibujo ComeCocos controlado por el v.terminal, si se pulsa
//         numero 4 por PC la animacion se desplaza hacia la izquierda, si se pulsa
//         numero 6 por PC la animacion se desplaza hacia la derecha. Las figuras
//         son simetricas por lo tanto no se han declarado enteras. 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
//               A0 -> T1IN MAX232
//               A1 -> R1OUT MAX232                  
//////////////////////////////////////////////////////////////////////////////////
#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use rs232(baud=9600, xmit=PIN_A0, rcv=PIN_A1)   //manejo del RS232
#define use_portb_lcd TRUE         //definir portb lcd
#include<lcd.c>                  //libreria manejo lcd


///DECLARACION DE FUNCIONES
void recarga(void);      //funcion que crea el nuevo caracter

///DECLARACION DE VARIABLES GLOBALES
char cont=0,lim=1;      //contador que apunta al nuevo caracter diseñado
   int8    cocod1[]={0b00001111,0b00011110,0b00011100,0b00011000},
cocod2[]={0b00000000,0b01111111,0b11111111,0b11111100},
cocoi1[]={0b00011110,0b00001111,0b00000111,0b00000011},
cocoi2[]={0b00000000,0b01111111,0b11111111,0b00000011};
   
///PROGRAMA
void main(void)
{   
   lcd_init();         //inicializa lcd
   
   puts("Animacion Come Cocos" );   //animacion...
   puts("====================" );
   puts("    Teclas:" );
   puts("    ¨¨¨¨¨¨¨¨¨¨¨¨"  );
   puts("     <--     --> " );
   puts("      4       6  " );
   puts("VsZeNeR"05" );            //...por v.terminal
   printf(lcd_putc,"ComeCocos
    VsZeNeR"05" );   //mensaje por lcd
   
     
   for( ; ; ){   //bucle...
      recarga();      //funcion para el movimiento del comecocos
      if(lim>16)      //limites...
         lim=16;
      if(lim<1)
         lim=1;      //...de lcd
      lcd_putc("f
   VsZeNeR"05" );
      lcd_gotoxy(lim,1);      //movimiento de la animacion
      lcd_send_byte(1,0);    //muestra animacion
         }   //...infinito
}

///FUNCION ENCARGADA DE CREAR ANIMACION
void recarga(void){
   signed   char i;      //indice para for
   
   lcd_send_byte(0,0x40); // se escribe en la GCRAM posicion 0x40
   
   switch(getc() ){   //selecciona animacion
      case "4":    if(!cont){   //movimiento hacia izquierda
                  for(i=0;i<4;i++)   //boca abierta   
                     lcd_send_byte(1,cocoi1[ i ]);
                  for(i=3;i>-1;i--)
                     lcd_send_byte(1,cocoi1[ i ]);
                  cont++;   
                       }
                 else{               //boca cerrada
                  for(i=0;i<4;i++)   
                     lcd_send_byte(1,cocoi2[ i ]);
                  for(i=3;i>-1;i--)   
                     lcd_send_byte(1,cocoi2[ i ]);
                     cont=0;
                     }
               lim--;   //apunta siguiente posicion a mostrar animacion en lcd
               break;   
      case "6":    if(!cont){   //movimiento hacia derecha
                  for(i=0;i<4;i++)   //boca abierta   
                     lcd_send_byte(1,cocod1[ i ]);
                  for(i=3;i>-1;i--)   
                     lcd_send_byte(1,cocod1[ i ]);
                  cont++;
                     }
               else{               //boca cerrada
                  for(i=0;i<4;i++)   
                     lcd_send_byte(1,cocod2[ i ]);
                  for(i=3;i>-1;i--)   
                     lcd_send_byte(1,cocod2[ i ]);
                     cont=0;
                     }
               lim++;   //apunta siguiente posicion a mostrar animacion en lcd
         }
}         

Decir que la figura del come-cocos no se ha declarado entera ya que es simetrica la parte de arriba con la de abajo, entonces nos basta con declarar la mitad d ela figura....bueno ya tenemos una animacion moviendose por lcd controlada por RS232....ya seeee que el dibujo no esta muy bien dibujadooooo!!!jeje pero nunca se me ha dado bien el dibujo y menos en matrices 7x5 jeje!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #140 en: 01 de Octubre de 2005, 11:05:00 »
Desde este enlace os podeis descargar lo necesario para el programa anterior: Animacion come-cocos(NO juego!)


Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 11:01:57 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado monopic

  • PIC10
  • *
  • Mensajes: 25
RE: Ejemplitos en C para 16F648A
« Respuesta #141 en: 02 de Octubre de 2005, 00:13:00 »
hola amigo vs.zener estuve mirando la bateria cargandose y la entendi a la perfeccion. hice esto miralo en proteus como quedo, y una nueva pregunta la cgram solo tiene 8 pocisiones como podria hacer para hacer una animacion para cada una de las 32 posiciones de la lcd todavia tengo la idea metida en la cabeza poder manejar cada cuadricula de forma de mostrar una imagen en toda la lcd no se si sirva multiplezar las memorias o algo asi, un dia vi que en una cabina telefonica una lcd de 2x16 con el nombre de SISCO pero utilizaban toda la lcd se veia super y desde ahi se me ocurrio .. ya sabes... gracias por responderme y ademas esto le servira a todos en el foro nuevamente graciasGiño :

////////////////////////////////////////////////////////////////////////////////////
//                     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
void cara(void);//carita creada por monopic

///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};      

int8 feliz[]={0b11011,0b00000,0b11011,0b11011,0b00000,0b10001,0b01110};
int8 triste[]={0b11011,0b00000,0b11011,0b11011,0b00000,0b01110,0b10001};
//mios monopic


///PROGRAMA
void main(void)
{
   lcd_init();       //inicializa lcd

   recarga();         //crea 1 animacion
   lcd_gotoxy(5,1);   //presentacion...
   lcd_putc("Cargando
   VsZeNeR"05"Giño;   //...inicial
   
   for(;Giño{   //bucle...
      lcd_gotoxy(2,1);      //donde se va a mostrar la animacion de la bateria
      lcd_send_byte(1,0);    //muestra animacion
      recarga();            //crea animacion
      delay_ms(500);         
      lcd_gotoxy(3,1);   
      lcd_send_byte(1,1);   // muestra animacion por monopic
      cara();
      cont++;               //apunta a siguiente 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);
            break;
      case 1: for(i=0;i<8;i++)   //bateria al 20%
               lcd_send_byte(1,bat20);
            break;
      case 2: for(i=0;i<8;i++)   //bateria al 40%
               lcd_send_byte(1,bat40);
            break;
      case 3: for(i=0;i<8;i++)   //bateria al 60%
               lcd_send_byte(1,bat60);
            break;
      case 4: for(i=0;i<8;i++)   //bateria al 80%
               lcd_send_byte(1,bat80);
            break;
      case 5: for(i=0;i<8;i++)   //bateria al 100%
               lcd_send_byte(1,bat100);
               cont=0;         //restaura indice de crear animacion
         }
}         


void cara(void){
char i;
lcd_send_byte(0,0x48);

   switch(cont){   //selecciona animacion
      case 0: for(i=0;i<8;i++)   //bateria al 0%
            lcd_send_byte(1,triste);
            break;
      case 3: for(i=0;i<8;i++)   //bateria al 0%
            lcd_send_byte(1,feliz);
            break;                   
            cont=cont; }
 }

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #142 en: 02 de Octubre de 2005, 16:48:00 »
Haber hacer una animacion por cada una de las 32 posiciones de la lcd creo que la unica forma es como se ha realizado la de la bateria, es decir cada vez que vayas  apintar un dibujo la cargas en memoria y despues la escribes en la lcd.....Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado olotill

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 249
RE: Ejemplitos en C para 16F648A
« Respuesta #143 en: 02 de Octubre de 2005, 21:06:00 »
HOLA PANA VSZENER...

PUES GRACIAS POR CONTESTAR A MIS DUDAS SOBRE EL LCD, Y MUCHAS GRACIAS POR SEGUIR APORTANDO A NUESTRA AUTOEDUCACION Muchas risas

TE CUENTO QUE SIGO UNO A UNO TUS EJEMPLOS Y LA VERDAD ES QUE SON BASTANTE DIDACTICOS, UNA RAPIDA FORMA DE APRENDER A PROGRAMAR EN C Sonrisa Gigante


BUENO PUES POR AHORA TENGO OTRA CONSULTA, PORQUE A VECES UTILIZAS ESTE COMANDO:

PRINTF(LCD_PUTC,"......",........);

Y EN OTRAS SOLO SE UTILIZA ESTE:

LCD_PUTC("..........."Giño;


SEGUN YO CREO EN LA PRIMERA ES PARA MANEJAR VARIABLES, Y LA SEGUNDA SOLO MENSAJES EN LA LCD, ESTOY EN LO CORRECTO????

BUENO PUES SEGUIRE ADELANTE HASTA PONERME AL DIA EN LOS EJEMPLAZOS... YA NO ME FALTAN MUCHOS..... YA MISMO ME PONGO AL DIA..... INCREIBLE PERO EN MENOS DE UNA SEMANA YA HE APRENDIDO ALGO DE C, LO QUE ANTES NO SABIA NADA.... Sonrisa Gigante

NUEVAMENTE GRACIAS POR TU ESFUERZO, Y PUES SIGAMOS ADELANTE, ASI ENTRE AMIGOS ES MAS FACIL CRECER....

SALUDOS Y FELICITACIONES POR TU TRABAJO.....

UN ABRAZO DESDE ECUADOR .....  Rebotado
"La imaginación es más importante que el conocimiento"  A. Einstein..

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7907
RE: Ejemplitos en C para 16F648A
« Respuesta #144 en: 03 de Octubre de 2005, 07:50:00 »
Escrito originalmente por monopic
hola amigo vs.zener estuve mirando la bateria cargandose y la entendi a la perfeccion. hice esto miralo en proteus como quedo, y una nueva pregunta la cgram solo tiene 8 pocisiones como podria hacer para hacer una animacion para cada una de las 32 posiciones de la lcd todavia tengo la idea metida en la cabeza poder manejar cada cuadricula de forma de mostrar una imagen en toda la lcd no se si sirva multiplezar las memorias o algo asi, un dia vi que en una cabina telefonica una lcd de 2x16 con el nombre de SISCO pero utilizaban toda la lcd se veia super y desde ahi se me ocurrio .. ya sabes... gracias por responderme y ademas esto le servira a todos en el foro nuevamente graciasGiño :

////////////////////////////////////////////////////////////////////////////////////
//                     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
void cara(void);//carita creada por monopic

///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};      

int8 feliz[]={0b11011,0b00000,0b11011,0b11011,0b00000,0b10001,0b01110};
int8 triste[]={0b11011,0b00000,0b11011,0b11011,0b00000,0b01110,0b10001};
//mios monopic


///PROGRAMA
void main(void)
{
   lcd_init();       //inicializa lcd

   recarga();         //crea 1 animacion
   lcd_gotoxy(5,1);   //presentacion...
   lcd_putc("Cargando
   VsZeNeR"05"Giño;   //...inicial
   
   for(;Giño{   //bucle...
      lcd_gotoxy(2,1);      //donde se va a mostrar la animacion de la bateria
      lcd_send_byte(1,0);    //muestra animacion
      recarga();            //crea animacion
      delay_ms(500);         
      lcd_gotoxy(3,1);   
      lcd_send_byte(1,1);   // muestra animacion por monopic
      cara();
      cont++;               //apunta a siguiente 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);
            break;
      case 1: for(i=0;i<8;i++)   //bateria al 20%
               lcd_send_byte(1,bat20);
            break;
      case 2: for(i=0;i<8;i++)   //bateria al 40%
               lcd_send_byte(1,bat40);
            break;
      case 3: for(i=0;i<8;i++)   //bateria al 60%
               lcd_send_byte(1,bat60);
            break;
      case 4: for(i=0;i<8;i++)   //bateria al 80%
               lcd_send_byte(1,bat80);
            break;
      case 5: for(i=0;i<8;i++)   //bateria al 100%
               lcd_send_byte(1,bat100);
               cont=0;         //restaura indice de crear animacion
         }
}         


void cara(void){
char i;
lcd_send_byte(0,0x48);

   switch(cont){   //selecciona animacion
      case 0: for(i=0;i<8;i++)   //bateria al 0%
            lcd_send_byte(1,triste);
            break;
      case 3: for(i=0;i<8;i++)   //bateria al 0%
            lcd_send_byte(1,feliz);
            break;                   
            cont=cont; }
 }



Bueno en esta direccion , en el tercer mensaje encontraras una rutina que elaboramos entre todos para hacer una presentacion numerica en un lcd 2x16 y utilizando ambas lineas:
http://miarroba.com/foros/ver.php?foroid=46840&temaid=1654587&marcar=ejemplos+programas

Espero te sea util!!!Sonrisa GiganteSonrisa GiganteSonrisa Gigante
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #145 en: 03 de Octubre de 2005, 12:31:00 »
ke tal olotill!!!jeje pues te has contestado tu mismo!!!veo ke aprendes rapido!jeje exacto como bien indicas tu, el printf(lcd_putc......) es para manejar variables, datos que queremos mostrar por pantalla que varian a lo largo del programa....o que querramos mostrar contenidos de variables etc.....la funcion lcd_putc es para mostrar mensajes simplemente, es mas comodo asi.....suerteee con los ejemplitos y pa"lanteee jeje y no vayas tan rapido que sino voy a tener que trabajar yo mas!!!!jeje y ultimamente no tengo mucho tiempo!!!jeje es broma me alegro enormemente que estes aprendiendo c gracias en parte a mis ejemplos y que ya por lo menos le hayas perdido el miedo e incluso espero que te guste y todo el lenguaje c!!!jeje Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado monopic

  • PIC10
  • *
  • Mensajes: 25
RE: Ejemplitos en C para 16F648A
« Respuesta #146 en: 03 de Octubre de 2005, 23:05:00 »
hola vzener  yo entiendo que tocaria pintar primero en cada ubicacion de la cgram y luego posicionarla en cualquier cuadro de la lcd pero mi duda es como haria si la cgram solo tiene 8 posiciones y la lcd tiene 32 cuadros .. como haria?? gracias nuevamente...

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #147 en: 04 de Octubre de 2005, 06:33:00 »
Vamos haber....simplemente con una posicion de memoria te basta......pero tienes 8.....hacerlo pues haber si quieres dibujar 16 animaciones definidas por ti en la 1º fila y otras 16 en la 2ºfila de la lcd solamente tendras que decir donde poner la siguiente animacion, si te fijas en el ejemplito del come-cocos, la animacion se mueve por pantalla mediante la instruccion lcd_gotoxy(x,y); donde "x" se refiere a filas de la lcd(2 en este caso) e "y" se refiere a columnas(16 e este caso) asi pdras dibujar animaciones en todas las posiciones de memoria...ahora bien si lo que quieres es cambiar en las 32 posiciones a la vez de animacion no podras ya que estas limitado a 8 animaciones en la GCRAM de la lcd.Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado monopic

  • PIC10
  • *
  • Mensajes: 25
RE: Ejemplitos en C para 16F648A
« Respuesta #148 en: 04 de Octubre de 2005, 22:25:00 »
hola vzener podria hacer lo siguiente,,, crear un caracter cualquiera y guardarlo en una posicion de la cgram y visualizarlo y luego sobreescribir esa posicion de la cgram y visualizarla tambien pero en otra posicion de la lcd.. no se perp debe haber laguna forma de poder manejar las 32 posiciones de la lcd... ha que opinas .. gracias...otra duda,, el proteus corre a la perfeccion pero lo programe en un 16f84 y no corre de igual forma ....

Desconectado cchhaa

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 294
    • ¡¡peligro!!
RE: Ejemplitos en C para 16F648A
« Respuesta #149 en: 05 de Octubre de 2005, 03:42:00 »
hola vszener, solo queria agradecer tu postura de compartir tus conocimientos con los demas, estoy todabia por las primeras paginas de este post, encendiendo diodos y tal, pero ojeando las demas paginas veo una cantidad de informacion impresionante, con codigos, trucos y ayudas que sin duda haran que yo y muchos mas aprendamos mas rapido y con mas base. Sigue asi compañero!!!!


un saludo y gracias
cchhaa
Reiniciando......


 

anything