Page Rank

Kamis, 07 Maret 2013

Tutorial Seven Segment dengan AVR GCC / winAVR


Sebelumnya saya sudah pernah memposting tentang Tutorial Seven Segment dengan CodeVision AVR, untuk mengetahui tentang Seven Segment itu sendiri bisa dilihat pada postingan sebelumnya tersebut.

Kali ini saya akan memberikan tutorial untuk menampilkan display angka pada Seven Segment dengan program AVR Studio atau winAVR.


Rangkaian Skematiknya sbb:




Ada dua cara untuk menampilkan tulisan pada Seven Segment dengan AVR Studio ini, cara pertama listing programnya sebagai berikut:

/*
================================================ 
Program Seven Segment Display dengan AVR Studio
Programmer     : Wahyu Rahmaniar
Company        : Technologination                 
================================================
 */


#include<avr/io.h>
#include<util/delay.h>

#define DATA_DDR     DDRC
#define DATA_PORT      PORTC
#define Pin_a             0
#define Pin_b             1
#define Pin_c             2
#define Pin_d             3
#define Pin_e             4
#define Pin_f             5
#define Pin_g             6
//#define Pin_Dec         7
#define F_CPU 12000000ul

void Display(int a);

  void main(void)
  
  {
  unsigned int i;
  i=0;
  DATA_DDR = 0XFF;
  do
  {
  Display(i);
  i++;
  if(i>9) i=0;
  _delay_ms(3000);
  }
  while(1);
    
 } 

  void Display(int a)
  {
  switch(a)
  {
  case 0:  
  DATA_PORT = 0b11000000;
  break;            
  case 1:            
  DATA_PORT = 0b11111001;
  break;            
  case 2:  
  DATA_PORT = 0b10100100;
  break;
            
  case 3:  
  DATA_PORT = 0b10110000;
  break;        
  case 4:  
  DATA_PORT = 0b10011001;
  break;
  case 5:  
  DATA_PORT = 0b10010010;
  break;            
  case 6:  
  DATA_PORT = 0b10000011;
  break;            
  case 7:  
  DATA_PORT = 0b11111000;
  break;            
  case 8:  
  DATA_PORT = 0b10000000;
  break;        
  case 9:  
  DATA_PORT = 0b10011000;
  break;                    
    }
}


Cara Kedua listing programnya sebagai berikut:

/* 
================================================ 
Program Seven Segment Display dengan AVR Studio
Programmer     : Wahyu Rahmaniar
Company        : Technologination     
================================================            
*/

#include<avr/io.h>
#include<util/delay.h>

#define DATA_DDR     DDRC
#define DATA_PORT      PORTC
#define Pin_a             0
#define Pin_b             1
#define Pin_c             2
#define Pin_d             3
#define Pin_e             4
#define Pin_f             5
#define Pin_g             6
#define Pin_Dec         7
#define F_CPU 12000000ul

void Display(int a);

  void main(void)  
  {
  unsigned int i;
  i=0;
  DATA_DDR = 0XFF;
  do
  {
  Display(i);
  i++;
  if(i>9) i=0;
  _delay_ms(3000);
  }
  while(1);    
 } 

  void Display(int a)
  {
  switch(a)
  {
  case 0:  
            DATA_PORT|=_BV(Pin_g);
            DATA_PORT&=~(_BV(Pin_a)|_BV(Pin_b)|_BV(Pin_c)|_BV(Pin_d)|_BV(Pin_e)|_BV(Pin_f));
            break;            
  case 1:            
            DATA_PORT|=(_BV(Pin_a)|_BV(Pin_d)|_BV(Pin_e)|_BV(Pin_f)|_BV(Pin_g));
            DATA_PORT&=~(_BV(Pin_b)|_BV(Pin_c));
            break;            
  case 2: 
            DATA_PORT|=(_BV(Pin_c)|_BV(Pin_f));
            DATA_PORT&=~(_BV(Pin_b)|_BV(Pin_d)|_BV(Pin_e)|_BV(Pin_a)|_BV(Pin_g));
            break;
  case 3:  
            DATA_PORT|=(_BV(Pin_e)|_BV(Pin_f));
            DATA_PORT&=~(_BV(Pin_c)|_BV(Pin_d)|_BV(Pin_a)|_BV(Pin_b)|_BV(Pin_g));
            break;
  case 4:  
            DATA_PORT|=(_BV(Pin_a)|_BV(Pin_d)|_BV(Pin_e));
            DATA_PORT&=~(_BV(Pin_c)|_BV(Pin_b)|_BV(Pin_f)|_BV(Pin_g));
            break;
  case 5:  
            DATA_PORT|=(_BV(Pin_b)|_BV(Pin_e));
            DATA_PORT&=~(_BV(Pin_a)|_BV(Pin_c)|_BV(Pin_d)|_BV(Pin_f)|_BV(Pin_g));
            break;
            
  case 6:  
            DATA_PORT|=(_BV(Pin_a)|_BV(Pin_b));
            DATA_PORT&=~(_BV(Pin_c)|_BV(Pin_d)|_BV(Pin_f)|_BV(Pin_g)|_BV(Pin_e));
            break;
  case 7:  
            DATA_PORT|=(_BV(Pin_d)|_BV(Pin_e)|_BV(Pin_f)|_BV(Pin_g));
            DATA_PORT&=~(_BV(Pin_a)|_BV(Pin_c)|_BV(Pin_b));
            break;
  case 8:  
            DATA_PORT&=~(_BV(Pin_a)|_BV(Pin_d)|_BV(Pin_e)|_BV(Pin_c)|_BV(Pin_b)|_BV(Pin_f)|_BV(Pin_g));
            break;
  case 9:  
            DATA_PORT|=(_BV(Pin_d)|_BV(Pin_e));
            DATA_PORT&=~(_BV(Pin_a)|_BV(Pin_c)|_BV(Pin_b)|_BV(Pin_f)|_BV(Pin_g));
            break;                    
    }
}


Kedua program di atas fungsinya sama yaitu untuk menampilkan angka 0 sampai 9 pada 7 segment display.

Simulasi dan listing program lengkapnya bisa di download disini.

Tidak ada komentar: