quinta-feira, 26 de julho de 2012

Display de 7 segmentos com ATmega 328P (avr sutudio)

aqui é usado o display catodo comum!


Esquemático :

Código fonte:

//************************************************************************/
//                             Display 7 segmento com Atmega328P
//  Version             : 1.0
//  microcontrolador : AVR ATMega328
//  Autor            : Aguivone
//  descrição        : usando display 7 segmento com avr studio
//  data             : 26/07/2012.
//
//************************************************************************/
#define F_CPU 16000000UL  // 16 MHz
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <util/delay.h>
#include <string.h>

#define liga_pino(x,y) x |= _BV(y)
#define desliga_pino(x,y) x &= ~(_BV(y))
#define alterna_pino(x,y) x ^= _BV(y)

#define SEG_A   PD7
#define SEG_B   PB0
#define SEG_C   PB1
#define SEG_D   PB2
#define SEG_E   PB3
#define SEG_F   PB4
#define SEG_G   PB5
/////////////////////////////funçoes auxiliares /////////////////////////////
void  mostra_numero(int numero)
{
     switch(numero)
     {
     case 0:
                {
                 liga_pino(PORTD,SEG_A);
                 liga_pino(PORTB,SEG_B);
                 liga_pino(PORTB,SEG_C);
                 liga_pino(PORTB,SEG_D);
                 liga_pino(PORTB,SEG_E);
                 liga_pino(PORTB,SEG_F);
                 desliga_pino(PORTB,SEG_G);
                }break;
     case 1:
                {
                 desliga_pino(PORTD,SEG_A);
                 liga_pino(PORTB,SEG_B);
                 liga_pino(PORTB,SEG_C);
                 desliga_pino(PORTB,SEG_D);
                 desliga_pino(PORTB,SEG_E);
                 desliga_pino(PORTB,SEG_F);
                 desliga_pino(PORTB,SEG_G);
                }break;
     case 2:
                {
                 liga_pino(PORTD,SEG_A);
                 liga_pino(PORTB,SEG_B);
                 desliga_pino(PORTB,SEG_C);
                 liga_pino(PORTB,SEG_D);
                 liga_pino(PORTB,SEG_E);
                 desliga_pino(PORTB,SEG_F);
                 liga_pino(PORTB,SEG_G);
                }break;
     case 3:
                {
                 liga_pino(PORTD,SEG_A);
                 liga_pino(PORTB,SEG_B);
                 liga_pino(PORTB,SEG_C);
                 liga_pino(PORTB,SEG_D);
                 desliga_pino(PORTB,SEG_E);
                 desliga_pino(PORTB,SEG_F);
                 liga_pino(PORTB,SEG_G);
                }break;
     case 4:
                {
                 desliga_pino(PORTD,SEG_A);
                 liga_pino(PORTB,SEG_B);
                 liga_pino(PORTB,SEG_C);
                 desliga_pino(PORTB,SEG_D);
                 desliga_pino(PORTB,SEG_E);
                 liga_pino(PORTB,SEG_F);
                 liga_pino(PORTB,SEG_G);
                }break;
     case 5:
                {
                 liga_pino(PORTD,SEG_A);
                 desliga_pino(PORTB,SEG_B);
                 liga_pino(PORTB,SEG_C);
                 liga_pino(PORTB,SEG_D);
                 desliga_pino(PORTB,SEG_E);
                 liga_pino(PORTB,SEG_F);
                 liga_pino(PORTB,SEG_G);
                }break;
     case 6:
                {
                 liga_pino(PORTD,SEG_A);
                 desliga_pino(PORTB,SEG_B);
                 liga_pino(PORTB,SEG_C);
                 liga_pino(PORTB,SEG_D);
                 liga_pino(PORTB,SEG_E);
                 liga_pino(PORTB,SEG_F);
                 liga_pino(PORTB,SEG_G);
                }break;
     case 7:
                {
                 liga_pino(PORTD,SEG_A);
                 liga_pino(PORTB,SEG_B);
                 liga_pino(PORTB,SEG_C);
                 desliga_pino(PORTB,SEG_D);
                 desliga_pino(PORTB,SEG_E);
                 desliga_pino(PORTB,SEG_F);
                 desliga_pino(PORTB,SEG_G);
                }break;
     case 8:
                {
                 liga_pino(PORTD,SEG_A);
                 liga_pino(PORTB,SEG_B);
                 liga_pino(PORTB,SEG_C);
                 liga_pino(PORTB,SEG_D);
                 liga_pino(PORTB,SEG_E);
                 liga_pino(PORTB,SEG_F);
                 liga_pino(PORTB,SEG_G);
                }break;
     case 9:
                {
                 liga_pino(PORTD,SEG_A);
                 liga_pino(PORTB,SEG_B);
                 liga_pino(PORTB,SEG_C);
                 liga_pino(PORTB,SEG_D);
                 desliga_pino(PORTB,SEG_E);
                 liga_pino(PORTB,SEG_F);
                 liga_pino(PORTB,SEG_G);            
                }break; 
     case 10://desliga display
                {
                 desliga_pino(PORTD,SEG_A);
                 desliga_pino(PORTB,SEG_B);
                 desliga_pino(PORTB,SEG_C);
                 desliga_pino(PORTB,SEG_D);
                 desliga_pino(PORTB,SEG_E);
                 desliga_pino(PORTB,SEG_F);
                 desliga_pino(PORTB,SEG_G);            
                }break; 
     }
}

/////////////////////////////função principal////////////////////////////////
int main(void)
{
           DDRD = 0XFF;  //inicializa portD como saida
           DDRB = 0XFF;  //inicializa portB como saida
           
          //////////////////////////
           for(;;)
            {     
              mostra_numero(0);
              _delay_ms(1000);
               mostra_numero(1);
              _delay_ms(1000);
               mostra_numero(2);
              _delay_ms(1000);
               mostra_numero(3);
              _delay_ms(1000);
               mostra_numero(4);
              _delay_ms(1000);
               mostra_numero(5);
              _delay_ms(1000);
               mostra_numero(6);
              _delay_ms(1000);
               mostra_numero(7);
              _delay_ms(1000);
               mostra_numero(8);
              _delay_ms(1000);
               mostra_numero(9);
              _delay_ms(1000);
               mostra_numero(10);
              _delay_ms(1000);               
            }
            
}
//////////////////////////////////////////////////////////////////////////////


para contribuir com o blog colocando seus projetos aqui basta entrar em contato!

até a próxima!

Nenhum comentário :

Postar um comentário

olá,digite aqui seu comentário!