02 June, 2012

DIGITAL CLOCK 7 SEGMENT


Salam jumpa lagi brolek, apa kabar semoga sehat selalu.
Seperti janji saya dulu untuk sharing cara membuat jam digital menggunakan microcontroller dengan tampilannya adalah seven segment. Jam digital yang ane buat menggunakan microcontroller AVR ATmega8, dengan tampilan seven segment common anoda dengan driver untuk seven segmentnya menggunakan IC HD74LS47. Jam digital yang ane buat tidak  dirangkai dalam pcb matrik tetapi pada projectboard dengan kabel jumper sebagai penghubung antar kaki komponen dengan alas an supaya ada kesan Artistik. He..he..heee

INFO IC (Fungsi HD74LS47)

Dekoder BCD ke seven segment digunakan untuk menerima masukan BCD 4-bit dan memberikan keluaran yang melewatkan arus melalui segmen untuk menampilkan angka desimal. Jenis dekoder BCD ke seven segmentdekoder yang berfungsi untuk menyalakan seven segment mode common anoda dan dekoder yang berfungsi untuk menyalakan seven segment mode common katoda. ada dua macam yaitu IC 74LS47 merupakan dekoder BCD ke seven segment yang berfungsi untuk menyalakan sevent segment mode common anode. Berikut Gambar dan konfigurasi kaki-kaki IC yang digunakan (Atmega8,HD74LS47).



                                                             HD74LS47



7 SEGMENT


Skema rangkaian (proteus) :



 klik dan save gambar untuk jelasnya.

dah untuk program dibuat menggunakan CodeVisionAVR 4.17 berikut ini programnya :

/*****************************************************
 Chip type          : ATmega8
Program type        : Application
Clock frequency     : 11.059200 MHz
Memory model        : Small
External RAM size   : 0
Data Stack size     : 256

PROGRAMMER By :

KABUL BUDIONO, cST
ELECTRICAL ENGINERING
SRIWIJAYA UNIVERSITY
*****************************************************/
#include
#include

//variabel global
bit fl_timer;
unsigned int cnt=0, cnt_jam=0, kali=0;

// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xEA;
TCNT1L=0xE8;
// Place your code here
        if(fl_timer==1)
        {
            PORTB.4=1;
            fl_timer=0;
        }
        else 
        {
            PORTB.4=0;
            fl_timer=1;
        }
        kali++;
        switch (kali)
        {case 120:  //...1 menit
        // if(kali==10)
            {
                cnt=cnt+1;
                switch (cnt)
                {
                case 0:PORTD=0x00;break;case 1:PORTD=0x01;break;case 2:PORTD=0x02;break;case 3:PORTD=0x03;break;case 4:PORTD=0x04;break;
                case 5:PORTD=0x05;break;case 6:PORTD=0x06;break;case 7:PORTD=0x07;break;case 8:PORTD=0x08;break;case 9:PORTD=0x09;break;
                case 10:PORTD=0x10;break;case 11:PORTD=0x11;break;case 12:PORTD=0x12;break;case 13:PORTD=0x13;break;case 14:PORTD=0x14;break;
                case 15:PORTD=0x15;break;case 16:PORTD=0x16;break;case 17:PORTD=0x17;break;case 18:PORTD=0x18;break;case 19:PORTD=0x19;break;
                case 20:PORTD=0x20;break;case 21:PORTD=0x21;break;case 22:PORTD=0x22;break;case 23:PORTD=0x23;break;case 24:PORTD=0x24;break;
                case 25:PORTD=0x25;break;case 26:PORTD=0x26;break;case 27:PORTD=0x27;break;case 28:PORTD=0x28;break;case 29:PORTD=0x29;break;
                case 30:PORTD=0x30;break;case 31:PORTD=0x31;break;case 32:PORTD=0x32;break;case 33:PORTD=0x33;break;case 34:PORTD=0x34;break;
                case 35:PORTD=0x35;break;case 36:PORTD=0x36;break;case 37:PORTD=0x37;break;case 38:PORTD=0x38;break;case 39:PORTD=0x39;break;
                case 40:PORTD=0x40;break;case 41:PORTD=0x41;break;case 42:PORTD=0x42;break;case 43:PORTD=0x43;break;case 44:PORTD=0x44;break;
                case 45:PORTD=0x45;break;case 46:PORTD=0x46;break;case 47:PORTD=0x47;break;case 48:PORTD=0x48;break;case 49:PORTD=0x49;break;
                case 50:PORTD=0x50;break;case 51:PORTD=0x51;break;case 52:PORTD=0x52;break;case 53:PORTD=0x53;break;case 54:PORTD=0x54;break;
                case 55:PORTD=0x55;break;case 56:PORTD=0x56;break;case 57:PORTD=0x57;break;case 58:PORTD=0x58;break;case 59:PORTD=0x59;break;
                case 60:
                PORTD=0x00;
                cnt=0;
                cnt_jam=cnt_jam+1;;
                    switch (cnt_jam)
                    {
                    case 0:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;  
                    case 1:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;   
                    case 2:PORTC.0=0;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
                    case 3:PORTC.0=1;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;  
                    case 4:PORTC.0=0;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
                    case 5:PORTC.0=1;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
                    case 6:PORTC.0=0;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;  
                    case 7:PORTC.0=1;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
                    case 8:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
                    case 9:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;   
                    case 10:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;  
                    case 11:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;   
                    case 12:PORTC.0=0;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
                    case 13:PORTC.0=1;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;  
                    case 14:PORTC.0=0;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
                    case 15:PORTC.0=1;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
                    case 16:PORTC.0=0;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;  
                    case 17:PORTC.0=1;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
                    case 18:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
                    case 19:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
                    case 20:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=1;PORTB.2=0;PORTB.3=0;break;  
                    case 21:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=1;PORTB.2=0;PORTB.3=0;break;   
                    case 22:PORTC.0=0;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=1;PORTB.2=0;PORTB.3=0;break; 
                    case 23:PORTC.0=1;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=1;PORTB.2=0;PORTB.3=0;break;  
                    case 24:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;cnt_jam=0;break;
               
                    }
               
                break;
           
                } 
       
            }
        kali=0;break;  }
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
// State6=P State5=P State4=P State3=0 State2=0 State1=0 State0=0
PORTC=0x70;
DDRC=0x0F;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 10.800 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xEA;
TCNT1L=0xE8;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
      if(PINC.4==0)
        {
        cnt=cnt+1;
        delay_ms(200);
        switch (cnt)
            {
            case 0:PORTD=0x00;break;case 1:PORTD=0x01;break;case 2:PORTD=0x02;break;case 3:PORTD=0x03;break;case 4:PORTD=0x04;break;
            case 5:PORTD=0x05;break;case 6:PORTD=0x06;break;case 7:PORTD=0x07;break;case 8:PORTD=0x08;break;case 9:PORTD=0x09;break;
            case 10:PORTD=0x10;break;case 11:PORTD=0x11;break;case 12:PORTD=0x12;break;case 13:PORTD=0x13;break;case 14:PORTD=0x14;break;
            case 15:PORTD=0x15;break;case 16:PORTD=0x16;break;case 17:PORTD=0x17;break;case 18:PORTD=0x18;break;case 19:PORTD=0x19;break;
            case 20:PORTD=0x20;break;case 21:PORTD=0x21;break;case 22:PORTD=0x22;break;case 23:PORTD=0x23;break;case 24:PORTD=0x24;break;
            case 25:PORTD=0x25;break;case 26:PORTD=0x26;break;case 27:PORTD=0x27;break;case 28:PORTD=0x28;break;case 29:PORTD=0x29;break;
            case 30:PORTD=0x30;break;case 31:PORTD=0x31;break;case 32:PORTD=0x32;break;case 33:PORTD=0x33;break;case 34:PORTD=0x34;break;
            case 35:PORTD=0x35;break;case 36:PORTD=0x36;break;case 37:PORTD=0x37;break;case 38:PORTD=0x38;break;case 39:PORTD=0x39;break;
            case 40:PORTD=0x40;break;case 41:PORTD=0x41;break;case 42:PORTD=0x42;break;case 43:PORTD=0x43;break;case 44:PORTD=0x44;break;
            case 45:PORTD=0x45;break;case 46:PORTD=0x46;break;case 47:PORTD=0x47;break;case 48:PORTD=0x48;break;case 49:PORTD=0x49;break;
            case 50:PORTD=0x50;break;case 51:PORTD=0x51;break;case 52:PORTD=0x52;break;case 53:PORTD=0x53;break;case 54:PORTD=0x54;break;
            case 55:PORTD=0x55;break;case 56:PORTD=0x56;break;case 57:PORTD=0x57;break;case 58:PORTD=0x58;break;case 59:PORTD=0x59;break;
            case 60:PORTD=0x00;cnt=0;break;
            }
        }
      if(PINC.5==0)
        {
        cnt_jam=cnt_jam+1;
        delay_ms(200);
        switch (cnt_jam)
            {
            case 0:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;  
            case 1:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;   
            case 2:PORTC.0=0;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
            case 3:PORTC.0=1;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;  
            case 4:PORTC.0=0;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
            case 5:PORTC.0=1;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
            case 6:PORTC.0=0;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;  
            case 7:PORTC.0=1;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
            case 8:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
            case 9:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;   
            case 10:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;  
            case 11:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;   
            case 12:PORTC.0=0;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
            case 13:PORTC.0=1;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;  
            case 14:PORTC.0=0;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
            case 15:PORTC.0=1;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
            case 16:PORTC.0=0;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;  
            case 17:PORTC.0=1;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
            case 18:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break; 
            case 19:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=1;PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
            case 20:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=1;PORTB.2=0;PORTB.3=0;break;  
            case 21:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=1;PORTB.2=0;PORTB.3=0;break;   
            case 22:PORTC.0=0;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=1;PORTB.2=0;PORTB.3=0;break; 
            case 23:PORTC.0=1;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=1;PORTB.2=0;PORTB.3=0;break;  
            case 24:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;cnt_jam=0;break;
            }
        }
      };
}
 

 *********************************************************************************
Terakhir ini adalah digital clock yang pernah ane buat :



dan ini yang dah jalan & ane pasang di dinding depan meja belajar.., lumayan ada jam hasil karya sendiri.

Demikian sharing pagi ini semoga bermanfaat..,


Jangan lupa komentar & Sarannya yang membangun...n_n


 sumber : qabullab's

9 comments:

  1. wah ini yang saya cari, mkasih mas ilmunya..,he2X

    ReplyDelete
  2. wah keren kak.,tak coba dulu ya..,

    ReplyDelete
  3. coding pakai BASCOM AVR gimana mas?

    ReplyDelete
  4. Thanks atas ilmunya, sangat bermanfaat.

    ReplyDelete
  5. ilman nafian,,ilmu yg bermanfaat.

    ReplyDelete
  6. This comment has been removed by the author.

    ReplyDelete
  7. apa udah benar mas tulisan diatas
    #include
    #include
    apa tdk tambahan lagi mohon pencerahannya mas

    ReplyDelete
  8. saya simulasikan di proteus tampilan segment nggk muncul angka semua.

    ReplyDelete

Mohon Kritik dan saran demi kemajuan blog ini, terima kasih.