Anda di halaman 1dari 27

LAPORAN SISTEM TERBENAM DAN IOT

SEVEN SEGMEN

Disusun Oleh:
Putri Shafa Salsabella Helmi / 3.34.18.0.18
IK-3A

PROGRAM STUDI D3 TEKNIK INFORMATIKA


JURUSAN TEKNIK ELEKTRO
POLITEKNI NEGERI SEMARANG
2020/2021
I. Tujuan
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan 7 segmen
2. Mahasiswa dapat memahami program Arduino untuk menampilkan data ke 7
segment
3. Mahasiswa memahami beberapa instruksi Arduino dasar, array data dan bitRead.

II. Peralatan
1. Arduino board connected to the computer via USB
2. Breadboard dan kabel jumper
3. 7-segment
4. Resistors 220–1,000 ohm

III. Dasar Teori


Seven segment merupakan segment-segment yang digunakan untuk menampilkan
angkaangka atau huruf. Seven segment ini tersusun atas 7 buah LED yang membentuk
membentuk angka atau huruf dimana penyusunnya menggunakan label dari ‘a’ sampai
‘g’ dan satu lagi untuk dot point (DP). Salah satu terminal LED dihubungkan menjadi
satu sebagai kaki common (biasanya pin-nya berada ditengah).

Pin 3 dan 8 = untuk mengaktifkan seven segment diberikan logika high (common anode)
dan logika low (common cathode). Jenis-jenis Seven Segment:

Gambar 3.1 Skema Common Anode dan Common Catode

1. Common Anoda
Semua anoda dari LED dalam seven segment disatukan secara parallel dan semua
itu dihubungkan ke VCC, dan kemudian LED dihubungkan melalui tahanan
pembatas arus keluar dari penggerak LED. Karena dihubungkan ke VCC, maka
COMMON ANODA ini berada pada kondisi AKTIF LOW (led akan menyala/aktif
bila diberi logika 0).

2. Common Katoda
Merupakan kebalikan dari Common Anoda. Disini semua katoda disatukan secara
parallel dan dihubungkan ke GROUND. Karena seluruh katoda dihubungkan ke
GROUND, maka COMMON KATODA ini berada pada kondisi AKTIF HIGH (led
akan menyala/aktif bila diberi logika 1).

Prinsip Kerja:

Prinsip kerja seven segment ialah input biner pada switch dikonversikan masuk ke dalam
decoder, baru kemudian decoder mengkonversi bilangan biner tersebut menjadi decimal,
yang nantinya akan ditampilkan pada seven segment.

Seven segment dapat menampilkan angka-angka desimal dan beberapa karakter tertentu
melalui kombinasi aktif atau tidaknya LED dalam seven segment. Untuk memudahkan
penggunaan seven segment, umumnya digunakan sebuah decoder (mengubah/
mengkoversi input bilangan biner menjadi decimal) atau seven segment driver yang akan
mengatur aktif tidaknya led-led dalam seven segment sesuai dengan nilai biner yang
diberikan.

Gambar 3.2 Skema kaki pin 7-segment

Dekoder BCD ke seven segment digunakan untuk menerima masukan BCD 4-bit dan
memberikan keluaran yang melewatkan arus melalui segmen untuk menampilkan angka
desimal. Jenis dekoder BCD ke seven segment ada dua macam yaitu dekoder yang
berfungsi untuk menyalakan seven segment mode common anoda dan dekoder yang
berfungsi untuk menyalakan seven segment mode common katoda.

IV. Langkah Kerja


1. Pasang 7-segment dalam breadboard
2. Jika menggunakan konfigurasi anode (+), hubungkan anoda (+) ke VCC di arduino
(5 v atau 3.3 v). Jika menggunakan konfigurasi katoda (-), hubungkan katode dengan
ground dari Arduino.
3. Hubungkan setiap kaki dari 7-segmen pada pin digital yang digunakan. Setiap pin
output digunakan resistor untuk mengamankan LED dari seven segmen.

