25 November 2017

Jam digital seven (7) segment 4 digit


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

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

Semoga manfaat.
Sumber.
  • Blogger Comments
  • Facebook Comments
Item Reviewed: Jam digital seven (7) segment 4 digit Rating: 5 Reviewed By: Siti Zuriah