Buenas, lo de la posición está claro. Ahora lo que pretendo es dibujar en el LCD una barra que aumente de "barrita en barrita", si uso un LCD de 16 caracteres en total son 16*5=80. El problema con el codigo que tengo es que me dibuja un caracter de mas (cinco barritas) y cuando el numero de barras a dibujar es menor de 5, aparece desplazado una posición a la derecha.
//******************************************************************************
// CODIGO A NIVEL DE PIXEL con cristal a 4Mhz
// CON 5 X 7 DOTS (se pueden crear hasta 8 caracteres solamente)
// EN ESTE EJEMPLO SE PRUEBA COMO GRABAR NUEVOS CARACTERES
// EN LA CG-RAM-DATA DIRECCIONANDO CADA LINEA CON EL CG-RAM-ADDRESS
//******************************************************************************
#include <16F876A.h>
#fuses XT,NOWDT,PUT
#use delay(clock=4000000)
#byte porta =5
#byte portb =6
//#define use_portb_lcd TRUE
//#include <LCD.c>
/******************************************************************************/
/* Definiciones para la interfaz PIC-LCD */
/******************************************************************************/
# define PORTA 0x05// Puerto A
# define PORTB 0x06// Puerto B
# define PORTC 0x07// Puerto C
# define TRISA 0x85// Registro de direccionamiento Puerto A
# define TRISB 0x86// Registro de direccionamiento Puerto B
# define TRISC 0x87// Registro de direccionamiento Puerto C
//Se definen los terminales de conexion del display
#bit lcd_db4 = PORTA.2
#bit tris_lcd_db4 = TRISA.2
#bit lcd_db5 = PORTA.3
#bit tris_lcd_db5 = TRISA.3
#bit lcd_db6 = PORTA.4
#bit tris_lcd_db6 = TRISA.4
#bit lcd_db7 = PORTA.5
#bit tris_lcd_db7 = TRISA.5
#bit lcd_en = PORTC.0
#bit tris_lcd_en = TRISC.0
#bit lcd_rs = PORTC.1
#bit tris_lcd_rs = TRISC.1
# include <lcd_flex.c>
int const caracter0_direccion[8]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};
int const caracter1_direccion[8]={0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};
int Volumen,aux,i;
/******************************************************************************/
void MostrarCuadroLCD(int Columna){
int contador;
for(contador=0;contador<7;contador++){
lcd_send_byte(0,caracter0_direccion[contador]); //modo comando
lcd_send_byte(1,0b11111); // modo dato
}
lcd_send_byte(0,caracter0_direccion[7]); //modo comando
lcd_send_byte(1,0b0); // modo dato
lcd_send_byte(0,0x80);
lcd_gotoxy(Columna,1);
for(contador=0;contador<2;contador++){
lcd_send_byte(1,contador); //modo dato
}
delay_cycles(1);
}
/******************************************************************************/
void MostrarBarra(int Columna,int dato) {
int contador;
for(contador=0;contador<7;contador++){
lcd_send_byte(0,caracter1_direccion[contador]); //modo comando
lcd_send_byte(1,dato); // modo dato
}
lcd_send_byte(0,caracter1_direccion[7]); //modo comando
lcd_send_byte(1,0b0); // modo dato
lcd_send_byte(0,0x80);
lcd_gotoxy(Columna,1);
for(contador=0;contador<2;contador++){
lcd_send_byte(1,contador); //modo dato
}
delay_cycles(1);
}
/******************************************************************************/
void MostrarBarraVolumenLCD(int Volumen){
int Columna;
int aux,contador;
Columna=1;
aux=Volumen;
while(aux>=5){//Por cada pasada muestra un cuadro.
aux=aux-5;
MostrarCuadroLCD(Columna);
Columna++;
}
switch (aux) {
case 0x01: MostrarBarra(Columna,0b10000);
Break;
case 0x02: MostrarBarra(Columna,0b11000);
Break;
case 0x03: MostrarBarra(Columna,0b11100);
Break;
case 0x04: MostrarBarra(Columna,0b11110);
Break;
}
}
/******************************************************************************/
void main() {
set_tris_a(0x0);
set_tris_b(0x0);
set_tris_c(0x0);
Volumen=1;
lcd_init();
MostrarBarraVolumenLCD(Volumen);
}