Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in /home/itstreet/public_html/classes/CMySQL.php on line 22

Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/itstreet/public_html/classes/CMySQL.php on line 24
ITstreet -7 segmentni displej
Preskoči na sadržaj

ITstreet postovi

7 segmentni displej

Sedam-segmentni displej je uređaj gde formu celog ili decimalnog broja sa sve zarezom (tačkom) obično čine LED u obliku crta. Ovakvi displeji se najčešće koriste za prikazivanje vremena u digitalni časovnicima. Razlikujemo displeje sa zajedničkom anodom i displeje sa zajedničkom katodom. Suština je ista, razlika je samo da li ćemo digitalno na izlaznom pinu ispisati HIGH ili LOW. Ovakvi displeji su u stanju da prikažu brojeve od 0 do 9 sa decimalnom tačkom, ali i slova od A do F u kombinaciji malih i velikih slova. Ovo je bitno iz razloga što, recimo B se na displeju može pročitati kao 8. Iz tog razloga će slovo b biti ispisano malim slovom.

Displej koji će biti prikazan je varijanta sa zajedničkom anodom. S obzirom da je u pitanju ipak LED potrebno je dodati još 8 otpornika. Da bi znali koji otpornik da upotrebimo koristimo Omov zakon i formulu:
R=(Ui-Urn)/I
Gde je R otpor, to jest vrednost koja nama treba. Ui je izvorni napon i u slučaju Arduina može biti 5V ili 3,3V. Urn je radni napon LED dok je I jačina struje izražena u A. Ako znamo da je za crvenu LED potrebna jačina struje od 15-20mA ostaje još samo da vidimo koliki je radni napon LED. Tu informaciju možemo dobiti od prodavca a za LED na mom displeju potrebno je 1,8V. Sve ovo kroz formulu daje da za displej trebaju otpornici od 220R (220oma). S obzirom da displej ima 10 pinova, prema šemi središnji sa gornje i donje strane su zapravo zajedničke anode. Ostalih osam pinova su za 7 segmenata displeja i tačku. Isto tako postoji razlika u položaju pinova u zavisnosti od veličine. Moj displej je varijanta od 18mm i pinovi su sa gornje i donje strane. Kod manjih modela obično pinovi budu sa strana ali koji god da je u pitanju, princip povezivanja i rada je isti.





Povezivanje prema Fritzing šemi:



/*-----------------------------------------------------------------*
 * Skeč za potrebe članka na www.itstreet.org
 * Parts from: www.hacktronics.com/tutorials/arduino-and-7-segment-led.html
 * Author: Petrović Dejan
 * Date: 12/11/2017
 * Arduino MEGA, 7 segment display, resistor 220R
 *-----------------------------------------------------------------*/
byte brojke_i_slova[16][7]=  {{0,0,0,0,0,0,1},//0
                                                 {1,0,0,1,1,1,1},//1
                                                 {0,0,1,0,0,1,0},//2
                                                 {0,0,0,0,1,1,0},//3
                                                 {1,0,0,1,1,0,0},//4
                                                 {0,1,0,0,1,0,0},//5
                                                 {0,1,0,0,0,0,0},//6
                                                 {0,0,0,1,1,1,1},//7
                                                 {0,0,0,0,0,0,0},//8
                                                 {0,0,0,1,1,0,0},//9
                                                 {0,0,0,1,0,0,0},//a
                                                 {1,1,0,0,0,0,0},//b
                                                 {0,1,1,0,0,0,1},//c
                                                 {1,0,0,0,0,1,0},//d
                                                 {0,1,1,0,0,0,0},//e
                                                 {0,1,1,1,0,0,0} //f
}; // pravimo niz brojeva i slova gde za zajednicku anodu 0 znaci upaljena LED
void setup() {
  // sledeci pinovi se koriste za povezivanje za displejem         
  pinMode(2, OUTPUT); 
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  dotWrite(1);  // tacku gasimo, s tim da moze i da se upali sa 0 umesto 1
}
// funkcija koja poziva ispisivanje logicke 0 ili 1 na pinu 9 za tacku
void dotWrite(byte dot) {
  digitalWrite(9, dot);
}
// funkcija kojom u for petlji ispisujemo logicku 0 ili 1 na segmentima LED
// krecemo od pina 2 do pina 8 (brojimo od 0 do 7)
void displejWrite(byte digit) {
  byte pin = 2;
  for (byte segBroj = 0; segBroj < 7; ++segBroj) {
    digitalWrite(pin, brojke_i_slova[digit][segBroj]);
    ++pin;
  }
}
// u for petlji od znaka 16 a u ovom slucaju slovo F ispisujemo u nazad do 0
// nakon 4 sekunde idemo ponovo
void loop() {
  for (byte broj = 16; broj > 0; --broj) {
   delay(1000);
   displejWrite(broj-1);
  }
  delay(4000);
}

Nakon povezivanja ide skeč. Prvo pravimo niz gde će u zavisnosti koji broj ili slovo treba da bude prikazano, postaviti određene pinove na HIGH ili LOW. Na slici iznad imate primer koji pin pali određenu LED. Na ovaj način se može što-šta i promeniti ili dodati. Zatim dodeljujemo pinovima OUTPUT mod a tačku za sada gasimo. Funkcijom writeDot(0) je palimo. Ispod setup funkcije ide pomenuta writeDot funkcija za tačku a koja je vezana na pin 9, a naravno da može biti bilo koji drugi digitalni pin. Dalje ide sevenSegWrite() funkcija koja u for petlji postavlja na HIGH pinove koji treba da upale određene LED a koje uvozi iz niza na početku skeča. U loop funkciji parametrom count ispisujemo oznake iz niza u krug od poslednjeg ka prvom. Moj displej je sa zajedničkom anodom a za zajedničku katodu je potrebno promeniti mesta svim 0 i 1 u okviru skeča.

Ostavite poruku

Vaša mejl adresa neće biti objavljena.Označena polja su obavezna*