Skema Rangkaian:

Gambar 3.3 Skema rangkaian 7-Segment

Dengan skema rangkaian diatas akan bisa dibuat rangkaian dengan menggunakan arduino
dan resistor seperti berikut:

Gambar 3.4 Mockup rangkaian 7-Segment


Kode Program:

Akan menampilkan 7-segment dengan tampilan dari 3 sampai 0 dan restart dari awal.
// Declare the pins for the Segment display
int pinUP = 2; //a Upper segment
int pinUPR = 3; //b Up-right segment
int pinDWR = 4; //c Down-right segment
int pinDW = 5; //d Down segment
int pinDWL = 6; //e Down-left segment
int pinUPL = 7; //f Up-left segment
int pinCT = 8; //g Center segment

void setup() {
// Declare the pins as Outputs
pinMode(pinUP, OUTPUT);
pinMode(pinUPR, OUTPUT);
pinMode(pinDWR, OUTPUT);
pinMode(pinDW, OUTPUT);
pinMode(pinDWL, OUTPUT);
pinMode(pinUPL, OUTPUT);
pinMode(pinCT, OUTPUT);
}

void writeNumber(int value){


// First we erase the previous value
digitalWrite(pinUP, HIGH);
digitalWrite(pinUPR, HIGH);
digitalWrite(pinDWR, HIGH);
digitalWrite(pinDW, HIGH);
digitalWrite(pinDWL, HIGH);
digitalWrite(pinUPL, HIGH);
digitalWrite(pinCT, HIGH);

// If we want to write 0
if (value == 0){
digitalWrite(pinUP, HIGH);
digitalWrite(pinUPR, HIGH);
digitalWrite(pinDWR, HIGH);
digitalWrite(pinDW, HIGH);
digitalWrite(pinDWL, HIGH);
digitalWrite(pinUPL, HIGH);
digitalWrite(pinCT, LOW);
}

// If we want to write 1
if (value == 1){
digitalWrite(pinUPR, LOW);
digitalWrite(pinUP, LOW);
digitalWrite(pinCT, LOW);
digitalWrite(pinDWR, LOW);
digitalWrite(pinDW, LOW);
}

// If we want to write 2
if (value == 2){
digitalWrite(pinUPL, LOW);
//digitalWrite(pinCT, LOW);
//digitalWrite(pin, LOW);
digitalWrite(pinDWR, LOW);
//digitalWrite(pinDW, LOW);
}

// If we want to write 3
if (value == 3){
//digitalWrite(pinUP, LOW);
digitalWrite(pinUPL, LOW);
//digitalWrite(pinCT, LOW);
digitalWrite(pinDWL, LOW);
//digitalWrite(pinDW, LOW);
}

}
void loop(){
// A resetting count-down
writeNumber(3);
delay(1000);
/*writeNumber(2);
delay(1000);
writeNumber(1);
delay(1000);
writeNumber(0);
delay(1000);*/
}
Berikut merupakan contoh dari konfigurasi common-anode, dengan asumsi untuk
konfigurasi katode akan berlaku kebalikan, jika dalam anode memiliki nilai LOW dalam
konfigurasi common-anode dirubah menjadi HIGH dan nilai HIGH jadi LOW dalam
kode programnya.

Penjelasan kode:

1. Mendeklarasikan pin untuk setiap kaki pada 7-segment


int pinUP = 2; // Upper segment (a)
int pinUPR = 3; // Up-right segment (b)
int pinDWR = 4; // Down-right segment (c)
int pinDW = 5; // Down segment (d)
int pinDWL = 6; // Down-left segment (e)
int pinUPL = 7; // Up-left segment (f)
int pinCT = 8; // Center segment (g)
2. Mengkonfigurasikan pemakaian pin pada arduino sesui dengan nilai variabel yang
diberikan.
void setup() {
// Declare the pins as Outputs
pinMode(pinUP, OUTPUT);
pinMode(pinUPR, OUTPUT);
pinMode(pinDWR, OUTPUT);
pinMode(pinDW, OUTPUT);
pinMode(pinDWL, OUTPUT);
pinMode(pinUPL, OUTPUT);
pinMode(pinCT, OUTPUT);
}

3. Dengan memanggil fungsi writeNumber() ini kita bisa mematikan semua LED
yang semula dihidupkan pada tiap kaki-kaki 7-segmen dan memberikan nilai pada
kaki yang diinginkan sesuai dengan nilai inputan.
Sederhananya fungsi ini digunakan untuk mereset dan mengkonfigurasikan sesuai
dengan nilai angka yang diinginkan.
void writeNumber(int value){
// First we erase the previous value
digitalWrite(pinUP, HIGH);
digitalWrite(pinUPR, HIGH);
digitalWrite(pinDWR, HIGH);
digitalWrite(pinDW, HIGH);
digitalWrite(pinDWL, HIGH);
digitalWrite(pinUPL, HIGH);
digitalWrite(pinCT, HIGH);

if (value == 1){
digitalWrite(pinUPR, LOW);
digitalWrite(pinDWR, LOW);
} ...
}

4. Dalam fungsi loop() akan mengeksekusi fungsi write dengan parameter yang akan
digunakan untuk konfigurasi LED pada 7-segment.

void loop(){
writeNumber(2);
delay(1000);
writeNumber(1);
delay(1000);
writeNumber(0);
delay(1000);
}

Tampilan akan bertahan dengan memanggil fungsi delay() dengan parameter 1000
yang berarti 1000ms atau 1 detik.

Gambar 3.5 Konfigurasi karak ter yang memungkinkan


MULTI-SEVEN SEGMENT

TUJUAN:
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan 7 segmen
2. Mahasiswa dapat memahami program Arduino untuk menampilkan data ke 7 segment
3. Mahasiswa memahami beberapa instruksi Arduino dasar, array data dan bitRead.

PERALATAN:
1. Arduino board connected to the computer via USB
2. Breadboard dan kabel jumper
3. 4 x 7-segment
4. Resistors 220–1,000 ohm

TEORI:

Percobaan kali ini akan menggunakan 7-segment seri 4 buah atau sering dituliskan 4 x
7segment. Penggunaan multi display ini sama aturannya dengan menggunakan single
display, yaitu seven segment akan menganut common anode da common cathode
tergantung pemberian daya pada konfigurasi pinnya. Untuk konfigurasi Pin untuk tiap
segment harus digunakan mode digit untuk mengatur pengaktifan tiap segment nya.
Dengan mengendalikan digit yang ditampilkan kita bisa kendalikan display meskipun
nilai sudah diberikan. Misal kita sudah definisikan nilai untuk segment ke-2 dengan nilai
desimal 5, tapi ketika kita tidak set segment ke-2 tersebut aktif maka tidak akan
ditampilkan nilai desimal 5 tersebut. Pada penggunaan multi segment hanya akan ada 1
digit yang aktif pada satu waktu, sehingga pengkonfigurasian untuk 4 digit membutuhkan
4 step pemindahan digit dan pemberian nilai.

Gambar 3.6 Rangkaian 4 x 7-segment

Pada komponen yang dijual dipasaran banyak varian yang harus kita lihat detail dari
komposisi komponen tersebut melalui datasheet yang biasanya sudah disediakan oleh
produsen pembuat komponen. Gambar 3.7 berikut merupakan komponen yang kita
punyai dalam lab, dan penggunaanya akan berbeda jika menggunakan komponen yang
berbeda, begitupula kode programnya.

Gambar 3.7 Komponen 4 x 7-segment dengan 8 pin

Untuk percobaan konfigurasikan pin arduino dan display seperti berikut dibawah:

Gambar 3.8 Konfigurasi posisi dan nilai pin

Konfigurasikan sesuai dengan tabel


A 1 2 3 4 5 6 7 8 9 10 11 12
B 11 7 4 2 1 10 5 3 12 9 8 6
(A) (B) (C) (D) (E) (F) (G) (P) (D1) (D2) (D3) (D4)

A: Pin ArduinoUNO
B: Pin Display
note: Untuk tiap Digit diberikan resistor 1K Ohm

KODE PROGRAM
Kode program berikut untuk common anode, yang akan menjalankan penambahan desimal secara
increment dengan menggunakan fungsi millis() yang build in di arduino IDE.

int digit1 = 9; //Display pin 12


int digit2 = 10; //Display pin 9
int digit3 = 11; //Display pin 8
int digit4 = 12; //Display pin 6
int segA = 1; //Display pin 11
int segB = 2; //Display pin 7
int segC = 3; //Display pin 4
int segD = 4; //Display pin 2
int segE = 5; //Display pin 1
int segF = 6; //Display pin 10
int segG = 7; //Display pin 5

void setup() {
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);

pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
pinMode(13, OUTPUT);
}

void loop() {
displayNumber(millis()/1000);
}

void displayNumber(int toDisplay){


#define DISPLAY_BRIGHTNESS 1000
#define DIGIT_ON HIGH
#define DIGIT_OFF LOW

long beginTime = millis();

for(int digit = 4 ; digit > 0 ; digit--){


//Turn on a digit for a short amount of time
switch(digit){
case 1:
digitalWrite(digit1, DIGIT_ON);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
break;
}

//Turn on the right segments for this digit

lightNumber(toDisplay % 10);
toDisplay = toDisplay / 10;

delayMicroseconds(DISPLAY_BRIGHTNESS);

//Display digit for fraction of a second (1us to 5000us, 500 is


pretty good)

//Turn off all segments


lightNumber(10);

//Turn off all digits


digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
}

while((millis() - beginTime) < 10);


//Wait for 20ms to pass before we paint the display again

//Given a number, turns on those segments


//If number == 10, then turn off number

void lightNumber(int numberToDisplay) {

#define SEGMENT_ON LOW


#define SEGMENT_OFF HIGH

switch (numberToDisplay){
case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;

case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;

case 2:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;

case 3:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;

case 4:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 6:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 7:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;

case 8:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
}
}

V. Latihan
1. Buat konfigurasi yang dibutuhkan untuk menampilkan kode program berikut dalam 4
x 7segment.
1) Buat rangkaian konfigurasi pada proteus

2) Ketikan kode berikut pada Arduino IDE

//segments
int a= 1; //a
int b = 2;//b
int c = 3;//c
int d = 4;//d
int e = 5;//e
int f = 6;//f
int g = 7;//g
int p = 8;//dot

//digits
int d4 = 9;
int d3 = 10;
int d2 = 11;
int d1 = 12;

//others
int del = 100;
int buttoncount = 0;
int loopcount = 0;

void setup() {
// put your setup code here, to run once:
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);

digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(p, HIGH);
}

void loop() {
// put your main code here, to run repeatedly:
roulette(2);
delay(500);
zigzag(2);
delay(500);
circles(2);
delay(500);
flash();
delay(1000);
}

void pickDigit(int x){


digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);

switch(x){
case 1:
digitalWrite(d1, HIGH);
break;
case 2:
digitalWrite(d2, HIGH);
break;
case 3:
digitalWrite(d3, HIGH);
break;
case 4:
digitalWrite(d4, HIGH);
break;
}
}

void clearLEDs(){
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(p, HIGH);
}

void roulette(int x){


loopcount = 0;
while(loopcount < x){
clearLEDs();
digitalWrite(a, LOW);
//digitalWrite(p, LOW);
pickDigit(1);
delay(del);
pickDigit(2);
delay(del);
pickDigit(3);
delay(del);
pickDigit(4);
delay(del);
digitalWrite(a, HIGH);
digitalWrite(f, LOW);
delay(del);
digitalWrite(f, HIGH);
digitalWrite(e, LOW);
delay(del);
digitalWrite(e, HIGH);
digitalWrite(d, LOW);
delay(del);
pickDigit(3);
delay(del);
pickDigit(2);
delay(del);
pickDigit(1);
delay(del);
digitalWrite(d, HIGH);
digitalWrite(c, LOW);
delay(del);
digitalWrite(c, HIGH);
digitalWrite(b, LOW);
delay(del);
digitalWrite(b, HIGH);
//delay(del);
loopcount++;
}
}

void zigzag(int x){


loopcount = 0;
while(loopcount < x){
digitalWrite(a, LOW);
pickDigit(1);
delay(del);
pickDigit(2);
delay(del);
pickDigit(3);
delay(del);
pickDigit(4);
delay(del);
digitalWrite(a, HIGH);
digitalWrite(f, LOW);
delay(del);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
delay(del);
pickDigit(3);
delay(del);
pickDigit(2);
delay(del);
pickDigit(1);
delay(del);
digitalWrite(g, HIGH);
digitalWrite(c, LOW);
delay(del);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
delay(del);
pickDigit(2);
delay(del);
pickDigit(3);
delay(del);
pickDigit(4);
delay(del);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
delay(del);
digitalWrite(e, HIGH);
digitalWrite(g, LOW);
delay(del);
pickDigit(3);
delay(del);
pickDigit(2);
delay(del);
pickDigit(1);
delay(del);
digitalWrite(g, HIGH);
digitalWrite(b, LOW);
delay(del);
clearLEDs();
loopcount++;
}
}

void circles(int x){


loopcount = 0;
while(loopcount < x){
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
pickDigit(1);
delay(250);
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(f, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
pickDigit(2);
delay(250);
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(f, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
pickDigit(3);
delay(250);
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(f, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
pickDigit(4);
delay(250);
clearLEDs();
loopcount++;
}
}

//tampilan 0000 untuk semua segmen


void nyala(){
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
}

void flash(){
int i;
for(i=0;i<5;i++){
nyala();delay(250);
clearLEDs();
delay(500);
nyala();
i++;
}
}

3) Lalu jalankan proteus

VI. Tugas
1. Buat auto increment dengan menggunakan gabungan dari push button dan multi
sevensegment, jika push button ditekan maka sevensegment akan menampilkan angka
increment.
1) Buat konfigurasi rangkaian berikut pada Proteus
2) Ketik kode pemrograman di bawah:
//push button
#define button A0

//segmen
#define SegA 12
#define SegB 11
#define SegC 10
#define SegD 9
#define SegE 8
#define SegF 7
#define SegG 6

//digit
#define Dig1 5
#define Dig2 4
#define Dig3 3
#define Dig4 2

//other
byte current_digit;
int count = 0;

void setup()
{
pinMode(button, INPUT_PULLUP);
pinMode(SegA, OUTPUT);
pinMode(SegB, OUTPUT);
pinMode(SegC, OUTPUT);
pinMode(SegD, OUTPUT);
pinMode(SegE, OUTPUT);
pinMode(SegF, OUTPUT);
pinMode(SegG, OUTPUT);
pinMode(Dig1, OUTPUT);
pinMode(Dig2, OUTPUT);
pinMode(Dig3, OUTPUT);
pinMode(Dig4, OUTPUT);

disp_off(); //mematikan display


TCCR1A = 0;
TCCR1B = 1;
TCNT1 = 0;
TIMSK1 = 1;
}

