Скочи на садржај

Седмо-сегментни ЛЕД дисплеј 5161AS

Седмосегментни дисплеј (једноцифрени) спада у електронске компоненте намењене приказивању нумеричких вредности (целих бројева од 0 до 9). Ознака компоненте која ће бити коришћена у вежби је 5161AS.

Шта су сегменти? Седмосегментни дисплеј се састоји од 8 ЛЕД елемената, 7 служе за представљање нумеричких вредности и 1 ЛЕД елемент се користи за представљање децималне тачке. Сегменти су распоређени у облику броја „8“. Укључивањем тачно одређених сегмената могуће је приказати било који број од 0 до 9.

На седмосегментном дисплеју могуће је приказати и одређена слова „A“, „C“, „E“, „F“,…

Код седмосегментног дисплеја ознаке 5161AS појединачни сегменти су означени латиничним словима од „a“ до „g“, док сегмент децималне тачке носи ознаку „DP“ или само „P“. Сваки сегмент има и свој одговарајући пин, како би било могуће независно контролисати сваки од сегмената. Сви сегменти деле заједничку везу преко пина „COM“ (eng. Common), заједничка веза може бити остварена преко заједничке аноде (ознака у документацији CA – Common Anode) или заједничке катоде (ознака у документацији CC – Common Cathode).

Веза ка видео туторијалу на енглеском: Јутјуб и Одисеја.

Опис пројекта

Овај пројекат има за задатак да прикаже све једноцифрене бројеве од 0 до 9, коришћењем седмосегментног дисплеја. Временски период у коме је приказан једна цифра износи 1 секунду. Након приказивања броја 9, циклус се понавља и креће поново од 0. Поред упознавања са начином рада седмосегментног дисплеја циљ пројекта је и савладавање коришћења функција приликом писању скица.

Приказ цифара на седмо сегментном дисплеју

Потребне компоненте:

  • Седмосегментни дисплеј
  • 8 отпорника – 220Ω или 1kΩ

Електрична шема

Електрични дијаграм рада са седмо сегментним дисплејом

Скица

// Seven-Segment_single.ino
const int a=4; const int b=5;
const int dp=6; const int c=7;
const int d=8; const int e=9;
const int f=10; const int g=11;
int timeDelay = 1000;

void setup() { 
  for(int thisPin = 4; thisPin <= 11; thisPin++) { 
    pinMode(thisPin,OUTPUT);
  }
}.

void loop() { 
  digital_0(); delay(timeDelay);
  digital_1(); delay(timeDelay);
  digital_2(); delay(timeDelay);
  digital_3(); delay(timeDelay);
  digital_4(); delay(timeDelay);
  digital_5(); delay(timeDelay);
  digital_6(); delay(timeDelay);
  digital_7(); delay(timeDelay);
  digital_8(); delay(timeDelay);
  digital_9(); delay(timeDelay);
}

void digital_0(void) // nula
{ digitalWrite(a,HIGH); digitalWrite(b,HIGH);
digitalWrite(c,HIGH); digitalWrite(d,HIGH);
digitalWrite(e,HIGH); digitalWrite(f,HIGH);
digitalWrite(g,LOW); digitalWrite(dp,LOW);
}
void digital_1(void) // jedan
{ digitalWrite(a,LOW); digitalWrite(b,HIGH);
digitalWrite(c,HIGH); digitalWrite(d,LOW);
digitalWrite(e,LOW); digitalWrite(f,LOW);
digitalWrite(g,LOW); digitalWrite(dp,LOW);
}
void digital_2(void) // dva
{ digitalWrite(a,HIGH); digitalWrite(b,HIGH);
digitalWrite(c,LOW); digitalWrite(d,HIGH);
digitalWrite(e,HIGH); digitalWrite(f,LOW);
digitalWrite(g,HIGH); digitalWrite(dp,LOW);
}
void digital_3(void) // tri
{ digitalWrite(a,HIGH); digitalWrite(b,HIGH);
digitalWrite(c,HIGH); digitalWrite(d,HIGH);
digitalWrite(e,LOW); digitalWrite(f,LOW);
digitalWrite(g,HIGH); digitalWrite(dp,LOW);
}
void digital_4(void) // cetiri
{ digitalWrite(a,LOW); digitalWrite(b,HIGH);
digitalWrite(c,HIGH); digitalWrite(d,LOW);
digitalWrite(e,LOW); digitalWrite(f,HIGH);
digitalWrite(g,HIGH); digitalWrite(dp,LOW);
}
void digital_5(void) // pet
{ digitalWrite(a,HIGH); digitalWrite(b,LOW);
digitalWrite(c,HIGH); digitalWrite(d,HIGH);
digitalWrite(e,LOW); digitalWrite(f,HIGH);
digitalWrite(g,HIGH); digitalWrite(dp,LOW);
}
void digital_6(void) // sest
{ digitalWrite(a,HIGH); digitalWrite(b,LOW);
digitalWrite(c,HIGH); digitalWrite(d,HIGH);
digitalWrite(e,HIGH); digitalWrite(f,HIGH);
digitalWrite(g,HIGH); digitalWrite(dp,LOW);
}
void digital_7(void) // sedam
{ digitalWrite(a,HIGH); digitalWrite(b,HIGH);
digitalWrite(c,HIGH); digitalWrite(d,LOW);
digitalWrite(e,LOW); digitalWrite(f,LOW);
digitalWrite(g,LOW); digitalWrite(dp,LOW);

}
void digital_8(void) // osam
{ digitalWrite(a,HIGH); digitalWrite(b,HIGH);
digitalWrite(c,HIGH); digitalWrite(d,HIGH);
digitalWrite(e,HIGH); digitalWrite(f,HIGH);
digitalWrite(g,HIGH); digitalWrite(dp,LOW);
}
void digital_9(void) // devet
{ digitalWrite(a,HIGH); digitalWrite(b,HIGH);
digitalWrite(c,HIGH); digitalWrite(d,HIGH);
digitalWrite(e,LOW); digitalWrite(f,HIGH);
digitalWrite(g,HIGH); digitalWrite(dp,LOW);
}

Објашњење скице

Одељак дефиниција

За сваки сегмент од „a“ до „g“ дефинише се по једна целобројна променљива која одговара броју пина на који је повезана. У овом примеру сви сегменти су повезани редом између пинова 4 и 11.

Одељак конфигурације

У одељку конфигурације уместо 8 редова pinMode([a, b,…g],OUTPUT); искоришћена је „for“ петља чија је почетна вредност 4 (што одговара пину број 4) а крајња 11 (што одговара пину број 11) и дефинисани су као излазни.

Одељак петље

У одељку петље стоје позиви функција, где је једном функцијом дефинисано укључивање сегмената за сваки број од 0 до 9 појединачно. Функција digital_0(); ће исписати на дисплеју 0, digital_1(); ће исписати 1 и тако редом до броја 9.

Објашњење појма функције

Функција је структура у програмирању коју користимо када имамо код који се често понавља. Коришћењем функција значајно се смањује код (скица), самим тим се олакшава одржавање кода, смањује могућност грешке,…

Пример дефинисања функције

void digital_7(void) {
   digitalWrite(a,HIGH); digitalWrite(b,HIGH);
   digitalWrite(c,HIGH); digitalWrite(d,LOW);
   digitalWrite(e,LOW); digitalWrite(f,LOW);
   digitalWrite(g,LOW); digitalWrite(dp,LOW);
}
  • void – тип вредности коју функција враћа (void – нема повратне вредности, int – враћа се целобројна вредност,…)
  • digital_7 – име функције које користимо код позива функције
  • (void) – аргументи које функција има, у овом случају стоји кључна реч void што значи да нема аргумената. Листа аргумената може бити празна, а може стајати један или више аргумената. Колико аргумената је наведено у дефиницији функције, толико аргумената се треба навести код њеног позива. У супротном компајлер ће пријавити грешку и прекинуће се извршавање скице.
  • Између витљичастих заграда наведен је блок кода који функција по позиву извршава

У блоку функције loop() дати су позиви функција. Позив функције се састоји од навођења имена функције иза којег у заградама стоје аргументи које функција има.