Header Ads

Link Banner

Membuat Jam Digital Menggunakan 7 Segment Berbasis ATmega8535

Salam resistorrr!!!
Salam semangat para pemuda generasi bangsa!!!!
Pada kesempatan kali kita akan membuat project jam digital menggunakan 7 segment berbasis ATmega8535. Setelah kita belajar mengenai jam digital pada mikrokontroler  dan Bermain 7 Segment di Proteus menggunakan ATmega8535 sebelumnya, sekarang saatnya kita menggabungkan keduanya. Project kali tidak jauh berbeda dengan jam digital pada mikrokontroler hanya saja displaynya kali ini kita menggunakan 7 segment bertipe common anoda (positif bersama).
Langsung saja.


1. Buat rangkaian seperti dibawah ini di software proteus. Jangan lupa setting clocknya jadi external clock agar hasil programnya tepat. Tutorialnya ada di Cara setting Simulasi Proteus Agar menjadi eksternal Clock.



Note : Tipe transistor yang saya digunakan disimulasi ini adalah tipe 2N2222.

2. Untuk program, hampir sama seperti jam digital Jam Digital Pada Mikrokontroler , hanya saja ada perubahan di tampilannya yaitu menggunakan 7-Segment. Perubahannya terletak pada penambahan timer yang dibuat untuk mencacah waktu pada jam digital ini.

Berikut program jam digital selengkapnya.

#include <mega8535.h>
#include <stdio.h>
#include <stdlib.h>

#include <delay.h>

#define Menu PIND.4
#define Down PIND.5
#define Up PIND.6


int angka[10];
unsigned char tampil_7(unsigned char nilai);
void ubah();void setting();   void con();
eeprom unsigned char jam_satuan, jam_puluhan, menit_satuan, menit_puluhan,detik_puluhan,detik_satuan;
void ubah_setting(int a);
int param;
int detik;
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
detik_satuan++;
if(detik_satuan>9)
{
detik_satuan = 0;
detik_puluhan++;
    if(detik_puluhan > 5 && detik_satuan == 0 )
    {              
    detik_puluhan = 0;
    menit_satuan++;
    }
}      
TCNT1H=0xD5;
TCNT1L=0xD0;

}


// Declare your global variables here

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

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x03;

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

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0b01110000;
DDRD=0b00001111;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=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=0xD5;
TCNT1L=0xD0;
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
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

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

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

// Global enable interrupts
#asm("sei")
detik_satuan=0;
detik_puluhan=0;
while (1)
      {
      // Place your code here
       setting();
       con();
       ubah();
      };
}
 


unsigned char tampil_7(unsigned char nilai)
{

angka[0]=0xC0;
angka[1]=0xF9;
angka[2]=0xA4;
angka[3]=0xB0;
angka[4]=0x99;
angka[5]=0x92;
angka[6]=0x82;
angka[7]=0xF8;
angka[8]=0x80;
angka[9]=0x90;
return angka[nilai];
}


void setting()
{

        unsigned char x=5;
        if(Menu==0)
        {
        delay_ms(300);
        x=4;
        TIMSK=0;
     
        }
     
        while(x==4) // setting detik satuan
        {  
                if(Menu==0)
                {
                delay_ms(200);
                x=3;
                }
             
                if(Down==0)
                {
                delay_ms(200);
                if(menit_satuan<=0) menit_satuan=0;
                menit_satuan--;
                     
                }
             
                if (Up==0)
                {
                delay_ms(200);
                menit_satuan++;
                        if(menit_satuan>9) menit_satuan=0;
                     
                }
              param = 1;
              ubah_setting(param);
               
        }
        while(x==3)
        {     if(Menu==0)
                {
                delay_ms(200);
                x=2;
                }
             
                if(Down==0)
                {
                delay_ms(200);
                if(menit_puluhan<=0) menit_puluhan=0;
                menit_puluhan--;
                     
                }
             
                if (Up==0)
                {
                delay_ms(200);
                menit_puluhan++;
                if(menit_puluhan>9) menit_puluhan=0;
                     
                }
              param = 2;
              ubah_setting(param);
                 
        }
        while(x==2)
        {     if(Menu==0)
                {
                delay_ms(200);
                x=1;
                }
             
                if(Down==0)
                {
                delay_ms(200);
                if(jam_satuan<=0) jam_satuan=0;
                jam_satuan--;
                     
                }
             
                if (Up==0)
                {
                delay_ms(200);
                if(jam_satuan>9) jam_satuan=0;
                jam_satuan++;
                       
                     
                }
             param = 3;
              ubah_setting(param);
                 
        }
     
        while(x==1)
        {     if(Menu==0)
                {
                delay_ms(200);
                x=5;
                TIMSK=0x04;
                detik_satuan=0;
                detik_puluhan=0;
                }
             
                if(Down==0)
                {
                delay_ms(200);
                if(jam_puluhan<=0) jam_puluhan=0;
                jam_puluhan--;
                   
                }
             
                if (Up==0)
                {
                delay_ms(200);
                jam_puluhan++;
                if(jam_puluhan>9) jam_puluhan=0;
                     
                }
               param = 4;
              ubah_setting(param);
               
        }
     
             
}

