TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: LEDER en 17 de Agosto de 2015, 18:34:22

Título: mostrar el signo % en un LCD
Publicado por: LEDER en 17 de Agosto de 2015, 18:34:22
 :-/  :) Hola tengo un pequeño problema con mi proyecto estuve tratando de hacer que a través de un LCD se me muestre el voltaje de una batería y el porcentaje de carga que tiene el inversor bn asta allí todo bien me muestra el voltaje de la batería y el porcentaje de carga pero tengo un pequeño problema para mostrar el signo de porcentaje (%) después de la medición aquí les dejo mi código para que me ayuden :-/


#include <16F877A.h>                                                            //pic usado
#device ADC=10                                                                  //ADC = de 1024 bits
#FUSES NOWDT                                                                    //No Watch Dog Timer
#FUSES XT                                                                       //Crystal osc <= 4mhz
#FUSES NOPROTECT                                                                //Code not protected from reading
#FUSES NOBROWNOUT                                                               //No brownout reset
#FUSES NOPUT                                                                    //No Power Up Timer
#FUSES NOCPD                                                                    //No EE protection
#FUSES NODEBUG                                                                  //No Debug mode for ICD
#FUSES NOLVP                                                                    //No low voltage
#FUSES NOWRT                                                                    //Program memory not write protected
#FUSES PUT
#FUSES BROWNOUT
#use delay(clock=4000000)                                                       //fracuensia del cristal 20MHz
#include <lcd.c>                                                                //Archivo para el manejo de LCD
#define use_portb_lcd TRUE                                                      //uso de puerto D para el LCD
int16 carg;                                                                     //variable CARG
float p;                                                                        //variable P
int16 volt;                                                                     //variable VOLT
float b;                                                                        //variable B
float c;                                                                        //variable C para monitoreo independiente del votage para la proteccion por bateria baja
void main(){                                                                    //apertura de programa
OUTPUT_HIGH(PIN_B0);                                                            //salida alta por el pin B0 para mantener apagado el inversor al conectarlo
setup_port_A(all_analog);                                                       //todas las entradas analogicas
setup_adc(adc_clock_internal);                                                  //configura el converso
delay_ms(10);                                                                   //tiempo de retardo por seguridad
printf(lcd_putc,"\fSISTEM SEARCH");                                             //inicialisasion
delay_ms(5000);                                                                 //evita que el lcd espabile
while (TRUE){                                                                   //bucle   
if(c>=53){                                                                      //para que el inversor no ensienda asta que la bateria no este cargada
output_low(PIN_B3);}                                                            //salida baja para cortra arestar la salida alta por bateria baja para encender el inversor
if(c<=44){                                                                      //para apagar el inversor por bateria baja
output_high(PIN_B3);}                                                           //salida alta por el pin b3 para apagar el inversor
if(p>=99){                                                                      //lectura de la variable P y condision a prosesar
output_high(PIN_B4);}                                                           //salida alta por el pin B3 si se cumple la condision de la variable P     
if(p<=98){                                                                      //por seguridad
output_low(pin_b4);}                                                            //salida baja por el pin b4 por seguridad
delay_ms(100);                                                                  //para que se estabilice
lcd_init();                                                                     //iniciacion de lcd
set_adc_channel(1);                                                             //Seleccionamos el canal'1' para hacer la lectura del valor analogico
delay_ms(1);                                                                    //para que se estabilice
volt = read_adc();                                                              //Hacemos la lectura del canal seleccionado anteriormente (canal'1')
delay_ms(1);                                                                    //para que se estabilice
b=(float)(volt*60/1000);                                                        //variable B
c=(float)(volt*60/1000);                                                        //variable C
lcd_gotoxy(1,1);                                                                //muestra la lectura de voltaje en las lineas (1,2) del LCD
printf(lcd_putc, "\b VOLTAJE = %3.1fV", b);                                     //muestra de la lectura de la variable C en el LCD
delay_ms(1000);                                                                 //para que se estabilice
set_adc_channel(0);                                                             //Seleccionamos el canal'0' para hacer la lectura del valor analogico
delay_ms(1);                                                                    //para que se estabilice
carg = read_adc();                                                              //Hacemos la lectura del canal seleccionado anteriormente (canal'0')
delay_ms(1);                                                                    //para que se estabilice
p=(float)(carg*0.979/10.000);                                                   //variable P
lcd_gotoxy(2,2);                                                                //muestra la lectura de voltaje en las lineas (10,2) del LCD
printf(lcd_putc, "\bCARGA   =3.0%f",p);                                         //muestra de la lectura de la variable P en el LCD
delay_ms(1000);                                                                 //para evitar que el LCD parpadee
lcd_gotoxy(13,2);                                                               //muestra el signo % en la fila 2 linea 14
printf(lcd_putc, "");                                                           //comando para la muestra del %
if(input(pin_b2)==1){                                                           //lectura de si se presiono el botos si o no para el buzer y prender o apagar el inversor
output_high(pin_b5);                                                            //salida alta por el pin b5 para hacer sonar el buzer
delay_ms(1000);                                                                 //tiempo de retardo del buzer sonando
delay_ms(1000);                                                                 //por seguridad
output_low(pin_b5);                                                             //salida baja por el pin b5 para hacer que el buzer deje de sonar
delay_ms(1000);                                                                 //por seguridad
delay_ms(1000);                                                                 //por seguridad
output_toggle(PIN_B0);                                                          //para encender o apagar el inversor segun como estaba
delay_ms(1000);}                                                                //por seguridad
else if(input(pin_b2)==0){                                                      //por seguridad
output_low(pin_b5);                                                             //por seguridad
delay_ms(1000);                                                                 //por seguridad
delay_ms(1000);}}}                                                              //por seguridad
Título: Re: mostrar el signo % en un LCD
Publicado por: RALF2 en 17 de Agosto de 2015, 22:01:17
Lo puedes hacer asi:

Citar
int var= 67;

void main()
{
   lcd_init();
   printf(lcd_putc,"%u%%",var);   // con dos signos %%
   
   while(true);
}

Saludos
Título: Re: mostrar el signo % en un LCD
Publicado por: ceci_lamorocha en 18 de Agosto de 2015, 20:15:17
Hola !  aprovecho para preguntarles como se hace para mostrar un cuadrado negro y luego otro y luego otro
para que parezca el efecto de carga



Título: Re: mostrar el signo % en un LCD
Publicado por: RALF2 en 18 de Agosto de 2015, 22:37:45
Para que puedas realizar lo que deseas; debes crear caracteres no definidos en la lcd, para ello revisa aqui (http://www.todopic.com.ar/foros/index.php?topic=14774.0).
Para que sepas como crearlos.

Saludos
Título: Re: mostrar el signo % en un LCD
Publicado por: KILLERJC en 18 de Agosto de 2015, 23:14:36
o con lcd_putc(0xFF); ?

http://3.bp.blogspot.com/_fPM2Mmzdjhc/TU3R8w_KaOI/AAAAAAAAAfs/WvDoGqdcePs/s1600/LCDcaract1.gif

Título: Re: mostrar el signo % en un LCD
Publicado por: RALF2 en 18 de Agosto de 2015, 23:37:37
A claro si es un solo cuadro negro de las mismas dimensiones como dice killerjc, tambien sirve.
Ahora bien si te quieres ponerte creativo y hacer figuras o unas barras que vaya creciendo horizontal o verticalmente, deberas crear los caracteres, como te indique en el enlace de arriba.   :mrgreen:

Saludos
Título: Re: mostrar el signo % en un LCD
Publicado por: ceci_lamorocha en 19 de Agosto de 2015, 09:32:54
buenisimo gracias !  :mrgreen: