> | | > 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:6

  1. tes percobaa proggram pakek software apa?

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

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

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

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

      Delete

Powered by Blogger.