Melanjutkan tulisan yang telah lewat, membuat jam digital sederhana dengan satu IC at89c2051 dengan display seven segment 4 digit, kali ini penulis akan sharing / membagi file hex dan kode sumber-nya (source code).
skema rangkaian jam digital 4 digit seven segmen ic at89c2051 |
Berikut sekilas kode sumber yang sangat sederhana yang bisa penulis share
#include <at89x051.h> /**** Menentukan Pin Common Cathode ke Pin IC P3 ****/ #define CC1 P3_0 #define CC2 P3_1 #define CC3 P3_2 #define CC4 P3_7 /**** Menentukan Pin Segment ke Pin IC P1 ****/ #define seg_a P1_0 #define seg_b P1_1 #define seg_c P1_2 #define seg_d P1_3 #define seg_e P1_4 #define seg_f P1_5 #define seg_g P1_6 #define seg_dp P1_7 /*** Menentukan saklar pengatur ***/ #define saklar_menit P3_5 #define saklar_jam P3_4 /**** Menentukan variabel ****/ unsigned char detik_sen, detik, menit, jam; /**** Membuat fungsi untuk menunggu atau jeda waktu ****/ void jeda(int saat) { int tik; for(tik = 0; tik < saat; tik++) continue; } /**** Membuat fungsi untuk menampilkan angka ****/ void angkaSegmen(unsigned char angka) { switch(angka) { case 0: { seg_a = seg_b = seg_c = seg_d = seg_e = seg_f = 1; /* hidupkan segmen membentuk angka 0 */ break; } case 1: { seg_b = seg_c = 1; /* hidupkan segmen membentuk angka 1 */ break; } case 2: { seg_a = seg_b = seg_d = seg_e = seg_g = 1; /* hidupkan segmen membentuk angka 2 */ break; } case 3: { seg_a = seg_b = seg_c = seg_d = seg_g = 1; /* hidupkan segmen membentuk angka 3 */ break; } case 4: { seg_b = seg_c = seg_f = seg_g = 1; /* hidupkan segmen membentuk angka 4 */ break; } case 5: { seg_a = seg_c = seg_d = seg_f = seg_g = 1; /* hidupkan segmen membentuk angka 5 */ break; } case 6: { seg_a = seg_c = seg_d = seg_e = seg_f = seg_g = 1; /* hidupkan segmen membentuk angka 6 */ break; } case 7: { seg_a = seg_b = seg_c = 1; /* hidupkan segmen membentuk angka 7 */ break; } case 8: { seg_a = seg_b = seg_c = seg_d = seg_e = seg_f = seg_g = 1; /* hidupkan segmen membentuk angka 8 */ break; } case 9: { seg_a = seg_b = seg_c = seg_d = seg_f = seg_g = 1; /* hidupkan segmen membentuk angka 9 */ break; } } } /*** menjalankan interrupt untuk menjalankan pencacah ****/ void timerisr(void) __interrupt(1) { TH0 = 0xd8; TL0 = 0xf9; if(++detik_sen >= 100) { detik_sen = 0; if(++detik >= 60) { detik = 0; if(++menit >= 60) { menit = 0; if(++jam >= 24) { jam = 0; } } } } } /*** Program utama dijalankan dari sini ***/ void main() { TMOD = 0x01; /** Memilih timer mode 0 16 bit **/ TH0 = 0xd8; /** Menentukan interrupt pencacah 100ms ***/ TL0 = 0xf9; EA = 1; /** opsi interrupt **/ ET0 = 1; TR0 = 1; /** Menjalankan timer isr untuk pencacah ***/ detik_sen = detik = menit = jam = 0; /** memberikan nilai awal pada variabel **/ /* memberi nilai awal pada pin ic */ P1 = 0x00; P3 = 0xff; while(1) /** looping **/ { /** menyalakan segmen keempat untuk menit satuan **/ CC4 = 0; CC1 = 1; P1 = 0x00; angkaSegmen(menit%10); if(detik_sen < 51) seg_dp = 1;// blink titik 2 ditengah else seg_dp = 0; jeda(100); /** menyalankan segmen ketiga untuk menit puluhan **/ CC3 = 0; CC4 = 1; P1 = 0x00; angkaSegmen(menit/10); if(detik_sen < 51) seg_dp = 1;// blink titik 2 ditengah else seg_dp = 0; jeda(100); /** menyalakan segmen kedua jam satuan **/ CC2 = 0; CC3 = 1; P1 = 0x00; angkaSegmen(jam%10); jeda(100); /** menyalakan segmen pertama jam puluha **/ CC1 = 0; CC2 = 1; P1 = 0x00; angkaSegmen(jam/10); jeda(100); CC1 = 1; /** proses scanning seven segment selesai di sini ***/ /** Mulai menangani saklar ***/ if(saklar_menit == 0) { menit++; if(menit >= 60) menit = 0; detik = 0; jeda(10000); } if(saklar_jam == 0) { jam++; if(jam >= 24) jam = 0; jeda(10000); } } } /** Program selesai (TAMMAT) ***/
Jika listing program-nya sangat sederhana, mohon maklum.
Bagi yang ingin mendownload file hex-nya / hasil dari compilan kode di atas, bisa download di SINI
Tulisan ini adalah lanjutan dari :
Membuat Jam digital sederhana 4
Posting ini dibuat di BATAM untuk Tajirtronik, menggunakan berbagai software : SDCC, firefox, linux Mint, Gimp dsb
Semoga manfaat.
Sumber.