Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

01/04/2014 #1

Avatar de EDGAR KAMI

Mostrar caracteres en c y movimiento en 8 displays
¿Cómo podría poner la palabra hola en 8 display de 7 segmentos usando Pic16f877a y en programación c?
La palabra hola deberá moverse y parpadear o solo moverse (desplazarse).
Tengo programación de un codificador binario donde uso display doble y con transistores los enciendo y apago, pero ni idea de como hacer este.

La palabra hola tiene que aparecer.
La palabra debe moverse a través de los 8 display.

Código:
#include <16F877a.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT 
#use delay (clock=20000000) 
#define use_portd_lcd TRUE 
#define use_portb_kbd TRUE
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#include <lcd.c>
#include <kbd_4x4.c>

void unidec(con)
{
int8 uni=0,dec=0;
while(con<9){con-=10;dec++;}
uni=con;
output_c(uni);output_high(pin_c6);delay_ms(5);
output_c(dec);output_high(pin_c7);delay_ms(5);
}

   set_tris_a (0b00011111);
   set_tris_b (0b11111111);
   set_tris_c (0b00000000);
   set_tris_d (0b00000000);
   Port_b_pullups (true);
   lcd_init (); 
   kbd_init (); 
   CHAR k;
   int8 con=0,x=0,uni=0,dec=0,seg=0;
 WHILE(true)
      {
      lcd_gotoxy (1, 2) ;
     printf (lcd_putc,"\rContador\r") ;
     uni=con;
while(!input(pin_a0) && !input(pin_a1))unidec(con);
{if (input(pin_a0))
 if(con>98) con=0;
else con++;}
{if(input(pin_a1))
 if(con<1) con=99;
else con--;}
while(input(pin_a0)|| input(pin_a1))unidec(con);

     }
Está un poco confuso porque es de mi 877a donde voy a trabajar.

Aquí les pongo como sería en el 84a

Código:
#include <16F84A.h>
#fuses nowdt,xt,noput,noprotect
#use fast_io(a)
#use fast_io(b)
#use delay(clock=4000000)
void unidec(con)
{
int8 uni=0,dec=0;
while(con<9){con-=10;dec++;}
uni=con;
output_b(uni);output_high(pin_b6);delay_ms(5);
output_b(dec);output_high(pin_b7);delay_ms(5);
}
Void main()
{
Set_tris_a(0b00011111);
Set_tris_b(0b00000000);
int8 con=0;
output_b(0b11000000);
while(true)
     {
while(!input(pin_a0) && !input(pin_a1))unidec(con);
{if (input(pin_a0))
 if(con>98) con=0;
else con++;}
{if(input(pin_a1))
 if(con<1) con=99;
else con--;}
while(input(pin_a0)|| input(pin_a1))unidec(con);
}
}
Les agradecería la ayuda.
01/04/2014 #2

Avatar de TRILO-BYTE

yo lo que haria es usar 1 puerto para dibujar en los 7 segmentos
y un un pin para hacer el reset y otro pin para el clock en un 4017

la idea es hacer un barrido con el cd4017 como este cuenta de 0 a 10 para eso es el pin reset para que cuente de 1 al 8

no es tan necesario usar transistores yo he hecho trabajar una matriz de leds con solo el puerto B y el cd4017

olvidate del decodificador por que solo cuenta del 0 al 9 y lo demas es caracteres raros

yo haria algo asi en el codigo


char caracteres[8]=" TUS 8 CARACTERES";

while(1)
{
reset;
contador=0;

while(contador!=9)
{
output_high(clock);
output_B=caracteres[contador];

output_low(clock);

contador++;
}

}


hay que usar una interrupcion para el reloj
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.