ISR(TIMER1_OVF_vect
{
disp_off();

switch (current_digit)
{
case 1:
disp(count / 1000);
digitalWrite(Dig1, LOW);
break;

case 2:
disp( (count / 100) % 10);
digitalWrite(Dig2, LOW);
break;

case 3:
disp( (count / 10) % 10);
digitalWrite(Dig3, LOW);
break;

case 4:
disp(count % 10);
digitalWrite(Dig4, LOW);
}

current_digit = (current_digit % 4) + 1;
}

void loop()
{
if(digitalRead(button) == 0)
{
count++;
if(count > 9999)
count = 0;
delay(200); // tunggu 200 milliseconds
}
}

void disp(byte number)


{
switch (number)
{
case 0: // print 0
digitalWrite(SegA, LOW);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, LOW);
digitalWrite(SegE, LOW);
digitalWrite(SegF, LOW);
digitalWrite(SegG, HIGH);
break;

case 1: // print 1
digitalWrite(SegA, HIGH);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, HIGH);
digitalWrite(SegE, HIGH);
digitalWrite(SegF, HIGH);
digitalWrite(SegG, HIGH);
break;

case 2: // print 2
digitalWrite(SegA, LOW);
digitalWrite(SegB, LOW);
digitalWrite(SegC, HIGH);
digitalWrite(SegD, LOW);
digitalWrite(SegE, LOW);
digitalWrite(SegF, HIGH);
digitalWrite(SegG, LOW);
break;

case 3: // print 3
digitalWrite(SegA, LOW);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, LOW);
digitalWrite(SegE, HIGH);
digitalWrite(SegF, HIGH);
digitalWrite(SegG, LOW);
break;

case 4: // print 4
digitalWrite(SegA, HIGH);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, HIGH);
digitalWrite(SegE, HIGH);
digitalWrite(SegF, LOW);
digitalWrite(SegG, LOW);
break;

case 5: // print 5
digitalWrite(SegA, LOW);
digitalWrite(SegB, HIGH);
digitalWrite(SegC, LOW);
digitalWrite(SegD, LOW);
digitalWrite(SegE, HIGH);
digitalWrite(SegF, LOW);
digitalWrite(SegG, LOW);
break;

case 6: // print 6
digitalWrite(SegA, LOW);
digitalWrite(SegB, HIGH);
digitalWrite(SegC, LOW);
digitalWrite(SegD, LOW);
digitalWrite(SegE, LOW);
digitalWrite(SegF, LOW);
digitalWrite(SegG, LOW);
break;

case 7: // print 7
digitalWrite(SegA, LOW);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, HIGH);
digitalWrite(SegE, HIGH);
digitalWrite(SegF, HIGH);
digitalWrite(SegG, HIGH);
break;

case 8: // print 8
digitalWrite(SegA, LOW);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, LOW);
digitalWrite(SegE, LOW);
digitalWrite(SegF, LOW);
digitalWrite(SegG, LOW);
break;

case 9: // print 9
digitalWrite(SegA, LOW);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, LOW);
digitalWrite(SegE, HIGH);
digitalWrite(SegF, LOW);
digitalWrite(SegG, LOW);
}
}

void disp_off()
{
digitalWrite(Dig1, HIGH);
digitalWrite(Dig2, HIGH);
digitalWrite(Dig3, HIGH);
digitalWrite(Dig4, HIGH);
}
3) Jalankan rangkaian di Proteus
Menampilkan ‘0’

Menampilkan ‘1’

Menampilkan ‘9’

2. Buat konfigurasi push button dengan Led, ketika push button ditekan akan menyala
sampai tombol ditekan kembali akan membuat led mati (Debounce).
1) Buat konfigurasi rangkaian berikut pada Proteus
2) Ketik kode pemrograman di bawah:
const int buttonPin = 2;
const int LEDPin = 12;
int value = 0;

void setup()
{
pinMode(LEDPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop()
{
value = digitalRead(buttonPin);
if (value == HIGH)
{
digitalWrite(LEDPin, HIGH); // Nyalakan LED
}
else
{
digitalWrite(LEDPin, LOW); //Matikan LED
}
}
3) Jalankan rangkaian di Proteus
Saat tombol belum ditekan
Saat tombol ditekan

Anda mungkin juga menyukai