Cara membuat tampilan seven segment menggunakan arduino + 74HC595 + penjelasan
Pada artikel kali ini, kita akan belajar tentang cara menggunakan/mengontrol komponen Seven Segment dengan arduino. Pin-pin yang digunakan arduino hanya menggunakan 3 digital pin meskipun ada banyak seven segment yang digunakan karena kita akan menggunakan IC 74HC595
Bagian tutorial dibagi menjadi beberapa sub materi sebagai berikut
Memahami komponen seven segment
Contoh penggunaanya sangatlah banyak, misalnya pada jam digital, counter antrian, mesin kasir, timer lampu lalintas dan lain sebagainya.
Ukuran masing-masing seven segment juga berbeda, ukurannya dinyatakan dalam bentuk panjang karakter dari atas sampai bawah bukan panjang tepi ke tepi ataupun diagonalnya. Dan biasanya ditulis dalam bentuk inci, misalnya: seven segment 1 inci, 1.5 inci dsb.
Jumlah digit juga bermacam-macam, ada 1 buah seven segment yang memiliki 1 digit, 2 digit, 4 digit dengan titik 2 (:) ditengah dan lain sebagainya.
Polaritas dari seven segment juga bervariasi, ada yang common anode (CA), dan ada yang common cathode (CC). Pada common anode, supply utama yang diberikan adalah supply plus (+) dan pin segment sebagai GND, dan pada common cathode adalah kebalikannya.
Tips : Agar mudah untuk diingat, Common Anode, pin yang dimainkan adalah - dan common cathode yang dimainkan adalah +
lihat gambar pinout dari seven segment berikut :
Terdapat 8 lampu led didalam seven segment, ditandai dengan a, b, c, d, e, f, g, dp. dengan letaknya seperti gambar diatas.
Agar lampu led tersebut menyala, diberikan supply sesuai dengan jenisnya (CA/CC)
kemudian pin-pin dp, a, b sampai g diberikan arus gnd pada seven segment jenis CA atau arus vcc pada jenis CC.

Misalkan, kita mempunyai seven segment common anode 1 digit, jika ingin menampilkan nilai 2 maka
pin A, dihubungkan ke GND
pin B, dihubungkan ke GND
pin D, dihubungkan ke GND
pin E, dihubungkan ke GND
pin G, dihubungkan ke GND
pin VCC dihubungkan ke VCC melalui resistor 470 ohm (untuk membatasi arus menuju led) sebaiknya diatas 200 ohm, namun semakin besar semakin redup
Persiapan
- Komputer/laptop
- Arduino
- Seven segment
Pada artikel ini, saya menggunakan common anode 1 digit, anda dapat menggunakan jenis lainnya, hanya membalik polaritasnya saja - IC 74HC595
- Breadboard dan beberapa kabel jumper
dan software yang disiapkan/diinstall adalah
- Arduino IDE
Skenario praktek :
Kita akan menampilkan angka pada seven segment menggunakan arduino, karena seven segment membutuhkan 8 pin untuk dikontrol, kita bisa memanfaatkan keluaran output IC 74HC595 agar 3 pin arduino saja yang digunakan
menggunakan IC 74HC595 sangat menguntungkan karena, jika kita ingin mengontrol 2 digit atau lebih, tetap 3 pin arduino saja yang digunakan.
Jika tidak menggunakan IC 74HC595 anda akan membutuhkan 32 pin arduino dimana arduino hanya memiliki 13 saja.
Praktek pada 1 digit
- Pertama, atur wiring seperti gambar dibawah
Dan ini wiring yang saya lakukan
Keterangan: Penggunaan 1 buah resistor tidak direkomendasikan, karena arus keluaran resistor tersebut dibagi menjadi 8 led, akibatnya led terlihat lebih terang jika hanya 1 segmen yang hidup, dan redup jika semua segmen dihidupkan, namun setidaknya cukup untuk eksperimen ini.
Disarankan untuk menggunakan resistor disetiap 8 segmennya (A-DP).
Disarankan untuk menggunakan resistor disetiap 8 segmennya (A-DP).
- Buka Arduino IDE, gunakan kode berikut
/* * Author : Badar Wildanie * Subroutine : Menampilkan angka 2 pada seven segment */ int dataPin = 8; int latchPin = 9; int clockPin = 10; void setup() { pinMode(dataPin, OUTPUT); pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, B00100101); digitalWrite(latchPin, HIGH); }
Penjelasan :
- Baris 6-8
Pin data (SER), latch (STCP), dan clock (SHCP) disimpan pada variabel dataPin, latchPin, clockPin dan berisi nomor pin sesuai dengan wiring jumper masing-masing. - Baris 10-14
setiap pin tersebut, diatur sebagai output. karena kita akan mengirimkan bit-bit - Baris 17
latch 74HC595, diatur ke low selama pengiriman bit dilakukan (di baris berikutnya) - Baris 18
pengiriman bit dilakukan ke 74HC595 dengan isi bit
0 0 1 0 0 1 0 1
dengan mode LSBFIRST sehingga membentuk angka 2,
LSBFIRST, maksudnya adalah bit terakhir yang dikirimkan pertama kali, sehingga bit terakhir tersebut berada pada pin Q7 di 74HC595. kebalikannya adalah MSBFIRST
namun yang kita gunakan disini adalah LSBFIRST, karena bit harus sesuai urutan wiring (pin a dengan Q1, pin b dengan Q2 dll)
Setiap bitnya terhubung dengan masing-masing pin seven segment (a - g dan dp)
sesuai dengan tabel dibawah
- Baris 19
latch 74HC595 dihidupkan untuk menampilkan bit tersebut ke output Q0 - Q7
Jika anda menggunakan seven segment jenis Common Cathode (CC), anda hanya perlu membalik bit tersebut. menjadi 1 1 0 1 1 0 1 0
Anda juga dapat menerapkan digit angka lainnya, adapun bit angka tersebut seperti dibawah :
0 0 0 0 0 0 1 1 > angka 0
1 0 0 1 1 1 1 1 > angka 1
0 0 1 0 0 1 0 1 > angka 2
0 0 0 0 1 1 0 1 > angka 3
1 0 0 1 1 0 0 1 > angka 4
0 1 0 0 1 0 0 1 > angka 5
0 1 0 0 0 0 0 1 > angka 6
0 0 0 1 1 1 1 1 > angka 7
0 0 0 0 0 0 0 1 > angka 8
0 0 0 0 1 0 0 1 > angka 9
anda juga dapat membuat counter sederhana dari angka 0 sampai 9, berikut contoh kodenya
1 0 0 1 1 1 1 1 > angka 1
0 0 1 0 0 1 0 1 > angka 2
0 0 0 0 1 1 0 1 > angka 3
1 0 0 1 1 0 0 1 > angka 4
0 1 0 0 1 0 0 1 > angka 5
0 1 0 0 0 0 0 1 > angka 6
0 0 0 1 1 1 1 1 > angka 7
0 0 0 0 0 0 0 1 > angka 8
0 0 0 0 1 0 0 1 > angka 9
anda juga dapat membuat counter sederhana dari angka 0 sampai 9, berikut contoh kodenya
/* * Author : Badar Wildanie * Subroutine : Counter sederhana dari 0 sampai 9 * dengan jeda 200ms */ int angka[] = { B00000011, //angka 0 B10011111, //angka 1 B00100101, //angka 2 B00001101, //angka 3 B10011001, //angka 4 B01001001, //angka 5 B01000001, //angka 6 B00011111, //angka 7 B00000001, //angka 8 B00001001 //angka 9 }; int dataPin = 8; int latchPin = 9; int clockPin = 10; void setup() { pinMode(dataPin, OUTPUT); pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { for (int i = 0; i < 10; i++) { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, angka[i]); digitalWrite(latchPin, HIGH); delay(200); } }
Penjelasan
- Baris 7-18
Setiap bit bit untuk menampilkan angka disimpan dalam variabel angka dalam bentuk array
sehingga untuk mengakses bit untuk angka 2, cukup memanggil angka[2] - Baris 31
dilakukan perulangan dari 0 sampai 9 (9 termasuk), setiap perulangannya dilakukan pengiriman bit angka[i] (dimana i adalah 0 - 9) ke 74HC595 (Baris 33) - Baris 35
setelah bit dikirimkan dan ditampilkan, dilakukan jeda selama 200ms sebelum mengulang lagi.
Hasilnya seperti dibawah :

Kesimpulan
Seven segment sangat mudah untuk dioperasikan, hanya dengan mengontrol pin a, b, c, d, e, f, g, dan dp dimana pin tersebut dapat dikontrol dengan shift register sehingga hemat pin mikrokontroller.
Variasi seven segment sangatlah banyak, namun anda tidak perlu bingung dalam menentukan mana seven segmen yang cocok.
Yang perlu anda perhatikan dalam memilih seven segment adalah
- Digit
Berapa digit yang anda butuhkan?, anda dapat membeli 1 buah seven segment 2 digit atau, 2 buah seven segment 1 digit. Jika anda ingin membuat jam digital, pilihlah seven segment 4 digit, yang memiliki titik dua (:) ditengahnya - UkuranFormat ukuran yang tersedia di pasaran adalah inch, misalnya, seven segment 1 inch, 1.5 inch, 5 inch dll. panjang tersebut merepresentasikan tinggi karakter, berikut contoh seven segment 1.5 inch
- Polaritas
berjenis CA/CC, CA memiliki pin lampu GND, sedangkan CC memiliki pin lampu VCC
- Warna
Sudah jelas, ada banyak warna seven segmen dipasaran.
Jika anda sudah tau apa yang harus diperhatikan pada seven segment, anda dapat membayangkan seperti apa Seven Segment Common Anode 1.5" Merah 2 Digit..
dan berikut beberapa project yang anda bisa buat menggunakan seven segment diantaranya
- Jam digital
- Jadwal Sholat
- Pom mini
- Timer
- Indikator mesin
- Dan project apapun yang berhubungan dengan interface angka
Selamat Bereksperimen.!
=D
14 Comments
Bagaimana jika ingin memparalelkan ic-nya? Wiringnya bagaimana
Kalau yang dimaksudkan itu agar output seven segmentnya sama, cukup paralelkan saja pin datanya (pin 14) ke ic 74HC595 lain. Jadi pin 9 (QH / Q') tidak pakai
Om rencana saya buat jam seven segment pakai LED strip RGB non-addressable,bisa di terapin om sekaliam warnanya bisa di control juga,kalau bisa bahas juga om
Sangat menarik
Saya mau tanya
Kalau mau membikin counter 5 digit, bagaimana..?
@unknown: ok, saya sempatkan di post berikutnya. Singkatnya kalau pakai rgb non adressable harus potong masing-masing segment lalu hubungkan langsung dengan keluaran dari 74HC595 melalui mosfet seperti IRF540 agar arusnya bisa lebih besar.
@Tabanio: Ada macam-macam caranya, yang paling mudah ya tinggal tambahkan IC 74HC595 dengan pin Data (14) terhubung ke pin Q' (9) pada IC sebelumnya. Pada pemrogramannya, tinggal tambahkan instruksi shitfout() (fungsi utk memasukkan bit-bit baru ke IC) berdasarkan angkanya. Jadi 1 IC 74HC595 dipakai untuk 1 digit
Cara yang lain bisa menggunakan teknik scanning / multiplexing / apalah itu namanya.. yaitu dengan menggunakan 2 IC 74HC595, sudah cukup untuk menampilkan sampai 8 Digit sevensegment sekaligus. 1 IC untuk mengontrol setiap segment dan IC lainnya untuk menentukan digit mana yang akan ditampilkan. Namun sedikit kompleks di pemrogramannya karena harus menampilkan tiap segment dengan cepat (karena ini disebut dengan teknik scanning).
Saya post di artikel berikutnya saja untuk lebih lengkapnya.
Sangat membantu. Terima kasih min. Saya bahkan mencoba menambahkan IC 7447 sebagai decodernya untuk langsung merepresentasikan bit angka dalam biner, misal angka 2, yaitu B00000010, langsung menjadi angka 2 muncul di display. Memodifikasi keluaran dari shiftregister dengan mengatur membaca dari MSB dulu.
Sekali lagi terima kasih.
sangat bermanfaat...kalau seandainya saya ingin menampilkan angka 1.2.3.4 dengan masing masing push button bisa gak mas?
terima kasih
Kalau dengan menggunakan apk VBB sintaknya bagaimana?
Bang kalau buat couter manual pake push button untuk kodingnya bagaimana??
@Unknown: Wah kayaknya itu udah lain cerita lagi gan, saya tulis lagi di postingan selanjutnya aja gan jika ada kesempatan.
spoiler: seperti itu bakal memanfaatkan serial port yang dikeluarkan oleh arduino lalu diterima oleh aplikasi VB lewat fitur serial port.
@Zis14, mamah chyntia: tentu bisa
dengan merubah sedikit kode sketchnya, caranya bisa pakai variabel global yang ditaruh di luar loop() dan berisi angka 0.
lalu di tambahkan digitalRead() pada tombol dan jika ditekan, variabel global tadi bisa di tambahkan 1 lalu ditampilkan ke seven segment pakai cara diatas.
Lebih lengkapnya bisa DM di IG atau WA aja gan,
Bang, ane belum mudeng nih, kalo misal pertama kita pake yang common catode, terus mau kita rubah ke common anode, kita cuman rubah polaritas yang ke seven segmen nya aja? Untuk yang di ic 74HC595 ga ada perubahan wiring nya gan? Terimakasih..
@Mahdigunawan: Betul gan,
misalnya ada deretan bit 0 0 1 0 0 1 0 1 itu jadi angka 2 kalau pakai Common Anode.
kalau untuk common anode, karena yang diminta itu sinyal HIGH / 1 untuk menghidupkan lednya maka deretan bit yang dikirim ya tinggal dibalik aja,
jadinya 1 1 0 1 1 0 1 0
wiring 74hc595nya tidak perlu ada yang berubah. karena dia cuman disuruh ngirim & nampilkan aja.
Oh berarti kodingannya aja ya yang dirubah, sama wiring seven segmennya yang disesuaikan, terimakasi bang penjelasannya.
Gan saya mo buat counter up dengan 4 digit sevent segment 4" yg vcc nya 12 volt,saya udah coba berkali2 tapi malah IC nya yg kebakar,
Gmna ya gan,
Apa ada yg salah dengan komponen nya.?