Anda di halaman 1dari 6

Belajar Mikrokontroler Membuat Jam Digital

Politeknik Negeri Malang

ABDUL AZIZ ZAENAL BUCHORI


(HAWIS)
1341170077

GAMBAR RANGKAIAN

Cara buat jam digital sederhana menggunakan AVR dan 7 segment,


maka sekalian saya share disini supaya yang lain yang berminat belajar bisa
lihat referensi disini. Mungkin ada yang bertanya kenapa kok ga pake LCD
saja?. Dari segi kemudahan memang lebih mudah menggunakan LCD, tp dari
segi harga 7 Segment relatif lebih murah, tergantung ukurannya. Sebagian
orang mungkin saja lebih suka menggunakan 7 Segment sebagai penampil
waktu dibanding LCD, karena ukuran 7 Segment bisa di custom sesuai
keinginan pembuat, tentu saja akan mempengaruhi biaya. Semangkin besar ya
semangkin mahal.
Komponen yang dibutuhkan :
ATMEGA8535
7 Segment (CA)
IC 74247
Tombol Push Button
LED
Kalau hanya simulasi di Proteus cukup dirangkai seperti gambar diatas.
Berikut ini adalah program lengkapnya.
/*****************************************************
Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 4,000000 MHz
Memory model
: Small
External RAM size
:0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
unsigned int a,detik,menit,jam,step=1;
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
++a;
if(a>=14)

{
a=0;
++detik;
PORTD.0=~PORTD.0;
if(detik==10||detik==26||detik==42||detik==58||detik==74)
{
detik&=0xF0;
detik+=16;
}
if(detik==90)
{
detik=0;
++menit;
}
if(menit==10||menit==26||menit==42||menit==58||menit==74)
{
menit&=0xF0;
menit+=16;
}
if(menit==90)
{
menit=0;
++jam;
}
if(jam==10||jam==26)
{
jam&=0xF0;
jam+=16;
}
if(jam==36)
{
jam=0;
}
PORTC=detik;
PORTA=menit;
PORTB=jam;

}
}
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0xFF;
DDRD=0x01;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
// Mode: CTC top=OCR0
// OC0 output: Disconnected
TCCR0=0x0D;
TCNT0=0x00;
OCR0=255;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Global enable interrupts
#asm(sei)
while (1)
{
// Place your code here
if(step==1)
{
if(PIND.7==0)
{
jam+=16;
}
if(PIND.6==0)
{

++jam;
}
if(PIND.5==0)
{
menit+=16;
}
if(PIND.4==0)
{
++menit;
}
if(PIND.3==0)
{
step=2;
}
PORTC=detik;
PORTA=menit;
PORTB=jam;
delay_ms(200);
}
if(step==2)
{
TIMSK=0x02; //menjalankan Jam digital
if(PIND.2==0)
{
step=1;
}
TIMSK=0x00; //menghentikan Jam digital
}
};
}

Anda mungkin juga menyukai