LCD 16x2 y Display 7 segmentos con el mismo PIC

#1
Buenas noches. Desearía una ayuda sobre el título por favor, pues logro generar el código que adjunto.
Resulta que requiero mostrar caracteres de esta forma: C 1 2 3 4, tanto en el display 7 segmentos, como en el display LCD 16x2, paralelos a la misma vez, puesto que en primero de 7 segmentos sale conforme, pero en el segundo sale diferente.

Busqué cambiando %d y varias formas, pero no logro realizarlo, por eso requiero su ayuda.
Ya que el código está en hexadecimal y al parecer no lo interpreta el LCD.

PHP:
#use fast_io(d) 
#define use_portb_lcd TRUE         //definir portb lcd
#include<lcd.c>                  //libreria manejo lcd

int8 unide[10]={0x6f,0x66,0x7f,0x66,0x39,0x6f,0x6f,0x7f,0x66,0x39};
int e;


void main()
{
   lcd_init();         //inicializa lcd
   
   set_tris_c(0x01);
   set_tris_d(0b00000000);
   output_d(0b00000000);
   {
   delay_ms(1000);
   for (e=0; e<9; e++)
   {
   
output_d(unide[e]);
  printf (lcd_putc,"%D",unide[e]);
   delay_ms(100);
   output_d(0b00000000);
   printf(lcd_putc,"\f");   //borra pantalla del lcd
   delay_ms(100);
   }
  }
 }
 
Última edición por un moderador:
#2
Tal vez el siguiente programa te sirva de base.
PHP:
#include <18f4550.h>
#fuses NOFCMEN, NOVREGEN, NOUSBDIV
#use delay(internal = 4 MHz)

#include <lcd.c>

// Tabla hexadecimal para displays de 7 segmentos. (Cátodo común)
int8 const tabla_7_segmentos[16] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,7,0x7F,0x6F,
                                    0x77,0x7C,0x39,0x5E,0x79,0x71};
                                    
// Mostrar el número en ambos displays:
void mostrar_en_displays (int8 numero)
{
    output_b(tabla_7_segmentos[numero]);    // Se pone el contenido de la tabla en el puerto B.
    lcd_gotoxy(1,1);
    printf(lcd_putc,"HEX = %01X",numero);    // Se muestra el número en hexadecimal en la LCD.
}


void main (void)
{
    int8 contador = 0;
    
    lcd_init();
    mostrar_en_displays(0);
    
    while (true)
    {
        if(!input(PIN_A1))                    // Si RA1 está en 0...
        {
            if(contador-- > 0)                // Decrementar el contador sólo si es mayor a 0.
                mostrar_en_displays(contador);
            else
                contador = 0;                // Si se desborda, el contador permanecerá en 0. 
            while(!input(PIN_A1));            // Esperar hasta que RA1 esté en 1.
        }
        
        if(!input(PIN_A0))                    // Si RA0 está en 0...
        {
            if(contador++ < 15)                // Incrementar el contador sólo si es menor a 15.
                mostrar_en_displays(contador);
            else
                contador = 15;                // Si es mayor a 15, el contador permanecerá en 15.
            while(!input(PIN_A0));            // Esperar hasta que RA0 esté en 1.
        }
    }
}
Click en la imagen para aumentar. LCD16x2 & 7Segm.jpg
 
Última edición:
#3
Muchas gracias amigo, mejoro mis espectativas de lo propuesto ahora hare unas implementaciones adicionales ahi hare o adicionare un reloj externo a controlarlo. muchas gracias
 

Temas similares