Seven segment banyak digunakan sebagai tampilan dari sebuah perangkat, terutama tampilan angka. Seven segment telah tersedia dalam berbagai macam teknologi serta kelebihan masing-masing. Seven segment jenis LED memiliki kelebihan mampu menghasilkan cahaya sendiri sehingga terlihat lebih terang. Sedangkan seven segmen LCD hanya membutuhkan daya kecil untuk operasi-nya.
Setiap segment dari 7segment memiliki paling kurang 8 pin yaitu 7 pin untuk digit, dan 1 pin untuk CA/CC. Untuk membentuk deret angka seven segment digabungkan menjadi beberapa digit. Untuk mengontrol banyak digit seven segment biasanya digunakan metode scanning. Melalui metode scanning ini penggunaan pin menjadi lebih efisien.
Cara menghubungkan seven segment dengan arduino bisa menggunakan transistor array dan BCD to seven segment. Apabila menggunakan seven segment ukuran kecil misalnya ukuran 0.5″, bisa saja seven segment-nya dihubungkan langsung ke arduino seperti contoh berikut:
skema rangkaian seven segment menggunakan arduino:
tata letak seven segment:
sketch atau program scanning seven segment menggunakan arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | #include <TimerOne.h> #define CCorCA 1//0 = CC, 1 = CA #define jumlah7Segment 4 #define pin1 A0 #define pin2 A1 #define pin3 A2 #define pin4 A3 #define pinA 4 #define pinB 5 #define pinC 6 #define pinD 7 #define pinE 8 #define pinF 9 #define pinG 10 #define pinDot 11 byte pin7Segment[] = {pinA, pinB, pinC, pinD, pinE, pinF, pinG}; byte pin7SegmentCommon[] = {pin1, pin2, pin3, pin4}; const char angka[] = { 0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111100, 0b00000111, 0b01111111, 0b01100111, 0b00000000, //blank 0b01000000, //strip 0b01101101, //S 0b00000100, //i 0b01011111, //a 0b01110011, //p }; #define Seg_blank 10 #define Seg_stip 11 #define Seg_S 12 #define Seg_i 13 #define Seg_a 14 #define Seg_p 15 #define dotBlank 6 #define dotAll 5 volatile byte nilai7Segment[4]; volatile byte lastScanIndex = 0; volatile byte index7Segment = 0; volatile byte posisiTitik; void setup() { Serial.begin(9600); Serial.println( "Tampilan 7 Segment metode scanning menggunakan arduino" ); Serial.println(); pinMode(pin1, OUTPUT); pinMode(pin2, OUTPUT); pinMode(pin3, OUTPUT); pinMode(pin4, OUTPUT); pinMode(pinA, OUTPUT); pinMode(pinB, OUTPUT); pinMode(pinC, OUTPUT); pinMode(pinD, OUTPUT); pinMode(pinE, OUTPUT); pinMode(pinF, OUTPUT); pinMode(pinG, OUTPUT); pinMode(pinDot, OUTPUT); Timer1.initialize(2000); Timer1.attachInterrupt( timerIsr ); nilai7Segment [3] = Seg_S; nilai7Segment [2] = Seg_i; nilai7Segment [1] = Seg_a; nilai7Segment [0] = Seg_p; posisiTitik = dotBlank; delay(1000); } void loop() { for ( uint16_t i = 0; i < 10000; i++) //0 .. 99.99 { uint32_t BCD = Convert_IntToBCD32(i); nilai7Segment [0] = (BCD >> 0) & 0x0F; nilai7Segment [1] = (BCD >> 4) & 0x0F; nilai7Segment [2] = (BCD >> 8) & 0x0F; nilai7Segment [3] = (BCD >> 12) & 0x0F; posisiTitik = 2; delay(100); } } void timerIsr() { digitalWrite(pin7SegmentCommon[lastScanIndex], CCorCA ? LOW : HIGH); drive7Segment(nilai7Segment[index7Segment]); if (posisiTitik == dotAll) { digitalWrite(pinDot, CCorCA ? LOW : HIGH); } else if (posisiTitik == dotBlank) { digitalWrite(pinDot, CCorCA ? HIGH : LOW); } else { digitalWrite(pinDot, (index7Segment == posisiTitik) ? CCorCA ? LOW : HIGH : CCorCA ? HIGH : LOW); } digitalWrite(pin7SegmentCommon[index7Segment], CCorCA ? HIGH : LOW); lastScanIndex = index7Segment++; if (index7Segment >= jumlah7Segment)index7Segment = 0; } void drive7Segment(byte nilai) { byte nilai7Segment = CCorCA ? ~angka[nilai] : angka[nilai]; for (byte i = 0; i < sizeof (pin7Segment); i++) { digitalWrite(pin7Segment[i], nilai7Segment & 0x01); nilai7Segment >>= 1; } } uint32_t Convert_IntToBCD32( uint32_t DecimalValue) { uint32_t returnValue = 0; //uint32_t LSB_L = DecimalValue; while (DecimalValue >= 10000000L) { DecimalValue -= 10000000L; returnValue += 0x10000000; } while (DecimalValue >= 1000000L) { DecimalValue -= 1000000L; returnValue += 0x01000000; } while (DecimalValue >= 100000L) { DecimalValue -= 100000L; returnValue += 0x00100000; } while (DecimalValue >= 10000) { DecimalValue -= 10000; returnValue += 0x00010000; } while (DecimalValue >= 1000L) { DecimalValue -= 1000L; returnValue += 0x00001000; } while (DecimalValue >= 100) { DecimalValue -= 100; returnValue += 0x00000100; } while (DecimalValue >= 10) { DecimalValue -= 10; returnValue += 0x00000010; } return returnValue + DecimalValue; } |
Library : TimerOne.zip