Autor Tema: ayuda con codigo de multiplexado  (Leído 1016 veces)

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

Desconectado XXCIRCUITOXX

  • PIC10
  • *
  • Mensajes: 8
ayuda con codigo de multiplexado
« en: 13 de Julio de 2012, 19:12:47 »
hola amigos del foro no tengo mucha experiencia con los micros pero necesito realizar  multiplexion de displays proble con varios codigos pero ninguno me resulto muy eficiente  ya que siempre parpadeaba al hacer la cuenta, ahora estoy utilizando el temporizador para que haga la multiplexion  pero no tengo muy claras las  cosas quizas puedan darme pautas y ayudarme en el codigo de antema  gracias.( lo olvidaba  es un contador de 0 a 99 ) ahi va el codigo de antemano gracias.


aqui biene el codigo :

//******************************************************************************
#include <16f877a.h> //pic a utilizar
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP  //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#int_rtcc
#use standard_io(a)
#use standard_io(b)
/******************************************************************************/
//Variables
int tabBCD[10]={0b0000,0b0001,0b0010,0b0011,0b0100,0b0101,0b0110,0b0111,0b1000,0b1001};
int a,b,c,d;
int min,seg;
int h_digit,m_digit,l_digit;
int delay=5,conta,conta1=0;
/******************************************************************************/
//Funciones
void vizu(void);
void int2bcd(int valor);
void parpadea(void);
/******************************************************************************/
///PROGRAMA
void main(void)
{
      setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);
      enable_interrupts(int_timer0);
      enable_interrupts(global);
      set_timer0(131);
      a=0,b=0,c=0,d=0;
      while(true)
         {
         
          if(conta1==10000)
             {
               conta1=0;
             }
            conta1++;
            int2bcd(conta1);
            a=m_digit;
            b=l_digit;
            vizu();       
         }
         }
//*****************************************************************************
void int_isr(void)
   {
            while(1)
            {
            if(conta1==10000)
               {
                   conta1==0;
               }
            conta1++;
            int2bcd(conta1);
            a=m_digit;
            b=l_digit;
            vizu();
            }
   }

/******************************************************************************/
void vizu(void)
   {
            output_b(tabBCD[a]| 0b11100000);
            delay_ms(delay);
            output_b(tabBCD| 0b11010000);
            delay_ms(delay);
            output_b(tabBCD[c]| 0b10110000);
            delay_ms(delay);
            output_b(tabBCD[d]| 0b01110000);
            delay_ms(delay);
   }
/******************************************************************************/
/************************************************/
// Funcion que convierte de Entero a 3 x BCD
/************************************************/
void int2bcd(int valor)
   {
      h_digit = (int) valor / 100;  // 1er Dígito o Centenas
      valor -= h_digit * 100;       // y se lo resto al valor
      m_digit = (int) valor / 10;   // 2do Dígito o Decenas
      valor -= m_digit * 10;        // y también se lo resto
      l_digit = valor;              // y por último solo me quedan las unidades
   }
/******************************************************************************/