void ubah_setting(int a)
{
if(a==1)
{
PORTD=0b01111000;
PORTB=tampil_7(menit_satuan);
delay_ms(5);
}
else if(a==2)
{
PORTD=0b01111000;
PORTB=tampil_7(menit_satuan);
delay_ms(5);

PORTD=0b01110100;
PORTB=tampil_7(menit_puluhan);
delay_ms(5);
}
else if (a==3)
{
PORTD=0b01111000;
PORTB=tampil_7(menit_satuan);
delay_ms(5);

PORTD=0b01110100;
PORTB=tampil_7(menit_puluhan);
delay_ms(5);

PORTD=0b01110010;
PORTB=tampil_7(jam_satuan);
delay_ms(5);
}

else if(a==4)
{
PORTD=0b01111000;
PORTB=tampil_7(menit_satuan);
delay_ms(5);

PORTD=0b01110100;
PORTB=tampil_7(menit_puluhan);
delay_ms(5);

PORTD=0b01110010;
PORTB=tampil_7(jam_satuan);
delay_ms(5);

PORTD=0b01110001;
PORTB=tampil_7(jam_puluhan);
delay_ms(5);
}
}

void ubah()
{
PORTA=0b00000010;
PORTD=0b01110000;
PORTB=tampil_7(detik_satuan);
delay_ms(5);

PORTA=0b00000001;
PORTD=0b01110000;
PORTB=tampil_7(detik_puluhan);
delay_ms(5);

PORTA=0b00000000;
PORTD=0b01111000;
PORTB=tampil_7(menit_satuan);
delay_ms(5);

PORTA=0b00000000;
PORTD=0b01110100;
PORTB=tampil_7(menit_puluhan);
delay_ms(5);

PORTA=0b00000000;
PORTD=0b01110010;
PORTB=tampil_7(jam_satuan);
delay_ms(5);

PORTA=0b00000000;
PORTD=0b01110001;
PORTB=tampil_7(jam_puluhan);
delay_ms(5);
}

void con()
{
if(menit_satuan>9)
        {
        menit_satuan=0;
        menit_puluhan++;
         
            if(menit_puluhan>5 && menit_satuan == 0)
                {
                menit_puluhan=0;
                jam_satuan++;
                 
                    if(jam_satuan>9)
                        {
                        jam_satuan=0;
                        jam_puluhan++;    
                        }
                }
        }
     
        if(jam_puluhan == 2 && jam_satuan== 4)
        {
        jam_puluhan=0;
        jam_satuan = 0;
        }
}

Didalam simulasi yang saya buat, kita harus menyetel ulang waktu sesuai dengan waktu sekarang dengan menggunakan kombinasi tombol, Berikut video simulasinya.



Bagi teman - teman yang mau program fullnya bisa download dilink berikut Jam Digital 7 Segment.
Semoga bermanfaat..
Salam Kapasitor!!
Iklannya diklik ya gan hehehe
Matur nuwun..


Tidak ada komentar