Kontak Kami

( pcs) Checkout

Grand Opening Cahaya LED Selamat Datang di Cahaya LED
Beranda » Artikel Terbaru » Pemrograman Jam Digital 7 Segmen

Pemrograman Jam Digital 7 Segmen

Diposting pada 5 October 2017 oleh cahayaled

Intro

Pada tutorial sebelumnya telah dibawah pemrograman 7 segmen dengan menggunakan arduino dengan driver IC 74HC595. Pada artikel kali ini akan dibuat pemrograman jam digitala dengan menggunakan display 7 segmen dengan ukuran besar 2,3″ yang bekerja dengan tegangan 5V – 12V sehingga membutuhkan tambahan IC driver ULN2803. Oleh karena itu kita harus merubah data keluaran yang aktid LOW menjadi aktif HIGH. Untuk lebih lengkapnya kita masuk pada tutorialnya.

Part

Arduino Uno

Display 7 segmen

Adaptor 12V 1A

Tutorial

Pertama-tama kita buat sebuah display dengan 7 segmen bebas, sesuaikan dengan ukuran yang anda gunakan. Disini saya menggunakan display 7 segmen ukuran 2,3 inch dengan common Anode. Dikarenakan tegangan kerja 7 segmen ini melebihi 5V denga kisaran 5V – 12V. Maka selain menggunakan driver shiftregister 74HC595 saya juga menggunakan driver penguat IC ULN2803. Hal ini agar IC74HC595 tidak terbakar karena melebihi tegangan kerja dari setiap pi I/O, dan juga nantinya akan berdampak pada IC mikrokontroler pada Arduino. Berikut ini adalah skematik dari module 7segmen yang sudah saya buat diatas.

Dari skematik diatas dapat dihasil rangkaian seperti beriku ini.

Sebelumnya pada artikel lama sudah dijelaskan pemrograman tampiln display dengan menggunakan 7 segmen serta dilengkapi dengan algorimanya. Namun dikarenakan pada artikel ini menggunakan display dengan menggunakan tambahan IC driver ULN2803, sehingga LED display aktif pada logika HIGH. Berikut ini adalah tabel kebenaran yang sudah saya buat pada artikel sebelumnya.

Tabel kebenaran daiatas digunakan jika hanya menggunakan IC74HC595,  Jika menggunakan IC ULN2803, yang cara kerjanya OUTPUTAN LOW jika diberikan teganagn HIGH pada inputannya. maka kita harus menggunakan tabel kebenaran berikut.

Hubungkan masing masing pin sesuai dengan pin masing masing, Jangan lupa sesuaikan pin Data, Clock dan Latch, sesuai pin yang digunakan.

kemudian upload program berikut ini.

#include <Timer.h>
#include <RTClib.h>

// ==================================================================================
#define Data      7
#define Clock     10
#define Latch     8
#define ledBlink  9
#define bOK       4
#define bRG       5
#define bLF       6
// ==================================================================================
byte highChar[] = { B11101101, B00101000, B11001110, B01101110, B00101011, B01100111,
                    B11100111, B00101100, B11101111, B01101111, B00000000, B00000010
                  };
int nilai = 1234; // Ubah nilainya
RTC_DS3231 rtc;
Timer tBlink;
Timer tDisplay;
// ==================================================================================
void setup() {
  rtc.begin();

  pinMode(Data, OUTPUT);
  pinMode(Clock, OUTPUT);
  pinMode(Latch, OUTPUT);
  pinMode(ledBlink, OUTPUT);
  pinMode(bOK, INPUT_PULLUP);
  pinMode(bRG, INPUT_PULLUP);
  pinMode(bLF, INPUT_PULLUP);

  tBlink.oscillate(ledBlink, 500, LOW);
  tDisplay.every(1000, mainDisplay);
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

// ==================================================================================
void loop() {
  if (digitalRead(bOK) == LOW) {
    while (digitalRead(bOK) == LOW) {}
    menuSetting();
  }
  tDisplay.update();
  tBlink.update();

}


// ==================================================================================
void mainDisplay() {
  DateTime now = rtc.now();
  digitalWrite(Latch, LOW);
  printTime(now.hour(), now.minute());
  digitalWrite(Latch, HIGH);
}

// ==================================================================================
void printTime(int jam, int mnt) {
  int wkt = (jam * 100) + mnt;
  printRibuan(wkt);
}

// ==================================================================================
void clearAllDisplay() {
  digitalWrite(Latch, LOW);
  for (int i = 0; i < 5; i++) {
    shiftOut(Data, Clock, MSBFIRST, highChar[10]);
  }
  digitalWrite(Latch, HIGH);
}

// ==================================================================================
void printRibuan(int nilai) {
  int ribuan = nilai / 1000;
  int ratusan = (nilai % 1000) / 100;
  int puluhan = ((nilai % 1000) % 100) / 10;
  int satuan = (((nilai % 1000) % 100) % 10) % 10;

  if (nilai >= 1000 && nilai <= 9999) {
    shiftData(satuan);
    shiftData(puluhan);
    shiftData(ratusan);
    shiftData(ribuan);
  }
  else if (nilai >= 100 && nilai <= 999) {
    shiftData(satuan);
    shiftData(puluhan);
    shiftData(ratusan);
    shiftData(0);
  }
  else if (nilai >= 10 && nilai <= 99) {
    shiftData(satuan);
    shiftData(puluhan);
    shiftData(0);
    shiftData(0);
  }
  else {
    shiftData(satuan);
    shiftData(0);
    shiftData(0);
    shiftData(0);
  }
}

// ==================================================================================
void shiftData(int nilai) {
  switch (nilai) {
    case 0: shiftOut(Data, Clock, MSBFIRST, highChar[0]); break;
    case 1: shiftOut(Data, Clock, MSBFIRST, highChar[1]); break;
    case 2: shiftOut(Data, Clock, MSBFIRST, highChar[2]); break;
    case 3: shiftOut(Data, Clock, MSBFIRST, highChar[3]); break;
    case 4: shiftOut(Data, Clock, MSBFIRST, highChar[4]); break;
    case 5: shiftOut(Data, Clock, MSBFIRST, highChar[5]); break;
    case 6: shiftOut(Data, Clock, MSBFIRST, highChar[6]); break;
    case 7: shiftOut(Data, Clock, MSBFIRST, highChar[7]); break;
    case 8: shiftOut(Data, Clock, MSBFIRST, highChar[8]); break;
    case 9: shiftOut(Data, Clock, MSBFIRST, highChar[9]); break;
    case 10: shiftOut(Data, Clock, MSBFIRST, highChar[10]); break;
  }
}

// ==================================================================================
void menuSetting() {
  DateTime now = rtc.now();
  int jam = now.hour();
  int mnt = now.minute();
  while (digitalRead(bOK) == LOW) {}
  // =============================================================
  while (1) {
    long hold = millis();
    while ((hold + 300) > millis()) {
      now = rtc.now();
      if (digitalRead(bLF) == LOW) {
        while (digitalRead(bLF) == LOW) {}
        jam++;
        if (jam > 24) {
          jam = 0;
        }
        delay(300);
      }
      if (digitalRead(bRG) == LOW) {
        while (digitalRead(bRG) == LOW) {}
        mnt++;
        if (mnt > 59) {
          mnt = 0;
        }
        delay(300);
      }
      if (digitalRead(bOK) == LOW) {
        while (digitalRead(bOK) == LOW) {}
        rtc.adjust(DateTime(now.year(), now.month(), now.day(), jam, mnt, now.second()));
        delay(300); goto endSetting;
      }

      digitalWrite(Latch, LOW);
      printTime(jam , mnt);
      digitalWrite(Latch, HIGH);
    }
    clearAllDisplay();
    delay(300);
  }
  // =============================================================

endSetting:
  delay(300);
}

// ==================================================================================


Dari program diatas display akan menampilkan JAM, dan MENIT, dan juga LED tengah akan berkedip sesuai dengan nilai perubahan Detik. untuk mengatur display anda dapat menggunakan  3 buah tombol setting OK, KIRI, KANAN. Tombol OK digunakan untuk masuk pada menu settingan dan tombol KIRI untuk menambahkan nilai pada JAM, dan tombol KANAN digunakan untuk menambahkan nilai pada MENIT, klik OK kembali untuk menyimpan settingan. Hasil tampilan dari jam 7segmen seperti berikut.

Ok sekian dulu tutorial kali ini, semoga bermanfaat.

 

Bagikan informasi tentang Pemrograman Jam Digital 7 Segmen kepada teman atau kerabat Anda.

Pemrograman Jam Digital 7 Segmen | Cahaya LED

Belum ada komentar untuk Pemrograman Jam Digital 7 Segmen

Silahkan tulis komentar Anda

Your email address will not be published. Required fields are marked *

*

Mungkin Anda tertarik produk berikut ini:
OFF 5%
Rp 900.000 Rp 950.000
Ready Stock
OFF 0%
Rp 11.050 Rp 11.050
Ready Stock
SIDEBAR