> | | > Jam digital seven (7) segment 4 digit IC at89c2051, download file HEX dan source code-nya (kode sumber)

Jam digital seven (7) segment 4 digit IC at89c2051, download file HEX dan source code-nya (kode sumber)

Bismillah, alhamdulillah
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

Penulis tampilkan lagi skema-nya biar lengkap, mengacu pada skema diatas maka penulis berusaha membuat kode sumbernya (source code) dalam bahasa C yang dicompile dengan SDCC 3.x

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 digit 7 segmen dengan satu ic at89c2051 (mcs51, 8051 seven segment digital clock 4 bit) 

Posting ini dibuat di BATAM untuk Tajirtronik, menggunakan berbagai software : SDCC, firefox, linux Mint, Gimp dsb

Semoga manfaat.

kata terkait:
kode sumber jam digital, source code jam digital, download file hex jam digital, c language, sdcc compiler

Comments:24

  1. tes percobaa proggram pakek software apa?

    BalasHapus
  2. di proteus error bro..!
    "Unable to open HEX file"

    BalasHapus
  3. Ini kalo di colokin langsung ke listrik bahaya ga?

    BalasHapus
  4. Apakah source code ini dpt menyimpan data waktu yg ditetapkan ? / atw hrus mengulang pengaturan saat jam dimatikan ?

    BalasHapus
    Balasan
    1. code ini tidak ada RTC-nya, jadi jika mati jam reset ke-awal dan diseting ulang

      Hapus
  5. kalo ada tambahan rtc gmana apa bisa

    BalasHapus
  6. Balasan
    1. source code compile dengan sdcc compiler mcs51 mode small

      Hapus
  7. untuk mengisi program ke ic fisik at89c2051 menggunakan alat apa?

    BalasHapus
  8. misalnya jam terlalu cepat atau terlalu lambat bagaimana mengatasinya? tolong balas ke email hz.hrichs@gmail.com sesuai nama agan.,trima kasih..

    BalasHapus
  9. Salinan yg di atas tinggal disalin lagi atau yg di dalam tanda /** dihapus ya??

    BalasHapus
  10. BANG ITU PROGRAM DITARUH MANANYA PROTEUS SI? APA DICOMPILE DI DEV C DULU?

    BalasHapus
  11. BANG MAU NANYA SAYA NEWBIE BANG MOHON PENJELASANNYA... SAYA NYOBA RANGKAIAN ABANG DI PROTEUS BANG UNTUK KOMPONEN AT 89C2051 UNTUK KAKI BAGIAN VCC DAN GROUND NYA DIMANA BANG YA KOK SAYA GAK NEMU......??? TRIMAKASIH

    BalasHapus
    Balasan
    1. kalau di proteus itu semua IC pin Vcc sama GND nya udah diset otomatis mas jadi gak ditampilkan lagi, semoga bermanfaat

      Hapus
  12. trimakakasih ilmunya gan , mo nanya saya lagi membetulkan jam iqomah masjid yg rusak firmware nya kontroler at89c2051, bisa bantu buatkan coding nya nggak, siap mendanai.

    BalasHapus
  13. Bang ada tutor youtube nya g?

    BalasHapus
  14. dulu waktu eksperimen tidak sempat dibuat video mas..

    BalasHapus
  15. Bang kode Hex gk bisa di download tolong dibagi dong

    BalasHapus

Diberdayakan oleh Blogger.