Obrázek 1: Sedmisegme ntový displej
Sedmisegmentový displej se skládá ze sedmi políček = segmentů, které se dají samostatně rozsvěcet a zhasínat. Tím se dá docílit zobrazení číslic a znaků.
Diodové sedmisegmentovky mají relativně rychlou odezvu, přibližně 10 nanosekund, a spotřebu od 0,5 až 1 mA proudu na jeden segment u těch nejmenších (tzn. celá sedmisegmentovka 3,5–7 mA). Napětí anody je závislé na barvě – 1,5 až 2,5 V. Aby se ovládání diod zjednodušilo, mají diody navzájem propojené anody (CA) či katody (CC).
Obrázek 2: Značení sedmisegmentového displeje a propojení CA a CC
Budeme potřebovat
-
Arduino Uno (nebo jinou desku).
-
USB kabel.
-
Nepájivé kontaktní pole.
-
Vodiče
-
Sedmisegmentový displej
-
8x Odpor 220Ω
Zapojení
Obrázek 3: Zapojení sedmisegmentovky s Arduinem
Tabulka zapojení pinů
| Sedmisegmentový displej - piny | Arduino - piny |
|---|---|
| „-“ | GND |
| dp | 4 |
| c | 5 |
| b | 6 |
| a | 7 |
| f | 8 |
| g | 9 |
| e | 10 |
| d | 11 |
Obrázek 4: Reálné zapojení sedmisegmentového displeje
Program
Do Arduino IDE vložíme kód programu a nahrajeme jej do Arduina:
#define ON HIGH // Jestli máme CC (společná katoda) displej
//#define ON LOW // Jestli máme CA (společná anoda) displej
const int a = 7; // číslo pinu segmentu "a"
const int b = 6; // číslo pinu segmentu "b"
const int c = 5; // číslo pinu segmentu "c"
const int d = 11; // číslo pinu segmentu "d"
const int e = 10; // číslo pinu segmentu "e"
const int f = 8; // číslo pinu segmentu "f"
const int g = 9; // číslo pinu segmentu "g"
const int dp =4; // číslo pinu segmentu "dp"
bool cisla = false;
void setup() {
// nastavení pinu každého segmentu jako výstupu
for(int thisPin = 4; thisPin <= 11; thisPin++) {
pinMode(thisPin,OUTPUT);
}
}
void loop() {
if (cisla){
digital_1(); // zobrazit 1 na displeji
delay(1000); // počkat 1000 ms (1s)
digital_2(); // zobrazit 2 na displeji
delay(1000); // počkat 1000 ms (1s)
digital_3(); // zobrazit 3 na displeji
delay(1000); // počkat 1000 ms (1s)
digital_4(); // zobrazit 4 na displeji
delay(1000); // počkat 1000 ms (1s)
digital_5(); // zobrazit 5 na displeji
delay(1000); // počkat 1000 ms (1s)
digital_6(); // zobrazit 6 na displeji
delay(1000); // počkat 1000 ms (1s)
digital_7(); // zobrazit 7 na displeji
delay(1000); // počkat 1000 ms (1s)
digital_8(); // zobrazit 8 na displeji
delay(1000); // počkat 1000 ms (1s)
digital_9(); // zobrazit 9 na displeji
delay(1000); // počkat 1000 ms (1s)
digital_0(); // zobrazit 0 na displeji
delay(1000); // počkat 1000 ms (1s)
tecka(); //rozsiti tecku
delay(1000); // počkat 1000 ms (1s)
}
else{
digital_A();
delay(1000);
digital_H();
delay(1000);
digital_O();
delay(1000);
digital_J();
delay(1000);
}
}
void digital_1() { // zobrazit 1 na displeji
// vypnout všechny segmenty
clear();
digitalWrite(c, ON); // zapnout segment "c"
digitalWrite(b, ON); // zapnout segment "b"
}
void digital_2() { // zobrazit 2 na displeji
// vypnout všechny segmenty
clear();
digitalWrite(a, ON); // zapnout segment "a"
digitalWrite(b, ON); // zapnout segment "b"
digitalWrite(g, ON); // zapnout segment "g"
digitalWrite(e, ON); // zapnout segment "e"
digitalWrite(d, ON); // zapnout segment "d"
}
void digital_3() { // zobrazit 3 na displeji
clear();
digitalWrite(a, ON);
digitalWrite(b, ON);
digitalWrite(g, ON);
digitalWrite(c, ON);
digitalWrite(d, ON);
}
void digital_4() { // zobrazit 4 na displeji
clear();
digitalWrite(f, ON);
digitalWrite(g, ON);
digitalWrite(b, ON);
digitalWrite(c, ON);
}
void digital_5() { // zobrazit 5 na displeji
clear();
digitalWrite(f, ON);
digitalWrite(g, ON);
digitalWrite(c, ON);
digitalWrite(d, ON);
digitalWrite(a, ON);
}
void digital_6() { // zobrazit 6 na displeji
clear();
digitalWrite(a, ON);
digitalWrite(f, ON);
digitalWrite(e, ON);
digitalWrite(d, ON);
digitalWrite(c, ON);
digitalWrite(g, ON);
}
void digital_7() { // zobrazit 7 na displeji
clear();
digitalWrite(a, ON);
digitalWrite(b, ON);
digitalWrite(c, ON);
}
void digital_8() { // zobrazit 8 na displeji
clear();
digitalWrite(a, ON);
digitalWrite(f, ON);
digitalWrite(e, ON);
digitalWrite(d, ON);
digitalWrite(c, ON);
digitalWrite(g, ON);
digitalWrite(b, ON);
}
void digital_9() { // zobrazit 9 na displeji
clear();
digitalWrite(a, ON);
digitalWrite(f, ON);
digitalWrite(g, ON);
digitalWrite(b, ON);
digitalWrite(c, ON);
}
void digital_0() { // zobrazit 0 na displeji
clear();
digitalWrite(a, ON);
digitalWrite(f, ON);
digitalWrite(e, ON);
digitalWrite(d, ON);
digitalWrite(c, ON);
digitalWrite(b, ON);
}
void tecka(){
clear();
digitalWrite(dp, ON);
}
void digital_A(){
clear();
digitalWrite(a, ON);
digitalWrite(b, ON);
digitalWrite(c, ON);
digitalWrite(e, ON);
digitalWrite(f, ON);
digitalWrite(g, ON);
}
void digital_H(){
clear();
digitalWrite(g, ON);
digitalWrite(b, ON);
digitalWrite(c, ON);
digitalWrite(e, ON);
digitalWrite(f, ON);
}
void digital_O(){
clear();
digitalWrite(a, ON);
digitalWrite(b, ON);
digitalWrite(c, ON);
digitalWrite(d, ON);
digitalWrite(e, ON);
digitalWrite(f, ON);
}
void digital_J(){
clear();
digitalWrite(b, ON);
digitalWrite(c, ON);
digitalWrite(d, ON);
digitalWrite(e, ON);
}
void clear () { // vypnout všechny segmenty
for(int thisPin = 4; thisPin <= 11; thisPin++) {
digitalWrite(thisPin, !ON);
}
}
Citace:
Arduino MAXI Starter kit OD BASTLÍŘŮ BASTLÍŘŮM - Lekce 18 Sedmisegmentový displej