Jam Digital dengan Mikrokontroler ATmega
Kali ini kita sampaikan cara gampang membuat jam digital dengan ATmega16. Bisa juga dengan ATmega tipe yang lain seperti ATmega8, ATmega8535 atau ATmega32. Tampilan seven segment kita buat 6 digit. Dua digit untuk tampilan jam, dua digit untuk tampilan menit dan dua lagi sebagai tampilan detik. Rangkaian seven segment penampil jam digital sebagai berikut :
Sebagai ‘pewaktu’ kita menggunakan Real Time Clock DS1307 keluaran Dallas Semiconductor.  Dilengkapi dengan batteray backup sehingga walaupun power pada mikrokontroler mati, data ‘waktu’ tidak akan hilang. Rangkaian RTC DS1307 dan interfacing-nya dengan mikrokontroler terlihat sangat sederhana :

Data ‘waktu’ yang dibaca di RTC berupa jam (jam, menit, detik) dan tanggal (tanggal, bulan, tahun, hari). Pada aplikasi kita kali ini kit abaca saja data jam, karena yang akan kita tampilkan ke seven segment cukup jam, menit dan detik saja.
Program dibuat dengan CodeVisionAVR, nih listingnya :
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#asm
   .equ __i2c_port=0×12 ;PORTd
   .equ __sda_bit=7
   .equ __scl_bit=6
#endasm
#include <i2c.h>    
#include <ds1307.h>
char angka[10]={0xC0,0xF9,0xA4,0xB0,0×99,0×92,0×82,0xF8,0×80,0×90};
unsigned char h,m,s;
char j_sat,j_pul,m_sat,m_pul,d_sat,d_pul;
void main(void)
{
DDRA=0xFF;
DDRB=0b111111;
i2c_init();
rtc_init(0,0,0);
rtc_set_time(10,23,15);
rtc_set_date(2,3,12);     
delay_ms(100);
PORTA=angka[j_pul];
PORTB=0B11010111;
while (1)
 {  
  rtc_get_time(&h,&m,&s);
  j_pul=h/10;
  j_sat=h%10;
  m_pul=m/10;
  m_sat=m%10;
  d_pul=s/10;
  d_sat=s%10;
  PORTA=angka[j_pul];
  PORTB=0B11111110;
  delay_ms(3);
  PORTA=angka[j_sat];
  PORTB=0B11111101;
  delay_ms(3);
  PORTA=angka[m_pul];
  PORTB=0B11111011;
  delay_ms(3);
  PORTA=angka[m_sat];
  PORTB=0B11110111;
  delay_ms(3);
  PORTA=angka[d_pul];
  PORTB=0B11101111;
  delay_ms(3);
  PORTA=angka[d_sat];
  PORTB=0B11011111;
  delay_ms(2);
  }
}
Kalau teman – teman membuat rangkaiannya berbeda, maksud saya koneksi dengan mikrokontrolernya tidak sama dengan yang ada disini, cukup sesuaikan pada programnya saja, ok ? Sekarang kita lihat hasilnya. Saya memakai Desymega wRTC .

Sumber : http://cvsapto.blogspot.com/2012/09/kali-ini-kita-sampaikan-cara-gampang.html